diff --git a/boot/CMakeLists.txt b/boot/CMakeLists.txt
index 5a166a5e07e..203ae0a0860 100644
--- a/boot/CMakeLists.txt
+++ b/boot/CMakeLists.txt
@@ -2,7 +2,6 @@
include(boot_images.cmake)
add_subdirectory(bootdata)
-# add_subdirectory(environ)
add_subdirectory(freeldr)
add_subdirectory(rtl)
diff --git a/boot/environ/CMakeLists.txt b/boot/environ/CMakeLists.txt
deleted file mode 100644
index 922271d1d8b..00000000000
--- a/boot/environ/CMakeLists.txt
+++ /dev/null
@@ -1,165 +0,0 @@
-
-include_directories(BEFORE include)
-include_directories(BEFORE include/efi)
-include_directories(${REACTOS_SOURCE_DIR}/ntoskrnl/include)
-include_directories(${REACTOS_SOURCE_DIR}/sdk/lib/cmlib)
-include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/libs)
-include_directories(${REACTOS_SOURCE_DIR}/drivers/filesystems)
-
-add_definitions(-D_NTHAL_ -D_BLDR_ -D_NTSYSTEM_)
-
-list(APPEND BOOTLIB_SOURCE
- app/bootmgr/bootmgr.h
- lib/bootlib.c
- lib/misc/debug.c
- lib/misc/bcd.c
- lib/misc/bcdopt.c
- lib/misc/bootreg.c
- lib/misc/util.c
- lib/misc/image.c
- lib/misc/resource.c
- lib/misc/font.c
- lib/misc/rtlcompat.c
- lib/rtl/libsupp.c
- lib/firmware/fwutil.c
- lib/firmware/efi/firmware.c
- lib/mm/mm.c
- lib/mm/pagealloc.c
- lib/mm/heapalloc.c
- lib/mm/blkalloc.c
- lib/mm/descriptor.c
- lib/platform/time.c
- lib/io/blkcache.c
- lib/io/etfs.c
- lib/io/io.c
- lib/io/device.c
- lib/io/file.c
- lib/io/fat.c
- lib/io/display/display.c
- lib/io/display/emscons.c
- lib/io/display/guicons.c
- lib/io/display/textcons.c
- lib/io/display/efi/textcons.c
- lib/io/display/efi/guicons.c
- lib/io/display/efi/gop.c
- lib/io/display/efi/uga.c)
-
-if(ARCH STREQUAL "i386")
- list(APPEND BOOTLIB_ASM_SOURCE
- lib/arch/i386/transfer.s
- )
- list(APPEND BOOTLIB_SOURCE
- lib/arch/i386/arch.c
- lib/mm/i386/mmx86.c
- )
-elseif(ARCH STREQUAL "amd64")
- list(APPEND BOOTLIB_ASM_SOURCE
- #lib/arch/amd64/foo.asm
- )
- list(APPEND BOOTLIB_SOURCE
- #lib/arch/amd64/foo.c
- lib/arch/stub/arch.c
- lib/mm/stub/mm.c
- )
-else()
- list(APPEND BOOTLIB_SOURCE
- lib/arch/stub/arch.c
- lib/mm/stub/mm.c
- )
-endif()
-
-add_asm_files(bootlib_asm ${BOOTLIB_ASM_SOURCE})
-add_library(bootlib ${BOOTLIB_SOURCE} ${bootlib_asm})
-add_pch(bootlib app/bootmgr/bootmgr.h BOOTLIB_SOURCE)
-add_dependencies(bootlib bugcodes asm bootmsg xdk)
-
-list(APPEND BOOTMGR_BASE_SOURCE
- app/bootmgr/efiemu.c
- app/bootmgr/bootmgr.c
- )
-
-add_executable(bootmgfw ${BOOTMGR_BASE_SOURCE} app/bootmgr/bootmgr.rc)
-set_target_properties(bootmgfw PROPERTIES SUFFIX ".efi")
-
-if(MSVC)
- if(ARCH STREQUAL "arm")
- target_link_options(bootmgfw PRIVATE /ignore:4078 /ignore:4254 /DRIVER)
- else()
- target_link_options(bootmgfw PRIVATE /ignore:4078 /ignore:4254 /DRIVER /DYNAMICBASE:NO /NXCOMPAT:NO /FIXED)
- endif()
-else()
- target_link_options(bootmgfw PRIVATE "-Wl,--strip-all,--exclude-all-symbols")
-endif()
-
-set_image_base(bootmgfw 0x10000)
-
-if(MSVC)
- set_subsystem(bootmgfw EFI_APPLICATION)
-else()
- set_subsystem(bootmgfw 10)
-endif()
-
-set_entrypoint(bootmgfw EfiEntry)
-
-target_link_libraries(bootmgfw bootlib cportlib blcmlib blrtl libcntpr)
-
-# dynamic analysis switches
-if(STACK_PROTECTOR)
- target_link_libraries(bootmgfw gcc_ssp_nt)
-endif()
-
-if(RUNTIME_CHECKS)
- target_link_libraries(bootmgfw runtmchk)
-endif()
-
-add_dependencies(bootmgfw asm bugcodes)
-
-list(APPEND ROSLOAD_BASE_SOURCE
- app/rosload/rosload.c
- app/rosload/roslogo.c
- )
-
-if(ARCH STREQUAL "i386")
- list(APPEND ROSLOAD_ASM_SOURCE
- app/rosload/i386/osxfera.s
- )
-endif()
-
-add_asm_files(rosload_asm ${ROSLOAD_ASM_SOURCE})
-add_executable(rosload ${ROSLOAD_BASE_SOURCE} ${rosload_asm})
-set_target_properties(rosload PROPERTIES SUFFIX ".efi")
-
-if(MSVC)
- target_link_options(rosload PRIVATE /ignore:4078 /ignore:4254 /DRIVER)
-else()
- target_link_options(rosload PRIVATE "-Wl,--strip-all,--exclude-all-symbols,--dynamicbase,--pic-executable")
-endif()
-
-set_image_base(rosload 0x10000)
-
-if(MSVC)
- set_subsystem(rosload BOOT_APPLICATION)
-else()
- set_subsystem(rosload 16)
-endif()
-
-if(ARCH STREQUAL "i386")
- set_entrypoint(rosload OslMain 4)
-else()
- set_entrypoint(rosload OslMain)
-endif()
-
-target_link_libraries(rosload bootlib cportlib blcmlib blrtl libcntpr)
-
-# dynamic analysis switches
-if(STACK_PROTECTOR)
- target_link_libraries(rosload gcc_ssp_nt)
-endif()
-
-if(RUNTIME_CHECKS)
- target_link_libraries(rosload runtmchk)
-endif()
-
-add_dependencies(rosload asm bugcodes)
-
-add_cd_file(TARGET rosload DESTINATION reactos/system32/boot NO_CAB FOR all)
diff --git a/boot/environ/app/bootmgr/bootmgr.c b/boot/environ/app/bootmgr/bootmgr.c
deleted file mode 100644
index c811a2723c6..00000000000
--- a/boot/environ/app/bootmgr/bootmgr.c
+++ /dev/null
@@ -1,3244 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Manager
- * FILE: boot/environ/app/bootmgr/bootmgr.cla
- * PURPOSE: Boot Manager Entrypoint
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bootmgr.h"
-
-/* DATA VARIABLES ************************************************************/
-
-DEFINE_GUID(GUID_WINDOWS_BOOTMGR,
- 0x9DEA862C,
- 0x5CDD,
- 0x4E70,
- 0xAC, 0xC1, 0xF3, 0x2B, 0x34, 0x4D, 0x47, 0x95);
-
-ULONGLONG ApplicationStartTime;
-ULONGLONG PostTime;
-GUID BmApplicationIdentifier;
-PWCHAR BootDirectory;
-
-BL_BOOT_ERROR BmpErrorBuffer;
-PBL_BOOT_ERROR BmpInternalBootError;
-BL_PACKED_BOOT_ERROR BmpPackedBootError;
-
-BOOLEAN BmBootIniUsed;
-WCHAR BmpFileNameBuffer[128];
-PWCHAR ParentFileName = L"";
-
-BOOLEAN BmDisplayStateCached;
-PBL_LOADED_APPLICATION_ENTRY* BmpFailedBootEntries;
-PBL_LOADED_APPLICATION_ENTRY BmpSelectedBootEntry;
-BOOLEAN BmBootEntryOverridePresent;
-BOOLEAN BmpDisplayBootMenu;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-BmGetOptionList (
- _In_ HANDLE BcdHandle,
- _In_ PGUID ObjectId,
- _In_ PBL_BCD_OPTION *OptionList
- )
-{
- NTSTATUS Status;
- HANDLE ObjectHandle;
- ULONG ElementSize, ElementCount, i, OptionsSize;
- BcdElementType Type;
- PBCD_ELEMENT_HEADER Header;
- PBCD_ELEMENT BcdElements;
- PBL_BCD_OPTION Options, Option, PreviousOption, DeviceOptions;
- PBCD_DEVICE_OPTION DeviceOption;
- GUID DeviceId;
- PVOID DeviceData;
-
- /* Open the BCD object requested */
- ObjectHandle = NULL;
- BcdElements = NULL;
- Status = BcdOpenObject(BcdHandle, ObjectId, &ObjectHandle);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Do the initial enumeration to get the size needed */
- ElementSize = 0;
- Status = BcdEnumerateAndUnpackElements(BcdHandle,
- ObjectHandle,
- NULL,
- &ElementSize,
- &ElementCount);
- if (Status != STATUS_BUFFER_TOO_SMALL)
- {
- /* If we got success, that doesn't make any sense */
- if (NT_SUCCESS(Status))
- {
- Status = STATUS_INVALID_PARAMETER;
- }
-
- /* Bail out */
- goto Quickie;
- }
-
- /* Allocate a large-enough buffer */
- BcdElements = BlMmAllocateHeap(ElementSize);
- if (!BcdElements)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Now do the real enumeration to fill out the elements buffer */
- Status = BcdEnumerateAndUnpackElements(BcdHandle,
- ObjectHandle,
- BcdElements,
- &ElementSize,
- &ElementCount);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Go through each BCD option to add the sizes up */
- OptionsSize = 0;
- for (i = 0; i < ElementCount; i++)
- {
- OptionsSize += BcdElements[i].Header->Size + sizeof(BL_BCD_OPTION);
- }
-
- /* Allocate the required BCD option list */
- Options = BlMmAllocateHeap(OptionsSize);
- if (!Options)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Zero it out */
- RtlZeroMemory(Options, OptionsSize);
-
- /* Start going through each option */
- PreviousOption = NULL;
- Option = Options;
- for (i = 0; i < ElementCount; i++)
- {
- /* Read the header and type */
- Header = BcdElements[i].Header;
- Type.PackedValue = Header->Type;
-
- /* Check if this option isn't already present */
- if (!MiscGetBootOption(Options, Type.PackedValue))
- {
- /* It's a new option. Did we have an existing one? */
- if (PreviousOption)
- {
- /* Link it to this new one */
- PreviousOption->NextEntryOffset = (ULONG_PTR)Option -
- (ULONG_PTR)Options;
- }
-
- /* Capture the type, size, data, and offset */
- Option->Type = Type.PackedValue;
- Option->DataSize = Header->Size;
- RtlCopyMemory(Option + 1, BcdElements[i].Body, Header->Size);
- Option->DataOffset = sizeof(BL_BCD_OPTION);
-
- /* Check if this was a device */
- if (Type.Format == BCD_TYPE_DEVICE)
- {
- /* Grab its GUID */
- DeviceOption = (PBCD_DEVICE_OPTION)(Option + 1);
- DeviceId = DeviceOption->AssociatedEntry;
-
- /* Look up the options for that GUID */
- Status = BmGetOptionList(BcdHandle, &DeviceId, &DeviceOptions);
- if (NT_SUCCESS(Status))
- {
- /* Device data is after the device option */
- DeviceData = (PVOID)((ULONG_PTR)DeviceOption + Header->Size);
-
- /* Copy it */
- RtlCopyMemory(DeviceData,
- DeviceOptions,
- BlGetBootOptionListSize(DeviceOptions));
-
- /* Don't need this anymore */
- BlMmFreeHeap(DeviceOptions);
-
- /* Write the offset of the device options */
- Option->ListOffset = (ULONG_PTR)DeviceData -
- (ULONG_PTR)Option;
- }
- }
-
- /* Save the previous option and go to the next one */
- PreviousOption = Option;
- Option = (PBL_BCD_OPTION)((ULONG_PTR)Option +
- BlGetBootOptionSize(Option));
- }
- }
-
- /* Return the pointer back, we've made it! */
- *OptionList = Options;
- Status = STATUS_SUCCESS;
-
-Quickie:
- /* Did we allocate a local buffer? Free it if so */
- if (BcdElements)
- {
- BlMmFreeHeap(BcdElements);
- }
-
- /* Was the key open? Close it if so */
- if (ObjectHandle)
- {
- BiCloseKey(ObjectHandle);
- }
-
- /* Return the option list parsing status */
- return Status;
-}
-
-NTSTATUS
-BmpUpdateApplicationOptions (
- _In_ HANDLE BcdHandle
- )
-{
- NTSTATUS Status;
- PBL_BCD_OPTION Options;
-
- /* Get the boot option list */
- Status = BmGetOptionList(BcdHandle, &BmApplicationIdentifier, &Options);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Append the options, free the local buffer, and return success */
- BlAppendBootOptions(&BlpApplicationEntry, Options);
- BlMmFreeHeap(Options);
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BmpFwGetApplicationDirectoryPath (
- _In_ PUNICODE_STRING ApplicationDirectoryPath
- )
-{
- NTSTATUS Status;
- SIZE_T i, AppPathLength;
- PWCHAR ApplicationPath, PathCopy;
-
- /* Clear the incoming string */
- ApplicationDirectoryPath->Length = 0;
- ApplicationDirectoryPath->MaximumLength = 0;
- ApplicationDirectoryPath->Buffer = 0;
-
- /* Get the boot application path */
- ApplicationPath = NULL;
- Status = BlGetBootOptionString(BlpApplicationEntry.BcdData,
- BcdLibraryString_ApplicationPath,
- &ApplicationPath);
- if (NT_SUCCESS(Status))
- {
- /* Calculate the length of the application path */
- for (i = wcslen(ApplicationPath) - 1; i > 0; i--)
- {
- /* Keep going until the path separator */
- if (ApplicationPath[i] == OBJ_NAME_PATH_SEPARATOR)
- {
- break;
- }
- }
-
- /* Check if we have space for one more character */
- Status = RtlSIZETAdd(i, 1, &AppPathLength);
- if (NT_SUCCESS(Status))
- {
- /* Check if it's safe to multiply by two */
- Status = RtlSIZETMult(AppPathLength, sizeof(WCHAR), &AppPathLength);
- if (NT_SUCCESS(Status))
- {
- /* Allocate a copy for the string */
- PathCopy = BlMmAllocateHeap(AppPathLength);
- if (PathCopy)
- {
- /* NULL-terminate it */
- RtlCopyMemory(PathCopy,
- ApplicationPath,
- AppPathLength - sizeof(UNICODE_NULL));
- PathCopy[AppPathLength] = UNICODE_NULL;
-
- /* Finally, initialize the outgoing string */
- RtlInitUnicodeString(ApplicationDirectoryPath, PathCopy);
- }
- else
- {
- /* No memory, fail */
- Status = STATUS_NO_MEMORY;
- }
- }
- }
- }
-
- /* Check if we had an application path */
- if (ApplicationPath)
- {
- /* No longer need this, free it */
- BlMmFreeHeap(ApplicationPath);
- }
-
- /* All done! */
- return Status;
-}
-
-NTSTATUS
-BmFwInitializeBootDirectoryPath (
- VOID
- )
-{
- PWCHAR FinalPath;
- NTSTATUS Status;
- PWCHAR BcdDirectory;
- UNICODE_STRING BcdPath;
- ULONG FinalSize;
- ULONG FileHandle, DeviceHandle;
-
- /* Initialize everything for failure */
- BcdPath.MaximumLength = 0;
- BcdPath.Buffer = NULL;
- BcdDirectory = NULL;
- FinalPath = NULL;
- FileHandle = -1;
- DeviceHandle = -1;
-
- /* Try to open the boot device */
- Status = BlpDeviceOpen(BlpBootDevice,
- BL_DEVICE_READ_ACCESS,
- 0,
- &DeviceHandle);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Device open failed: %lx\r\n", Status);
- goto Quickie;
- }
-
- /* Get the directory path */
- Status = BmpFwGetApplicationDirectoryPath(&BcdPath);
- BcdDirectory = BcdPath.Buffer;
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Add the BCD file name to it */
- FinalSize = BcdPath.MaximumLength + sizeof(L"\\BCD") - sizeof(UNICODE_NULL);
- if (FinalSize < BcdPath.MaximumLength)
- {
- goto Quickie;
- }
-
- /* Allocate space for the final path */
- FinalPath = BlMmAllocateHeap(FinalSize);
- if (!FinalPath)
- {
- goto Quickie;
- }
-
- /* Build it */
- RtlZeroMemory(FinalPath, FinalSize);
- RtlCopyMemory(FinalPath, BcdDirectory, BcdPath.MaximumLength);
- wcsncat(FinalPath, L"\\BCD", FinalSize / sizeof(WCHAR));
-
- /* Try to open the file */
- Status = BlFileOpen(DeviceHandle,
- FinalPath,
- BL_FILE_READ_ACCESS,
- &FileHandle);
- if (!NT_SUCCESS(Status))
- {
- BootDirectory = BcdDirectory;
- goto Quickie;
- }
-
- /* Save the boot directory */
- BootDirectory = L"\\EFI\\Boot"; /* Should be EFI\\ReactOS\\Boot */
-
-Quickie:
- /* Free all the allocations we made */
- if (BcdDirectory)
- {
- Status = BlMmFreeHeap(BcdDirectory);
- }
- if (FinalPath)
- {
- Status = BlMmFreeHeap(FinalPath);
- }
-
- /* Close the BCD file */
- if (FileHandle != -1)
- {
- Status = BlFileClose(FileHandle);
- }
-
- /* Close the boot device */
- if (DeviceHandle != -1)
- {
- Status = BlDeviceClose(DeviceHandle);
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-NTSTATUS
-BmOpenBootIni (
- VOID
- )
-{
- /* Don't yet handled boot.ini */
- return STATUS_NOT_FOUND;
-}
-
-ULONG
-BmpFatalErrorMessageFilter (
- _In_ NTSTATUS ErrorStatus,
- _Out_ PULONG ErrorResourceId
- )
-{
- ULONG Result;
-
- /* Assume no message for now, check for known status message */
- Result = 0;
- switch (ErrorStatus)
- {
- /* Convert each status to a resource ID */
- case STATUS_UNEXPECTED_IO_ERROR:
- *ErrorResourceId = 9017;
- Result = 1;
- break;
- case STATUS_IMAGE_CHECKSUM_MISMATCH:
- *ErrorResourceId = 9018;
- break;
- case STATUS_INVALID_IMAGE_WIN_64:
- *ErrorResourceId = 9016;
- break;
- case 0xC0000428:
- *ErrorResourceId = 9019;
- Result = 2;
- break;
- case STATUS_FVE_LOCKED_VOLUME:
- *ErrorResourceId = 9013;
- break;
- }
-
- /* Return the type of message */
- return Result;
-}
-
-VOID
-BmErrorPurge (
- VOID
- )
-{
- /* Check if a boot error is present */
- if (BmpPackedBootError.BootError)
- {
- /* Purge it */
- BlMmFreeHeap(BmpPackedBootError.BootError);
- BmpPackedBootError.BootError = NULL;
- }
-
- /* Zero out the packed buffer */
- BmpPackedBootError.Size = 0;
- BmpInternalBootError = NULL;
- RtlZeroMemory(&BmpErrorBuffer, sizeof(BmpErrorBuffer));
-}
-
-VOID
-BmpErrorLog (
- _In_ ULONG ErrorCode,
- _In_ NTSTATUS ErrorStatus,
- _In_ ULONG ErrorMsgId,
- _In_ PWCHAR FileName,
- _In_ ULONG HelpMsgId
- )
-{
- PWCHAR ErrorMsgString;
-
- /* Check if we already had an error */
- if (BmpInternalBootError)
- {
- /* Purge it */
- BmErrorPurge();
- }
-
- /* Find the string for this error ID */
- ErrorMsgString = BlResourceFindMessage(ErrorMsgId);
- if (ErrorMsgString)
- {
- /* Fill out the error buffer */
- BmpErrorBuffer.Unknown1 = 0;
- BmpErrorBuffer.Unknown2 = 0;
- BmpErrorBuffer.ErrorString = ErrorMsgString;
- BmpErrorBuffer.FileName = FileName;
- BmpErrorBuffer.ErrorCode = ErrorCode;
- BmpErrorBuffer.ErrorStatus = ErrorStatus;
- BmpErrorBuffer.HelpMsgId = HelpMsgId;
- BmpInternalBootError = &BmpErrorBuffer;
- }
-}
-
-VOID
-BmFatalErrorEx (
- _In_ ULONG ErrorCode,
- _In_ ULONG_PTR Parameter1,
- _In_ ULONG_PTR Parameter2,
- _In_ ULONG_PTR Parameter3,
- _In_ ULONG_PTR Parameter4
- )
-{
- PWCHAR FileName, Buffer;
- NTSTATUS ErrorStatus;
- WCHAR FormatString[256];
- ULONG ErrorResourceId, ErrorHelpId;
- BOOLEAN Restart, NoError;
-
- /* Assume no buffer for now */
- Buffer = NULL;
-
- /* Check what error code is being raised */
- switch (ErrorCode)
- {
- /* Error reading the BCD */
- case BL_FATAL_ERROR_BCD_READ:
-
- /* Check if we have a name for the BCD file */
- if (Parameter1)
- {
- /* Check if the name fits into our buffer */
- FileName = (PWCHAR)Parameter1;
- if (wcslen(FileName) < sizeof(BmpFileNameBuffer))
- {
- /* Copy it in there */
- Buffer = BmpFileNameBuffer;
- wcsncpy(BmpFileNameBuffer,
- FileName,
- RTL_NUMBER_OF(BmpFileNameBuffer));
- }
- }
-
- /* If we don't have a buffer, use an empty one */
- if (!Buffer)
- {
- Buffer = ParentFileName;
- }
-
- /* The NTSTATUS code is in parameter 2*/
- ErrorStatus = (NTSTATUS)Parameter2;
-
- /* Build the error string */
- swprintf(FormatString,
- L"\nAn error occurred (%08x) while attempting "
- L"to read the boot configuration data file %s\n",
- ErrorStatus,
- Buffer);
-
- /* Select the resource ID message */
- ErrorResourceId = 9002;
- break;
-
- case BL_FATAL_ERROR_BCD_ENTRIES:
-
- /* File name is in parameter 1 */
- FileName = (PWCHAR)Parameter1;
-
- /* The NTSTATUS code is in parameter 2*/
- ErrorStatus = (NTSTATUS)Parameter2;
-
- /* Build the error string */
- swprintf(FormatString,
- L"\nNo valid entries found in the boot configuration data file %s\n",
- FileName);
-
- /* Select the resource ID message */
- ErrorResourceId = 9007;
- break;
-
- case BL_FATAL_ERROR_BCD_PARSE:
-
- /* File name isin parameter 1 */
- FileName = (PWCHAR)Parameter1;
-
- /* The NTSTATUS code is in parameter 2*/
- ErrorStatus = (NTSTATUS)Parameter2;
-
- /* Build the error string */
- swprintf(FormatString,
- L"\nThe boot configuration file %s is invalid (%08x).\n",
- FileName,
- ErrorStatus);
-
- /* Select the resource ID message */
- ErrorResourceId = 9015;
- break;
-
- case BL_FATAL_ERROR_GENERIC:
-
- /* The NTSTATUS code is in parameter 1*/
- ErrorStatus = (NTSTATUS)Parameter1;
-
- /* Build the error string */
- swprintf(FormatString,
- L"\nThe boot manager experienced an error (%08x).\n",
- ErrorStatus);
-
- /* Select the resource ID message */
- ErrorResourceId = 9005;
- break;
-
- default:
-
- /* The rest is not yet handled */
- EfiPrintf(L"Unexpected fatal error: %lx\r\n", ErrorCode);
- while (1);
- break;
- }
-
- /* Check if the BCD option for restart is set */
- BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_RestartOnFailure,
- &Restart);
- if (Restart)
- {
- /* Yes, so no error should be shown since we'll auto-restart */
- NoError = TRUE;
- }
- else
- {
- /* Check if the option for not showing errors is set in the BCD */
- BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdBootMgrBoolean_NoErrorDisplay,
- &NoError);
- }
-
- /* Do we want an error? */
- if (!NoError)
- {
- /* Yep, print it and then raise an error */
- BlStatusPrint(FormatString);
- BlStatusError(1, ErrorCode, Parameter1, Parameter2, Parameter3);
- }
-
- /* Get the help message ID */
- ErrorHelpId = BmpFatalErrorMessageFilter(ErrorStatus, &ErrorResourceId);
- BmpErrorLog(ErrorCode, ErrorStatus, ErrorResourceId, Buffer, ErrorHelpId);
-}
-
-NTSTATUS
-BmpFwGetFullPath (
- _In_ PWCHAR FileName,
- _Out_ PWCHAR* FullPath
- )
-{
- NTSTATUS Status;
- SIZE_T BootDirLength, PathLength;
-
- /* Compute the length of the directory, and add a NUL */
- BootDirLength = wcslen(BootDirectory);
- Status = RtlSIZETAdd(BootDirLength, 1, &BootDirLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Add the length of the file, make sure it fits */
- PathLength = wcslen(FileName);
- Status = RtlSIZETAdd(PathLength, BootDirLength, &PathLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Convert to bytes */
- Status = RtlSIZETMult(PathLength, sizeof(WCHAR), &PathLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Allocate the full path */
- *FullPath = BlMmAllocateHeap(PathLength);
- if (*FullPath)
- {
- /* Copy the directory followed by the file name */
- wcsncpy(*FullPath, BootDirectory, PathLength / sizeof(WCHAR));
- wcsncat(*FullPath, FileName, PathLength / sizeof(WCHAR));
- }
- else
- {
- /* Bail out since we have no memory */
- Status = STATUS_NO_MEMORY;
- }
-
-Quickie:
- /* Return to caller */
- return Status;
-}
-
-VOID
-BmCloseDataStore (
- _In_ HANDLE Handle
- )
-{
- /* Check if boot.ini data needs to be freed */
- if (BmBootIniUsed)
- {
- EfiPrintf(L"Boot.ini not handled\r\n");
- }
-
- /* Dereference the hive and close the key */
- BiDereferenceHive(Handle);
- BiCloseKey(Handle);
-}
-
-NTSTATUS
-BmOpenDataStore (
- _Out_ PHANDLE Handle
- )
-{
- NTSTATUS Status;
- PBL_DEVICE_DESCRIPTOR BcdDevice;
- PWCHAR BcdPath, FullPath, PathBuffer;
- BOOLEAN HavePath;
- SIZE_T PathLength, FullSize;
- PVOID FinalBuffer;
- UNICODE_STRING BcdString;
-
- /* Initialize variables */
- PathBuffer = NULL;
- BcdDevice = NULL;
- BcdPath = NULL;
- HavePath = FALSE;
-
- /* Check if a boot.ini file exists */
- Status = BmOpenBootIni();
- if (NT_SUCCESS(Status))
- {
- BmBootIniUsed = TRUE;
- }
-
- /* Check on which device the BCD is */
- Status = BlGetBootOptionDevice(BlpApplicationEntry.BcdData,
- BcdBootMgrDevice_BcdDevice,
- &BcdDevice,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- /* It's not on a custom device, so it must be where we are */
- Status = BlGetBootOptionDevice(BlpApplicationEntry.BcdData,
- BcdLibraryDevice_ApplicationDevice,
- &BcdDevice,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- /* This BCD option is required */
- goto Quickie;
- }
- }
-
- /* Next, check what file contains the BCD */
- Status = BlGetBootOptionString(BlpApplicationEntry.BcdData,
- BcdBootMgrString_BcdFilePath,
- &BcdPath);
- if (NT_SUCCESS(Status))
- {
- /* We don't handle custom BCDs yet */
- EfiPrintf(L"Custom BCD Not handled: %s\r\n", BcdPath);
- Status = STATUS_NOT_IMPLEMENTED;
- goto Quickie;
- }
-
- /* Now check if the BCD is on a remote share */
- if (BcdDevice->DeviceType == UdpDevice)
- {
- /* Nope. Nope. Nope */
- EfiPrintf(L"UDP device Not handled\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
- goto Quickie;
- }
-
- /* Otherwise, compute the hardcoded path of the BCD */
- Status = BmpFwGetFullPath(L"\\BCD", &FullPath);
- if (!NT_SUCCESS(Status))
- {
- /* User the raw path */
- PathBuffer = BcdPath;
- }
- else
- {
- /* Use the path we got */
- PathBuffer = FullPath;
- HavePath = TRUE;
- }
-
- /* Check if we failed to get the BCD path */
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Add a NUL to the path, make sure it'll fit */
- PathLength = wcslen(PathBuffer);
- Status = RtlSIZETAdd(PathLength, 1, &PathLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Convert to bytes */
- Status = RtlSIZETMult(PathLength, sizeof(WCHAR), &PathLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Now add the size of the path to the device path, check if it fits */
- Status = RtlSIZETAdd(PathLength, BcdDevice->Size, &FullSize);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Allocate a final structure to hold both entities */
- FinalBuffer = BlMmAllocateHeap(FullSize);
- if (!FinalBuffer)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Copy the device path and file path into the final buffer */
- RtlCopyMemory(FinalBuffer, BcdDevice, BcdDevice->Size);
- RtlCopyMemory((PVOID)((ULONG_PTR)FinalBuffer + BcdDevice->Size),
- PathBuffer,
- PathLength);
-
- /* Now tell the BCD engine to open the store */
- BcdString.Length = FullSize;
- BcdString.MaximumLength = FullSize;
- BcdString.Buffer = FinalBuffer;
- Status = BcdOpenStoreFromFile(&BcdString, Handle);
-
- /* Free our final buffer */
- BlMmFreeHeap(FinalBuffer);
-
-Quickie:
- /* Did we allocate a device? */
- if (BcdDevice)
- {
- /* Free it */
- BlMmFreeHeap(BcdDevice);
- }
-
- /* Is this the failure path? */
- if (!NT_SUCCESS(Status))
- {
- /* Raise a fatal error */
- BmFatalErrorEx(BL_FATAL_ERROR_BCD_READ,
- (ULONG_PTR)PathBuffer,
- Status,
- 0,
- 0);
- }
-
- /* Did we get an allocated path? */
- if ((PathBuffer) && (HavePath))
- {
- /* Free it */
- BlMmFreeHeap(PathBuffer);
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-typedef struct _BL_BSD_LOG_OBJECT
-{
- ULONG DeviceId;
- ULONG FileId;
- ULONG Unknown;
- ULONG Size;
- ULONG Flags;
-} BL_BSD_LOG_OBJECT, *PBL_BSD_LOG_OBJECT;
-
-BL_BSD_LOG_OBJECT BsdpLogObject;
-BOOLEAN BsdpLogObjectInitialized;
-
-VOID
-BlBsdInitializeLog (
- _In_ PBL_DEVICE_DESCRIPTOR LogDevice,
- _In_ PWCHAR LogPath,
- _In_ ULONG Flags
- )
-{
- NTSTATUS Status;
-
- /* Don't initialize twice */
- if (BsdpLogObjectInitialized)
- {
- return;
- }
-
- /* Set invalid IDs for now */
- BsdpLogObject.DeviceId = -1;
- BsdpLogObject.FileId = -1;
-
- /* Open the BSD device */
- Status = BlpDeviceOpen(LogDevice,
- BL_DEVICE_READ_ACCESS | BL_DEVICE_WRITE_ACCESS,
- 0,
- &BsdpLogObject.DeviceId);
- if (!NT_SUCCESS(Status))
- {
- /* Welp that didn't work */
- goto FailurePath;
- }
-
- /* Now open the BSD itself */
- Status = BlFileOpen(BsdpLogObject.DeviceId,
- LogPath,
- BL_FILE_READ_ACCESS | BL_FILE_WRITE_ACCESS,
- &BsdpLogObject.FileId);
- if (!NT_SUCCESS(Status))
- {
- /* D'oh */
- goto FailurePath;
- }
-
- /* The BSD is open. Start doing stuff to it */
- EfiPrintf(L"Unimplemented BSD path\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
-
-FailurePath:
- /* Close the BSD if we had it open */
- if (BsdpLogObject.FileId != -1)
- {
- BlFileClose(BsdpLogObject.FileId);
- }
-
- /* Close the device if we had it open */
- if (BsdpLogObject.DeviceId != -1)
- {
- BlDeviceClose(BsdpLogObject.DeviceId);
- }
-
- /* Set BSD object to its uninitialized state */
- BsdpLogObjectInitialized = FALSE;
- BsdpLogObject.FileId = 0;
- BsdpLogObject.DeviceId = 0;
- BsdpLogObject.Flags = 0;
- BsdpLogObject.Unknown = 0;
- BsdpLogObject.Size = 0;
-}
-
-VOID
-BmpInitializeBootStatusDataLog (
- VOID
- )
-{
- NTSTATUS Status;
- PBL_DEVICE_DESCRIPTOR BsdDevice;
- PWCHAR BsdPath;
- ULONG Flags;
- BOOLEAN PreserveBsd;
-
- /* Initialize locals */
- BsdPath = NULL;
- BsdDevice = NULL;
- Flags = 0;
-
- /* Check if the BSD is stored in a custom device */
- Status = BlGetBootOptionDevice(BlpApplicationEntry.BcdData,
- BcdLibraryDevice_BsdLogDevice,
- &BsdDevice,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- /* Nope, use the boot device */
- BsdDevice = BlpBootDevice;
- }
-
- /* Check if the path is custom as well */
- Status = BlGetBootOptionString(BlpApplicationEntry.BcdData,
- BcdLibraryString_BsdLogPath,
- &BsdPath);
- if (!NT_SUCCESS(Status))
- {
- /* Nope, use our default path */
- Status = BmpFwGetFullPath(L"\\bootstat.dat", &BsdPath);
- if (!NT_SUCCESS(Status))
- {
- BsdPath = NULL;
- }
-
- /* Set preserve flag */
- Flags = 1;
- }
- else
- {
- /* Set preserve flag */
- Flags = 1;
- }
-
- /* Finally, check if the BSD should be preserved */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_PreserveBsdLog,
- &PreserveBsd);
- if (!(NT_SUCCESS(Status)) || !(PreserveBsd))
- {
- /* We failed to read, or we were asked not to preserve it */
- Flags = 0;
- }
-
- /* Initialize the log */
- BlBsdInitializeLog(BsdDevice, BsdPath, Flags);
-
- /* Free the BSD device descriptor if we had one */
- if (BsdDevice)
- {
- BlMmFreeHeap(BsdDevice);
- }
-
- /* Free the BSD path if we had one */
- if ((Flags) && (BsdPath))
- {
- BlMmFreeHeap(BsdPath);
- }
-}
-
-VOID
-BmFwMemoryInitialize (
- VOID
- )
-{
- NTSTATUS Status;
- PHYSICAL_ADDRESS PhysicalAddress;
- BL_ADDRESS_RANGE AddressRange;
-
- /* Select the range below 1MB */
- AddressRange.Maximum = 0xFFFFF;
- AddressRange.Minimum = 0;
-
- /* Allocate one reserved page with the "below 1MB" attribute */
- Status = MmPapAllocatePhysicalPagesInRange(&PhysicalAddress,
- BlApplicationReserved,
- 1,
- BlMemoryBelow1MB,
- 0,
- &MmMdlUnmappedAllocated,
- &AddressRange,
- BL_MM_REQUEST_DEFAULT_TYPE);
- if (!NT_SUCCESS(Status))
- {
- /* Print a message on error, but keep going */
- BlStatusPrint(L"BmFwMemoryInitialize: Failed to allocate a page below 1MB. Status: 0x%08x\r\n",
- Status);
- }
-}
-
-NTSTATUS
-BmpBgDisplayClearScreen (
- _In_ ULONG Color
- )
-{
- /* Not yet supported */
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlXmiWrite (
- _In_ PWCHAR XmlTag
- )
-{
- /* Sigh */
- EfiPrintf(L"XML: %s\r\n", XmlTag);
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlXmiInitialize (
- _In_ PWCHAR Stylesheet
- )
-{
- /* Reset the cursor type */
- BlDisplaySetCursorType(0);
-
- /* Nope, not doing any XML stuff */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BmFwVerifySelfIntegrity (
- VOID
- )
-{
- /* Check if we're booted by UEFI off the DVD directly */
- if ((BlpBootDevice->DeviceType == LocalDevice) &&
- (BlpBootDevice->Local.Type == CdRomDevice) &&
- (BlpApplicationFlags & BL_APPLICATION_FLAG_CONVERTED_FROM_EFI))
- {
- /* Windows actually bypasses integrity checks in this case. Works for us */
- return STATUS_SUCCESS;
- }
-
- /* Our binaries aren't signed, so always return failure */
- return 0xC0000428;
-}
-
-NTSTATUS
-BmFwRegisterRevocationList (
- VOID
- )
-{
- NTSTATUS Status;
- BOOLEAN SecureBootEnabled;
-
- /* Is SecureBoot enabled? */
- Status = BlSecureBootIsEnabled(&SecureBootEnabled);
- if ((NT_SUCCESS(Status)) && (SecureBootEnabled))
- {
- EfiPrintf(L"SB not implemented revok\r\n");
- return STATUS_NOT_IMPLEMENTED;
- }
- else
- {
- /* Nothing to do without SecureBoot */
- Status = STATUS_SUCCESS;
- }
-
- /* Return revocation result back to caller */
- return Status;
-}
-
-NTSTATUS
-BmResumeFromHibernate (
- _Out_ PHANDLE BcdResumeHandle
- )
-{
- NTSTATUS Status;
- BOOLEAN AttemptResume;
-
- /* Should we attempt to resume from hibernation? */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdBootMgrBoolean_AttemptResume,
- &AttemptResume);
- if (!NT_SUCCESS(Status))
- {
- /* Nope. Is automatic restart on crash enabled? */
- AttemptResume = FALSE;
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdOSLoaderBoolean_DisableCrashAutoReboot,
- &AttemptResume);
- AttemptResume = (NT_SUCCESS(Status) && (AttemptResume));
- }
-
- /* Don't do anything if there's no need to resume anything */
- if (!AttemptResume)
- {
- return STATUS_SUCCESS;
- }
-
- /* Not yet implemented */
- EfiPrintf(L"Resume not supported\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BmpProcessBadMemory (
- VOID
- )
-{
- BL_PD_DATA_BLOB BadMemoryData;
- NTSTATUS Status;
-
- /* Try to get the memory data from the memtest application */
- BadMemoryData.BlobSize = 0;
- BadMemoryData.Data = NULL;
- BadMemoryData.DataSize = 0;
- Status = BlPdQueryData(&BadMemoryGuid, NULL, &BadMemoryData);
- if (Status != STATUS_BUFFER_TOO_SMALL)
- {
- /* No results, or some other error */
- return Status;
- }
-
- /* Not yet implemented */
- EfiPrintf(L"Bad page list persistence not implemented\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BmPurgeOption (
- _In_ HANDLE BcdHandle,
- _In_ PGUID ObjectId,
- _In_ ULONG Type
- )
-{
- HANDLE ObjectHandle;
- NTSTATUS Status;
-
- /* Open the object */
- Status = BcdOpenObject(BcdHandle, ObjectId, &ObjectHandle);
- if (NT_SUCCESS(Status))
- {
- /* Delete the element */
- BcdDeleteElement(ObjectHandle, Type);
-
- /* Close the object and set success */
- BiCloseKey(ObjectHandle);
- Status = STATUS_SUCCESS;
- }
-
- /* Return the result */
- return Status;
-}
-
-NTSTATUS
-BmGetEntryDescription (
- _In_ HANDLE BcdHandle,
- _In_ PGUID ObjectId,
- _Out_ PBCD_OBJECT_DESCRIPTION Description
- )
-{
- NTSTATUS Status;
- HANDLE ObjectHandle;
-
- /* Open the BCD object */
- Status = BcdOpenObject(BcdHandle, ObjectId, &ObjectHandle);
- if (NT_SUCCESS(Status))
- {
- /* Make sure the caller passed this argument in */
- if (!Description)
- {
- /* Fail otherwise */
- Status = STATUS_INVALID_PARAMETER;
- }
- else
- {
- /* Query the description from the BCD interface */
- Status = BiGetObjectDescription(ObjectHandle, Description);
- }
-
- /* Close the object key */
- BiCloseKey(ObjectHandle);
- }
-
- /* Return the result back */
- return Status;
-}
-
-NTSTATUS
-BmpPopulateBootEntryList (
- _In_ HANDLE BcdHandle,
- _In_ PGUID SequenceList,
- _In_ ULONG Flags,
- _Out_ PBL_LOADED_APPLICATION_ENTRY* BootSequence,
- _Out_ PULONG SequenceCount
- )
-{
- NTSTATUS Status;
- ULONG BootIndex, i, OptionSize;
- PBL_LOADED_APPLICATION_ENTRY BootEntry;
- PBL_BCD_OPTION Options;
- BCD_OBJECT_DESCRIPTION Description;
- BcdObjectType ObjectType;
- BOOLEAN HavePath, IsWinPe, SoftReboot;
- PWCHAR LoaderPath;
-
- /* Initialize locals */
- Options = NULL;
- BootIndex = 0;
- Status = STATUS_NOT_FOUND;
-
- /* Loop through every element in the sequence */
- for (i = 0; i < *SequenceCount; i++)
- {
- /* Assume failure */
- BootEntry = NULL;
-
- /* Get the options for the sequence element */
- Status = BmGetOptionList(BcdHandle, SequenceList, &Options);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"option list failed: %lx\r\n", Status);
- goto LoopQuickie;
- }
-
- /* Make sure there's at least a path and description */
- if (!(MiscGetBootOption(Options, BcdLibraryDevice_ApplicationDevice)) ||
- !(MiscGetBootOption(Options, BcdLibraryString_Description)))
- {
- Status = STATUS_UNSUCCESSFUL;
- EfiPrintf(L"missing list failed: %lx\r\n", Status);
- goto LoopQuickie;
- }
-
- /* Get the size of the BCD options and allocate a large enough entry */
- OptionSize = BlGetBootOptionListSize(Options);
- BootEntry = BlMmAllocateHeap(sizeof(*BootEntry) + OptionSize);
- if (!BootEntry)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Save it as part of the sequence */
- BootSequence[BootIndex] = BootEntry;
-
- /* Initialize it, and copy the BCD data */
- RtlZeroMemory(BootEntry, sizeof(*BootEntry));
- BootEntry->Guid = *SequenceList;
- BootEntry->BcdData = (PBL_BCD_OPTION)(BootEntry + 1);
- BootEntry->Flags = Flags;
- RtlCopyMemory(BootEntry->BcdData, Options, OptionSize);
-
- /* Get the object descriptor to find out what kind of entry it is */
- Status = BmGetEntryDescription(BcdHandle,
- &BootEntry->Guid,
- &Description);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"missing desc failed: %lx\r\n", Status);
- goto LoopQuickie;
- }
-
- /* Check if a path was given or not */
- HavePath = MiscGetBootOption(Options, BcdLibraryString_ApplicationPath) ?
- TRUE : FALSE;
-
- /* Now select based on what type of object this is -- must be an app */
- ObjectType.PackedValue = Description.Type;
- if (ObjectType.Application.ObjectCode == BCD_OBJECT_TYPE_APPLICATION)
- {
- /* Then select based on what kind of app it is */
- switch (ObjectType.Application.ApplicationCode)
- {
- /* Another boot manager */
- case BCD_APPLICATION_TYPE_BOOTMGR:
- BootEntry->Flags |= BCD_APPLICATION_TYPE_BOOTMGR;
- break;
-
- /* An OS loader */
- case BCD_APPLICATION_TYPE_OSLOADER:
- BootEntry->Flags |= BL_APPLICATION_ENTRY_WINLOAD;
-
- /* Do we have a path for it? */
- if (!HavePath)
- {
- /* We'll try to make one up. Is this WinPE? */
- IsWinPe = FALSE;
- Status = BlGetBootOptionBoolean(Options,
- BcdOSLoaderBoolean_WinPEMode,
- &IsWinPe);
- if (!(NT_SUCCESS(Status)) && (Status != STATUS_NOT_FOUND))
- {
- goto Quickie;
- }
-
- /* Use the appropriate path for WinPE or local install */
- LoaderPath = IsWinPe ?
- L"\\Windows\\System32\\boot\\winload.efi" :
- L"\\Windows\\System32\\winload.efi";
-
- /* Add the path to the boot entry */
- Status = BlAppendBootOptionString(BootEntry,
- BcdLibraryString_ApplicationPath,
- LoaderPath);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* We have a path now */
- HavePath = TRUE;
- }
- break;
-
- /* A hibernate-resume application */
- case BCD_APPLICATION_TYPE_RESUME:
- BootEntry->Flags |= BL_APPLICATION_ENTRY_WINRESUME;
- break;
-
- /* An older OS NTLDR */
- case BCD_APPLICATION_TYPE_NTLDR:
- BootEntry->Flags |= BL_APPLICATION_ENTRY_NTLDR;
- break;
-
- /* An older OS SETUPLDR */
- case BCD_APPLICATION_TYPE_SETUPLDR:
- BootEntry->Flags |= BL_APPLICATION_ENTRY_SETUPLDR;
- break;
-
- /* A 3rd party/Win9x boot sector */
- case BCD_APPLICATION_TYPE_BOOTSECTOR:
- BootEntry->Flags |= BL_APPLICATION_ENTRY_BOOTSECTOR;
- break;
-
- /* Something else entirely */
- default:
- break;
- }
- }
-
- /* We better have a path by now */
- if (!HavePath)
- {
- Status = STATUS_UNSUCCESSFUL;
- goto LoopQuickie;
- }
-
- /* Check if this is a real mode startup.com */
- if ((ObjectType.Application.ObjectCode == BCD_OBJECT_TYPE_APPLICATION) &&
- (ObjectType.Application.ImageCode == BCD_IMAGE_TYPE_REAL_MODE) &&
- (ObjectType.Application.ApplicationCode == BCD_APPLICATION_TYPE_STARTUPCOM))
- {
- /* Check if PXE soft reboot will occur */
- Status = BlGetBootOptionBoolean(Options,
- BcdStartupBoolean_PxeSoftReboot,
- &SoftReboot);
- if ((NT_SUCCESS(Status)) && (SoftReboot))
- {
- /* Then it's a valid startup.com entry */
- BootEntry->Flags |= BL_APPLICATION_ENTRY_STARTUP;
- }
- }
-
-LoopQuickie:
- /* All done with this entry -- did we have BCD options? */
- if (Options)
- {
- /* Free them, they're part of the entry now */
- BlMmFreeHeap(Options);
- Options = NULL;
- }
-
- /* Did we fail anywhere? */
- if (!NT_SUCCESS(Status))
- {
- /* Yep -- did we fail with an active boot entry? */
- if (BootEntry)
- {
- /* Destroy it */
- BlDestroyBootEntry(BootEntry);
- BootSequence[BootIndex] = NULL;
- }
- }
- else
- {
- /* It worked, so populate the next index now */
- BootIndex++;
- }
-
- /* And move to the next GUID in the sequence list */
- SequenceList++;
- }
-
-Quickie:
- /* All done now -- did we have any BCD options? */
- if (Options)
- {
- /* Free them */
- BlMmFreeHeap(Options);
- }
-
- /* Return the status */
- return Status;
-}
-
-NTSTATUS
-BmGetBootSequence (
- _In_ HANDLE BcdHandle,
- _In_ PGUID SequenceList,
- _In_ ULONG SequenceListCount,
- _In_ ULONG Flags,
- _Out_ PBL_LOADED_APPLICATION_ENTRY** BootSequence,
- _Out_ PULONG SequenceCount
- )
-{
- PBL_LOADED_APPLICATION_ENTRY* Sequence;
- ULONG Count = SequenceListCount;
- NTSTATUS Status;
-
- /* Allocate the sequence list */
- Sequence = BlMmAllocateHeap(SequenceListCount * sizeof(*Sequence));
- if (!Sequence)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Populate the sequence list */
- Status = BmpPopulateBootEntryList(BcdHandle,
- SequenceList,
- Flags,
- Sequence,
- &Count);
- if (!NT_SUCCESS(Status))
- {
- /* Free the list on failure */
- BlMmFreeHeap(Sequence);
- }
- else
- {
- /* Otherwise, set success and return the list and count */
- Status = STATUS_SUCCESS;
- *BootSequence = Sequence;
- *SequenceCount = Count;
- }
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-BmEnumerateBootEntries (
- _In_ HANDLE BcdHandle,
- _Out_ PBL_LOADED_APPLICATION_ENTRY **BootSequence,
- _Out_ PULONG SequenceCount
- )
-{
- NTSTATUS Status;
- ULONG BootIndex, BootIniCount, BootEntryCount, BcdCount;
- PBL_LOADED_APPLICATION_ENTRY* Sequence;
- PGUID DisplayOrder;
- GUID DefaultObject;
- BOOLEAN UseDisplayList;
-
- /* Initialize locals */
- BootIndex = 0;
-
- /* First try to get the display list, if any */
- UseDisplayList = TRUE;
- Status = BlGetBootOptionGuidList(BlpApplicationEntry.BcdData,
- BcdBootMgrObjectList_DisplayOrder,
- &DisplayOrder,
- &BcdCount);
- if (!NT_SUCCESS(Status))
- {
- /* No list, get the default entry instead */
- Status = BlGetBootOptionGuid(BlpApplicationEntry.BcdData,
- BcdBootMgrObject_DefaultObject,
- &DefaultObject);
- if (NT_SUCCESS(Status))
- {
- /* Set the array to just our entry */
- UseDisplayList = FALSE;
- BcdCount = 1;
- DisplayOrder = &DefaultObject;
- }
- else
- {
- /* No default list either, return success but no entries */
- *BootSequence = NULL;
- *SequenceCount = 0;
- Status = STATUS_SUCCESS;
- DisplayOrder = NULL;
- goto Quickie;
- }
- }
-
- /* Check if boot.ini was used */
- BootIniCount = 0;
- if (BmBootIniUsed)
- {
- /* Get the entries from it */
- EfiPrintf(L"Boot.ini not supported\r\n");
- BootIniCount = 0;//BmBootIniGetEntryCount();
- }
-
- /* Allocate an array large enough for the combined boot entries */
- BootEntryCount = BootIniCount + BcdCount;
- Sequence = BlMmAllocateHeap(BootEntryCount * sizeof(*Sequence));
- if (!Sequence)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Zero it out */
- RtlZeroMemory(Sequence, BootEntryCount * sizeof(*Sequence));
-
- /* Check if we had BCD entries */
- if (BcdCount)
- {
- /* Populate the list of bootable entries */
- Status = BmpPopulateBootEntryList(BcdHandle,
- DisplayOrder,
- BL_APPLICATION_ENTRY_DISPLAY_ORDER,
- Sequence,
- &BcdCount);
- if (!NT_SUCCESS(Status))
- {
- /* Bail out */
- goto Quickie;
- }
- }
-
- /* Check if we had boot.ini entries */
- if (BootIniCount)
- {
- /* TODO */
- EfiPrintf(L"Boot.ini not supported\r\n");
- }
-
- /* Return success and the sequence + count populated */
- Status = STATUS_SUCCESS;
- *BootSequence = Sequence;
- *SequenceCount = BootIniCount + BcdCount;
-
-Quickie:
- /* Check if we had allocated a GUID list */
- if ((UseDisplayList) && (DisplayOrder))
- {
- /* Free it */
- BlMmFreeHeap(DisplayOrder);
- }
-
- /* Check if this is the failure path */
- if (!(NT_SUCCESS(Status)) && (Sequence))
- {
- /* Loop the remaining boot entries */
- while (BootIndex < BootEntryCount)
- {
- /* Check if it had been allocated */
- if (Sequence[BootIndex])
- {
- /* Free it */
- BlMmFreeHeap(Sequence[BootIndex]);
- }
-
- /* Next*/
- BootIndex++;
- }
-
- /* Free the whole sequence now */
- BlMmFreeHeap(Sequence);
- }
-
- /* All done, return the result */
- return Status;
-}
-
-VOID
-BmpGetDefaultBootEntry (
- _In_ PBL_LOADED_APPLICATION_ENTRY* Sequence,
- _In_ ULONG Count,
- _Out_ PBL_LOADED_APPLICATION_ENTRY* DefaultEntry,
- _Out_ PULONG DefaultIndex
- )
-{
- GUID DefaultObject;
- NTSTATUS Status;
- ULONG BootIndex;
-
- /* Assume no default */
- *DefaultEntry = *Sequence;
- *DefaultIndex = 0;
-
- /* Nothing to do if there's just one entry */
- if (Count == 1)
- {
- return;
- }
-
- /* Get the default object, bail out if there isn't one */
- Status = BlGetBootOptionGuid(BlpApplicationEntry.BcdData,
- BcdBootMgrObject_DefaultObject,
- &DefaultObject);
- if (!(NT_SUCCESS(Status)) || !(Count))
- {
- return;
- }
-
- /* Scan the boot sequence */
- for (BootIndex = 0; BootIndex < Count; BootIndex++)
- {
- /* Find one that matches the default */
- if (RtlEqualMemory(&Sequence[BootIndex]->Guid,
- &DefaultObject,
- sizeof(GUID)))
- {
- /* Return it */
- *DefaultEntry = Sequence[BootIndex];
- *DefaultIndex = BootIndex;
- return;
- }
- }
-}
-
-BL_MENU_POLICY
-BmGetBootMenuPolicy (
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
- )
-{
- NTSTATUS Status;
- BOOLEAN EmsEnabled;
- ULONGLONG BootMenuPolicy;
- ULONG OptionId;
-
- /* Check if EMS is enabled */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdOSLoaderBoolean_EmsEnabled,
- &EmsEnabled);
- if ((NT_SUCCESS(Status)) && (EmsEnabled))
- {
- /* No boot menu */
- return MenuPolicyLegacy;
- }
-
- /* Check what entry we are looking at */
- if (!BootEntry)
- {
- /* No entry, pick the selected one */
- BootEntry = BmpSelectedBootEntry;
- }
-
- /* Do we still not have an entry? */
- if (!BootEntry)
- {
- /* Show the menu */
- return MenuPolicyStandard;
- }
-
- /* Check if this is an OS loader */
- BootMenuPolicy = 0;
- if (BootEntry->Flags & BL_APPLICATION_ENTRY_WINLOAD)
- {
- /* Use the correct option ID */
- OptionId = BcdOSLoaderInteger_BootMenuPolicy;
- }
- else
- {
- /* Check if this is an OS resumer */
- if (!(BootEntry->Flags & BL_APPLICATION_ENTRY_WINRESUME))
- {
- /* Nope, so no reason for a menu */
- return MenuPolicyLegacy;
- }
-
- /* Use the correct option ID */
- OptionId = BcdResumeInteger_BootMenuPolicy;
- }
-
- /* Check the option ID for the boot menu policy */
- Status = BlGetBootOptionInteger(BootEntry->BcdData,
- OptionId,
- &BootMenuPolicy);
- if (NT_SUCCESS(Status))
- {
- /* We have one, return it */
- return BootMenuPolicy;
- }
-
- /* No policy, so assume no menu */
- return MenuPolicyLegacy;
-}
-
-VOID
-BmDisplayGetBootMenuStatus (
- _Out_ PL_MENU_STATUS MenuStatus
- )
-{
- /* For now, don't support key input at all */
- MenuStatus->AsULong = 0;
- MenuStatus->OemKey = UNICODE_NULL;
- MenuStatus->BootIndex = -1;
-}
-
-NTSTATUS
-BmProcessCustomAction (
- _In_ HANDLE BcdHandle,
- _In_ PWCHAR ActionKey
- )
-{
- EfiPrintf(L"Custom actions not yet handled\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-VOID
-BmpProcessBootEntry (
- _In_ HANDLE BcdHandle,
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
- _Out_ PBOOLEAN ExitBootManager
- )
-{
- BL_MENU_STATUS MenuStatus;
-
- /* Don't exit */
- *ExitBootManager = FALSE;
-
- /* If the legacy menu must be shown, or if we have a boot entry */
- if ((BmGetBootMenuPolicy(BootEntry) != MenuPolicyStandard) || (BootEntry))
- {
- /* Check if any key has been pressed */
- BmDisplayGetBootMenuStatus(&MenuStatus);
- if (MenuStatus.AnyKey)
- {
- /* Was the exit key pressed? */
- if (MenuStatus.Exit)
- {
- /* Don't display a menu, and exit */
- *ExitBootManager = TRUE;
- BmpDisplayBootMenu = FALSE;
- }
- else if (MenuStatus.OemKey)
- {
- /* Process the OEM key action */
- BmProcessCustomAction(BcdHandle, &MenuStatus.KeyValue);
- }
- else
- {
- /* Process other keys */
- EfiPrintf(L"TODO\r\n");
- }
- }
- }
-}
-
-NTSTATUS
-BmpGetSelectedBootEntry (
- _In_ HANDLE BcdHandle,
- _Out_ PBL_LOADED_APPLICATION_ENTRY* SelectedBootEntry,
- _Out_ PULONG EntryIndex,
- _Out_ PBOOLEAN ExitBootManager
- )
-{
- NTSTATUS Status;
- PBL_LOADED_APPLICATION_ENTRY* Sequence;
- PBL_LOADED_APPLICATION_ENTRY Entry, SelectedEntry;
- ULONG Count, BootIndex, SelectedIndex;
- // BOOLEAN FoundFailedEntry;
- ULONGLONG Timeout;
-
- /* Initialize locals */
- BootIndex = 0;
- Count = 0;
- Sequence = NULL;
- SelectedEntry = NULL;
-
- /* Enumerate all the boot entries */
- Status = BmEnumerateBootEntries(BcdHandle, &Sequence, &Count);
- if (!NT_SUCCESS(Status))
- {
- /* Bail out if we failed */
- goto Quickie;
- }
-
- /* Check if there are no entries */
- if (!Count)
- {
- /* This is fatal -- kill the system */
- Status = STATUS_FILE_INVALID;
- BmFatalErrorEx(BL_FATAL_ERROR_BCD_ENTRIES, (ULONG_PTR)L"\\BCD", Status, 0, 0);
- goto Quickie;
- }
-
- /* Check if we don't yet have an array of failed boot entries */
- if (!BmpFailedBootEntries)
- {
- /* Allocate it */
- BmpFailedBootEntries = BlMmAllocateHeap(Count);
- if (BmpFailedBootEntries)
- {
- /* Zero it out */
- RtlZeroMemory(BmpFailedBootEntries, Count);
- }
- }
-
- /* Check if we have a hardcoded boot override */
- if (BmBootEntryOverridePresent)
- {
- EfiPrintf(L"Hard-coded boot override mode not supported\r\n");
- }
-
- /* Log the OS count */
- //BlLogEtwWrite(BOOT_BOOTMGR_MULTI_OS_COUNT);
-
- /* Check if the display is already active and cached */
- if (!BmDisplayStateCached)
- {
- /* Check if we should display a boot menu */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdBootMgrBoolean_DisplayBootMenu,
- &BmpDisplayBootMenu);
- if (!NT_SUCCESS(Status))
- {
- /* Assume not */
- BmpDisplayBootMenu = FALSE;
- }
- }
-
- /* Check if there's only one entry to boot anyway */
- if (Count == 1)
- {
- /* Read it */
- SelectedEntry = *Sequence;
-
- /* Process it */
- BmpProcessBootEntry(BcdHandle, SelectedEntry, ExitBootManager);
-
- /* Check if we're not displaying a boot menu */
- if (!BmpDisplayBootMenu)
- {
- /* Now we are */
- BmpDisplayBootMenu = TRUE;
-
- /* Return the entry and its index back */
- *EntryIndex = 0;
- *SelectedBootEntry = SelectedEntry;
- Status = STATUS_SUCCESS;
- goto Quickie;
- }
- }
- else
- {
- /* Get the default boot entry */
- BmpGetDefaultBootEntry(Sequence, Count, &SelectedEntry, &SelectedIndex);
-
- /* Check if we have a failed boot entry array allocated */
- //FoundFailedEntry = FALSE;
- if (BmpFailedBootEntries)
- {
- /* Check if the default entry failed to boot */
- if (BmpFailedBootEntries[SelectedIndex])
- {
- /* Loop through the current boot sequence */
- for (SelectedIndex = 0; SelectedIndex < Count; SelectedIndex++)
- {
- /* Check if there's no sequence for this index, or it failed */
- while (!(Sequence[SelectedIndex]) ||
- (BmpFailedBootEntries[SelectedIndex]))
- {
- /* Remember that this is a failed entry */
- SelectedEntry = Sequence[SelectedIndex];
- //FoundFailedEntry = TRUE;
- BmpDisplayBootMenu = FALSE;
- }
- }
- }
- }
-
- /* Check if the entry is an OS loader */
- if (SelectedEntry->Flags & BL_APPLICATION_ENTRY_WINLOAD)
- {
- // todo
- EfiPrintf(L"todo path\r\n");
- }
-
- /* Check if there's no timeout */
- Status = BlGetBootOptionInteger(BlpApplicationEntry.BcdData,
- BcdBootMgrInteger_Timeout,
- &Timeout);
- if ((NT_SUCCESS(Status) && !(Timeout)))
- {
- /* There isn't, so just process the default entry right away */
- BmpProcessBootEntry(BcdHandle, SelectedEntry, ExitBootManager);
-
- /* Check if we're not displaying a boot menu */
- if (!BmpDisplayBootMenu)
- {
- /* Now we are */
- BmpDisplayBootMenu = TRUE;
-
- /* Return the entry and its index back */
- *EntryIndex = 0;
- *SelectedBootEntry = SelectedEntry;
- Status = STATUS_SUCCESS;
- goto Quickie;
- }
-
- /* Remove the timeout for this boot instance */
- BlRemoveBootOption(BlpApplicationEntry.BcdData,
- BcdBootMgrInteger_Timeout);
- }
- }
-
- /* Here is where we display the menu and list of tools */
- EfiPrintf(L"Tool selection not yet implemented\r\n");
- EfiStall(10000000);
- *SelectedBootEntry = NULL;
-
-Quickie:
- /* We are done -- did we have a sequence? */
- if (Sequence)
- {
- /* Do we have any boot entries we parsed? */
- while (BootIndex < Count)
- {
- /* Get the current boot entry */
- Entry = Sequence[BootIndex];
-
- /* Did we fail, or is is not the selected one? */
- if ((Entry) && ((Entry != SelectedEntry) || !(NT_SUCCESS(Status))))
- {
- /* Destroy it, as it won't be needed */
- BlDestroyBootEntry(Entry);
- }
- else if (Entry == SelectedEntry)
- {
- /* It's the selected one, return its index */
- *EntryIndex = BootIndex;
- }
-
- /* Move to the next entry */
- BootIndex++;
- }
-
- /* Free the sequence of entries */
- BlMmFreeHeap(Sequence);
- }
-
- /* Return the selection result */
- return Status;
-}
-
-NTSTATUS
-BmLaunchRecoverySequence (
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
- _In_ ULONG LaunchCode
- )
-{
- NTSTATUS Status;
- PBL_LOADED_APPLICATION_ENTRY RecoveryEntry;
- HANDLE BcdHandle;
- PGUID RecoverySequence;
- ULONG Count, i, RecoveryIndex, SequenceCount;
- PBL_LOADED_APPLICATION_ENTRY* Sequence;
-
- /* Initialize locals */
- RecoveryIndex = 0;
- Sequence = NULL;
- RecoverySequence = NULL;
- Count = 0;
- BcdHandle = NULL;
-
- /* Open the BCD*/
- Status = BmOpenDataStore(&BcdHandle);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Get the recovery sequence list */
- Status = BlGetBootOptionGuidList(BootEntry->BcdData,
- BcdLibraryObjectList_RecoverySequence,
- &RecoverySequence,
- &SequenceCount);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Get the sequence of boot entries out of it */
- Status = BmGetBootSequence(BcdHandle,
- RecoverySequence,
- SequenceCount,
- BL_APPLICATION_ENTRY_RECOVERY,
- &Sequence,
- &Count);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Was the BCD open? */
- if (BcdHandle)
- {
- /* Close it */
- BmCloseDataStore(BcdHandle);
- }
-
- /* Now go over every entry in the sequence */
- for (i = 0; i < Count; ++i)
- {
- /* Check the code for this recovery launch */
- if (LaunchCode == 2 || LaunchCode == 5)
- {
- /* Remove the override if there is one, and set it to 4 */
- BlRemoveBootOption(Sequence[i]->BcdData, BcdLibraryInteger_DisplayMessageOverride);
- BlAppendBootOptionInteger(Sequence[i],
- BcdLibraryInteger_DisplayMessageOverride,
- 4);
- }
- else if (LaunchCode == 3)
- {
- /* Remove the override if there is one, and set it to 10 */
- BlRemoveBootOption(Sequence[i]->BcdData, BcdLibraryInteger_DisplayMessageOverride);
- BlAppendBootOptionInteger(Sequence[i],
- BcdLibraryInteger_DisplayMessageOverride,
- 10);
- }
-
- /* Launch the boot entry for this part of the recovery sequence */
- Status = BmpLaunchBootEntry(Sequence[i], NULL, LaunchCode, FALSE);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
- }
-
-Quickie:
- /* Did we have a sequence of entries? */
- if (Sequence)
- {
- /* Loop through each one */
- for (RecoveryIndex = 0; RecoveryIndex < Count; RecoveryIndex++)
- {
- /* Does this index have an allocated boot entry? */
- RecoveryEntry = Sequence[RecoveryIndex];
- if (RecoveryEntry)
- {
- /* Destroy it */
- BlDestroyBootEntry(RecoveryEntry);
- }
- }
-
- /* Free the sequence itself */
- BlMmFreeHeap(Sequence);
- }
-
- /* Was there a sequence list? */
- if (RecoverySequence)
- {
- /* Free it */
- BlMmFreeHeap(RecoverySequence);
- }
-
- /* Return back to caller */
- return Status;
-}
-
-ULONG
-BmDisplayDumpError (
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
- _In_ ULONG LaunchCode
- )
-{
- ULONG BootError;
- NTSTATUS Status;
- BOOLEAN Restart, NoError;
-
- /* Assume we'll just reboot */
- BootError = Reboot;
-
- /* Should we reboot? */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_RestartOnFailure,
- &Restart);
- if ((NT_SUCCESS(Status)) && (Restart))
- {
- return BootError;
- }
-
- /* Should we not show errors, and thus, reboot? */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdBootMgrBoolean_NoErrorDisplay,
- &NoError);
- if ((NT_SUCCESS(Status)) && (NoError))
- {
- return BootError;
- }
-
- /* Is there an internal boot error? */
- if (BmpInternalBootError)
- {
- /* Return it -- but it's a pointer? */
- return (ULONG_PTR)BmpInternalBootError; // ???
- }
-
- /* Otherwise, show the menu to see what to do */
- EfiPrintf(L"Error menu not yet implemented\r\n");
- return BootError;
-}
-
-NTSTATUS
-BmpCreateDevices (
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry
- )
-{
- ULONG NextOffset, DataOffset, ListOffset;
- PBL_BCD_OPTION Option, ListOption;
- BcdElementType ElementType;
- PBCD_DEVICE_OPTION BcdDevice;
-
- /* Starting at offset 0, loop every BCD option */
- NextOffset = 0;
- do
- {
- /* Get the current option, and its offset */
- Option = (PBL_BCD_OPTION)((ULONG_PTR)BootEntry->BcdData + NextOffset);
- NextOffset = Option->NextEntryOffset;
-
- /* If it's empty, ignore it */
- if (Option->Empty)
- {
- continue;
- }
-
- /* If it's not a device option, ignore it */
- ElementType.PackedValue = Option->Type;
- if (ElementType.Format != BCD_TYPE_DEVICE)
- {
- continue;
- }
-
- /* Get the data offset */
- DataOffset = Option->DataOffset;
-
- /* Extract the device out of it */
- BcdDevice = (PBCD_DEVICE_OPTION)((ULONG_PTR)BootEntry->BcdData + DataOffset);
-
- /* If the device is already fully specified, no need to build it */
- if (!(BcdDevice->DeviceDescriptor.Flags & 1))
- {
- continue;
- }
-
- /* Otherwise, check if there's any list options as well */
- ListOption = NULL;
- ListOffset = Option->ListOffset;
- if (Option->ListOffset)
- {
- ListOption = (PBL_BCD_OPTION)((ULONG_PTR)BootEntry->BcdData + ListOffset);
- }
-
- /* And now call BlCreateDevice to build the full device descriptor */
- EfiPrintf(L"Unspecified devices not yet supported: %p\r\n", ListOption);
- return STATUS_NOT_SUPPORTED;
- } while (NextOffset != 0);
-
- /* Devices created successfully */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BmpTransferExecution (
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
- _Out_ PULONG LaunchCode,
- _Out_ PBOOLEAN Recover
- )
-{
- PWCHAR AppPath;
- NTSTATUS Status;
- PBL_DEVICE_DESCRIPTOR AppDevice;
- BL_RETURN_ARGUMENTS ReturnArgs;
- BOOLEAN AdvancedOptions;
- ULONG AppHandle;
-
- /* Get the application path */
- Status = BlGetBootOptionString(BootEntry->BcdData,
- BcdLibraryString_ApplicationPath,
- &AppPath);
- if (!NT_SUCCESS(Status))
- {
- /* If we couldn't find one, set this to NULL */
- AppPath = NULL;
- }
-
- /* Check if this is a PXE startup.com */
- if (BootEntry->Flags & BL_APPLICATION_ENTRY_STARTUP)
- {
-#if BL_NET_SUPPORT
- /* Do soft reboot to launch it */
- Status = BlNetSoftReboot(BootEntry);
-#else
- EfiPrintf(L"Net boot not supported\r\n");
- Status = STATUS_NOT_SUPPORTED;
-#endif
- /* Nothing else for us to do */
- goto Quickie;
- }
-
- /* Loop as long as boot was not cancelled */
- do
- {
- /* Load the boot application */
- Status = BlImgLoadBootApplication(BootEntry, &AppHandle);
-
- /* Did we not find it? */
- if (Status == STATUS_NOT_FOUND)
- {
- /* Get the device for the boot application */
- Status = BlGetBootOptionDevice(BootEntry->BcdData,
- BcdLibraryDevice_ApplicationDevice,
- &AppDevice,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- /* Force re-enumeration */
- Status = BlFwEnumerateDevice(AppDevice);
- }
-
- /* Did re-enumeration work? */
- if (!NT_SUCCESS(Status))
- {
- /* Nope, raise a fatal error */
- BmFatalErrorEx(BL_FATAL_ERROR_APP_LOAD,
- (ULONG_PTR)AppPath,
- Status,
- 0,
- 0);
- goto Quickie;
- }
-
- /* Yes, try booting it again */
- Status = BlImgLoadBootApplication(BootEntry, &AppHandle);
- }
-
- /* Was boot cancelled?*/
- if (Status == STATUS_CANCELLED)
- {
- /* Should we display the menu, or is there no launch sequence? */
- if ((BmGetBootMenuPolicy(BootEntry) != MenuPolicyStandard) ||
- !(MiscGetBootOption(BootEntry->BcdData,
- BcdLibraryObjectList_RecoverySequence)))
- {
- /* Bail out, the menu will take care of it */
- goto Quickie;
- }
-
- /* No menu and there's a sequence, launch it */
- *LaunchCode = 4;
- *Recover = TRUE;
- goto Quickie;
- }
-
- /* STATUS_FVE_LOCKED_VOLUME -- bitlocker volume is locked */
- if (Status == STATUS_FVE_LOCKED_VOLUME)
- {
- /* Launch recovery mode */
- *LaunchCode = 4;
- *Recover = TRUE;
- goto Quickie;
- }
-
- /* Was there some other error launching the boot application? */
- if (!NT_SUCCESS(Status))
- {
- /* Raise a fatal error */
- BmFatalErrorEx(BL_FATAL_ERROR_APP_LOAD,
- (ULONG_PTR)AppPath,
- Status,
- 0,
- 0);
- goto Quickie;
- }
-
- /* Zero out the return arguments */
- RtlZeroMemory(&ReturnArgs, sizeof(ReturnArgs));
-
- /* Log to ETW this launch */
- //BmpLogApplicationLaunchEvent(&BootEntry->Guid, AppPath);
-
- /* Launch the boot application*/
- Status = BlImgStartBootApplication(AppHandle, &ReturnArgs);
-
-#if BL_BITLOCKER_SUPPORT
- /* Bitlocker stuff */
- BlFveSecureBootCheckpointAppReturn(BootEntry, &ReturnArgs);
-#endif
-
- /* Log in the boot status log the launch */
- //BlBsdLogEntry(1, 0x12, &BootEntry->Guid, 0x14);
-
- /* Unloac the boot application if we've returned */
- BlImgUnloadBootApplication(AppHandle);
-
- /* Keep going unless STATUS_RESTART_BOOT_APPLICATION */
- } while (Status != 0xC0000453);
-
- /* We've come back. Assume we need to launch the recovery sequence */
- *Recover = TRUE;
-
- /* Why did we get back? */
- if (ReturnArgs.Flags & 1)
- {
- /* Flag 1 -- should we display advanced options? */
- Status = BlGetBootOptionBoolean(BootEntry->BcdData,
- BcdLibraryBoolean_DisplayAdvancedOptions,
- &AdvancedOptions);
- if ((NT_SUCCESS(Status)) && (AdvancedOptions))
- {
- /* Yes, so return with code 2 */
- *LaunchCode = 2;
- }
- else
- {
- /* No, return with code 1 */
- *LaunchCode = 1;
- }
- }
- else if (ReturnArgs.Flags & 4)
- {
- /* Flag 4 -- unknown */
- *LaunchCode = 1;
- }
- else if (ReturnArgs.Flags & 8)
- {
- /* Flag 5 -- unknown */
- *LaunchCode = 5;
- }
- else if (ReturnArgs.Flags & 0x10)
- {
- /* Flag 6 -- unknown */
- *LaunchCode = 6;
- }
- else if (ReturnArgs.Flags & 0x20)
- {
- /* Flag 7 -- unknown */
- *LaunchCode = 7;
- }
- else if (ReturnArgs.Flags & BL_RETURN_ARGUMENTS_NO_PAE_FLAG)
- {
- /* PAE is not supported -- refuse to boot */
- *Recover = FALSE;
- BmFatalErrorEx(BL_FATAL_ERROR_NO_PAE, Status, 0, 0, 0);
- }
-
-Quickie:
- /* All done, did we have an application path? */
- if (AppPath)
- {
- /* Free it */
- BlMmFreeHeap(AppPath);
- }
-
- /* Back to the caller now */
- return Status;
-}
-
-NTSTATUS
-BmpLaunchBootEntry (
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
- _Out_ PULONG EntryIndex,
- _In_ ULONG LaunchCode,
- _In_ BOOLEAN LaunchWinRe
- )
-{
- HANDLE BcdHandle;
- NTSTATUS Status;
- GUID ObjectId;
- BOOLEAN DoRecovery, AutoRecovery, DoSequence, RestartOnFailure;
- ULONG ErrorCode;
- BOOLEAN AdvancedOneTime, EditOneTime;
-
- /* Check if this is the OS loader */
- if (BootEntry->Flags & BL_APPLICATION_ENTRY_WINLOAD)
- {
- /* Check if one-time advanced options should be shown */
- if (MiscGetBootOption(BootEntry->BcdData,
- BcdOSLoaderBoolean_AdvancedOptionsOneTime))
- {
- /* Open the BCD */
- BcdHandle = NULL;
- Status = BmOpenDataStore(BcdHandle);
- if (NT_SUCCESS(Status))
- {
- /* Delete the option from the BCD, so it doesn't happen again */
- ObjectId = BootEntry->Guid;
- BmPurgeOption(BcdHandle,
- &ObjectId,
- BcdOSLoaderBoolean_AdvancedOptionsOneTime);
- BmCloseDataStore(BcdHandle);
- }
- }
-
- /* Check if one-time options editor should be shown */
- if (MiscGetBootOption(BootEntry->BcdData,
- BcdOSLoaderBoolean_OptionsEditOneTime))
- {
- /* Open the BCD */
- BcdHandle = NULL;
- Status = BmOpenDataStore(BcdHandle);
- if (NT_SUCCESS(Status))
- {
- /* Delete the option from the BCD, so it doesn't happen again */
- ObjectId = BootEntry->Guid;
- BmPurgeOption(BcdHandle,
- &ObjectId,
- BcdOSLoaderBoolean_OptionsEditOneTime);
- BmCloseDataStore(BcdHandle);
- }
- }
- }
-
-TryAgain:
- /* Disable recovery mode */
- DoRecovery = FALSE;
-
- /* Store globally which entry we are trying to boot */
- BmpSelectedBootEntry = BootEntry;
-
- /* Create any devices that aren't yet fully defined for this boot entry */
- Status = BmpCreateDevices(BootEntry);
- if (!NT_SUCCESS(Status))
- {
- /* That failed -- can we launch the recovery environment? */
- if (!LaunchWinRe)
- {
- return Status;
- }
-
- /* Yes, so return with the WinRe launch code */
- LaunchCode = 2;
- goto Quickie;
- }
-
- /* Is this an OS loader/ */
- if (BootEntry->Flags & BL_APPLICATION_ENTRY_WINLOAD)
- {
- /* Is the one-time advanced options menu option present? */
- Status = BlGetBootOptionBoolean(BootEntry->BcdData,
- BcdOSLoaderBoolean_AdvancedOptionsOneTime,
- &AdvancedOneTime);
- if (NT_SUCCESS(Status))
- {
- /* Is it turned on? */
- if (AdvancedOneTime)
- {
- /* Set the option this once */
- BlAppendBootOptionBoolean(BootEntry,
- BcdLibraryBoolean_DisplayAdvancedOptions,
- TRUE);
- }
- else
- {
- /* It's not, so disable the option if active */
- BlRemoveBootOption(BootEntry->BcdData,
- BcdLibraryBoolean_DisplayAdvancedOptions);
- }
-
- /* Remove the one-time option. We've already purged it earlier */
- BlRemoveBootOption(BootEntry->BcdData,
- BcdOSLoaderBoolean_AdvancedOptionsOneTime);
- }
-
- /* Is the one-time options editor menu option present? */
- Status = BlGetBootOptionBoolean(BootEntry->BcdData,
- BcdOSLoaderBoolean_OptionsEditOneTime,
- &EditOneTime);
- if (NT_SUCCESS(Status))
- {
- /* Is it turned on? */
- if (EditOneTime)
- {
- /* Set the option this once */
- BlAppendBootOptionBoolean(BootEntry,
- BcdLibraryBoolean_DisplayOptionsEdit,
- TRUE);
- }
- else
- {
- /* It's not, so disable the option if active */
- BlRemoveBootOption(BootEntry->BcdData,
- BcdLibraryBoolean_DisplayOptionsEdit);
- }
-
- /* Remove the one-time option. We've already purged it earlier */
- BlRemoveBootOption(BootEntry->BcdData,
- BcdOSLoaderBoolean_OptionsEditOneTime);
- }
- }
-
- /* BCD handling done, transfer execution to this entry */
- Status = BmpTransferExecution(BootEntry, &LaunchCode, &DoRecovery);
- if (!LaunchWinRe)
- {
- return Status;
- }
-
- /* Check if boot was successful, or cancelled and we're not doing WinRE */
- if (((NT_SUCCESS(Status)) || (Status == STATUS_CANCELLED)) && !(DoRecovery))
- {
- return Status;
- }
-
- /* Boot failed -- are we doing recovery? */
- if (!DoRecovery)
- {
- /* Nope, bail out */
- LaunchCode = 2;
- goto Quickie;
- }
-
-Quickie:
- /* Get the recovery sequence */
- if (MiscGetBootOption(BootEntry->BcdData, BcdLibraryObjectList_RecoverySequence))
- {
- /* Check if the launch depends on auto-recovery being enabled or not */
- if ((LaunchCode == 3) || (LaunchCode == 5) || (LaunchCode == 6))
- {
- Status = BlGetBootOptionBoolean(BootEntry->BcdData,
- BcdLibraryBoolean_AutoRecoveryEnabled,
- &AutoRecovery);
- if (NT_SUCCESS(Status))
- {
- /* Override the setting */
- DoRecovery = AutoRecovery;
- }
- }
- }
- else
- {
- /* There's no recovery setting */
- DoRecovery = FALSE;
- }
-
- /* Check if we should restart on failure */
- RestartOnFailure = FALSE;
- BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_RestartOnFailure,
- &RestartOnFailure);
-
- /* Do the sequence if recovery is on, unless we should restart instead */
- DoSequence = RestartOnFailure ? FALSE : DoRecovery;
- while (1)
- {
- /* Are we doing the recovery sequence? */
- if (DoSequence)
- {
- /* Because of automatic recovery? */
- if (AutoRecovery)
- {
-#if BL_BITLOCKER_SUPPORT
- /* Do bitlocker stuff */
- BlFveRegisterBootEntryForTrustedWimBoot(BootEntry, TRUE);
-#endif
- }
-
- /* Launch the recovery sequence*/
- Status = BmLaunchRecoverySequence(BootEntry, LaunchCode);
-
- /* Was it launched automatically? */
- if (AutoRecovery)
- {
-#if BL_BITLOCKER_SUPPORT
- /* Do bitlocker stuff */
- BlFveRegisterBootEntryForTrustedWimBoot(BootEntry, FALSE);
-#endif
-
- /* No need to do this again */
- AutoRecovery = FALSE;
- }
-
- /* Did the recovery sequence work? */
- if (NT_SUCCESS(Status))
- {
- /* All good */
- return STATUS_SUCCESS;
- }
-
- /* Remove the sequence, don't do it again */
- BlRemoveBootOption(BootEntry->BcdData, BcdLibraryObjectList_RecoverySequence);
- }
-
- /* Recovery sequence also failed, show fatal error */
- if (!BmpInternalBootError)
- {
- BmFatalErrorEx(BL_FATAL_ERROR_GENERIC, Status, 0, 0, 0);
- }
-
- /* Display the error menu */
- ErrorCode = BmDisplayDumpError(BootEntry, LaunchCode);
- BmErrorPurge();
-
- /* See what the user wants to do */
- switch (ErrorCode)
- {
- case TryAgain:
- /* Try again */
- goto TryAgain;
-
- case NextOs:
- /* Boot the next entry*/
- break;
-
- case OsSelection:
- /* Cancel the boot*/
- return STATUS_CANCELLED;
-
- case RecoverOem:
- /* Custom OEM recovery -- open the BCD */
- Status = BmOpenDataStore(BcdHandle);
- if (NT_SUCCESS(Status))
- {
- /* See what the custom sequence is */
- Status = BmProcessCustomAction(BcdHandle, NULL);
- }
-
- /* All done, close the BCD */
- if (BcdHandle)
- {
- BmCloseDataStore(BcdHandle);
- }
- return Status;
-
- case AdvancedOptions:
- /* Show the advanced options next iteration */
- BlAppendBootOptionBoolean(BootEntry,
- BcdOSLoaderBoolean_AdvancedOptionsOneTime,
- TRUE);
- goto TryAgain;
-
- case BootOptions:
- /* Show the options editor next iteration */
- BlAppendBootOptionBoolean(BootEntry,
- BcdOSLoaderBoolean_OptionsEditOneTime,
- TRUE);
- goto TryAgain;
-
- case Recover:
- /* Try the recovery sequence next time*/
- DoSequence = TRUE;
- LaunchCode = 1;
- goto TryAgain;
-
- default:
- /* Something unknown */
- return STATUS_CANCELLED;
- }
- }
-
- /* We are booting the next OS, so return success as to not kill the boot */
- return STATUS_SUCCESS;
-}
-
-/*++
- * @name BmMain
- *
- * The BmMain function implements the Windows Boot Application entrypoint for
- * the Boot Manager.
- *
- * @param BootParameters
- * Pointer to the Boot Application Parameter Block.
- *
- * @return NT_SUCCESS if the image was loaded correctly, relevant error code
- * otherwise.
- *
- *--*/
-NTSTATUS
-NTAPI
-BmMain (
- _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootParameters
- )
-{
- NTSTATUS Status, LibraryStatus;
- BL_LIBRARY_PARAMETERS LibraryParameters;
- PBL_RETURN_ARGUMENTS ReturnArguments;
- PGUID AppIdentifier;
- HANDLE BcdHandle, ResumeBcdHandle;
- PBL_BCD_OPTION EarlyOptions;
- PWCHAR Stylesheet;
- BOOLEAN XmlLoaded, DisableIntegrity, TestSigning, PersistBootSequence;
- BOOLEAN RebootOnError, CustomActions;
- ULONG SequenceId;
- PBL_LOADED_APPLICATION_ENTRY BootEntry;
- PGUID SequenceList;
- ULONG SequenceListCount;
- PBL_LOADED_APPLICATION_ENTRY* BootSequence;
- ULONG BootIndex;
- BOOLEAN ExitBootManager;
- BOOLEAN BootFailed;
- BOOLEAN BootOk;
- ULONG SequenceCount;
- BOOLEAN GetEntry;
- EfiPrintf(L"ReactOS UEFI Boot Manager Initializing...\r\n");
-
- /* Reading the BCD can change this later on */
- RebootOnError = FALSE;
-
- /* Save the start/end-of-POST time */
-#if defined(_M_IX86) || defined(_M_X64)
- ApplicationStartTime = __rdtsc();
-#else
- EfiPrintf(L"No time source defined for this platform\r\n");
- ApplicationStartTime = 0;
-#endif
- PostTime = ApplicationStartTime;
-
- /* Setup the boot library parameters for this application */
- BlSetupDefaultParameters(&LibraryParameters);
- LibraryParameters.TranslationType = BlNone;
- LibraryParameters.LibraryFlags = 0x400 | 0x8;
- LibraryParameters.MinimumAllocationCount = 16;
- LibraryParameters.MinimumHeapSize = 512 * 1024;
-
- /* Initialize the boot library */
- Status = BlInitializeLibrary(BootParameters, &LibraryParameters);
- if (!NT_SUCCESS(Status))
- {
- /* Check for failure due to invalid application entry */
- if (Status != STATUS_INVALID_PARAMETER_9)
- {
- /* Specifically print out what happened */
- EfiPrintf(L"BlInitializeLibrary failed 0x%x\r\n", Status);
- }
-
- /* Go to exit path */
- goto Quickie;
- }
-
- /* Get the application identifier */
- AppIdentifier = BlGetApplicationIdentifier();
- if (!AppIdentifier)
- {
- /* None was given, so set our default one */
- AppIdentifier = (PGUID)&GUID_WINDOWS_BOOTMGR;
- }
-
- /* Save our identifier */
- BmApplicationIdentifier = *AppIdentifier;
-
- /* Initialize the file system to open a handle to our root boot directory */
- BmFwInitializeBootDirectoryPath();
-
- /* Load and initialize the boot configuration database (BCD) */
- Status = BmOpenDataStore(&BcdHandle);
- if (NT_SUCCESS(Status))
- {
- /* Copy the boot options */
- Status = BlCopyBootOptions(BlpApplicationEntry.BcdData, &EarlyOptions);
- if (NT_SUCCESS(Status))
- {
- /* Update them */
- Status = BmpUpdateApplicationOptions(BcdHandle);
- if (!NT_SUCCESS(Status))
- {
- /* Log a fatal error */
- BmFatalErrorEx(BL_FATAL_ERROR_BCD_PARSE,
- (ULONG_PTR)L"\\BCD",
- Status,
- 0,
- 0);
- }
- }
- }
-
-#ifdef _SECURE_BOOT
- /* Initialize the secure boot machine policy */
- Status = BmSecureBootInitializeMachinePolicy();
- if (!NT_SUCCESS(Status))
- {
- BmFatalErrorEx(BL_FATAL_ERROR_SECURE_BOOT, Status, 0, 0, 0);
- }
-#endif
-
- /* Copy the library parameters and add the re-initialization flag */
- RtlCopyMemory(&LibraryParameters,
- &BlpLibraryParameters,
- sizeof(LibraryParameters));
- LibraryParameters.LibraryFlags |= (BL_LIBRARY_FLAG_REINITIALIZE_ALL |
- BL_LIBRARY_FLAG_REINITIALIZE);
-
- /* Now that we've parsed the BCD, re-initialize the library */
- LibraryStatus = BlInitializeLibrary(BootParameters, &LibraryParameters);
- if (!NT_SUCCESS(LibraryStatus) && (NT_SUCCESS(Status)))
- {
- Status = LibraryStatus;
- }
-
- /* Initialize firmware-specific memory regions */
- BmFwMemoryInitialize();
-
- /* Initialize the boot status data log (BSD) */
- BmpInitializeBootStatusDataLog();
-
- /* Find our XSL stylesheet */
- Stylesheet = BlResourceFindHtml();
- if (!Stylesheet)
- {
- /* Awe, no XML. This is actually fatal lol. Can't boot without XML. */
- Status = STATUS_NOT_FOUND;
- EfiPrintf(L"BlResourceFindMessage failed 0x%x\r\n", STATUS_NOT_FOUND);
- goto Quickie;
- }
-
- /* Initialize the XML Engine (as a side-effect, resets cursor) */
- Status = BlXmiInitialize(Stylesheet);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"\r\nBlXmiInitialize failed 0x%x\r\n", Status);
- goto Failure;
- }
- XmlLoaded = TRUE;
-
- /* Check if there's an active bitmap visible */
- if (!BlDisplayValidOemBitmap())
- {
- /* Nope, make the screen black using BGFX */
- if (!NT_SUCCESS(BmpBgDisplayClearScreen(0xFF000000)))
- {
- /* BGFX isn't active, use standard display */
- BlDisplayClearScreen();
- }
- }
-
-#ifdef _BIT_LOCKER_
- /* Bitlocker will take over screen UI if enabled */
- FveDisplayScreen = BmFveDisplayScreen;
-#endif
-
- /* Check if any bypass options are enabled */
- BlImgQueryCodeIntegrityBootOptions(&BlpApplicationEntry,
- &DisableIntegrity,
- &TestSigning);
- if (!DisableIntegrity)
- {
- /* Integrity checks are enabled, so validate our signature */
- Status = BmFwVerifySelfIntegrity();
- if (!NT_SUCCESS(Status))
- {
- /* Signature invalid, fail boot */
- goto Failure;
- }
- }
-
-
- /* TEST MODE */
- EfiPrintf(L"Performing memory allocator tests...\r\n");
- {
- NTSTATUS Status;
- PHYSICAL_ADDRESS PhysicalAddress, PhysicalAddress2;
-
- /* Allocate 1 physical page */
- PhysicalAddress.QuadPart = 0;
- Status = BlMmAllocatePhysicalPages(&PhysicalAddress, BlLoaderData, 1, 0, 1);
- if (Status != STATUS_SUCCESS)
- {
- EfiPrintf(L"FAIL: Allocation status: %lx at address: %llx\r\n", Status, PhysicalAddress.QuadPart);
- EfiStall(100000000);
- }
-
- /* Write some data */
- *(PULONG)((ULONG_PTR)PhysicalAddress.QuadPart) = 0x55555151;
-
- /* Free it */
- Status = BlMmFreePhysicalPages(PhysicalAddress);
- if (Status != STATUS_SUCCESS)
- {
- EfiPrintf(L"FAIL: Memory free status: %lx\r\n", Status);
- EfiStall(100000000);
- }
-
- /* Allocate a page again */
- PhysicalAddress2.QuadPart = 0;
- Status = BlMmAllocatePhysicalPages(&PhysicalAddress2, BlLoaderData, 1, 0, 1);
- if (Status != STATUS_SUCCESS)
- {
- EfiPrintf(L"FAIL: Allocation status: %lx at address: %llx\r\n", Status, PhysicalAddress2.QuadPart);
- EfiStall(100000000);
- }
-
- /* It should've given us the same page, since we freed it */
- if (PhysicalAddress.QuadPart != PhysicalAddress2.QuadPart)
- {
- EfiPrintf(L"FAIL: Non-matching addresses: %llx %llx\r\n", PhysicalAddress.QuadPart, PhysicalAddress2.QuadPart);
- EfiStall(100000000);
- }
-
- /* The data should still be there, since zero-ing is not on for bootmgr */
- if (*(PULONG)((ULONG_PTR)PhysicalAddress2.QuadPart) != 0x55555151)
- {
- EfiPrintf(L"FAIL: Non-matching data: %lx %lx\r\n", 0x55555151, *(PULONG)((ULONG_PTR)PhysicalAddress2.QuadPart));
- EfiStall(100000000);
- }
-
- /* And free the second page again */
- Status = BlMmFreePhysicalPages(PhysicalAddress);
- if (Status != STATUS_SUCCESS)
- {
- EfiPrintf(L"FAIL: Memory free status: %lx\r\n", Status);
- EfiStall(100000000);
- }
- }
-
- /* Write out the first XML tag */
- BlXmiWrite(L"");
-
- /* Check for factory reset */
- BlSecureBootCheckForFactoryReset();
-
- /* Load the revocation list */
- Status = BmFwRegisterRevocationList();
- if (!NT_SUCCESS(Status))
- {
- goto Failure;
- }
-
- /* Register our custom progress routine */
- BlUtlRegisterProgressRoutine();
-
- /* Display state is not currently cached */
- BmDisplayStateCached = FALSE;
-
- /* Check if we need to resume from hibernate */
- Status = BmResumeFromHibernate(&ResumeBcdHandle);
- if (!NT_SUCCESS(Status))
- {
- goto Failure;
- }
-
-#ifdef BL_NET_SUPPORT
- /* Register multicast printing routine */
- BlUtlRegisterMulticastRoutine();
-#endif
-
- /* Check if restart on failure is enabled */
- BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_RestartOnFailure,
- &RebootOnError);
-
- /* Check if the boot sequence is persisted */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdBootMgrBoolean_PersistBootSequence,
- &PersistBootSequence);
- if (!NT_SUCCESS(Status))
- {
- /* It usually is */
- PersistBootSequence = TRUE;
- }
-
- /* Check if there's custom actions to take */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdBootMgrBoolean_ProcessCustomActionsFirst,
- &CustomActions);
- if ((NT_SUCCESS(Status)) && (CustomActions))
- {
- /* We don't support this yet */
- EfiPrintf(L"Not implemented\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
- goto Failure;
- }
-
- //BlResourceFindMessage(BM_MSG_TEST);
-
- /* At last, enter the boot selection stage */
- SequenceId = 0;
- GetEntry = FALSE;
- BootFailed = FALSE;
- SequenceList = NULL;
- BootSequence = NULL;
- SequenceCount = 0;
- while (1)
- {
- /* We don't have a boot entry nor a sequence ID */
- BootEntry = NULL;
- BootOk = FALSE;
-
- /* Do we have a hardcoded boot sequence set? */
- if (!(BootSequence) && !(GetEntry))
- {
- /* Not yet, read the BCD to see if one is there */
- Status = BlGetBootOptionGuidList(BlpApplicationEntry.BcdData,
- BcdBootMgrObjectList_BootSequence,
- &SequenceList,
- &SequenceListCount);
- if (NT_SUCCESS(Status))
- {
- /* A GUID list for the boot sequence is set. Extract it */
- Status = BmGetBootSequence(BcdHandle,
- SequenceList,
- SequenceListCount,
- BL_APPLICATION_ENTRY_FIXED_SEQUENCE,
- &BootSequence,
- &SequenceCount);
- if (NT_SUCCESS(Status))
- {
- /* Don't get stuck in a loop repeating this sequence */
- BlRemoveBootOption(BlpApplicationEntry.BcdData,
- BcdBootMgrObjectList_BootSequence);
-
- /* But do check if we should persist it */
- if (PersistBootSequence)
- {
- /* Yes -- so go select an entry now */
- GetEntry = TRUE;
- }
- else
- {
- /* We shouldn't, so wipe it from the BCD too */
- Status = BmPurgeOption(BcdHandle,
- &BmApplicationIdentifier,
- BcdBootMgrObjectList_BootSequence);
- if (!NT_SUCCESS(Status))
- {
- /* Well that failed */
- goto LoopQuickie;
- }
- }
- }
- }
- else
- {
- /* No boot entry sequence for us */
- BootSequence = NULL;
- }
- }
-
- /* Do we have a sequence active, and are we still processing it? */
- if ((BootSequence) && ((GetEntry) || (SequenceId < SequenceCount)))
- {
- /* Extract the next entry in the sequence */
- BootEntry = BootSequence[SequenceId];
- BootSequence[SequenceId] = NULL;
-
- /* Move to the next entry for next time */
- SequenceId++;
-
- /* Unless there won't be a a next time? */
- if (SequenceId == SequenceCount)
- {
- /* Clean up, it's the last entry */
- BlMmFreeHeap(BootSequence);
- BootSequence = NULL;
- }
- }
- else
- {
- /* Get the selected boot entry from the user */
- ExitBootManager = FALSE;
- Status = BmpGetSelectedBootEntry(BcdHandle,
- &BootEntry,
- &BootIndex,
- &ExitBootManager);
- if (!(NT_SUCCESS(Status)) || (ExitBootManager))
- {
- /* Selection failed, or user wants to exit */
- goto LoopQuickie;
- }
- }
-
- /* Did we have a BCD open? */
- if (BcdHandle)
- {
- /* Close it, we'll be opening a new one */
- BmCloseDataStore(BcdHandle);
- BcdHandle = NULL;
- }
-
- /* Launch the selected entry */
- Status = BmpLaunchBootEntry(BootEntry, &BootIndex, 0, TRUE);
- if (NT_SUCCESS(Status))
- {
- /* Boot worked, uncache display and process the bad memory list */
- BmDisplayStateCached = FALSE;
- BmpProcessBadMemory();
- }
- else
- {
- /* Boot failed -- was it user driven? */
- if (Status != STATUS_CANCELLED)
- {
- /* Nope, remember that booting failed */
- BootFailed = TRUE;
- goto LoopQuickie;
- }
-
- /* Yes -- the display is still valid */
- BmDisplayStateCached = TRUE;
- }
-
- /* Reopen the BCD */
- Status = BmOpenDataStore(&BcdHandle);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* Put the BCD options back into our entry */
- BlReplaceBootOptions(&BlpApplicationEntry, EarlyOptions);
-
- /* Update our options one more time */
- Status = BmpUpdateApplicationOptions(BcdHandle);
- if (NT_SUCCESS(Status))
- {
- /* Boot was 100% OK */
- BootOk = TRUE;
- }
-
-LoopQuickie:
- /* Did we have a boot entry? */
- if (BootEntry)
- {
- /* We can destroy it now */
- BlDestroyBootEntry(BootEntry);
- }
-
- /* Is this the success path? */
- if (NT_SUCCESS(Status))
- {
- /* Did we actually boot something? */
- if (!BootOk)
- {
- /* Bope, fail out */
- break;
- }
- }
-
- /* This is the failure path... should we reboot? */
- if (RebootOnError)
- {
- break;
- }
- };
-
-Failure:
- if (!BootFailed)
- {
- /* Check if we got here due to an internal error */
- if (BmpInternalBootError)
- {
- /* If XML is available, display the error */
- if (XmlLoaded)
- {
- //BmDisplayDumpError(0, 0);
- //BmErrorPurge();
- }
-
- /* Don't do a fatal error -- return back to firmware */
- goto Quickie;
- }
- }
-
- /* Log a general fatal error once we're here */
- BmFatalErrorEx(BL_FATAL_ERROR_GENERIC, Status, 0, 0, 0);
-
-Quickie:
- /* Check if we should reboot */
- if ((RebootOnError) ||
- (BlpApplicationEntry.Flags & BL_APPLICATION_ENTRY_REBOOT_ON_ERROR))
- {
- /* Reboot the box */
- BlFwReboot();
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* Return back to the caller with the error argument encoded */
- ReturnArguments = (PVOID)((ULONG_PTR)BootParameters + BootParameters->ReturnArgumentsOffset);
- ReturnArguments->Version = BL_RETURN_ARGUMENTS_VERSION;
- ReturnArguments->Status = Status;
-
- /* Tear down the boot library */
- BlDestroyLibrary();
- }
-
- /* Return back status */
- return Status;
-}
-
diff --git a/boot/environ/app/bootmgr/bootmgr.h b/boot/environ/app/bootmgr/bootmgr.h
deleted file mode 100644
index 80be2b63f80..00000000000
--- a/boot/environ/app/bootmgr/bootmgr.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Manager
- * FILE: boot/environ/app/bootmgr/bootmgr.h
- * PURPOSE: Main Boot Manager Header
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
-*/
-
-#ifndef _BOOTMGR_H
-#define _BOOTMGR_H
-
-/* INCLUDES ******************************************************************/
-
-/* C Headers */
-#include
-#include
-#include
-
-/* NT Base Headers */
-#include
-#include
-
-/* UEFI Headers */
-#include
-
-/* Boot Library Headers */
-#include
-
-/* BCD Headers */
-#include
-
-/* Message Header */
-#include
-
-/* STRUCTURES ****************************************************************/
-
-typedef struct _BL_BOOT_ERROR
-{
- ULONG ErrorCode;
- NTSTATUS ErrorStatus;
- ULONG Unknown1;
- PWCHAR ErrorString;
- PWCHAR FileName;
- ULONG HelpMsgId;
- ULONG Unknown2;
-} BL_BOOT_ERROR, *PBL_BOOT_ERROR;
-
-typedef struct _BL_PACKED_BOOT_ERROR
-{
- PBL_BOOT_ERROR BootError;
- ULONG Unknown;
- ULONG Size;
-} BL_PACKED_BOOT_ERROR, *PBL_PACKED_BOOT_ERROR;
-
-#define BL_FATAL_ERROR_BCD_READ 0x01
-#define BL_FATAL_ERROR_APP_LOAD 0x02
-#define BL_FATAL_ERROR_BCD_ENTRIES 0x03
-#define BL_FATAL_ERROR_GENERIC 0x04
-#define BL_FATAL_ERROR_BCD_PARSE 0x07
-#define BL_FATAL_ERROR_NO_PAE 0x0B
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-NTAPI
-BmMain (
- _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootParameters
- );
-
-NTSTATUS
-BmpLaunchBootEntry (
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
- _Out_ PULONG EntryIndex,
- _In_ ULONG LaunchCode,
- _In_ BOOLEAN LaunchWinRe
- );
-
-#endif
diff --git a/boot/environ/app/bootmgr/bootmgr.rc b/boot/environ/app/bootmgr/bootmgr.rc
deleted file mode 100644
index 0bb85355f14..00000000000
--- a/boot/environ/app/bootmgr/bootmgr.rc
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Manager
- * FILE: boot/environ/app/bootmgr.rc
- * PURPOSE: Boot Manager Resource File
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-#include
-#include
-
-/* Version Data */
-#define VER_FILETYPE VFT_DRV
-#define VER_FILESUBTYPE VFT2_DRV_SYSTEM
-#define VER_FILEDESCRIPTION_STR "Boot Manager"
-#define VER_INTERNALNAME_STR "bootmgr.exe"
-#define VER_ORIGINALFILENAME_STR "bootmgr.exe"
-#define VER_LANGNEUTRAL
-#include "common.ver"
-
-/* Message Table */
-#include
-
-/* XML GUI Stylesheet */
-BOOTMGR.XSL HTML "bootmgr.xsl"
\ No newline at end of file
diff --git a/boot/environ/app/bootmgr/bootmgr.xsl b/boot/environ/app/bootmgr/bootmgr.xsl
deleted file mode 100644
index f87d5e8a8d7..00000000000
Binary files a/boot/environ/app/bootmgr/bootmgr.xsl and /dev/null differ
diff --git a/boot/environ/app/bootmgr/efiemu.c b/boot/environ/app/bootmgr/efiemu.c
deleted file mode 100644
index 3a4f40c91e8..00000000000
--- a/boot/environ/app/bootmgr/efiemu.c
+++ /dev/null
@@ -1,1034 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Manager
- * FILE: boot/environ/app/bootmgr/efiemu.c
- * PURPOSE: UEFI Entrypoint for Boot Manager
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bootmgr.h"
-
-/* DATA STRUCTURES ***********************************************************/
-
-typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK_SCRATCH
-{
- BOOT_APPLICATION_PARAMETER_BLOCK;
- BL_MEMORY_DATA BootMemoryData;
- BL_MEMORY_DESCRIPTOR MemEntry;
- UCHAR AppEntry[788];
-} BOOT_APPLICATION_PARAMETER_BLOCK_SCRATCH;
-
-/* DATA VARIABLES ************************************************************/
-
-BOOT_APPLICATION_PARAMETER_BLOCK_SCRATCH EfiInitScratch;
-
-/* FUNCTIONS *****************************************************************/
-
-/*++
- * @name AhCreateLoadOptionsList
- *
- * The AhCreateLoadOptionsList routine
- *
- * @param CommandLine
- * UEFI Image Handle for the current loaded application.
- *
- * @param BootOptions
- * Pointer to the UEFI System Table.
- *
- * @param MaximumLength
- * Pointer to the UEFI System Table.
- *
- * @param OptionSize
- * Pointer to the UEFI System Table.
- *
- * @param PreviousOption
- * Pointer to the UEFI System Table.
- *
- * @param PreviousOptionSize
- * Pointer to the UEFI System Table.
- *
- * @return None
- *
- *--*/
-NTSTATUS
-AhCreateLoadOptionsList (
- _In_ PWCHAR CommandLine,
- _In_ PBL_BCD_OPTION BootOptions,
- _In_ ULONG MaximumLength,
- _Out_ PULONG OptionSize,
- _In_ PBL_BCD_OPTION* PreviousOption,
- _In_ PULONG PreviousOptionSize
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-/*++
- * @name EfiInitpAppendPathString
- *
- * The EfiInitpAppendPathString routine
- *
- * @param DestinationPath
- * UEFI Image Handle for the current loaded application.
- *
- * @param RemainingSize
- * Pointer to the UEFI System Table.
- *
- * @param AppendPath
- * Pointer to the UEFI System Table.
- *
- * @param AppendLength
- * Pointer to the UEFI System Table.
- *
- * @param BytesAppended
- * Pointer to the UEFI System Table.
- *
- * @return None
- *
- *--*/
-NTSTATUS
-EfiInitpAppendPathString (
- _In_ PWCHAR PathString,
- _In_ ULONG MaximumLength,
- _In_ PWCHAR NewPathString,
- _In_ ULONG NewPathLength,
- _Out_ PULONG ResultLength
- )
-{
- NTSTATUS Status;
- ULONG FinalPathLength;
-
- /* We deal in Unicode, validate the length */
- if (NewPathLength & 1)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Is the new element at least a character? */
- Status = STATUS_SUCCESS;
- if (NewPathLength >= sizeof(WCHAR))
- {
- /* Is the last character already a NULL character? */
- if (NewPathString[(NewPathLength - sizeof(WCHAR)) / sizeof(WCHAR)] ==
- UNICODE_NULL)
- {
- /* Then we won't need to count it */
- NewPathLength -= sizeof(UNICODE_NULL);
- }
-
- /* Was it more than just a NULL character? */
- if (NewPathLength >= sizeof(WCHAR))
- {
- /* Yep -- but does it have a separator? */
- if (*NewPathString == OBJ_NAME_PATH_SEPARATOR)
- {
- /* Skip it, we'll add our own later */
- NewPathString++;
- NewPathLength -= sizeof(OBJ_NAME_PATH_SEPARATOR);
- }
-
- /* Was it more than just a separator? */
- if (NewPathLength >= sizeof(WCHAR))
- {
- /* Yep -- but does it end with a separator? */
- if (NewPathString[(NewPathLength - sizeof(WCHAR)) / sizeof(WCHAR)] ==
- OBJ_NAME_PATH_SEPARATOR)
- {
- /* That's something else we won't need for now */
- NewPathLength -= sizeof(OBJ_NAME_PATH_SEPARATOR);
- }
- }
- }
- }
-
- /* Check if anything needs to be appended after all */
- if (NewPathLength != 0)
- {
- /* We will append the length of the new path element, plus a separator */
- FinalPathLength = NewPathLength + sizeof(OBJ_NAME_PATH_SEPARATOR);
- if (MaximumLength >= FinalPathLength)
- {
- /* Add a separator to the existing path*/
- *PathString = OBJ_NAME_PATH_SEPARATOR;
-
- /* Followed by the new path element */
- RtlCopyMemory(PathString + 1, NewPathString, NewPathLength);
-
- /* Return the number of bytes appended */
- *ResultLength = FinalPathLength;
- }
- else
- {
- /* There's not enough space to do this */
- Status = STATUS_BUFFER_TOO_SMALL;
- }
- }
- else
- {
- /* Nothing to append */
- *ResultLength = 0;
- }
-
- return Status;
-}
-
-/*++
- * @name EfiInitpConvertEfiDevicePath
- *
- * The EfiInitpConvertEfiDevicePath routine
- *
- * @param DevicePath
- * UEFI Image Handle for the current loaded application.
- *
- * @param DeviceType
- * Pointer to the UEFI System Table.
- *
- * @param Option
- * Pointer to the UEFI System Table.
- *
- * @param MaximumLength
- * Pointer to the UEFI System Table.
- *
- * @return None
- *
- *--*/
-NTSTATUS
-EfiInitpConvertEfiFilePath (
- _In_ EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- _In_ ULONG PathType,
- _In_ PBL_BCD_OPTION Option,
- _In_ ULONG MaximumLength
- )
-{
- ULONG BytesAppended, DataSize, StringLength;
- PWCHAR StringEntry, PathString;
- FILEPATH_DEVICE_PATH *FilePath;
- NTSTATUS Status;
-
- /* Make sure we have enough space for the option */
- if (MaximumLength < sizeof(*Option))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Set the initial size of the option, and consume from our buffer */
- DataSize = sizeof(*Option);
- MaximumLength -= sizeof(*Option);
-
- /* Zero out and fill the option header */
- RtlZeroMemory(Option, DataSize);
- Option->Type = PathType;
- Option->DataOffset = sizeof(*Option);
-
- /* Extract the string option */
- StringEntry = (PWCHAR)(Option + 1);
- PathString = StringEntry;
-
- /* Start parsing the device path */
- FilePath = (FILEPATH_DEVICE_PATH*)DevicePath;
- while (IsDevicePathEndType(FilePath) == FALSE)
- {
- /* Is this a file path? */
- if ((FilePath->Header.Type == MEDIA_DEVICE_PATH) &&
- (FilePath->Header.SubType == MEDIA_FILEPATH_DP))
- {
- /* Get the length of the file path string, avoiding overflow */
- StringLength = DevicePathNodeLength(FilePath) -
- FIELD_OFFSET(FILEPATH_DEVICE_PATH, PathName);
- if (StringLength < (ULONG)FIELD_OFFSET(FILEPATH_DEVICE_PATH, PathName))
- {
- Status = STATUS_INTEGER_OVERFLOW;
- goto Quickie;
- }
-
- /* Append this path string to the current path string */
- Status = EfiInitpAppendPathString(PathString,
- MaximumLength,
- FilePath->PathName,
- StringLength,
- &BytesAppended);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Increase the size of the data, consume buffer space */
- DataSize += BytesAppended;
- MaximumLength -= BytesAppended;
-
- /* Move to the next path string */
- PathString = (PWCHAR)((ULONG_PTR)PathString + BytesAppended);
- }
-
- /* Move to the next path node */
- FilePath = (FILEPATH_DEVICE_PATH*)NextDevicePathNode(FilePath);
- }
-
- /* Check if we still have space for a NULL-terminator */
- if (MaximumLength < sizeof(UNICODE_NULL))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* We do -- NULL-terminate the string */
- *PathString = UNICODE_NULL;
- DataSize += sizeof(UNICODE_NULL);
-
- /* Check if all of this has amounted to a single NULL-char */
- if (PathString == StringEntry)
- {
- /* Then this option is empty */
- Option->Empty = TRUE;
- }
-
- /* Set the final size of the option */
- Option->DataSize = DataSize;
-
-Quickie:
- return STATUS_SUCCESS;
-}
-
-/*++
- * @name EfiInitpGetDeviceNode
- *
- * The EfiInitpGetDeviceNode routine
- *
- * @param DevicePath
- * UEFI Image Handle for the current loaded application.
- *
- * @return None
- *
- *--*/
-EFI_DEVICE_PATH_PROTOCOL*
-EfiInitpGetDeviceNode (
- _In_ EFI_DEVICE_PATH_PROTOCOL *DevicePath
- )
-{
- EFI_DEVICE_PATH_PROTOCOL* NextPath;
-
- /* Check if we hit the end terminator */
- if (IsDevicePathEndType(DevicePath))
- {
- return DevicePath;
- }
-
- /* Loop each device path, until we get to the end or to a file path device node */
- for ((NextPath = NextDevicePathNode(DevicePath));
- !(IsDevicePathEndType(NextPath)) && ((NextPath->Type != MEDIA_DEVICE_PATH) ||
- (NextPath->SubType != MEDIA_FILEPATH_DP));
- (NextPath = NextDevicePathNode(NextPath)))
- {
- /* Keep iterating down */
- DevicePath = NextPath;
- }
-
- /* Return the path found */
- return DevicePath;
-}
-
-/*++
- * @name EfiInitTranslateDevicePath
- *
- * The EfiInitTranslateDevicePath routine
- *
- * @param DevicePath
- * UEFI Image Handle for the current loaded application.
- *
- * @param DeviceEntry
- * Pointer to the UEFI System Table.
- *
- * @return None
- *
- *--*/
-NTSTATUS
-EfiInitTranslateDevicePath (
- _In_ EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- _In_ PBL_DEVICE_DESCRIPTOR DeviceEntry
- )
-{
- NTSTATUS Status;
- EFI_DEVICE_PATH_PROTOCOL* DeviceNode;
- MEMMAP_DEVICE_PATH* MemDevicePath;
- ACPI_HID_DEVICE_PATH *AcpiPath;
- HARDDRIVE_DEVICE_PATH *DiskPath;
-
- /* Assume failure */
- Status = STATUS_UNSUCCESSFUL;
-
- /* Set size first */
- DeviceEntry->Size = sizeof(*DeviceEntry);
-
- /* Check if we are booting from a RAM Disk */
- if ((DevicePath->Type == HARDWARE_DEVICE_PATH) &&
- (DevicePath->SubType == HW_MEMMAP_DP))
- {
- /* Get the EFI data structure matching this */
- MemDevicePath = (MEMMAP_DEVICE_PATH*)DevicePath;
-
- /* Set the boot library specific device types */
- DeviceEntry->DeviceType = LocalDevice;
- DeviceEntry->Local.Type = RamDiskDevice;
-
- /* Extract the base, size, and offset */
- DeviceEntry->Local.RamDisk.ImageBase.QuadPart = MemDevicePath->StartingAddress;
- DeviceEntry->Local.RamDisk.ImageSize.QuadPart = MemDevicePath->EndingAddress -
- MemDevicePath->StartingAddress;
- DeviceEntry->Local.RamDisk.ImageOffset = 0;
- return STATUS_SUCCESS;
- }
-
- /* Otherwise, check what kind of device node this is */
- DeviceNode = EfiInitpGetDeviceNode(DevicePath);
- switch (DeviceNode->Type)
- {
- /* ACPI */
- case ACPI_DEVICE_PATH:
-
- /* We only support floppy drives */
- AcpiPath = (ACPI_HID_DEVICE_PATH*)DeviceNode;
- if ((AcpiPath->HID != EISA_PNP_ID(0x604)) &&
- (AcpiPath->HID != EISA_PNP_ID(0x700)))
- {
- return Status;
- }
-
- /* Set the boot library specific device types */
- DeviceEntry->DeviceType = LocalDevice;
- DeviceEntry->Local.Type = FloppyDevice;
-
- /* The ACPI UID is the drive number */
- DeviceEntry->Local.FloppyDisk.DriveNumber = AcpiPath->UID;
- return STATUS_SUCCESS;
-
- /* Network, ATAPI, SCSI, USB */
- case MESSAGING_DEVICE_PATH:
-
- /* Check if it's network */
- if ((DeviceNode->SubType == MSG_MAC_ADDR_DP) ||
- (DeviceNode->SubType == MSG_IPv4_DP))
- {
- /* Set the boot library specific device types */
- DeviceEntry->DeviceType = UdpDevice;
- DeviceEntry->Remote.Unknown = 256;
- return STATUS_SUCCESS;
- }
-
- /* Other types should come in as MEDIA_DEVICE_PATH -- Windows assumes this is a floppy */
- DeviceEntry->DeviceType = DiskDevice;
- DeviceEntry->Local.Type = FloppyDevice;
- DeviceEntry->Local.FloppyDisk.DriveNumber = 0;
- return STATUS_SUCCESS;
-
- /* Disk or CDROM */
- case MEDIA_DEVICE_PATH:
-
- /* Extract the disk path and check if it's a physical disk */
- DiskPath = (HARDDRIVE_DEVICE_PATH*)DeviceNode;
- if (DeviceNode->SubType == MEDIA_HARDDRIVE_DP)
- {
- /* Check if this is an MBR partition */
- if (DiskPath->SignatureType == SIGNATURE_TYPE_MBR)
- {
- /* Set that this is a local partition */
- DeviceEntry->DeviceType = LegacyPartitionDevice;
- DeviceEntry->Partition.Disk.Type = LocalDevice;
-
- DeviceEntry->Partition.Disk.HardDisk.PartitionType = MbrPartition;
- DeviceEntry->Partition.Disk.HardDisk.Mbr.PartitionSignature =
- *(PULONG)&DiskPath->Signature[0];
- DeviceEntry->Partition.Mbr.PartitionNumber = DiskPath->PartitionNumber;
- return STATUS_SUCCESS;
- }
-
- /* Check if it's a GPT partition */
- if (DiskPath->SignatureType == SIGNATURE_TYPE_GUID)
- {
- /* Set that this is a local disk */
- DeviceEntry->DeviceType = PartitionDevice;
- DeviceEntry->Partition.Disk.Type = LocalDevice;
-
- /* Set GPT partition ID */
- DeviceEntry->Partition.Disk.HardDisk.PartitionType = GptPartition;
-
- /* Copy the signature GUID */
- RtlCopyMemory(&DeviceEntry->Partition.Gpt.PartitionGuid,
- DiskPath->Signature,
- sizeof(GUID));
-
- DeviceEntry->Flags |= 4u;
- return STATUS_SUCCESS;
- }
-
- /* Otherwise, raw boot is not supported */
- DeviceEntry->DeviceType = PartitionDevice;
- DeviceEntry->Partition.Disk.Type = LocalDevice;
- DeviceEntry->Partition.Disk.HardDisk.PartitionType = RawPartition;
- DeviceEntry->Partition.Disk.HardDisk.Raw.DiskNumber = 0;
- }
- else if (DeviceNode->SubType == MEDIA_CDROM_DP)
- {
- /* Set the right type for a CDROM */
- DeviceEntry->DeviceType = DiskDevice;
- DeviceEntry->Local.Type = CdRomDevice;
-
- /* Set the drive number to zero */
- DeviceEntry->Local.FloppyDisk.DriveNumber = 0;
- return STATUS_SUCCESS;
- }
-
- /* Fail anything else */
- default:
- break;
- }
-
- /* Return here only on failure */
- return Status;
-}
-
-/*++
- * @name EfiInitpConvertEfiDevicePath
- *
- * The EfiInitpConvertEfiDevicePath routine
- *
- * @param DevicePath
- * UEFI Image Handle for the current loaded application.
- *
- * @param DeviceType
- * Pointer to the UEFI System Table.
- *
- * @param Option
- * Pointer to the UEFI System Table.
- *
- * @param MaximumLength
- * Pointer to the UEFI System Table.
- *
- * @return None
- *
- *--*/
-NTSTATUS
-EfiInitpConvertEfiDevicePath (
- _In_ EFI_DEVICE_PATH_PROTOCOL *DevicePath,
- _In_ ULONG DeviceType,
- _In_ PBL_BCD_OPTION Option,
- _In_ ULONG MaximumLength
- )
-{
- PBCD_DEVICE_OPTION BcdDevice;
- NTSTATUS Status;
-
- /* Make sure we have enough space for the option */
- if (MaximumLength < sizeof(*Option))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Zero out the option */
- RtlZeroMemory(Option, sizeof(*Option));
-
- /* Make sure we have enough space for the device entry */
- if ((MaximumLength - sizeof(*Option)) <
- (ULONG)FIELD_OFFSET(BCD_DEVICE_OPTION, DeviceDescriptor))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Fill it out */
- BcdDevice = (PBCD_DEVICE_OPTION)(Option + 1);
- Status = EfiInitTranslateDevicePath(DevicePath,
- &BcdDevice->DeviceDescriptor);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Fill out the rest of the option structure */
- Option->DataOffset = sizeof(*Option);
- Option->Type = DeviceType;
- Option->DataSize = FIELD_OFFSET(BCD_DEVICE_OPTION, DeviceDescriptor) +
- BcdDevice->DeviceDescriptor.Size;
- Status = STATUS_SUCCESS;
-
-Quickie:
- return Status;
-}
-
-/*++
- * @name EfiInitpCreateApplicationEntry
- *
- * The EfiInitpCreateApplicationEntry routine
- *
- * @param SystemTable
- * UEFI Image Handle for the current loaded application.
- *
- * @param Entry
- * Pointer to the UEFI System Table.
- *
- * @param MaximumLength
- * Pointer to the UEFI System Table.
- *
- * @param DevicePath
- * Pointer to the UEFI System Table.
- *
- * @param FilePath
- * Pointer to the UEFI System Table.
- *
- * @param LoadOptions
- * Pointer to the UEFI System Table.
- *
- * @param LoadOptionsSize
- * Pointer to the UEFI System Table.
- *
- * @param Flags
- * Pointer to the UEFI System Table.
- *
- * @param ResultLength
- * Pointer to the UEFI System Table.
- *
- * @param AppEntryDevice
- * Pointer to the UEFI System Table.
- *
- * @return None
- *
- *--*/
-VOID
-EfiInitpCreateApplicationEntry (
- __in EFI_SYSTEM_TABLE *SystemTable,
- __in PBL_APPLICATION_ENTRY Entry,
- __in ULONG MaximumLength,
- __in EFI_DEVICE_PATH *DevicePath,
- __in EFI_DEVICE_PATH *FilePath,
- __in PWCHAR LoadOptions,
- __in ULONG LoadOptionsSize,
- __in ULONG Flags,
- __out PULONG ResultLength,
- __out PBL_DEVICE_DESCRIPTOR *AppEntryDevice
- )
-{
- PBL_WINDOWS_LOAD_OPTIONS WindowsOptions;
- PWCHAR ObjectString, CommandLine;
- PBL_BCD_OPTION Option, PreviousOption;
- ULONG HeaderSize, TotalOptionSize, Size, CommandLineSize, RemainingSize;
- NTSTATUS Status;
- UNICODE_STRING GuidString;
- GUID ObjectGuid;
- PBCD_DEVICE_OPTION BcdDevice;
- BOOLEAN HaveBinaryOptions, HaveGuid;
- PBL_FILE_PATH_DESCRIPTOR OsPath;
- EFI_DEVICE_PATH *OsDevicePath;
-
- /* Initialize everything */
- TotalOptionSize = 0;
- *AppEntryDevice = NULL;
- HeaderSize = 0;
-
- /* Check if the load options are in binary Windows format */
- WindowsOptions = (PBL_WINDOWS_LOAD_OPTIONS)LoadOptions;
- if ((WindowsOptions != NULL) &&
- (LoadOptionsSize >= sizeof(BL_WINDOWS_LOAD_OPTIONS)) &&
- (WindowsOptions->Length >= sizeof(BL_WINDOWS_LOAD_OPTIONS)) &&
- !(strncmp(WindowsOptions->Signature, "WINDOWS", 7)))
- {
- /* They are, so firmware must have loaded us -- extract arguments */
- CommandLine = WindowsOptions->LoadOptions;
- CommandLineSize = LoadOptionsSize - FIELD_OFFSET(BL_WINDOWS_LOAD_OPTIONS,
- LoadOptions);
-
- /* Remember that we used binary options */
- HaveBinaryOptions = TRUE;
- }
- else
- {
- /* Nope -- so treat them as raw command-line options */
- CommandLine = LoadOptions;
- CommandLineSize = LoadOptionsSize;
-
- /* No binary options */
- HaveBinaryOptions = FALSE;
- }
-
- /* EFI uses UTF-16LE, like NT, so convert to characters */
- CommandLineSize /= sizeof(WCHAR);
- if (CommandLineSize != 0)
- {
- /* And check if the options are not NULL-terminated */
- if (wcsnlen(CommandLine, CommandLineSize) == CommandLineSize)
- {
- /* NULL-terminate them */
- CommandLine[CommandLineSize - 1] = UNICODE_NULL;
- }
- }
-
- /* Begin by making sure we at least have space for the app entry header */
- RemainingSize = MaximumLength;
- if (RemainingSize < sizeof(BL_APPLICATION_ENTRY))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* On exit, return that we've at least consumed this much */
- HeaderSize = FIELD_OFFSET(BL_APPLICATION_ENTRY, BcdData);
-
- /* Zero out the header, and write down the signature */
- RtlZeroMemory(Entry, sizeof(BL_APPLICATION_ENTRY));
- RtlCopyMemory(Entry->Signature, BL_APP_ENTRY_SIGNATURE, 7);
-
- /* Check if a BCD object was passed on the command-line */
- ObjectString = wcsstr(CommandLine, L"BCDOBJECT=");
- if (ObjectString != NULL)
- {
- /* Convert the BCD object to a GUID */
- RtlInitUnicodeString(&GuidString, ObjectString + 10);
- RtlGUIDFromString(&GuidString, &ObjectGuid);
-
- /* Store it in the application entry */
- Entry->Guid = ObjectGuid;
-
- /* Remember one was passed */
- HaveGuid = TRUE;
- }
- else
- {
- /* Remember that no identifier was passed */
- Entry->Flags |= BL_APPLICATION_ENTRY_FLAG_NO_GUID;
- HaveGuid = FALSE;
- }
-
- /* At this point, the header is consumed, and we must now handle BCD options */
- RemainingSize -= FIELD_OFFSET(BL_APPLICATION_ENTRY, BcdData);
-
- /* Convert the device path into a BCD option */
- Status = EfiInitpConvertEfiDevicePath(DevicePath,
- BcdLibraryDevice_ApplicationDevice,
- &Entry->BcdData,
- RemainingSize);
- if (!NT_SUCCESS(Status))
- {
- /* We failed, so mark the option as such and return an empty one */
- Entry->BcdData.Empty = TRUE;
- TotalOptionSize = sizeof(BL_BCD_OPTION);
- goto Quickie;
- }
-
- /* Extract the device descriptor and return it */
- BcdDevice = (PVOID)((ULONG_PTR)&Entry->BcdData + Entry->BcdData.DataOffset);
- *AppEntryDevice = &BcdDevice->DeviceDescriptor;
-
- /* Calculate how big this option was and consume that from the buffer */
- TotalOptionSize = BlGetBootOptionSize(&Entry->BcdData);
- RemainingSize -= TotalOptionSize;
-
- /* Calculate where the next option should go */
- Option = (PVOID)((ULONG_PTR)&Entry->BcdData + TotalOptionSize);
-
- /* Check if we're PXE booting or not */
- if ((*AppEntryDevice)->DeviceType == UdpDevice)
- {
- /* lol */
- Status = STATUS_NOT_IMPLEMENTED;
- }
- else
- {
- /* Convert the local file path into a BCD option */
- Status = EfiInitpConvertEfiFilePath(FilePath,
- BcdLibraryString_ApplicationPath,
- Option,
- RemainingSize);
- }
-
- /* Bail out on failure */
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* The next option is right after this one */
- Entry->BcdData.NextEntryOffset = TotalOptionSize;
-
- /* Now compute the size of the next option, and add to the rolling sum */
- Size = BlGetBootOptionSize(Option);
- TotalOptionSize += Size;
-
- /* Remember the previous option so we can update its next offset */
- PreviousOption = Option;
-
- /* Consume the option from the buffer */
- RemainingSize -= Size;
-
- /* Calculate where the next option should go */
- Option = (PVOID)((ULONG_PTR)Option + Size);
-
- /* Check if we were using binary options without a BCD GUID */
- if ((HaveBinaryOptions) && !(HaveGuid))
- {
- /* Then this means we have to convert the OS paths to BCD too */
- WindowsOptions = (PBL_WINDOWS_LOAD_OPTIONS)LoadOptions;
- OsPath = (PVOID)((ULONG_PTR)WindowsOptions + WindowsOptions->OsPathOffset);
-
- /* IS the OS path in EFI format? */
- if ((OsPath->Length > (ULONG)FIELD_OFFSET(BL_FILE_PATH_DESCRIPTOR, Path)) &&
- (OsPath->PathType == EfiPath))
- {
- /* Convert the device portion */
- OsDevicePath = (EFI_DEVICE_PATH*)OsPath->Path;
- Status = EfiInitpConvertEfiDevicePath(OsDevicePath,
- BcdOSLoaderDevice_OSDevice,
- Option,
- RemainingSize);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Update the offset of the previous option */
- PreviousOption->NextEntryOffset = (ULONG_PTR)Option - (ULONG_PTR)&Entry->BcdData;
-
- /* Now compute the size of the next option, and add to the rolling sum */
- Size = BlGetBootOptionSize(Option);
- TotalOptionSize += Size;
-
- /* Remember the previous option so we can update its next offset */
- PreviousOption = Option;
-
- /* Consume the option from the buffer */
- RemainingSize -= Size;
-
- /* Calculate where the next option should go */
- Option = (PVOID)((ULONG_PTR)Option + Size);
-
- /* Convert the path option */
- Status = EfiInitpConvertEfiFilePath(OsDevicePath,
- BcdOSLoaderString_SystemRoot,
- Option,
- RemainingSize);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Update the offset of the previous option */
- PreviousOption->NextEntryOffset = (ULONG_PTR)Option - (ULONG_PTR)&Entry->BcdData;
-
- /* Now compute the size of the next option, and add to the rolling sum */
- Size = BlGetBootOptionSize(Option);
- TotalOptionSize += Size;
-
- /* Remember the previous option so we can update its next offset */
- PreviousOption = Option;
-
- /* Consume the option from the buffer */
- RemainingSize -= Size;
-
- /* Calculate where the next option should go */
- Option = (PVOID)((ULONG_PTR)Option + Size);
- }
- }
-
- /* Now convert everything else */
- AhCreateLoadOptionsList(CommandLine,
- &Entry->BcdData,
- RemainingSize,
- &TotalOptionSize,
- &PreviousOption,
- &Size);
-
-Quickie:
- /* Return the final size */
- *ResultLength = HeaderSize + TotalOptionSize;
-}
-
-/*++
- * @name EfiInitCreateInputParametersEx
- *
- * The EfiInitCreateInputParametersEx routine converts UEFI entrypoint
- * parameters to the ones expected by Windows Boot Applications
- *
- * @param ImageHandle
- * UEFI Image Handle for the current loaded application.
- *
- * @param SystemTable
- * Pointer to the UEFI System Table.
- *
- * @return A PBOOT_APPLICATION_PARAMETER_BLOCK structure containing the data
- * from UEFI, translated to the Boot Library-compatible format.
- *
- *--*/
-PBOOT_APPLICATION_PARAMETER_BLOCK
-EfiInitCreateInputParametersEx (
- _In_ EFI_HANDLE ImageHandle,
- _In_ EFI_SYSTEM_TABLE *SystemTable
- )
-{
- EFI_BOOT_SERVICES* BootServices;
- EFI_LOADED_IMAGE_PROTOCOL *LoadedImage;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- PBL_FIRMWARE_DESCRIPTOR FirmwareData;
- PBL_RETURN_ARGUMENTS ReturnArguments;
- ULONG FirmwareOffset, ConsumedSize;
- PBL_DEVICE_DESCRIPTOR AppDevice;
- EFI_STATUS Status;
-
- /* Initialize the header with the signature and version */
- EfiInitScratch.Signature[0] = BOOT_APPLICATION_SIGNATURE_1;
- EfiInitScratch.Signature[1] = BOOT_APPLICATION_SIGNATURE_2;
- EfiInitScratch.Version = BOOT_APPLICATION_VERSION;
-
- /* Set the image type to x86 */
- EfiInitScratch.ImageType = EFI_IMAGE_MACHINE_IA32;
-
- /* Set the translation type to physical */
- EfiInitScratch.MemoryTranslationType = BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL;
-
- /* Indicate that the data was converted from EFI */
- BlpApplicationFlags |= BL_APPLICATION_FLAG_CONVERTED_FROM_EFI;
-
- /* Grab the loaded image protocol, which has our base and size */
- BootServices = SystemTable->BootServices;
- Status = BootServices->HandleProtocol(ImageHandle,
- &EfiLoadedImageProtocol,
- (VOID**)&LoadedImage);
- if (Status != EFI_SUCCESS)
- {
- return NULL;
- }
-
- /* Capture it in the boot application parameters */
- EfiInitScratch.ImageBase = (ULONG_PTR)LoadedImage->ImageBase;
- EfiInitScratch.ImageSize = (ULONG)LoadedImage->ImageSize;
-
- /* Now grab our device path protocol, so we can convert the path later on */
- Status = BootServices->HandleProtocol(LoadedImage->DeviceHandle,
- &EfiDevicePathProtocol,
- (VOID**)&DevicePath);
- if (Status != EFI_SUCCESS)
- {
- return NULL;
- }
-
- /* The built-in boot memory data comes right after our block */
- EfiInitScratch.MemoryDataOffset =
- FIELD_OFFSET(BOOT_APPLICATION_PARAMETER_BLOCK_SCRATCH, BootMemoryData);
-
- /* Build the boot memory data structure, with 1 descriptor */
- EfiInitScratch.BootMemoryData.Version = BL_MEMORY_DATA_VERSION;
- EfiInitScratch.BootMemoryData.MdListOffset =
- FIELD_OFFSET(BOOT_APPLICATION_PARAMETER_BLOCK_SCRATCH, MemEntry) -
- EfiInitScratch.MemoryDataOffset;
- EfiInitScratch.BootMemoryData.DescriptorSize = sizeof(BL_MEMORY_DESCRIPTOR);
- EfiInitScratch.BootMemoryData.DescriptorCount = 1;
- EfiInitScratch.BootMemoryData.DescriptorOffset = FIELD_OFFSET(BL_MEMORY_DESCRIPTOR, BasePage);
-
- /* Build the memory entry descriptor for this image itself */
- EfiInitScratch.MemEntry.Flags = BlMemoryWriteBack;
- EfiInitScratch.MemEntry.Type = BlLoaderMemory;
- EfiInitScratch.MemEntry.BasePage = EfiInitScratch.ImageBase >> PAGE_SHIFT;
- EfiInitScratch.MemEntry.PageCount = ALIGN_UP_BY(EfiInitScratch.ImageSize, PAGE_SIZE) >> PAGE_SHIFT;
-
- /* The built-in application entry comes right after the memory descriptor*/
- EfiInitScratch.AppEntryOffset =
- FIELD_OFFSET(BOOT_APPLICATION_PARAMETER_BLOCK_SCRATCH, AppEntry);
-
- /* Go and build it */
- EfiInitpCreateApplicationEntry(SystemTable,
- (PBL_APPLICATION_ENTRY)&EfiInitScratch.AppEntry,
- sizeof(EfiInitScratch.AppEntry),
- DevicePath,
- LoadedImage->FilePath,
- LoadedImage->LoadOptions,
- LoadedImage->LoadOptionsSize,
- EfiInitScratch.MemEntry.PageCount,
- &ConsumedSize,
- &AppDevice);
-
- /* Boot device information comes right after the application entry */
- EfiInitScratch.BootDeviceOffset = ConsumedSize + EfiInitScratch.AppEntryOffset;
-
- /* Check if we have a boot device */
- if (AppDevice != NULL)
- {
- /* We do -- copy it */
- RtlCopyMemory(EfiInitScratch.AppEntry + ConsumedSize,
- AppDevice,
- AppDevice->Size);
-
- /* Firmware data follows right after the boot device entry */
- FirmwareOffset = AppDevice->Size + EfiInitScratch.BootDeviceOffset;
- }
- else
- {
- /* We do not, so zero out the space where a full boot device structure would fit */
- RtlZeroMemory(EfiInitScratch.AppEntry + ConsumedSize,
- sizeof(BL_DEVICE_DESCRIPTOR));
-
- /* And start the firmware data past that */
- FirmwareOffset = EfiInitScratch.BootDeviceOffset + sizeof(BL_DEVICE_DESCRIPTOR);
- }
-
- /* Set the computed firmware data offset */
- EfiInitScratch.FirmwareParametersOffset = FirmwareOffset;
-
- /* Fill out the firmware data that's there */
- FirmwareData = (PVOID)((ULONG_PTR)&EfiInitScratch + EfiInitScratch.FirmwareParametersOffset);
- FirmwareData->Version = BL_FIRMWARE_DESCRIPTOR_VERSION;
- FirmwareData->ImageHandle = ImageHandle;
- FirmwareData->SystemTable = SystemTable;
-
- /* Finally, set the return argument offset */
- EfiInitScratch.ReturnArgumentsOffset = FirmwareOffset + sizeof(BL_FIRMWARE_DESCRIPTOR);
-
- /* And fill out the return argument data */
- ReturnArguments = (PVOID)((ULONG_PTR)&EfiInitScratch + EfiInitScratch.ReturnArgumentsOffset);
- ReturnArguments->Version = BL_RETURN_ARGUMENTS_VERSION;
-
- /* We're done, compute the final size and return the block */
- EfiInitScratch.Size = EfiInitScratch.ReturnArgumentsOffset + sizeof(BL_RETURN_ARGUMENTS);
- return (PBOOT_APPLICATION_PARAMETER_BLOCK)&EfiInitScratch;
-}
-
-/*++
- * @name EfiEntry
- *
- * The EfiEntry routine implements the UEFI entrypoint for the application.
- *
- * @param ImageHandle
- * UEFI Image Handle for the current loaded application.
- *
- * @param SystemTable
- * Pointer to the UEFI System Table.
- *
- * @return EFI_SUCCESS if the image was loaded correctly, relevant error code
- * otherwise.
- *
- *--*/
-EFI_STATUS
-EFIAPI
-EfiEntry (
- _In_ EFI_HANDLE ImageHandle,
- _In_ EFI_SYSTEM_TABLE *SystemTable
- )
-{
- NTSTATUS Status;
- PBOOT_APPLICATION_PARAMETER_BLOCK BootParameters;
-
- /* Convert EFI parameters to Windows Boot Application parameters */
- BootParameters = EfiInitCreateInputParametersEx(ImageHandle, SystemTable);
- if (BootParameters != NULL)
- {
- /* Conversion was good -- call the Boot Manager Entrypoint */
- Status = BmMain(BootParameters);
- }
- else
- {
- /* Conversion failed, bail out */
- Status = STATUS_INVALID_PARAMETER;
- }
-
- /* Convert the NT status code to an EFI code */
- return EfiGetEfiStatusCode(Status);
-}
-
diff --git a/boot/environ/app/rosload/i386/osxfera.s b/boot/environ/app/rosload/i386/osxfera.s
deleted file mode 100644
index 1418f164b35..00000000000
--- a/boot/environ/app/rosload/i386/osxfera.s
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI OS Loader
- * FILE: boot/environ/i386/osxfera.asm
- * PURPOSE: OS Loader i386 Transfer Functions
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include
-#include
-
-EXTERN _OslKernelGdt:FWORD
-EXTERN _OslKernelIdt:FWORD
-
-/* FUNCTIONS ****************************************************************/
-.code
-
-PUBLIC _OslArchTransferToKernel
-_OslArchTransferToKernel:
-
- /* Load new GDT and IDT */
- lgdt _OslKernelGdt+2
- lidt _OslKernelIdt+2
-
- /* Set the Ring 0 DS/ES/SS Segment */
- mov ax, KGDT_R0_DATA
- mov ds, ax
- mov es, ax
- mov ss, ax
- mov gs, ax
-
- /* Get the Ring 0 TSS */
- mov ax, KGDT_TSS
- ltr ax
-
- /* Save loader block and entrypoint */
- mov ecx, [esp+4]
- mov eax, [esp+8]
-
- /* Create initial interrupt frame */
- xor edx, edx
- push ecx
- push edx
- push KGDT_R0_CODE
- push eax
-
- /* Jump to KGDT_R0_CODE:[EAX] */
- retf
-
- /* We should never make it here */
- ret 8
-END
diff --git a/boot/environ/app/rosload/rosload.c b/boot/environ/app/rosload/rosload.c
deleted file mode 100644
index c66b5a78834..00000000000
--- a/boot/environ/app/rosload/rosload.c
+++ /dev/null
@@ -1,1129 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI OS Loader
- * FILE: boot/environ/app/rosload/rosload.c
- * PURPOSE: OS Loader Entrypoint
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "rosload.h"
-
-NTSTATUS
-OslArchTransferToKernel (
- _In_ PLOADER_PARAMETER_BLOCK LoaderBlock,
- _In_ PVOID KernelEntrypoint
- );
-
-/* DATA VARIABLES ************************************************************/
-
-PLOADER_PARAMETER_BLOCK OslLoaderBlock;
-PVOID OslEntryPoint;
-PVOID UserSharedAddress;
-ULONGLONG ArchXCr0BitsToClear;
-ULONGLONG ArchCr4BitsToClear;
-BOOLEAN BdDebugAfterExitBootServices;
-KDESCRIPTOR OslKernelGdt;
-KDESCRIPTOR OslKernelIdt;
-
-ULONG_PTR OslImcHiveHandle;
-ULONG_PTR OslMachineHiveHandle;
-ULONG_PTR OslElamHiveHandle;
-ULONG_PTR OslSystemHiveHandle;
-
-PBL_DEVICE_DESCRIPTOR OslLoadDevice;
-PCHAR OslLoadOptions;
-PWCHAR OslSystemRoot;
-
-LIST_ENTRY OslFreeMemoryDesctiptorsList;
-LIST_ENTRY OslFinalMemoryMap;
-LIST_ENTRY OslCoreExtensionSubGroups[2];
-LIST_ENTRY OslLoadedFirmwareDriverList;
-
-BL_BUFFER_DESCRIPTOR OslFinalMemoryMapDescriptorsBuffer;
-
-GUID OslApplicationIdentifier;
-
-ULONG OslResetBootStatus;
-BOOLEAN OslImcProcessingValid;
-ULONG OslFreeMemoryDesctiptorsListSize;
-PVOID OslMemoryDescriptorBuffer;
-
-BcdObjectType BlpSbdiCurrentApplicationType;
-
-PRTL_BSD_DATA BsdBootStatusData;
-
-OSL_BSD_ITEM_TABLE_ENTRY OslpBootStatusFields[RtlBsdItemMax] =
-{
- {
- FIELD_OFFSET(RTL_BSD_DATA, Version),
- sizeof(&BsdBootStatusData->Version)
- }, // RtlBsdItemVersionNumber
- {
- FIELD_OFFSET(RTL_BSD_DATA, ProductType),
- sizeof(&BsdBootStatusData->ProductType)
- }, // RtlBsdItemProductType
- {
- FIELD_OFFSET(RTL_BSD_DATA, AabEnabled),
- sizeof(&BsdBootStatusData->AabEnabled)
- }, // RtlBsdItemAabEnabled
- {
- FIELD_OFFSET(RTL_BSD_DATA, AabTimeout),
- sizeof(&BsdBootStatusData->AabTimeout)
- }, // RtlBsdItemAabTimeout
- {
- FIELD_OFFSET(RTL_BSD_DATA, LastBootSucceeded),
- sizeof(&BsdBootStatusData->LastBootSucceeded)
- }, // RtlBsdItemBootGood
- {
- FIELD_OFFSET(RTL_BSD_DATA, LastBootShutdown),
- sizeof(&BsdBootStatusData->LastBootShutdown)
- }, // RtlBsdItemBootShutdown
- {
- FIELD_OFFSET(RTL_BSD_DATA, SleepInProgress),
- sizeof(&BsdBootStatusData->SleepInProgress)
- }, // RtlBsdSleepInProgress
- {
- FIELD_OFFSET(RTL_BSD_DATA, PowerTransition),
- sizeof(&BsdBootStatusData->PowerTransition)
- }, // RtlBsdPowerTransition
- {
- FIELD_OFFSET(RTL_BSD_DATA, BootAttemptCount),
- sizeof(&BsdBootStatusData->BootAttemptCount)
- }, // RtlBsdItemBootAttemptCount
- {
- FIELD_OFFSET(RTL_BSD_DATA, LastBootCheckpoint),
- sizeof(&BsdBootStatusData->LastBootCheckpoint)
- }, // RtlBsdItemBootCheckpoint
- {
- FIELD_OFFSET(RTL_BSD_DATA, LastBootId),
- sizeof(&BsdBootStatusData->LastBootId)
- }, // RtlBsdItemBootId
- {
- FIELD_OFFSET(RTL_BSD_DATA, LastSuccessfulShutdownBootId),
- sizeof(&BsdBootStatusData->LastSuccessfulShutdownBootId)
- }, // RtlBsdItemShutdownBootId
- {
- FIELD_OFFSET(RTL_BSD_DATA, LastReportedAbnormalShutdownBootId),
- sizeof(&BsdBootStatusData->LastReportedAbnormalShutdownBootId)
- }, // RtlBsdItemReportedAbnormalShutdownBootId
- {
- FIELD_OFFSET(RTL_BSD_DATA, ErrorInfo),
- sizeof(&BsdBootStatusData->ErrorInfo)
- }, // RtlBsdItemErrorInfo
- {
- FIELD_OFFSET(RTL_BSD_DATA, PowerButtonPressInfo),
- sizeof(&BsdBootStatusData->PowerButtonPressInfo)
- }, // RtlBsdItemPowerButtonPressInfo
- {
- FIELD_OFFSET(RTL_BSD_DATA, Checksum),
- sizeof(&BsdBootStatusData->Checksum)
- }, // RtlBsdItemChecksum
-};
-
-ULONG OslBootAttemptCount;
-ULONG OslBootCountUpdateRequestForAbort;
-ULONG OslBootAttemptMaximum;
-
-ULONG OslBootCountUpdateIncrement;
-
-BOOLEAN OslCurrentBootCheckpoint;
-BOOLEAN OslCurrentBootSucceeded;
-BOOLEAN OslCurrentBootShutdown;
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-OslFatalErrorEx (
- _In_ ULONG ErrorCode,
- _In_ ULONG Parameter1,
- _In_ ULONG_PTR Parameter2,
- _In_ ULONG_PTR Parameter3
- )
-{
- /* For now just do this */
- BlStatusPrint(L"FATAL ERROR IN ROSLOAD: %lx\n", ErrorCode);
-}
-
-VOID
-OslAbortBoot (
- _In_ NTSTATUS Status
- )
-{
- /* For now just do this */
- BlStatusPrint(L"BOOT ABORTED: %lx\n", Status);
-}
-
-NTSTATUS
-OslBlStatusErrorHandler (
- _In_ ULONG ErrorCode,
- _In_ ULONG Parameter1,
- _In_ ULONG_PTR Parameter2,
- _In_ ULONG_PTR Parameter3,
- _In_ ULONG_PTR Parameter4
- )
-{
- /* We only filter error code 4 */
- if (ErrorCode != 4)
- {
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Handle error 4 as a fatal error 3 internally */
- OslFatalErrorEx(3, Parameter1, Parameter2, Parameter3);
- return STATUS_SUCCESS;
-}
-
-VOID
-OslpSanitizeLoadOptionsString (
- _In_ PWCHAR OptionString,
- _In_ PWCHAR SanitizeString
- )
-{
- /* TODO */
- return;
-}
-
-VOID
-OslpSanitizeStringOptions (
- _In_ PBL_BCD_OPTION BcdOptions
- )
-{
- /* TODO */
- return;
-}
-
-NTSTATUS
-OslpRemoveInternalApplicationOptions (
- VOID
- )
-{
- PWCHAR LoadString;
- NTSTATUS Status;
-
- /* Assume success */
- Status = STATUS_SUCCESS;
-
- /* Remove attempts to disable integrity checks or ELAM driver load */
- BlRemoveBootOption(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_DisableIntegrityChecks);
- BlRemoveBootOption(BlpApplicationEntry.BcdData,
- BcdOSLoaderBoolean_DisableElamDrivers);
-
- /* Get the command-line parameters, if any */
- Status = BlGetBootOptionString(BlpApplicationEntry.BcdData,
- BcdLibraryString_LoadOptionsString,
- &LoadString);
- if (NT_SUCCESS(Status))
- {
- /* Conver to upper case */
- _wcsupr(LoadString);
-
- /* Remove the existing one */
- BlRemoveBootOption(BlpApplicationEntry.BcdData,
- BcdLibraryString_LoadOptionsString);
-
- /* Sanitize strings we don't want */
- OslpSanitizeLoadOptionsString(LoadString, L"DISABLE_INTEGRITY_CHECKS");
- OslpSanitizeLoadOptionsString(LoadString, L"NOINTEGRITYCHECKS");
- OslpSanitizeLoadOptionsString(LoadString, L"DISABLEELAMDRIVERS");
-
- /* Add the sanitized one back */
- Status = BlAppendBootOptionString(&BlpApplicationEntry,
- BcdLibraryString_LoadOptionsString,
- LoadString);
-
- /* Free the original BCD one */
- BlMmFreeHeap(LoadString);
- }
-
- /* One more pass for secure-boot options */
- OslpSanitizeStringOptions(BlpApplicationEntry.BcdData);
-
- /* All good */
- return Status;
-}
-
-NTSTATUS
-OslpCheckForcedFailure (
- VOID
- )
-{
- ULONG64 ForceReason;
- NTSTATUS Status;
-
- /* Read the option */
- Status = BlGetBootOptionInteger(BlpApplicationEntry.BcdData,
- BcdOSLoaderInteger_ForceFailure,
- &ForceReason);
- if (NT_SUCCESS(Status) && (ForceReason < 4))
- {
- /* For reasons above 3, don't actually do anything */
- if (ForceReason > 3)
- {
- return STATUS_SUCCESS;
- }
- }
-
- /* If the option isn't there or invalid, always return success */
- return STATUS_SUCCESS;
-}
-
-VOID
-OslpInitializeBootStatusDataLog (
- VOID
- )
-{
- /* TODO */
- return;
-}
-
-NTSTATUS
-OslpReadWriteBootStatusData (
- _In_ BOOLEAN WriteAccess
- )
-{
- /* Are you trying to write? */
- if (WriteAccess)
- {
- /* Have we already read? */
- if (!BsdBootStatusData)
- {
- /* No -- fail */
- return STATUS_UNSUCCESSFUL;
- }
- }
- else if (BsdBootStatusData)
- {
- /* No -- you're trying to read and we already have the data: no-op */
- return STATUS_SUCCESS;
- }
-
- /* TODO */
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-OslpGetSetBootStatusData (
- _In_ BOOLEAN Read,
- _In_ RTL_BSD_ITEM_TYPE DataClass,
- _Out_ PVOID Buffer,
- _Inout_ PULONG Size
- )
-{
- NTSTATUS Status;
- ULONG Length, Offset;
-
- /* No data has been read yet, fail */
- if (!BsdBootStatusData)
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Invalid data item, fail */
- if (DataClass >= RtlBsdItemMax)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Capture the length and offset */
- Length = OslpBootStatusFields[DataClass].Size;
- Offset = OslpBootStatusFields[DataClass].Offset;
-
- /* Make sure it doesn't overflow past the structure we've read */
- if ((Length + Offset) > BsdBootStatusData->Version)
- {
- return STATUS_REVISION_MISMATCH;
- }
-
- /* Make sure we have enough space */
- if (*Size >= Length)
- {
- /* We do -- is this a read? */
- if (Read)
- {
- /* Yes, copy into the caller's buffer */
- RtlCopyMemory(Buffer,
- (PVOID)((ULONG_PTR)BsdBootStatusData + Offset),
- Length);
- }
- else
- {
- /* It's a write, copy from caller's buffer */
- RtlCopyMemory((PVOID)((ULONG_PTR)BsdBootStatusData + Offset),
- Buffer,
- Length);
- }
-
- /* Set success */
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* Return size needed and failure code */
- *Size = Length;
- Status = STATUS_BUFFER_TOO_SMALL;
- }
-
- /* All good */
- return Status;
-}
-
-NTSTATUS
-OslSetBootStatusData (
- _In_ BOOLEAN LastBootGood,
- _In_ BOOLEAN LastBootShutdown,
- _In_ BOOLEAN LastBootCheckpoint,
- _In_ ULONG UpdateIncrement,
- _In_ ULONG BootAttemptCount
- )
-{
- NTSTATUS Status;
- ULONG Size;
-
- /* Capture the BSD data in our globals, if needed */
- Status = OslpReadWriteBootStatusData(FALSE);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Write last boot shutdown */
- Size = sizeof(LastBootShutdown);
- Status = OslpGetSetBootStatusData(FALSE,
- RtlBsdItemBootShutdown,
- &LastBootShutdown,
- &Size);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Write last boot good */
- Size = sizeof(LastBootGood);
- Status = OslpGetSetBootStatusData(FALSE,
- RtlBsdItemBootGood,
- &LastBootGood,
- &Size);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Write last boot checkpoint */
- Size = sizeof(LastBootCheckpoint);
- Status = OslpGetSetBootStatusData(FALSE,
- RtlBsdItemBootCheckpoint,
- &LastBootCheckpoint,
- &Size);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Write boot attempt count */
- Size = sizeof(BootAttemptCount);
- Status = OslpGetSetBootStatusData(FALSE,
- RtlBsdItemBootAttemptCount,
- &BootAttemptCount,
- &Size);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* TODO: Update Boot ID*/
-
- /* Now write the data */
- Status = OslpReadWriteBootStatusData(TRUE);
-
-Quickie:
- return Status;
-}
-
-NTSTATUS
-OslGetBootStatusData (
- _Out_ PBOOLEAN LastBootGood,
- _Out_ PBOOLEAN LastBootShutdown,
- _Out_ PBOOLEAN LastBootCheckpoint,
- _Out_ PULONG LastBootId,
- _Out_ PBOOLEAN BootGood,
- _Out_ PBOOLEAN BootShutdown
- )
-{
- NTSTATUS Status;
- ULONG Size;
- ULONG64 BootStatusPolicy;
- BOOLEAN localBootShutdown, localBootGood;
-
- /* Capture the BSD data in our globals, if needed */
- Status = OslpReadWriteBootStatusData(FALSE);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Read the last boot ID */
- Size = sizeof(*LastBootId);
- Status = OslpGetSetBootStatusData(TRUE, RtlBsdItemBootId, LastBootId, &Size);
- if (!NT_SUCCESS(Status))
- {
- /* Set to zero if we couldn't find it */
- *LastBootId = 0;
- }
-
- /* Get the boot status policy */
- Status = BlGetBootOptionInteger(BlpApplicationEntry.BcdData,
- BcdOSLoaderInteger_BootStatusPolicy,
- &BootStatusPolicy);
- if (!NT_SUCCESS(Status))
- {
- /* Apply a default if none exists */
- BootStatusPolicy = IgnoreShutdownFailures;
- }
-
- /* Check if this was a good shutdown */
- Size = sizeof(localBootShutdown);
- Status = OslpGetSetBootStatusData(TRUE,
- RtlBsdItemBootShutdown,
- &localBootShutdown,
- &Size);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Tell the caller */
- *BootShutdown = localBootShutdown;
-
- /* Check if this was a good boot */
- Size = sizeof(localBootGood);
- Status = OslpGetSetBootStatusData(TRUE,
- RtlBsdItemBootGood,
- &localBootGood,
- &Size);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Tell the caller*/
- *BootGood = localBootGood;
-
- /* TODO: Additional logic for checkpoints and such */
- Status = STATUS_NOT_IMPLEMENTED;
-
-Quickie:
- return Status;
-}
-
-BOOLEAN
-OslpAdvancedOptionsRequested (
- VOID
- )
-{
- /* TODO */
- return FALSE;
-}
-
-NTSTATUS
-OslPrepareTarget (
- _Out_ PULONG ReturnFlags,
- _Out_ PBOOLEAN Jump
- )
-{
- PGUID AppId;
- NTSTATUS Status;
- PBL_DEVICE_DESCRIPTOR OsDevice;
- PWCHAR SystemRoot;
- SIZE_T RootLength, RootLengthWithSep;
- ULONG i;
- ULONG64 StartPerf, EndPerf;
- RTL_BSD_DATA_POWER_TRANSITION PowerTransitionData;
- PRTL_BSD_DATA_POWER_TRANSITION PowerBuffer;
- ULONG OsDeviceHandle;
- BOOLEAN LastBootGood, LastBootShutdown, LastBootCheckpoint;
- ULONG BootId;
- BOOLEAN BootGood, BootShutdown;
- ULONG BsdSize;
-
- /* Initialize locals */
- PowerBuffer = NULL;
-
- /* Assume no flags */
- *ReturnFlags = 0;
-
- /* Make all registry handles invalid */
- OslImcHiveHandle = -1;
- OslMachineHiveHandle = -1;
- OslElamHiveHandle = -1;
- OslSystemHiveHandle = -1;
-
- /* Initialize memory lists */
- InitializeListHead(&OslFreeMemoryDesctiptorsList);
- InitializeListHead(&OslFinalMemoryMap);
- InitializeListHead(&OslLoadedFirmwareDriverList);
- for (i = 0; i < RTL_NUMBER_OF(OslCoreExtensionSubGroups); i++)
- {
- InitializeListHead(&OslCoreExtensionSubGroups[i]);
- }
-
- /* Initialize the memory map descriptor buffer */
- RtlZeroMemory(&OslFinalMemoryMapDescriptorsBuffer,
- sizeof(OslFinalMemoryMapDescriptorsBuffer));
-
- /* Initialize general pointers */
- OslLoadDevice = NULL;
- OslLoadOptions = NULL;
- OslSystemRoot = NULL;
- OslLoaderBlock = NULL;
- OslMemoryDescriptorBuffer = NULL;
-
- /* Initialize general variables */
- OslResetBootStatus = 0;
- OslImcProcessingValid = FALSE;
- OslFreeMemoryDesctiptorsListSize = 0;
-
- /* Capture the current TSC */
- StartPerf = BlArchGetPerformanceCounter();
-
- /* Set our application type for SecureBoot/TPM purposes */
- BlpSbdiCurrentApplicationType.Application.ObjectCode =
- BCD_OBJECT_TYPE_APPLICATION;
- BlpSbdiCurrentApplicationType.Application.ImageCode =
- BCD_IMAGE_TYPE_BOOT_APP;
- BlpSbdiCurrentApplicationType.Application.ApplicationCode =
- BCD_APPLICATION_TYPE_OSLOADER;
- BlpSbdiCurrentApplicationType.Application.Reserved = 0;
-
- /* Register an error handler */
- BlpStatusErrorHandler = OslBlStatusErrorHandler;
-
- /* Get the application identifier and save it */
- AppId = BlGetApplicationIdentifier();
- if (AppId)
- {
- OslApplicationIdentifier = *AppId;
- }
-
- /* Enable tracing */
-#ifdef BL_ETW_SUPPORT
- TraceLoggingRegister(&TlgOslBootProviderProv);
-#endif
-
- /* Remove dangerous BCD options */
- Status = OslpRemoveInternalApplicationOptions();
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
-
- /* Get the OS device */
- Status = BlGetBootOptionDevice(BlpApplicationEntry.BcdData,
- BcdOSLoaderDevice_OSDevice,
- &OsDevice,
- 0);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
-
- /* If the OS device is the boot device, use the one provided by bootlib */
- if (OsDevice->DeviceType == BootDevice)
- {
- OsDevice = BlpBootDevice;
- }
-
- /* Save it as a global for later */
- OslLoadDevice = OsDevice;
-
- /* Get the system root */
- Status = BlGetBootOptionString(BlpApplicationEntry.BcdData,
- BcdOSLoaderString_SystemRoot,
- &SystemRoot);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
-
- EfiPrintf(L"System root: %s\r\n", SystemRoot);
-
- /* Get the system root length and make sure it's slash-terminated */
- RootLength = wcslen(SystemRoot);
- if (SystemRoot[RootLength - 1] == OBJ_NAME_PATH_SEPARATOR)
- {
- /* Perfect, set it */
- OslSystemRoot = SystemRoot;
- }
- else
- {
- /* Allocate a new buffer large enough to contain the slash */
- RootLengthWithSep = RootLength + sizeof(OBJ_NAME_PATH_SEPARATOR);
- OslSystemRoot = BlMmAllocateHeap(RootLengthWithSep * sizeof(WCHAR));
- if (!OslSystemRoot)
- {
- /* Bail out if we're out of memory */
- Status = STATUS_NO_MEMORY;
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
-
- /* Make a copy of the path, adding the separator */
- wcscpy(OslSystemRoot, SystemRoot);
- wcscat(OslSystemRoot, L"\\");
-
- /* Free the original one from the BCD library */
- BlMmFreeHeap(SystemRoot);
- }
-
- /* Initialize access to the BSD */
- OslpInitializeBootStatusDataLog();
-
- /* Check if we're supposed to fail on purpose */
- Status = OslpCheckForcedFailure();
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
-
- /* Always disable VGA mode */
- Status = BlAppendBootOptionBoolean(&BlpApplicationEntry,
- BcdOSLoaderBoolean_DisableVgaMode,
- TRUE);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
-
- /* Get telemetry data from the last boot */
- Status = OslGetBootStatusData(&LastBootGood,
- &LastBootShutdown,
- &LastBootCheckpoint,
- &BootId,
- &BootGood,
- &BootShutdown);
- if (!NT_SUCCESS(Status))
- {
- /* Assume this is the very first boot and everything went well */
- BootId = 0;
- LastBootGood = TRUE;
- LastBootShutdown = TRUE;
- LastBootCheckpoint = TRUE;
- BootGood = TRUE;
- BootShutdown = TRUE;
-
- /* Set 0 boot attempts */
- OslBootAttemptCount = 0;
- }
-
- /* Set more attempt variables to their initial state */
- OslResetBootStatus = TRUE;
- OslBootCountUpdateRequestForAbort = 0;
-
- /* Read the current BSD data into the global buffer */
- Status = OslpReadWriteBootStatusData(FALSE);
- if (NT_SUCCESS(Status))
- {
- /* Get the power transition buffer from the BSD */
- BsdSize = sizeof(PowerTransitionData);
- Status = OslpGetSetBootStatusData(TRUE,
- RtlBsdPowerTransition,
- &PowerTransitionData,
- &BsdSize);
- if (NT_SUCCESS(Status))
- {
- /* Save the buffer */
- PowerBuffer = &PowerTransitionData;
- }
- }
-
- /* Check if this is VHD boot, which gets 3 boot attempts instead of 2 */
- OslBootAttemptMaximum = 2;
- OslBootAttemptMaximum += BlDeviceIsVirtualPartitionDevice(OslLoadDevice, NULL);
-
- /* Check if the user wants to see the advanced menu */
- if (!OslpAdvancedOptionsRequested())
- {
- /* The last boot failed more than the maximum */
- if (!(LastBootGood) &&
- (OslBootAttemptCount >= OslBootAttemptMaximum))
- {
- /* Return failure due to boot -- launch recovery */
- *ReturnFlags |= 8;
-
- /* Update the attempt count and status variables */
- OslBootAttemptCount = OslBootAttemptMaximum - 1;
- OslCurrentBootCheckpoint = LastBootCheckpoint;
- OslCurrentBootSucceeded = FALSE;
- OslCurrentBootShutdown = LastBootShutdown;
-
- /* Crash with code 15 and abort boot */
- OslFatalErrorEx(15, 0, 0, 0);
- Status = STATUS_UNSUCCESSFUL;
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
-
- /* We never made it far enough, more than the maximum */
- if (!(LastBootCheckpoint) &&
- (OslBootAttemptCount >= OslBootAttemptMaximum))
- {
- /* Return crash/dirty shutdown during boot attempt */
- *ReturnFlags |= 0x10;
-
- /* Update the attempt count and status variables */
- OslBootAttemptCount = OslBootAttemptMaximum - 1;
- OslCurrentBootSucceeded = LastBootGood;
- OslCurrentBootShutdown = LastBootShutdown;
- OslCurrentBootCheckpoint = FALSE;
-
- /* Crash with code 16 and abort boot */
- OslFatalErrorEx(16, 0, 0, 0);
- Status = STATUS_UNSUCCESSFUL;
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
-
- /* We failed to shutdown cleanly, and haven't booted yet */
- if (!(LastBootShutdown) && !(OslBootAttemptCount))
- {
- /* Return crash/dirty shutdown */
- *ReturnFlags |= 0x10;
-
- /* There's no boot attempt, so only update shutdown variables */
- OslCurrentBootSucceeded = LastBootGood;
- OslCurrentBootShutdown = TRUE;
- OslCurrentBootCheckpoint = LastBootCheckpoint;
-
- /* Crash with code 16 and abort boot */
- OslFatalErrorEx(16, 0, 0, 0);
- Status = STATUS_UNSUCCESSFUL;
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
- }
-
- /* Officially increment the number of boot attempts */
- OslBootAttemptCount++;
-
- /* No success yet, write to boot status file */
- OslCurrentBootCheckpoint = FALSE;
- OslCurrentBootSucceeded = FALSE;
- OslCurrentBootShutdown = FALSE;
- OslSetBootStatusData(FALSE,
- FALSE,
- FALSE,
- OslBootCountUpdateIncrement,
- OslBootAttemptCount);
-
- /* Open the OS Loader Device for Read/Write access */
- Status = BlpDeviceOpen(OslLoadDevice,
- BL_DEVICE_READ_ACCESS | BL_DEVICE_WRITE_ACCESS,
- 0,
- &OsDeviceHandle);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Fail here: %d\r\n", __LINE__);
- goto Quickie;
- }
-
- /* That's all for now, folks */
- Status = STATUS_NOT_IMPLEMENTED;
- DBG_UNREFERENCED_LOCAL_VARIABLE(PowerBuffer);
-
- /* Printf perf */
- EndPerf = BlArchGetPerformanceCounter();
- EfiPrintf(L"Delta: %lld\r\n", EndPerf - StartPerf);
-
-Quickie:
-#if BL_BITLOCKER_SUPPORT
- /* Destroy the RNG/AES library for BitLocker */
- SymCryptRngAesUninstantiate();
-#endif
-
- /* Abort the boot */
- OslAbortBoot(Status);
-
- /* This is a failure path, so never do the jump */
- *Jump = FALSE;
-
- /* Return error code */
- return Status;
-}
-
-NTSTATUS
-OslFwpKernelSetupPhase1 (
- _In_ PLOADER_PARAMETER_BLOCK LoaderBlock
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-OslArchpKernelSetupPhase0 (
- _In_ PLOADER_PARAMETER_BLOCK LoaderBlock
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-VOID
-ArchRestoreProcessorFeatures (
- VOID
- )
-{
- /* Any XCR0 bits to clear? */
- if (ArchXCr0BitsToClear)
- {
- /* Clear them */
-#if defined(_MSC_VER) && !defined(__clang__) && !defined(_M_ARM)
- __xsetbv(0, __xgetbv(0) & ~ArchXCr0BitsToClear);
-#endif
- ArchXCr0BitsToClear = 0;
- }
-
- /* Any CR4 bits to clear? */
- if (ArchCr4BitsToClear)
- {
- /* Clear them */
-#if !defined(_M_ARM)
- __writecr4(__readcr4() & ~ArchCr4BitsToClear);
-#endif
- ArchCr4BitsToClear = 0;
- }
-}
-
-NTSTATUS
-OslArchKernelSetup (
- _In_ ULONG Phase,
- _In_ PLOADER_PARAMETER_BLOCK LoaderBlock
- )
-{
- /* For phase 0, do architectural setup */
- if (Phase == 0)
- {
- return OslArchpKernelSetupPhase0(LoaderBlock);
- }
-
- /* Nothing to do for Phase 1 */
- if (Phase == 1)
- {
- return STATUS_SUCCESS;
- }
-
- /* Relocate the self map */
- BlMmRelocateSelfMap();
-
- /* Zero out the HAL Heap */
- BlMmZeroVirtualAddressRange((PVOID)MM_HAL_VA_START,
- MM_HAL_VA_END - MM_HAL_VA_START + 1);
-
- /* Move shared user data in its place */
- BlMmMoveVirtualAddressRange((PVOID)KI_USER_SHARED_DATA,
- UserSharedAddress,
- PAGE_SIZE);
-
- /* Clear XCR0/CR4 CPU features that should be disabled before boot */
- ArchRestoreProcessorFeatures();
-
- /* Good to go */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-OslExecuteTransition (
- VOID
- )
-{
- NTSTATUS Status;
-
- /* Is the debugger meant to be kept enabled throughout the boot phase? */
- if (!BdDebugAfterExitBootServices)
- {
-#ifdef BL_KD_SUPPORT
- /* No -- disable it */
- BlBdStop();
-#endif
- }
-
- /* Setup Firmware for Phase 1 */
- Status = OslFwpKernelSetupPhase1(OslLoaderBlock);
- if (NT_SUCCESS(Status))
- {
- /* Setup kernel for Phase 2 */
- Status = OslArchKernelSetup(2, OslLoaderBlock);
- if (NT_SUCCESS(Status))
- {
-#ifdef BL_KD_SUPPORT
- /* Stop the boot debugger */
- BlBdStop();
-#endif
- /* Jump to the kernel entrypoint */
- OslArchTransferToKernel(OslLoaderBlock, OslEntryPoint);
-
- /* Infinite loop if we got here */
- for (;;);
- }
- }
-
- /* Return back with the failure code */
- return Status;
-}
-
-NTSTATUS
-OslpMain (
- _Out_ PULONG ReturnFlags
- )
-{
- NTSTATUS Status;
- BOOLEAN ExecuteJump;
-#if !defined(_M_ARM)
- CPU_INFO CpuInfo;
- BOOLEAN NxEnabled;
- LARGE_INTEGER MiscMsr;
-
- /* Check if the CPU supports NX */
- BlArchCpuId(0x80000001, 0, &CpuInfo);
- if (!(CpuInfo.Edx & 0x10000))
- {
- /* It doesn't, check if this is Intel */
- EfiPrintf(L"NX disabled: %lx\r\n", CpuInfo.Edx);
- if (BlArchGetCpuVendor() == CPU_INTEL)
- {
- /* Then turn off the MSR disable feature for it, enabling NX */
- MiscMsr.QuadPart = __readmsr(MSR_IA32_MISC_ENABLE);
- EfiPrintf(L"NX being turned on: %llx\r\n", MiscMsr.QuadPart);
- MiscMsr.HighPart &= MSR_XD_ENABLE_MASK;
- MiscMsr.QuadPart = __readmsr(MSR_IA32_MISC_ENABLE);
- __writemsr(MSR_IA32_MISC_ENABLE, MiscMsr.QuadPart);
- NxEnabled = TRUE;
- }
- }
-
- /* Turn on NX support with the CPU-generic MSR */
- __writemsr(MSR_EFER, __readmsr(MSR_EFER) | MSR_NXE);
-
-#endif
-
- /* Load the kernel */
- Status = OslPrepareTarget(ReturnFlags, &ExecuteJump);
- if (NT_SUCCESS(Status) && (ExecuteJump))
- {
- /* Jump to the kernel */
- Status = OslExecuteTransition();
- }
-
-#if !defined(_M_ARM)
- /* Retore NX support */
- __writemsr(MSR_EFER, __readmsr(MSR_EFER) ^ MSR_NXE);
-
- /* Did we manually enable NX? */
- if (NxEnabled)
- {
- /* Turn it back off */
- MiscMsr.QuadPart = __readmsr(MSR_IA32_MISC_ENABLE);
- MiscMsr.HighPart |= ~MSR_XD_ENABLE_MASK;
- __writemsr(MSR_IA32_MISC_ENABLE, MiscMsr.QuadPart);
- }
-
-#endif
- /* Go back */
- return Status;
-}
-
-/*++
- * @name OslMain
- *
- * The OslMain function implements the Windows Boot Application entrypoint for
- * the OS Loader.
- *
- * @param BootParameters
- * Pointer to the Boot Application Parameter Block.
- *
- * @return NT_SUCCESS if the image was loaded correctly, relevant error code
- * otherwise.
- *
- *--*/
-NTSTATUS
-NTAPI
-OslMain (
- _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootParameters
- )
-{
- BL_LIBRARY_PARAMETERS LibraryParameters;
- NTSTATUS Status;
- PBL_RETURN_ARGUMENTS ReturnArguments;
- PBL_APPLICATION_ENTRY AppEntry;
- CPU_INFO CpuInfo;
- ULONG Flags;
-
- /* Get the return arguments structure, and set our version */
- ReturnArguments = (PBL_RETURN_ARGUMENTS)((ULONG_PTR)BootParameters +
- BootParameters->ReturnArgumentsOffset);
- ReturnArguments->Version = BL_RETURN_ARGUMENTS_VERSION;
-
- /* Get the application entry, and validate it */
- AppEntry = (PBL_APPLICATION_ENTRY)((ULONG_PTR)BootParameters +
- BootParameters->AppEntryOffset);
- if (!RtlEqualMemory(AppEntry->Signature,
- BL_APP_ENTRY_SIGNATURE,
- sizeof(AppEntry->Signature)))
- {
- /* Unrecognized, bail out */
- Status = STATUS_INVALID_PARAMETER_9;
- goto Quickie;
- }
-
-#if !defined(_M_ARM)
- /* Check if CPUID 01h is supported */
- if (BlArchIsCpuIdFunctionSupported(1))
- {
- /* Query CPU features */
- BlArchCpuId(1, 0, &CpuInfo);
-
- /* Check if PAE is supported */
- if (CpuInfo.Edx & 0x40)
- {
- EfiPrintf(L"PAE Supported, but won't be used\r\n");
- }
- }
-#endif
-
- /* Setup the boot library parameters for this application */
- BlSetupDefaultParameters(&LibraryParameters);
- LibraryParameters.TranslationType = BlVirtual;
- LibraryParameters.LibraryFlags = BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE |
- BL_LIBRARY_FLAG_REINITIALIZE_ALL;
- LibraryParameters.MinimumAllocationCount = 1024;
- LibraryParameters.MinimumHeapSize = 2 * 1024 * 1024;
- LibraryParameters.HeapAllocationAttributes = BlMemoryKernelRange;
- LibraryParameters.FontBaseDirectory = L"\\ReactOS\\Boot\\Fonts";
- LibraryParameters.DescriptorCount = 512;
-
- /* Initialize the boot library */
- Status = BlInitializeLibrary(BootParameters, &LibraryParameters);
- if (NT_SUCCESS(Status))
- {
- /* For testing, draw the logo */
- OslDrawLogo();
-
- /* Call the main routine */
- Status = OslpMain(&Flags);
-
- /* Return the flags, and destroy the boot library */
- ReturnArguments->Flags = Flags;
- BlDestroyLibrary();
- }
-
-Quickie:
- /* Return back to boot manager */
- ReturnArguments->Status = Status;
- return Status;
-}
-
diff --git a/boot/environ/app/rosload/rosload.h b/boot/environ/app/rosload/rosload.h
deleted file mode 100644
index c5cad3a4930..00000000000
--- a/boot/environ/app/rosload/rosload.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI OS Loader
- * FILE: boot/environ/app/rosload/rosload.h
- * PURPOSE: Main OS Loader Header
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
-*/
-
-#ifndef _ROSLOAD_H
-#define _ROSLOAD_H
-
-/* INCLUDES ******************************************************************/
-
-/* C Headers */
-#include
-#include
-#include
-
-/* NT Base Headers */
-#include
-#include
-
-/* UEFI Headers */
-#include
-
-/* Boot Library Headers */
-#include
-
-/* BCD Headers */
-#include
-
-/* ARC Headers */
-#include
-
-/* STRUCTURES ****************************************************************/
-
-typedef struct _OSL_BSD_ITEM_TABLE_ENTRY
-{
- ULONG Offset;
- ULONG Size;
-} OSL_BSD_ITEM_TABLE_ENTRY;
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-NTAPI
-OslDrawLogo (
- VOID
-);
-
-#endif
diff --git a/boot/environ/app/rosload/roslogo.c b/boot/environ/app/rosload/roslogo.c
deleted file mode 100644
index a5a2c01b583..00000000000
--- a/boot/environ/app/rosload/roslogo.c
+++ /dev/null
@@ -1,9828 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI OS Loader
- * FILE: boot/environ/app/rosload/roslogo.c
- * PURPOSE: OS Loader Logo Drawing
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "rosload.h"
-
-/* DATA VARIABLES ************************************************************/
-
-extern PBL_GRAPHICS_CONSOLE DspGraphicalConsole;
-extern EFI_BOOT_SERVICES* EfiBS;
-extern EFI_SYSTEM_TABLE* EfiST;
-UCHAR g_Logo[] =
-{
- 0x42, 0x4D, 0x82, 0x5D, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8A, 0x00, 0x00, 0x00, 0x7C, 0x00,
- 0x00, 0x00, 0xD7, 0x00, 0x00, 0x00, 0xEF, 0x00, 0x00, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xF8, 0x5C, 0x02, 0x00, 0x13, 0x0B, 0x00, 0x00, 0x13, 0x0B, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00, 0x00, 0xFF, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x42, 0x47, 0x52, 0x73, 0x80, 0xC2, 0xF5, 0x28, 0x60, 0xB8,
- 0x1E, 0x15, 0x20, 0x85, 0xEB, 0x01, 0x40, 0x33, 0x33, 0x13, 0x80, 0x66, 0x66, 0x26, 0x40, 0x66,
- 0x66, 0x06, 0xA0, 0x99, 0x99, 0x09, 0x3C, 0x0A, 0xD7, 0x03, 0x24, 0x5C, 0x8F, 0x32, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00,
- 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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,
- 0x20, 0x1E, 0x1B, 0x87, 0x74, 0x59, 0xC4, 0xB7, 0xA2, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x23, 0x21,
- 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, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x20, 0x1E, 0x1B, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F,
- 0x2F, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x4F, 0x3B, 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, 0x4F, 0x3B, 0x20, 0x87, 0x74, 0x59, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x87, 0x74, 0x59,
- 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x20, 0x1E, 0x1B, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x2F, 0x2F, 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, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0x63, 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21, 0x1D, 0x97, 0x8A, 0x75,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x87, 0x74, 0x59, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0xA9, 0xA4, 0x9A,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0xA9, 0xA4, 0x9A,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 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, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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, 0xA9, 0xA4,
- 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x87, 0x74, 0x59, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x20, 0x1E, 0x1B, 0x87,
- 0x74, 0x59, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 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, 0x23,
- 0x21, 0x1D, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC,
- 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, 0xA9, 0xA4, 0x9A, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21, 0x1D,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xCD, 0xCC, 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, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x20, 0x1E, 0x1B, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0xA9, 0xA4, 0x9A,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21,
- 0x1D, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x2F, 0x2F, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x2F, 0x2F, 0x2E, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x4F, 0x3B, 0x20, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0x23, 0x21, 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, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0x87, 0x74, 0x59, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0x97, 0x8A, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x20, 0x1E, 0x1B, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x20, 0x1E, 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, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A,
- 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 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, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC,
- 0xC9, 0x2F, 0x2F, 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, 0x87, 0x74, 0x59, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x66, 0x50, 0x31, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 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, 0x23, 0x21, 0x1D, 0x97,
- 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x4F, 0x3B,
- 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, 0x97, 0x8A, 0x75, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x4F, 0x3B, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x2F, 0x2F, 0x2E, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x66, 0x50, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0xA9,
- 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 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, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0x63, 0x5F, 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, 0x2F, 0x2F, 0x2E, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 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,
- 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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, 0x2F, 0x2F, 0x2E,
- 0xE2, 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x66, 0x50, 0x31, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x4F, 0x3B, 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, 0x2F, 0x2F, 0x2E, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x4F, 0x3B, 0x20, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x66, 0x50, 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, 0x2F, 0x2F, 0x2E, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xCD, 0xCC, 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, 0x20, 0x1E, 0x1B, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0x23, 0x21, 0x1D, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A,
- 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, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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, 0x20, 0x1E, 0x1B, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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,
- 0x2F, 0x2F, 0x2E, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5F, 0x5A, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0x97, 0x8A, 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, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x66,
- 0x50, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 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, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 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, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 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, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x20, 0x1E, 0x1B, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xA9, 0xA4, 0x9A, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x66, 0x50, 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, 0x4F, 0x3B,
- 0x20, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 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, 0x20, 0x1E, 0x1B, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0x2F, 0x2F,
- 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x87, 0x74, 0x59,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xA9,
- 0xA4, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xCD, 0xCC, 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,
- 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 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, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xA9, 0xA4, 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, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x23, 0x21, 0x1D, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x66, 0x50,
- 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, 0x66, 0x50, 0x31, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 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, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0x2F, 0x2F, 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, 0xC4,
- 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 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, 0x87, 0x74, 0x59, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0x63, 0x5F, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x74, 0x59, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 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, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 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, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9,
- 0xA4, 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,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x20, 0x1E, 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, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0x2F, 0x2F, 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, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x2F, 0x2F, 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, 0x2F, 0x2F, 0x2E, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xC4, 0xB7, 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, 0x2F, 0x2F,
- 0x2E, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 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, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 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, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x3B, 0x20, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xA9, 0xA4, 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, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x4F, 0x3B, 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, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4,
- 0xB7, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 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,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87,
- 0x74, 0x59, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 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, 0x87, 0x74, 0x59, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 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, 0x66, 0x50, 0x31, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xC4, 0xB7, 0xA2, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 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, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0x4F, 0x3B, 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, 0x4F, 0x3B, 0x20, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 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,
- 0x66, 0x50, 0x31, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x4F,
- 0x3B, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC,
- 0xC9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0x2F, 0x2F, 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, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 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, 0x23, 0x21, 0x1D, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0x63, 0x5F, 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, 0x63, 0x5F, 0x5A,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4,
- 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 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, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0x63, 0x5F, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 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, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 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, 0x4F, 0x3B, 0x20, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x23, 0x21, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x23, 0x21, 0x1D, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xA9, 0xA4, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 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, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F,
- 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x74, 0x59, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xCD, 0xCC, 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, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 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, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 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, 0x4F, 0x3B, 0x20, 0x87, 0x74, 0x59, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4,
- 0x9A, 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00,
- 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23,
- 0x21, 0x1D, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0x2F, 0x2F,
- 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0x63, 0x5F, 0x5A, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 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, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21, 0x1D, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0x87, 0x74, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 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, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 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, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 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, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 0x5A, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x50, 0x31, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0x97, 0x8A, 0x75, 0x4F, 0x3B, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 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, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4,
- 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, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xCD, 0xCC, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0x4F, 0x3B, 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, 0x4F, 0x3B, 0x20, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66,
- 0x50, 0x31, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0x97, 0x8A, 0x75, 0x4F, 0x3B, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0x87, 0x74, 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, 0x87, 0x74, 0x59, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x8A, 0x75,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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,
- 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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, 0xC4, 0xB7, 0xA2,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87,
- 0x74, 0x59, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 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, 0x63, 0x5F, 0x5A, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0x87, 0x74, 0x59, 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2,
- 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x23, 0x21, 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, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC,
- 0xC9, 0x2F, 0x2F, 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, 0x2F,
- 0x2F, 0x2E, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F,
- 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x3B, 0x20, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 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, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x66, 0x50, 0x31,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5F, 0x5A, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x4F, 0x3B, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCD, 0xCC, 0xC9, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xA9, 0xA4, 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, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x97, 0x8A, 0x75,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x4F, 0x3B, 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, 0x23, 0x21, 0x1D, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 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, 0x97, 0x8A,
- 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x2F, 0x2F,
- 0x2E, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x74, 0x59, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 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, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 0x75, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC4, 0xB7, 0xA2, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x23, 0x21, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x5F, 0x5A, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 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, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x2F, 0x2F, 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, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC, 0xC9, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0x97, 0x8A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x20, 0x1E, 0x1B, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x66, 0x50,
- 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, 0x66, 0x50, 0x31, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 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,
- 0x23, 0x21, 0x1D, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F,
- 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, 0x23, 0x21, 0x1D, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x20,
- 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x87, 0x74, 0x59,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 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, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xC4, 0xB7, 0xA2, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x23, 0x21, 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, 0x23, 0x21, 0x1D, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x20, 0x1E, 0x1B,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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,
- 0x23, 0x21, 0x1D, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x23,
- 0x21, 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, 0x23, 0x21, 0x1D, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x97, 0x8A, 0x75, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x66, 0x50, 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, 0x87, 0x74, 0x59, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x2F, 0x2F, 0x2E, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x2F, 0x2F, 0x2E, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x66, 0x50, 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, 0x66, 0x50, 0x31, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x4F, 0x3B, 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, 0x66, 0x50, 0x31, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 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, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0x66, 0x50, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x2F, 0x2F, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x2F, 0x2F, 0x2E, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 0x75, 0x4F, 0x3B, 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, 0x4F, 0x3B, 0x20, 0xA9,
- 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x4F, 0x3B,
- 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, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x2F, 0x2F, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x23, 0x21, 0x1D, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x4F, 0x3B, 0x20, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x4F, 0x3B, 0x20, 0x87, 0x74,
- 0x59, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0x23, 0x21, 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, 0x2F, 0x2F, 0x2E, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x66, 0x50, 0x31, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x4F, 0x3B, 0x20, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0x63, 0x5F, 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, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A,
- 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x87,
- 0x74, 0x59, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 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, 0x63, 0x5F, 0x5A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x97, 0x8A, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x20, 0x1E, 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, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x87, 0x74, 0x59,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 0x59, 0x20, 0x1E, 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, 0x66, 0x50, 0x31,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x87, 0x74, 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, 0x4F, 0x3B, 0x20, 0x87, 0x74,
- 0x59, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x4F, 0x3B, 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, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x87, 0x74, 0x59,
- 0x23, 0x21, 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,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21,
- 0x1D, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23,
- 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 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,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74,
- 0x59, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x2F, 0x2F, 0x2E, 0x66, 0x50, 0x31, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8,
- 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x2F, 0x2F, 0x2E, 0x4F, 0x3B, 0x20, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23,
- 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59,
- 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xE2, 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE2,
- 0xDB, 0xCC, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63,
- 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0xCD, 0xCC, 0xC9, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x4F, 0x3B, 0x20, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23,
- 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3,
- 0xDA, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x87, 0x74,
- 0x59, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 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,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5,
- 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2,
- 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x87, 0x74, 0x59, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x87, 0x74, 0x59, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xCD, 0xCC, 0xC9, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 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, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7,
- 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC,
- 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x87,
- 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2,
- 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x23,
- 0x21, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD,
- 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x2F, 0x2F,
- 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x63, 0x5F, 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, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9,
- 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD,
- 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD,
- 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2,
- 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97,
- 0x8A, 0x75, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD,
- 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0x87, 0x74, 0x59, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x2F, 0x2F, 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, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23,
- 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 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, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x2F, 0x2F,
- 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD,
- 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 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, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D,
- 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97,
- 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5,
- 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A,
- 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D,
- 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97,
- 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A,
- 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4,
- 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 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, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE2, 0xDB,
- 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xC4, 0xB7, 0xA2, 0x87, 0x74, 0x59,
- 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D,
- 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63,
- 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x23,
- 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB,
- 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 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, 0x2F, 0x2F, 0x2E, 0x23,
- 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x20, 0x1E,
- 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, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xD5,
- 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x20, 0x1E, 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, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5,
- 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE2,
- 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE2, 0xDB, 0xCC, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB,
- 0xCC, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD,
- 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x87, 0x74, 0x59, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 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, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x66, 0x50, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD,
- 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9,
- 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 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, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87,
- 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x66, 0x50, 0x31,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x66, 0x50, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x87, 0x74, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23,
- 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD,
- 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x87, 0x74, 0x59, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xC4, 0xB7,
- 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x4F, 0x3B,
- 0x20, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xD5, 0xC9, 0xB1, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x87, 0x74, 0x59, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21,
- 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB,
- 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xD5,
- 0xC9, 0xB1, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 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, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE2,
- 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x4F, 0x3B, 0x20, 0x2F, 0x2F, 0x2E, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB,
- 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC,
- 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xCD,
- 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xCD,
- 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC,
- 0xC9, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5,
- 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x4F, 0x3B, 0x20, 0x23,
- 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x97, 0x8A, 0x75, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x66, 0x50, 0x31, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x87, 0x74, 0x59, 0x00,
- 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x23, 0x21, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4,
- 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x23,
- 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21, 0x1D, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x23, 0x21, 0x1D,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E,
- 0x1B, 0x23, 0x21, 0x1D, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xD5, 0xC9,
- 0xB1, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x4F,
- 0x3B, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x66, 0x50, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x4F, 0x3B, 0x20, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x87, 0x74, 0x59, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xCD, 0xCC,
- 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63, 0x5F,
- 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97,
- 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xD5, 0xC9, 0xB1, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9,
- 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D,
- 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xCD,
- 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE2,
- 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD,
- 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE2,
- 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2,
- 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC,
- 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9,
- 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9,
- 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1,
- 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB,
- 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD,
- 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC,
- 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x4F, 0x3B, 0x20, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9,
- 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD,
- 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD,
- 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x4F, 0x3B, 0x20, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xE2, 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5,
- 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x87, 0x74, 0x59, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xCD,
- 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 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, 0x4F, 0x3B, 0x20, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9,
- 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 0x75, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 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, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x87, 0x74, 0x59, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB,
- 0xCC, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD,
- 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0xA9, 0xA4, 0x9A, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97,
- 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD,
- 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2,
- 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x87, 0x74,
- 0x59, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 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,
- 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5,
- 0xF4, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x66, 0x50, 0x31, 0x63, 0x5F,
- 0x5A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC,
- 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x87, 0x74,
- 0x59, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xE8,
- 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xD5,
- 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5,
- 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63,
- 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5,
- 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x87, 0x74, 0x59, 0x63,
- 0x5F, 0x5A, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A,
- 0x75, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5,
- 0xF4, 0xF6, 0xF5, 0xF4, 0xD5, 0xC9, 0xB1, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x4F, 0x3B, 0x20, 0x97, 0x8A, 0x75, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63,
- 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x23, 0x21,
- 0x1D, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x66, 0x50, 0x31, 0x63,
- 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F,
- 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66,
- 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x23,
- 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xE2, 0xDB, 0xCC, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A,
- 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63, 0x5F,
- 0x5A, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0xE2,
- 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59,
- 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87,
- 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xCD, 0xCC,
- 0xC9, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A,
- 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D,
- 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97,
- 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x4F, 0x3B, 0x20, 0x63, 0x5F, 0x5A, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x63, 0x5F,
- 0x5A, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63,
- 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x66, 0x50, 0x31, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A,
- 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2,
- 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC,
- 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xC4, 0xB7,
- 0xA2, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20,
- 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 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, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20,
- 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A,
- 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5,
- 0xC9, 0xB1, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0x97, 0x8A, 0x75, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x23,
- 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A,
- 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x23,
- 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0x87, 0x74, 0x59, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xC4, 0xB7,
- 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D,
- 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21, 0x1D, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0x87, 0x74, 0x59, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA,
- 0xC4, 0xB7, 0xA2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x2F,
- 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A,
- 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8,
- 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4,
- 0x9A, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0x66, 0x50, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D,
- 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x21,
- 0x1D, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4,
- 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0x87, 0x74, 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,
- 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x20, 0x1E,
- 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, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0x97, 0x8A, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23,
- 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE2, 0xDB, 0xCC, 0xA9, 0xA4, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 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, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x63, 0x5F, 0x5A, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3,
- 0xDA, 0xC4, 0xB7, 0xA2, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x2F, 0x2F, 0x2E, 0x23, 0x21, 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, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xC4, 0xB7, 0xA2, 0x20, 0x1E, 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, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x23, 0x21,
- 0x1D, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x2F, 0x2F, 0x2E, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5,
- 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xD5, 0xC9, 0xB1, 0x20, 0x1E,
- 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, 0x20, 0x1E,
- 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 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,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x2F, 0x2F, 0x2E, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xC4, 0xB7, 0xA2, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x2F, 0x2F, 0x2E, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xC4, 0xB7, 0xA2, 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x87, 0x74, 0x59, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 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, 0x4F, 0x3B, 0x20, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x2F, 0x2F,
- 0x2E, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x2F, 0x2F, 0x2E, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xA9, 0xA4, 0x9A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x23,
- 0x21, 0x1D, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x4F, 0x3B, 0x20, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x2F, 0x2F, 0x2E, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x2F, 0x2F, 0x2E, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0x97,
- 0x8A, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 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, 0x23, 0x21, 0x1D, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x2F, 0x2F,
- 0x2E, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x2F, 0x2F, 0x2E, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB,
- 0xCC, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x23,
- 0x21, 0x1D, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x23, 0x21, 0x1D, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2,
- 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB,
- 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x2F,
- 0x2F, 0x2E, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1,
- 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0x2F, 0x2F, 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, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 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, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC,
- 0xE2, 0xDB, 0xCC, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5,
- 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x2F, 0x2F, 0x2E, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xA9, 0xA4, 0x9A, 0x20, 0x1E,
- 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F,
- 0x2F, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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,
- 0x4F, 0x3B, 0x20, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9,
- 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xE2, 0xDB, 0xCC,
- 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F,
- 0x5A, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xC4, 0xB7, 0xA2, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xE2,
- 0xDB, 0xCC, 0xC4, 0xB7, 0xA2, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x4F, 0x3B, 0x20, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x66, 0x50, 0x31, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xD5, 0xC9, 0xB1, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F,
- 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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,
- 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A,
- 0x4F, 0x3B, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x23, 0x21,
- 0x1D, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50,
- 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20,
- 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9,
- 0xA4, 0x9A, 0x66, 0x50, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20,
- 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7,
- 0xA2, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x2F, 0x2F, 0x2E,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F,
- 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87,
- 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74,
- 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xC4, 0xB7, 0xA2,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 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,
- 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B,
- 0x20, 0x66, 0x50, 0x31, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59,
- 0x87, 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x2F, 0x2F, 0x2E,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87,
- 0x74, 0x59, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x87, 0x74,
- 0x59, 0x66, 0x50, 0x31, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x4F, 0x3B, 0x20, 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x87, 0x74, 0x59, 0x66, 0x50, 0x31, 0x87, 0x74,
- 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x87, 0x74, 0x59, 0x63, 0x5F, 0x5A, 0x4F, 0x3B, 0x20,
- 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC,
- 0xC9, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x4F, 0x3B, 0x20, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66,
- 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50,
- 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31, 0x66, 0x50, 0x31,
- 0x4F, 0x3B, 0x20, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0xC4,
- 0xB7, 0xA2, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xE2, 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8,
- 0xE3, 0xDA, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4,
- 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9,
- 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 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, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3,
- 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7,
- 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xCD, 0xCC,
- 0xC9, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0xA9, 0xA4, 0x9A, 0xE2, 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4,
- 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xCD, 0xCC,
- 0xC9, 0xE2, 0xDB, 0xCC, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23,
- 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0x63, 0x5F,
- 0x5A, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xE2, 0xDB, 0xCC, 0xF6,
- 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3,
- 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xF6, 0xF5, 0xF4, 0xE2, 0xDB, 0xCC,
- 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x2F, 0x2F,
- 0x2E, 0x97, 0x8A, 0x75, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8, 0xE3, 0xDA,
- 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21,
- 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xF6, 0xF5, 0xF4, 0xE8,
- 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xE2, 0xDB, 0xCC, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23,
- 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xE8, 0xE3, 0xDA, 0xE8, 0xE3, 0xDA, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E,
- 0x1B, 0x23, 0x21, 0x1D, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E,
- 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63,
- 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9,
- 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 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, 0x20,
- 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F,
- 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97,
- 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F,
- 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x87, 0x74, 0x59, 0xA9, 0xA4, 0x9A, 0xA9,
- 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A,
- 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75,
- 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00,
- 0x00, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A,
- 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F,
- 0x2E, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD,
- 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC,
- 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97,
- 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x23, 0x21, 0x1D, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x23,
- 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2,
- 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xC4,
- 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xC4, 0xB7, 0xA2, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F,
- 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4,
- 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xCD, 0xCC, 0xC9, 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9,
- 0xC4, 0xB7, 0xA2, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xCD, 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xCD,
- 0xCC, 0xC9, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0xA9, 0xA4, 0x9A, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F,
- 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21,
- 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F,
- 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x63, 0x5F, 0x5A, 0x63,
- 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A,
- 0x75, 0x63, 0x5F, 0x5A, 0x97, 0x8A, 0x75, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A, 0x63, 0x5F, 0x5A,
- 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x23, 0x21,
- 0x1D, 0x2F, 0x2F, 0x2E, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x23, 0x21, 0x1D, 0x2F, 0x2F, 0x2E, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x23, 0x21, 0x1D, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00,
- 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20,
- 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E,
- 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20,
- 0x1E, 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, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B,
- 0x00, 0x00, 0x00, 0x20, 0x1E, 0x1B, 0x00, 0x00, 0x00, 0x20, 0x1E, 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, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00,
-
-};
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-ConvertBmpToGopBlt (
- IN VOID *BmpImage,
- IN UINTN BmpImageSize,
- IN OUT VOID **GopBlt,
- IN OUT UINTN *GopBltSize,
- OUT UINTN *PixelHeight,
- OUT UINTN *PixelWidth
- )
-{
- UINT8 *Image;
- UINT8 *ImageHeader;
- PBITMAP BmpHeader;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer;
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL *Blt;
- UINT64 BltBufferSize;
- UINTN Height;
- UINTN Width;
- UINTN ImageIndex;
-
- BmpHeader = (BITMAP *)BmpImage;
-
- Image = BmpImage;
- Image = ((UINT8 *)BmpImage) + BmpHeader->BmpHeader.Offset;
- ImageHeader = Image;
-
- BltBufferSize = BmpHeader->DibHeader.Width * BmpHeader->DibHeader.Height;
- BltBufferSize = BltBufferSize * sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL);
-
- *GopBltSize = (UINTN) BltBufferSize;
- *GopBlt = BlMmAllocateHeap (*GopBltSize);
- *PixelWidth = BmpHeader->DibHeader.Width;
- *PixelHeight = BmpHeader->DibHeader.Height;
-
- BltBuffer = *GopBlt;
-
- for (Height = 0; Height < BmpHeader->DibHeader.Height; Height++)
- {
- Blt = &BltBuffer[(BmpHeader->DibHeader.Height - Height - 1) * BmpHeader->DibHeader.Width];
- for (Width = 0; Width < BmpHeader->DibHeader.Width; Width++, Image++, Blt++)
- {
- Blt->Blue = *Image++;
- Blt->Green = *Image++;
- Blt->Red = *Image;
- }
-
- ImageIndex = (UINTN) (Image - ImageHeader);
- if ((ImageIndex % 4) != 0) Image = Image + (4 - (ImageIndex % 4));
- }
-}
-
-VOID
-NTAPI
-OslDrawLogo (
- VOID
- )
-{
- EFI_GRAPHICS_OUTPUT_BLT_PIXEL* GopBlt;
- UINTN GopBltSize, BmpHeight, BmpWidth, CoordinateY, CoordinateX;
- PHYSICAL_ADDRESS GopBltPhys;
- EFI_GRAPHICS_OUTPUT_PROTOCOL* GraphicsOutput;
- EFI_STATUS EfiStatus;
-
- /* Convert ReactOS Logo */
- ConvertBmpToGopBlt(g_Logo,
- sizeof(g_Logo),
- (PVOID*)&GopBlt,
- &GopBltSize,
- &BmpHeight,
- &BmpWidth);
-
- CoordinateX = (DspGraphicalConsole->DisplayMode.HRes / 2) - (BmpWidth / 2);
- CoordinateY = (DspGraphicalConsole->DisplayMode.VRes / 2) - (BmpHeight / 2);
- BlMmTranslateVirtualAddress(GopBlt, &GopBltPhys);
- GopBlt = PhysicalAddressToPtr(GopBltPhys);
-
- /* Make the screen black */
- RtlFillMemory(DspGraphicalConsole->FrameBuffer,
- DspGraphicalConsole->FrameBufferSize,
- 0x00);
-
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
-
- /* Get the UEFI GOP Protocol */
- EfiStatus = EfiBS->HandleProtocol(EfiST->ConsoleOutHandle,
- &EfiGraphicsOutputProtocol,
- (PVOID*)&GraphicsOutput);
- if (EfiStatus== EFI_SUCCESS)
- {
- /* Draw the logo */
- GraphicsOutput->Blt(GraphicsOutput,
- GopBlt,
- EfiBltBufferToVideo,
- 0,
- 0,
- CoordinateX,
- CoordinateY,
- BmpWidth,
- BmpHeight,
- BmpWidth * sizeof(EFI_GRAPHICS_OUTPUT_BLT_PIXEL));
- }
-
- /* Go back to protected mode */
- BlpArchSwitchContext(BlProtectedMode);
-
- /* Display text below the logo */
- EfiPrintf(L"\n\n\n\n\nReactOS UEFI OS Loader Initializing... %lx\r\n",
- EfiStatus);
- EfiStall(1000000);
-
- /* Clear the screen and return */
- BlDisplayClearScreen();
-}
-
diff --git a/boot/environ/include/bcd.h b/boot/environ/include/bcd.h
deleted file mode 100644
index b86389f3968..00000000000
--- a/boot/environ/include/bcd.h
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
-* COPYRIGHT: See COPYING.ARM in the top level directory
-* PROJECT: ReactOS Boot Configuration Data
-* FILE: boot/environ/include/bcd.h
-* PURPOSE: BCD Main Header
-* PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
-*/
-
-#ifndef _BCD_H
-#define _BCD_H
-
-/* ENUMERATIONS **************************************************************/
-
-/* See https://learn.microsoft.com/en-us/previous-versions/windows/desktop/bcd/bcdelementtype */
-
-#define BCD_CLASS_LIBRARY 0x01
-#define BCD_CLASS_APPLICATION 0x02
-#define BCD_CLASS_DEVICE 0x03
-#define BCD_CLASS_OEM 0x05
-
-#define BCD_TYPE_DEVICE 0x01
-#define BCD_TYPE_STRING 0x02
-#define BCD_TYPE_OBJECT 0x03
-#define BCD_TYPE_OBJECT_LIST 0x04
-#define BCD_TYPE_INTEGER 0x05
-#define BCD_TYPE_BOOLEAN 0x06
-#define BCD_TYPE_INTEGER_LIST 0x07
-
-#define BCD_IMAGE_TYPE_FIRMWARE 0x01
-#define BCD_IMAGE_TYPE_BOOT_APP 0x02
-#define BCD_IMAGE_TYPE_NTLDR 0x03
-#define BCD_IMAGE_TYPE_REAL_MODE 0x04
-
-#define BCD_APPLICATION_TYPE_FWBOOTMGR 0x01
-#define BCD_APPLICATION_TYPE_BOOTMGR 0x02
-#define BCD_APPLICATION_TYPE_OSLOADER 0x03
-#define BCD_APPLICATION_TYPE_RESUME 0x04
-#define BCD_APPLICATION_TYPE_MEMDIAG 0x05
-#define BCD_APPLICATION_TYPE_NTLDR 0x06
-#define BCD_APPLICATION_TYPE_SETUPLDR 0x07
-#define BCD_APPLICATION_TYPE_BOOTSECTOR 0x08
-#define BCD_APPLICATION_TYPE_STARTUPCOM 0x09
-
-#define BCD_OBJECT_TYPE_APPLICATION 0x01
-#define BCD_OBJECT_TYPE_INHERIT 0x02
-#define BCD_OBJECT_TYPE_DEVICE 0x03
-
-typedef enum BcdLibraryElementTypes
-{
- BcdLibraryDevice_ApplicationDevice = 0x11000001,
- BcdLibraryString_ApplicationPath = 0x12000002,
- BcdLibraryString_Description = 0x12000004,
- BcdLibraryString_PreferredLocale = 0x12000005,
- BcdLibraryObjectList_InheritedObjects = 0x14000006,
- BcdLibraryInteger_TruncatePhysicalMemory = 0x15000007,
- BcdLibraryObjectList_RecoverySequence = 0x14000008,
- BcdLibraryBoolean_AutoRecoveryEnabled = 0x16000009,
- BcdLibraryIntegerList_BadMemoryList = 0x1700000a,
- BcdLibraryBoolean_AllowBadMemoryAccess = 0x1600000b,
- BcdLibraryInteger_FirstMegabytePolicy = 0x1500000c,
- BcdLibraryInteger_RelocatePhysicalMemory = 0x1500000D,
- BcdLibraryInteger_AvoidLowPhysicalMemory = 0x1500000E,
- BcdLibraryBoolean_DebuggerEnabled = 0x16000010,
- BcdLibraryInteger_DebuggerType = 0x15000011,
- BcdLibraryInteger_SerialDebuggerPortAddress = 0x15000012,
- BcdLibraryInteger_SerialDebuggerPort = 0x15000013,
- BcdLibraryInteger_SerialDebuggerBaudRate = 0x15000014,
- BcdLibraryInteger_1394DebuggerChannel = 0x15000015,
- BcdLibraryString_UsbDebuggerTargetName = 0x12000016,
- BcdLibraryBoolean_DebuggerIgnoreUsermodeExceptions = 0x16000017,
- BcdLibraryInteger_DebuggerStartPolicy = 0x15000018,
- BcdLibraryString_DebuggerBusParameters = 0x12000019,
- BcdLibraryInteger_DebuggerNetHostIP = 0x1500001A,
- BcdLibraryInteger_DebuggerNetPort = 0x1500001B,
- BcdLibraryBoolean_DebuggerNetDhcp = 0x1600001C,
- BcdLibraryString_DebuggerNetKey = 0x1200001D,
- BcdLibraryBoolean_EmsEnabled = 0x16000020,
- BcdLibraryInteger_EmsPort = 0x15000022,
- BcdLibraryInteger_EmsBaudRate = 0x15000023,
- BcdLibraryString_LoadOptionsString = 0x12000030,
- BcdLibraryBoolean_DisplayAdvancedOptions = 0x16000040,
- BcdLibraryBoolean_DisplayOptionsEdit = 0x16000041,
- BcdLibraryDevice_BsdLogDevice = 0x11000043,
- BcdLibraryString_BsdLogPath = 0x12000044,
- BcdLibraryBoolean_PreserveBsdLog = 0x16000045, /* Undocumented */
- BcdLibraryBoolean_GraphicsModeDisabled = 0x16000046,
- BcdLibraryInteger_ConfigAccessPolicy = 0x15000047,
- BcdLibraryBoolean_DisableIntegrityChecks = 0x16000048,
- BcdLibraryBoolean_AllowPrereleaseSignatures = 0x16000049,
- BcdLibraryString_FontPath = 0x1200004A,
- BcdLibraryInteger_SiPolicy = 0x1500004B,
- BcdLibraryInteger_FveBandId = 0x1500004C,
- BcdLibraryBoolean_ConsoleExtendedInput = 0x16000050,
- BcdLibraryInteger_GraphicsResolution = 0x15000052,
- BcdLibraryInteger_DisplayMessage = 0x15000065, /* Undocumented */
- BcdLibraryInteger_DisplayMessageOverride = 0x15000066, /* Undocumented */
- BcdLibraryInteger_UndocumentedMagic = 0x15000075, /* Undocumented magic */
- BcdLibraryBoolean_RestartOnFailure = 0x16000053,
- BcdLibraryBoolean_GraphicsForceHighestMode = 0x16000054,
- BcdLibraryBoolean_IsolatedExecutionContext = 0x16000060,
- BcdLibraryBoolean_BootUxDisable = 0x1600006C,
- BcdLibraryBoolean_BootShutdownDisabled = 0x16000074,
- BcdLibraryIntegerList_AllowedInMemorySettings = 0x17000077,
- BcdLibraryBoolean_ForceFipsCrypto = 0x16000079,
- BcdLibraryBoolean_MobileGraphics = 0x1600007A /* Undocumented */
-} BcdLibraryElementTypes;
-
-typedef enum BcdOSLoaderElementTypes
-{
- BcdOSLoaderDevice_OSDevice = 0x21000001,
- BcdOSLoaderString_SystemRoot = 0x22000002,
- BcdOSLoaderObject_AssociatedResumeObject = 0x23000003,
- BcdOSLoaderBoolean_DetectKernelAndHal = 0x26000010,
- BcdOSLoaderString_KernelPath = 0x22000011,
- BcdOSLoaderString_HalPath = 0x22000012,
- BcdOSLoaderString_DbgTransportPath = 0x22000013,
- BcdOSLoaderInteger_NxPolicy = 0x25000020,
- BcdOSLoaderInteger_PAEPolicy = 0x25000021,
- BcdOSLoaderBoolean_WinPEMode = 0x26000022,
- BcdOSLoaderBoolean_DisableCrashAutoReboot = 0x26000024,
- BcdOSLoaderBoolean_UseLastGoodSettings = 0x26000025,
- BcdOSLoaderBoolean_AllowPrereleaseSignatures = 0x26000027,
- BcdOSLoaderBoolean_NoLowMemory = 0x26000030,
- BcdOSLoaderInteger_RemoveMemory = 0x25000031,
- BcdOSLoaderInteger_IncreaseUserVa = 0x25000032,
- BcdOSLoaderBoolean_UseVgaDriver = 0x26000040,
- BcdOSLoaderBoolean_DisableBootDisplay = 0x26000041,
- BcdOSLoaderBoolean_DisableVesaBios = 0x26000042,
- BcdOSLoaderBoolean_DisableVgaMode = 0x26000043,
- BcdOSLoaderInteger_ClusterModeAddressing = 0x25000050,
- BcdOSLoaderBoolean_UsePhysicalDestination = 0x26000051,
- BcdOSLoaderInteger_RestrictApicCluster = 0x25000052,
- BcdOSLoaderBoolean_UseLegacyApicMode = 0x26000054,
- BcdOSLoaderInteger_X2ApicPolicy = 0x25000055,
- BcdOSLoaderBoolean_UseBootProcessorOnly = 0x26000060,
- BcdOSLoaderInteger_NumberOfProcessors = 0x25000061,
- BcdOSLoaderBoolean_ForceMaximumProcessors = 0x26000062,
- BcdOSLoaderBoolean_ProcessorConfigurationFlags = 0x25000063,
- BcdOSLoaderBoolean_MaximizeGroupsCreated = 0x26000064,
- BcdOSLoaderBoolean_ForceGroupAwareness = 0x26000065,
- BcdOSLoaderInteger_GroupSize = 0x25000066,
- BcdOSLoaderInteger_UseFirmwarePciSettings = 0x26000070,
- BcdOSLoaderInteger_MsiPolicy = 0x25000071,
- BcdOSLoaderInteger_SafeBoot = 0x25000080,
- BcdOSLoaderBoolean_SafeBootAlternateShell = 0x26000081,
- BcdOSLoaderBoolean_BootLogInitialization = 0x26000090,
- BcdOSLoaderBoolean_VerboseObjectLoadMode = 0x26000091,
- BcdOSLoaderBoolean_KernelDebuggerEnabled = 0x260000a0,
- BcdOSLoaderBoolean_DebuggerHalBreakpoint = 0x260000a1,
- BcdOSLoaderBoolean_UsePlatformClock = 0x260000A2,
- BcdOSLoaderBoolean_ForceLegacyPlatform = 0x260000A3,
- BcdOSLoaderInteger_TscSyncPolicy = 0x250000A6,
- BcdOSLoaderBoolean_EmsEnabled = 0x260000B0,
- BcdOSLoaderInteger_ForceFailure = 0x250000C0,
- BcdOSLoaderInteger_DriverLoadFailurePolicy = 0x250000C1,
- BcdOSLoaderInteger_BootMenuPolicy = 0x250000C2,
- BcdOSLoaderBoolean_AdvancedOptionsOneTime = 0x260000C3,
- BcdOSLoaderBoolean_OptionsEditOneTime = 0x260000C4, /* Undocumented */
- BcdOSLoaderInteger_BootStatusPolicy = 0x250000E0,
- BcdOSLoaderBoolean_DisableElamDrivers = 0x260000E1,
- BcdOSLoaderInteger_HypervisorLaunchType = 0x250000F0,
- BcdOSLoaderBoolean_HypervisorDebuggerEnabled = 0x260000F2,
- BcdOSLoaderInteger_HypervisorDebuggerType = 0x250000F3,
- BcdOSLoaderInteger_HypervisorDebuggerPortNumber = 0x250000F4,
- BcdOSLoaderInteger_HypervisorDebuggerBaudrate = 0x250000F5,
- BcdOSLoaderInteger_HypervisorDebugger1394Channel = 0x250000F6,
- BcdOSLoaderInteger_BootUxPolicy = 0x250000F7,
- BcdOSLoaderString_HypervisorDebuggerBusParams = 0x220000F9,
- BcdOSLoaderInteger_HypervisorNumProc = 0x250000FA,
- BcdOSLoaderInteger_HypervisorRootProcPerNode = 0x250000FB,
- BcdOSLoaderBoolean_HypervisorUseLargeVTlb = 0x260000FC,
- BcdOSLoaderInteger_HypervisorDebuggerNetHostIp = 0x250000FD,
- BcdOSLoaderInteger_HypervisorDebuggerNetHostPort = 0x250000FE,
- BcdOSLoaderInteger_TpmBootEntropyPolicy = 0x25000100,
- BcdOSLoaderString_HypervisorDebuggerNetKey = 0x22000110,
- BcdOSLoaderBoolean_HypervisorDebuggerNetDhcp = 0x26000114,
- BcdOSLoaderInteger_HypervisorIommuPolicy = 0x25000115,
- BcdOSLoaderInteger_XSaveDisable = 0x2500012b
-} BcdOSLoaderElementTypes;
-
-typedef enum BcdBootMgrElementTypes
-{
- BcdBootMgrObjectList_DisplayOrder = 0x24000001,
- BcdBootMgrObjectList_BootSequence = 0x24000002,
- BcdBootMgrObject_DefaultObject = 0x23000003,
- BcdBootMgrInteger_Timeout = 0x25000004,
- BcdBootMgrBoolean_AttemptResume = 0x26000005,
- BcdBootMgrObject_ResumeObject = 0x23000006,
- BcdBootMgrObjectList_ToolsDisplayOrder = 0x24000010,
- BcdBootMgrBoolean_DisplayBootMenu = 0x26000020,
- BcdBootMgrBoolean_NoErrorDisplay = 0x26000021,
- BcdBootMgrDevice_BcdDevice = 0x21000022,
- BcdBootMgrString_BcdFilePath = 0x22000023,
- BcdBootMgrBoolean_ProcessCustomActionsFirst = 0x26000028,
- BcdBootMgrIntegerList_CustomActionsList = 0x27000030,
- BcdBootMgrBoolean_PersistBootSequence = 0x26000031
-} BcdBootMgrElementTypes;
-
-typedef enum _BcdResumeElementTypes
-{
- Reserved1 = 0x21000001,
- Reserved2 = 0x22000002,
- BcdResumeBoolean_UseCustomSettings = 0x26000003,
- BcdResumeDevice_AssociatedOsDevice = 0x21000005,
- BcdResumeBoolean_DebugOptionEnabled = 0x26000006,
- BcdResumeInteger_BootMenuPolicy = 0x25000008
-} BcdResumeElementTypes;
-
-typedef enum _BCDE_OSLOADER_TYPE_BOOT_STATUS_POLICY
-{
- DisplayAllFailures,
- IgnoreAllFailures,
- IgnoreShutdownFailures,
- IgnoreBootFailures,
- IgnoreCheckpointFailures,
- DisplayShutdownFailures,
- DisplayBootFailures,
- DisplayCheckpointFailures
-} BCDE_OSLOADER_TYPE_BOOT_STATUS_POLICY;
-
-/* Undocumented */
-typedef enum BcdStartupElementTypes
-{
- BcdStartupBoolean_PxeSoftReboot = 0x26000001,
- BcdStartupString_PxeApplicationName = 0x22000002,
-} BcdStartupElementTypes;
-
-/* DATA STRUCTURES ***********************************************************/
-
-typedef struct
-{
- union
- {
- ULONG PackedValue;
- struct
- {
- ULONG SubType : 24;
- ULONG Format : 4;
- ULONG Class : 4;
- };
- };
-} BcdElementType;
-
-typedef struct
-{
- union
- {
- ULONG PackedValue;
- union
- {
- struct
- {
- ULONG ApplicationCode : 20;
- ULONG ImageCode : 4;
- ULONG Reserved : 4;
- ULONG ObjectCode : 4;
- } Application;
- struct
- {
- ULONG Value : 20;
- ULONG ClassCode : 4;
- ULONG Reserved : 4;
- ULONG ObjectCode : 4;
- } Inherit;
- struct
- {
- ULONG Reserved:28;
- ULONG ObjectCode : 4;
- } Device;
- };
- };
-} BcdObjectType;
-
-typedef struct _BCD_ELEMENT_HEADER
-{
- ULONG Version;
- ULONG Type;
- ULONG Size;
-} BCD_ELEMENT_HEADER, *PBCD_ELEMENT_HEADER;
-
-typedef struct _BCD_PACKED_ELEMENT
-{
- struct _BCD_PACKED_ELEMENT* NextEntry;
- BcdElementType RootType;
- BCD_ELEMENT_HEADER;
- UCHAR Data[ANYSIZE_ARRAY];
-} BCD_PACKED_ELEMENT, *PBCD_PACKED_ELEMENT;
-
-typedef struct _BCD_ELEMENT
-{
- PBCD_ELEMENT_HEADER Header;
- PUCHAR Body;
-} BCD_ELEMENT, *PBCD_ELEMENT;
-
-typedef struct _BCD_DEVICE_OPTION
-{
- GUID AssociatedEntry;
- BL_DEVICE_DESCRIPTOR DeviceDescriptor;
-} BCD_DEVICE_OPTION, *PBCD_DEVICE_OPTION;
-
-typedef struct _BCD_OBJECT_DESCRIPTION
-{
- ULONG Valid;
- ULONG Type;
-} BCD_OBJECT_DESCRIPTION, *PBCD_OBJECT_DESCRIPTION;
-
-/* FUNCTIONS ******************************************************************/
-
-NTSTATUS
-BcdOpenStoreFromFile (
- _In_ PUNICODE_STRING FileName,
- _In_ PHANDLE StoreHandle
- );
-
-#define BCD_ENUMERATE_FLAG_DEEP 0x04
-#define BCD_ENUMERATE_FLAG_DEVICES 0x08
-#define BCD_ENUMERATE_FLAG_IN_ORDER 0x10
-
-NTSTATUS
-BiEnumerateElements (
- _In_ HANDLE BcdHandle,
- _In_ HANDLE ObjectHandle,
- _In_ ULONG RootElementType,
- _In_ ULONG Flags,
- _Out_opt_ PBCD_PACKED_ELEMENT Elements,
- _Inout_ PULONG ElementSize,
- _Out_ PULONG ElementCountNe
- );
-
-NTSTATUS
-BcdOpenObject (
- _In_ HANDLE BcdHandle,
- _In_ PGUID ObjectId,
- _Out_ PHANDLE ObjectHandle
- );
-
-NTSTATUS
-BcdDeleteElement (
- _In_ HANDLE ObjectHandle,
- _In_ ULONG Type
- );
-
-NTSTATUS
-BcdEnumerateAndUnpackElements (
- _In_ HANDLE BcdHandle,
- _In_ HANDLE ObjectHandle,
- _Out_opt_ PBCD_ELEMENT Elements,
- _Inout_ PULONG ElementSize,
- _Out_ PULONG ElementCount
- );
-
-NTSTATUS
-BiGetObjectDescription (
- _In_ HANDLE ObjectHandle,
- _Out_ PBCD_OBJECT_DESCRIPTION Description
- );
-
-#endif
diff --git a/boot/environ/include/bl.h b/boot/environ/include/bl.h
deleted file mode 100644
index e5a338a8b11..00000000000
--- a/boot/environ/include/bl.h
+++ /dev/null
@@ -1,2862 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/include/bl.h
- * PURPOSE: Main Boot Library Header
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-#ifndef _BL_H
-#define _BL_H
-
-/* INCLUDES ******************************************************************/
-
-/* C Headers */
-#include
-#include
-#include
-
-/* NT Base Headers */
-#include
-
-/* NDK Headers */
-#include
-
-/* NT SafeInt Header */
-#include
-
-/* PE Headers */
-#include
-
-/* ACPI Headers */
-#include
-
-/* UEFI Headers */
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-/* Registry Headers */
-#include
-
-/* DEFINES *******************************************************************/
-
-DEFINE_GUID(BadMemoryGuid, 0x54B8275B, 0xD431, 0x473F, 0xAC, 0xFB, 0xE5, 0x36, 0xA0, 0x84, 0x94, 0xA3);
-
-#define BL_APPLICATION_FLAG_CONVERTED_FROM_EFI 0x01
-
-#define BL_APP_ENTRY_SIGNATURE "BTAPENT"
-
-#define BOOT_APPLICATION_SIGNATURE_1 'TOOB'
-#define BOOT_APPLICATION_SIGNATURE_2 ' PPA'
-
-#define BOOT_MEMORY_TRANSLATION_TYPE_PHYSICAL 0
-#define BOOT_MEMORY_TRANSLATION_TYPE_VIRTUAL 1
-
-#define BOOT_APPLICATION_VERSION 2
-#define BL_MEMORY_DATA_VERSION 1
-#define BL_RETURN_ARGUMENTS_VERSION 1
-#define BL_FIRMWARE_DESCRIPTOR_VERSION 2
-
-#define BL_RETURN_ARGUMENTS_NO_PAE_FLAG 0x40
-
-#define BL_APPLICATION_ENTRY_FLAG_NO_GUID 0x01
-#define BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL 0x02
-#define BL_APPLICATION_ENTRY_WINLOAD 0x04
-#define BL_APPLICATION_ENTRY_STARTUP 0x08
-#define BL_APPLICATION_ENTRY_REBOOT_ON_ERROR 0x20
-#define BL_APPLICATION_ENTRY_NTLDR 0x40
-#define BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL 0x80
-#define BL_APPLICATION_ENTRY_WINRESUME 0x100
-#define BL_APPLICATION_ENTRY_SETUPLDR 0x200
-#define BL_APPLICATION_ENTRY_BOOTSECTOR 0x400
-#define BL_APPLICATION_ENTRY_BOOTMGR 0x1000
-#define BL_APPLICATION_ENTRY_DISPLAY_ORDER 0x800000
-#define BL_APPLICATION_ENTRY_FIXED_SEQUENCE 0x20000000
-#define BL_APPLICATION_ENTRY_RECOVERY 0x40000000
-
-#define BL_CONTEXT_PAGING_ON 1
-#define BL_CONTEXT_INTERRUPTS_ON 2
-
-#define BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS 0x01
-#define BL_MM_FLAG_REQUEST_COALESCING 0x02
-
-#define BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG 0x01
-#define BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG 0x02
-#define BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG 0x10
-#define BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG 0x20
-#define BL_MM_ADD_DESCRIPTOR_ALLOCATE_FLAG 0x1000
-#define BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG 0x2000
-
-#define BL_MM_INCLUDE_MAPPED_ALLOCATED 0x01
-#define BL_MM_INCLUDE_MAPPED_UNALLOCATED 0x02
-#define BL_MM_INCLUDE_UNMAPPED_ALLOCATED 0x04
-#define BL_MM_INCLUDE_UNMAPPED_UNALLOCATED 0x08
-#define BL_MM_INCLUDE_RESERVED_ALLOCATED 0x10
-#define BL_MM_INCLUDE_BAD_MEMORY 0x20
-#define BL_MM_INCLUDE_FIRMWARE_MEMORY 0x40
-#define BL_MM_INCLUDE_TRUNCATED_MEMORY 0x80
-#define BL_MM_INCLUDE_PERSISTENT_MEMORY 0x100
-#define BL_MM_INCLUDE_FIRMWARE_MEMORY_2 0x200
-
-#define BL_MM_INCLUDE_NO_FIRMWARE_MEMORY (BL_MM_INCLUDE_PERSISTENT_MEMORY | \
- BL_MM_INCLUDE_TRUNCATED_MEMORY | \
- BL_MM_INCLUDE_BAD_MEMORY | \
- BL_MM_INCLUDE_RESERVED_ALLOCATED | \
- BL_MM_INCLUDE_UNMAPPED_UNALLOCATED | \
- BL_MM_INCLUDE_UNMAPPED_ALLOCATED | \
- BL_MM_INCLUDE_MAPPED_UNALLOCATED | \
- BL_MM_INCLUDE_MAPPED_ALLOCATED)
-C_ASSERT(BL_MM_INCLUDE_NO_FIRMWARE_MEMORY == 0x1BF);
-
-#define BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY (BL_MM_INCLUDE_FIRMWARE_MEMORY_2 | \
- BL_MM_INCLUDE_FIRMWARE_MEMORY)
-C_ASSERT(BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY == 0x240);
-
-#define BL_MM_REQUEST_DEFAULT_TYPE 1
-#define BL_MM_REQUEST_TOP_DOWN_TYPE 2
-
-#define BL_MM_REMOVE_PHYSICAL_REGION_FLAG 0x40000000
-#define BL_MM_REMOVE_VIRTUAL_REGION_FLAG 0x80000000
-
-#define BL_LIBRARY_FLAG_NO_DISPLAY 0x01
-#define BL_LIBRARY_FLAG_REINITIALIZE 0x02
-#define BL_LIBRARY_FLAG_REINITIALIZE_ALL 0x04
-#define BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE 0x10
-#define BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED 0x20
-#define BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE 0x800
-
-#define BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG 0x01
-#define BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG 0x02
-
-#define BL_HT_VALUE_IS_INLINE 0x01
-
-#define BL_FS_REGISTER_AT_HEAD_FLAG 1
-
-#define BL_BLOCK_DEVICE_REMOVABLE_FLAG 0x01
-#define BL_BLOCK_DEVICE_PRESENT_FLAG 0x02
-#define BL_BLOCK_DEVICE_VIRTUAL_FLAG 0x04
-
-#define BL_MEMORY_CLASS_SHIFT 28
-
-#define BL_FILE_READ_ACCESS 0x01
-#define BL_FILE_WRITE_ACCESS 0x02
-#define BL_DIRECTORY_ACCESS 0x04
-#define BL_UNKNOWN_ACCESS 0x10
-
-#define BL_DEVICE_READ_ACCESS 0x01
-#define BL_DEVICE_WRITE_ACCESS 0x02
-
-#define BL_DEVICE_ENTRY_OPENED 0x01
-#define BL_DEVICE_ENTRY_READ_ACCESS 0x02
-#define BL_DEVICE_ENTRY_WRITE_ACCESS 0x04
-
-#define BL_FILE_ENTRY_OPENED 0x01
-#define BL_FILE_ENTRY_READ_ACCESS 0x02
-#define BL_FILE_ENTRY_WRITE_ACCESS 0x04
-#define BL_FILE_ENTRY_UNKNOWN_ACCESS 0x10
-#define BL_FILE_ENTRY_DIRECTORY 0x10000
-
-#define BL_ETFS_FILE_ENTRY_DIRECTORY 0x01
-
-#define BL_IMG_VALID_FILE 0x01
-#define BL_IMG_MEMORY_FILE 0x02
-#define BL_IMG_REMOTE_FILE 0x04
-
-#define BL_LOAD_IMG_VIRTUAL_BUFFER 0x01
-#define BL_LOAD_IMG_EXISTING_BUFFER 0x04
-#define BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG 0x08
-#define BL_LOAD_IMG_COMPUTE_SIGNATURE 0x10
-#define BL_LOAD_IMG_COMPUTE_HASH 0x40000
-
-#define BL_LOAD_PE_IMG_VIRTUAL_BUFFER BL_LOAD_IMG_VIRTUAL_BUFFER
-#define BL_LOAD_PE_IMG_CHECK_MACHINE 0x02
-#define BL_LOAD_PE_IMG_EXISTING_BUFFER BL_LOAD_IMG_EXISTING_BUFFER
-#define BL_LOAD_PE_IMG_COMPUTE_HASH 0x10
-#define BL_LOAD_PE_IMG_CHECK_SUBSYSTEM 0x80
-#define BL_LOAD_PE_IMG_SKIP_RELOCATIONS 0x100
-#define BL_LOAD_PE_IMG_CHECK_FORCED_INTEGRITY 0x200
-#define BL_LOAD_PE_IMG_IGNORE_CHECKSUM_MISMATCH 0x10000
-#define BL_LOAD_PE_IMG_VALIDATE_ORIGINAL_FILENAME 0x400000
-
-#define BL_UTL_CHECKSUM_COMPLEMENT 0x10000
-#define BL_UTL_CHECKSUM_ROTATE 0x20000
-#define BL_UTL_CHECKSUM_NEGATE 0x40000
-#define BL_UTL_CHECKSUM_UCHAR_BUFFER 0x01
-#define BL_UTL_CHECKSUM_USHORT_BUFFER 0x02
-
-/* ENUMERATIONS **************************************************************/
-
-typedef enum _BL_COLOR
-{
- Black,
- Blue,
- Green,
- Cyan,
- Red,
- Magenta,
- Brown,
- LtGray,
- Gray,
- LtBlue,
- LtGreen,
- LtCyan,
- LtRed,
- LtMagenta,
- Yellow,
- White
-} BL_COLOR, *PBL_COLOR;
-
-typedef enum _BL_MENU_POLICY
-{
- MenuPolicyLegacy = 0,
- MenuPolicyStandard = 1
-} BL_MENU_POLICY;
-
-typedef enum _BL_MEMORY_DESCRIPTOR_TYPE
-{
- BlMdPhysical,
- BlMdVirtual,
- BlMdTracker
-} BL_MEMORY_DESCRIPTOR_TYPE;
-
-typedef enum _BL_TRANSLATION_TYPE
-{
- BlNone,
- BlVirtual,
- BlPae,
- BlMax
-} BL_TRANSLATION_TYPE;
-
-typedef enum _BL_ARCH_MODE
-{
- BlProtectedMode,
- BlRealMode
-} BL_ARCH_MODE;
-
-//
-// Boot Device Types
-//
-typedef enum _BL_DEVICE_TYPE
-{
- DiskDevice = 0,
- LegacyPartitionDevice = 2,
- SerialDevice = 3,
- UdpDevice = 4,
- BootDevice = 5,
- PartitionDevice = 6,
- LocateDevice = 8,
-} BL_DEVICE_TYPE;
-
-//
-// Local Device Types
-//
-typedef enum _BL_LOCAL_DEVICE_TYPE
-{
- LocalDevice = 0,
- FloppyDevice = 1,
- CdRomDevice = 2,
- RamDiskDevice = 3,
- FileDevice = 5,
- VirtualDiskDevice = 6
-} BL_LOCAL_DEVICE_TYPE;
-
-//
-// Partition types
-//
-typedef enum _BL_PARTITION_TYPE
-{
- GptPartition,
- MbrPartition,
- RawPartition,
-} BL_PARTITION_TYPE;
-
-//
-// File Path Types
-//
-typedef enum _BL_PATH_TYPE
-{
- InternalPath = 3,
- EfiPath = 4
-} BL_PATH_TYPE;
-
-//
-// Classes of Memory
-//
-typedef enum _BL_MEMORY_CLASS
-{
- BlLoaderClass = 0xD,
- BlApplicationClass,
- BlSystemClass
-} BL_MEMORY_CLASS;
-
-//
-// Types of Memory
-//
-typedef enum _BL_MEMORY_TYPE
-{
- //
- // Loader Memory
- //
- BlLoaderMemory = 0xD0000002,
- BlLoaderDeviceMemory = 0xD0000004,
- BlLoaderHeap = 0xD0000005,
- BlLoaderPageDirectory = 0xD0000006,
- BlLoaderReferencePage = 0xD0000007,
- BlLoaderRamDisk = 0xD0000008,
- BlLoaderArchData = 0xD0000009,
- BlLoaderData = 0xD000000A,
- BlLoaderRegistry = 0xD000000B,
- BlLoaderBlockMemory = 0xD000000C,
- BlLoaderSelfMap = 0xD000000F,
-
- //
- // Application Memory
- //
- BlApplicationReserved = 0xE0000001,
- BlApplicationData = 0xE0000004,
-
- //
- // System Memory
- //
- BlConventionalMemory = 0xF0000001,
- BlUnusableMemory = 0xF0000002,
- BlReservedMemory = 0xF0000003,
- BlEfiBootMemory = 0xF0000004,
- BlConventionalZeroedMemory = 0xF000005,
- BlEfiRuntimeCodeMemory = 0xF0000006,
- BlAcpiReclaimMemory = 0xF0000008,
- BlAcpiNvsMemory = 0xF0000009,
- BlDeviceIoMemory = 0xF000000A,
- BlDevicePortMemory = 0xF000000B,
- BlPalMemory = 0xF000000C,
- BlEfiRuntimeDataMemory = 0xF000000E,
-} BL_MEMORY_TYPE;
-
-typedef enum _BL_MEMORY_ATTR
-{
- //
- // Memory Caching Attributes
- //
- BlMemoryUncached = 0x00000001,
- BlMemoryWriteCombined = 0x00000002,
- BlMemoryWriteThrough = 0x00000004,
- BlMemoryWriteBack = 0x00000008,
- BlMemoryUncachedExported = 0x00000010,
- BlMemoryValidCacheAttributes = BlMemoryUncached | BlMemoryWriteCombined | BlMemoryWriteThrough | BlMemoryWriteBack | BlMemoryUncachedExported,
- BlMemoryValidCacheAttributeMask = 0x000000FF,
-
- //
- // Memory Protection Attributes
- //
- BlMemoryWriteProtected = 0x00000100,
- BlMemoryReadProtected = 0x00000200,
- BlMemoryExecuteProtected = 0x00000400,
- BlMemoryValidProtectionAttributes = BlMemoryWriteProtected | BlMemoryReadProtected | BlMemoryExecuteProtected,
- BlMemoryValidProtectionAttributeMask = 0x0000FF00,
-
- //
- // Memory Allocation Attributes
- //
- BlMemoryLargePages = 0x00010000,
- BlMemoryKernelRange = 0x00020000,
- BlMemoryFixed = 0x00040000,
- BlMemoryBelow1MB = 0x00080000,
- BlMemoryValidAllocationAttributes = BlMemoryKernelRange | BlMemoryFixed | BlMemoryBelow1MB | BlMemoryLargePages,
- BlMemoryValidAllocationAttributeMask = 0x00FF0000,
-
- //
- // Memory Type Attributes
- //
- BlMemoryRuntime = 0x01000000,
- BlMemoryCoalesced = 0x02000000,
- BlMemoryUpdate = 0x04000000,
- BlMemoryNonFirmware = 0x08000000,
- BlMemoryPersistent = 0x10000000,
- BlMemorySpecial = 0x20000000,
- BlMemoryFirmware = 0x80000000,
- BlMemoryValidTypeAttributes = BlMemoryRuntime | BlMemoryCoalesced | BlMemoryUpdate | BlMemoryNonFirmware | BlMemoryPersistent | BlMemorySpecial | BlMemoryFirmware,
- BlMemoryValidTypeAttributeMask = 0xFF000000,
-} BL_MEMORY_ATTR;
-
-/* CALLBACKS *****************************************************************/
-
-struct _BL_FILE_ENTRY;
-struct _BL_FILE_INFORMATION;
-typedef
-NTSTATUS
-(*PBL_FILE_OPEN) (
- _In_ struct _BL_FILE_ENTRY* Directory,
- _In_ PWCHAR FileName,
- _In_ ULONG Flags,
- _Out_ struct _BL_FILE_ENTRY** FileEntry
- );
-
-typedef
-NTSTATUS
-(*PBL_FILE_CLOSE) (
- _In_ struct _BL_FILE_ENTRY* FileEntry
- );
-
-typedef
-NTSTATUS
-(*PBL_FILE_READ) (
- _In_ struct _BL_FILE_ENTRY* FileEntry,
- _In_ PVOID Buffer,
- _In_ ULONG Size,
- _Out_opt_ PULONG BytesRead
- );
-
-typedef
-NTSTATUS
-(*PBL_FILE_WRITE) (
- VOID
- );
-
-typedef
-NTSTATUS
-(*PBL_FILE_GET_NEXT) (
- VOID
- );
-
-typedef
-NTSTATUS
-(*PBL_FILE_GET_INFO) (
- _In_ struct _BL_FILE_ENTRY* FileEntry,
- _Out_ struct _BL_FILE_INFORMATION* FileInfo
- );
-
-typedef
-NTSTATUS
-(*PBL_FILE_SET_INFO) (
- _In_ struct _BL_FILE_ENTRY* FileEntry,
- _In_ struct _BL_FILE_INFORMATION* FileInfo
- );
-
-typedef
-NTSTATUS
-(*PBL_FS_INIT_CALLBACK) (
- VOID
- );
-
-typedef
-NTSTATUS
-(*PBL_FS_DESTROY_CALLBACK) (
- VOID
- );
-
-typedef
-NTSTATUS
-(*PBL_FS_MOUNT_CALLBACK) (
- _In_ ULONG DeviceId,
- _In_ ULONG Unknown,
- _Out_ struct _BL_FILE_ENTRY** FileEntry
- );
-
-typedef
-NTSTATUS
-(*PBL_FS_PURGE_CALLBACK) (
- VOID
- );
-
-typedef
-NTSTATUS
-(*PBL_FILE_DESTROY_CALLBACK) (
- _In_ PVOID Entry
- );
-
-struct _BL_TEXT_CONSOLE;
-struct _BL_DISPLAY_STATE;
-struct _BL_DISPLAY_MODE;
-struct _BL_INPUT_CONSOLE;
-struct _BL_REMOTE_CONSOLE;
-struct _BL_GRAPHICS_CONSOLE;
-typedef
-VOID
-(*PCONSOLE_DESTRUCT) (
- _In_ struct _BL_TEXT_CONSOLE* Console
- );
-
-typedef
-NTSTATUS
-(*PCONSOLE_REINITIALIZE) (
- _In_ struct _BL_TEXT_CONSOLE* Console
- );
-
-typedef
-NTSTATUS
-(*PCONSOLE_GET_TEXT_STATE) (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _Out_ struct _BL_DISPLAY_STATE* TextState
- );
-
-typedef
-NTSTATUS
-(*PCONSOLE_SET_TEXT_STATE) (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ ULONG Flags,
- _In_ struct _BL_DISPLAY_STATE* TextState
- );
-
-typedef
-NTSTATUS
-(*PCONSOLE_GET_TEXT_RESOLUTION) (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _Out_ PULONG TextResolution
- );
-
-typedef
-NTSTATUS
-(*PCONSOLE_SET_TEXT_RESOLUTION) (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ ULONG NewTextResolution,
- _Out_ PULONG OldTextResolution
- );
-
-typedef
-NTSTATUS
-(*PCONSOLE_CLEAR_TEXT) (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ BOOLEAN LineOnly
- );
-
-typedef
-BOOLEAN
-(*PCONSOLE_IS_ENABLED) (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console
- );
-
-typedef
-NTSTATUS
-(*PCONSOLE_GET_GRAPHICAL_RESOLUTION) (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console,
- _Out_ struct _BL_DISPLAY_MODE* DisplayMode
- );
-
-typedef
-NTSTATUS
-(*PCONSOLE_SET_GRAPHICAL_RESOLUTION) (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console,
- _In_ struct _BL_DISPLAY_MODE DisplayMode
- );
-
-typedef
-NTSTATUS
-(*PCONSOLE_ENABLE) (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console,
- _In_ BOOLEAN Enable
-);
-
-typedef
-NTSTATUS
-(*PCONSOLE_WRITE_TEXT) (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ PCHAR Text,
- _In_ ULONG Attribute
- );
-
-typedef
-BOOLEAN
-(*PBL_TBL_LOOKUP_ROUTINE) (
- _In_ PVOID Entry,
- _In_ PVOID Argument1,
- _In_ PVOID Argument2,
- _In_ PVOID Argument3,
- _In_ PVOID Argument4
- );
-
-typedef
-NTSTATUS
-(*PBL_TBL_MAP_ROUTINE) (
- _In_ PVOID Entry,
- _In_ ULONG EntryIndex
- );
-
-typedef
-NTSTATUS
-(*PBL_TBL_SET_ROUTINE) (
- _In_ PVOID Entry
- );
-
-typedef
-NTSTATUS
-(*PBL_IO_DESTROY_ROUTINE) (
- VOID
- );
-
-struct _BL_HASH_ENTRY;
-typedef
-BOOLEAN
-(*PBL_HASH_TABLE_COMPARE_FUNCTION) (
- _In_ struct _BL_HASH_ENTRY* Entry1,
- _In_ struct _BL_HASH_ENTRY* Entry2
- );
-
-typedef
-ULONG
-(*PBL_HASH_TABLE_HASH_FUNCTION) (
- _In_ struct _BL_HASH_ENTRY* Entry,
- _In_ ULONG TableSize
- );
-
-struct _BL_DEVICE_ENTRY;
-struct _BL_DEVICE_DESCRIPTOR;
-struct _BL_DEVICE_INFORMATION;
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_ENUMERATE_DEVICE_CLASS) (
- VOID
- );
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_OPEN) (
- _In_ struct _BL_DEVICE_DESCRIPTOR* Device,
- _In_ struct _BL_DEVICE_ENTRY* DeviceEntry
- );
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_CLOSE) (
- _In_ struct _BL_DEVICE_ENTRY* DeviceEntry
- );
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_READ) (
- _In_ struct _BL_DEVICE_ENTRY* DeviceEntry,
- _In_ PVOID Buffer,
- _In_ ULONG Size,
- _Out_ PULONG BytesRead
- );
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_WRITE) (
- VOID
- );
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_GET_INFORMATION) (
- _In_ struct _BL_DEVICE_ENTRY* DeviceEntry,
- _Out_ struct _BL_DEVICE_INFORMATION* DeviceInformation
- );
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_SET_INFORMATION) (
- _In_ struct _BL_DEVICE_ENTRY* DeviceEntry,
- _In_ struct _BL_DEVICE_INFORMATION* DeviceInformation
- );
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_RESET) (
- VOID
- );
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_FLUSH) (
- VOID
- );
-
-typedef
-NTSTATUS
-(*PBL_DEVICE_CREATE) (
- VOID
- );
-
-typedef VOID
-(*PBL_MM_FLUSH_TLB) (
- VOID
- );
-
-typedef VOID
-(*PBL_MM_RELOCATE_SELF_MAP) (
- VOID
- );
-
-typedef NTSTATUS
-(*PBL_MM_MOVE_VIRTUAL_ADDRESS_RANGE) (
- _In_ PVOID DestinationAddress,
- _In_ PVOID SourceAddress,
- _In_ ULONGLONG Size
- );
-
-typedef NTSTATUS
-(*PBL_MM_ZERO_VIRTUAL_ADDRESS_RANGE) (
- _In_ PVOID DestinationAddress,
- _In_ ULONGLONG Size
- );
-
-typedef VOID
-(*PBL_MM_DESTROY_SELF_MAP) (
- VOID
- );
-
-typedef VOID
-(*PBL_MM_FLUSH_TLB_ENTRY) (
- _In_ PVOID VirtualAddress
- );
-
-typedef VOID
-(*PBL_MM_FLUSH_TLB) (
- VOID
- );
-
-typedef NTSTATUS
-(*PBL_MM_UNMAP_VIRTUAL_ADDRESS) (
- _In_ PVOID VirtualAddress,
- _In_ ULONG Size
- );
-
-typedef NTSTATUS
-(*PBL_MM_REMAP_VIRTUAL_ADDRESS) (
- _In_ PPHYSICAL_ADDRESS PhysicalAddress,
- _Out_ PVOID VirtualAddress,
- _In_ ULONG Size,
- _In_ ULONG CacheAttributes
- );
-
-typedef NTSTATUS
-(*PBL_MM_MAP_PHYSICAL_ADDRESS) (
- _In_ PHYSICAL_ADDRESS PhysicalAddress,
- _Out_ PVOID VirtualAddress,
- _In_ ULONG Size,
- _In_ ULONG CacheAttributes
- );
-
-typedef BOOLEAN
-(*PBL_MM_TRANSLATE_VIRTUAL_ADDRESS) (
- _In_ PVOID VirtualAddress,
- _Out_ PPHYSICAL_ADDRESS PhysicalAddress,
- _Out_opt_ PULONG CacheAttributes
- );
-
-typedef NTSTATUS
-(*PBL_STATUS_ERROR_HANDLER) (
- _In_ ULONG ErrorCode,
- _In_ ULONG Parameter1,
- _In_ ULONG_PTR Parameter2,
- _In_ ULONG_PTR Parameter3,
- _In_ ULONG_PTR Parameter4
- );
-
-/* DATA STRUCTURES ***********************************************************/
-
-typedef struct _BL_LIBRARY_PARAMETERS
-{
- ULONG LibraryFlags;
- ULONG TranslationType;
- ULONG MinimumAllocationCount;
- ULONG MinimumHeapSize;
- ULONG HeapAllocationAttributes;
- PWCHAR ApplicationBaseDirectory;
- ULONG DescriptorCount;
- PWCHAR FontBaseDirectory;
-} BL_LIBRARY_PARAMETERS, *PBL_LIBRARY_PARAMETERS;
-
-/* This should eventually go into a more public header */
-typedef struct _BOOT_APPLICATION_PARAMETER_BLOCK
-{
- /* This header tells the library what image we're dealing with */
- ULONG Signature[2];
- ULONG Version;
- ULONG Size;
- ULONG ImageType;
- ULONG MemoryTranslationType;
-
- /* Where is the image located */
- ULONGLONG ImageBase;
- ULONG ImageSize;
-
- /* Offset to BL_MEMORY_DATA */
- ULONG MemoryDataOffset;
-
- /* Offset to BL_APPLICATION_ENTRY */
- ULONG AppEntryOffset;
-
- /* Offset to BL_DEVICE_DESCRPIPTOR */
- ULONG BootDeviceOffset;
-
- /* Offset to BL_FIRMWARE_PARAMETERS */
- ULONG FirmwareParametersOffset;
-
- /* Offset to BL_RETURN_ARGUMENTS */
- ULONG ReturnArgumentsOffset;
-} BOOT_APPLICATION_PARAMETER_BLOCK, *PBOOT_APPLICATION_PARAMETER_BLOCK;
-
-typedef struct _BL_MEMORY_DATA
-{
- ULONG Version;
- ULONG MdListOffset;
- ULONG DescriptorCount;
- ULONG DescriptorSize;
- ULONG DescriptorOffset;
-} BL_MEMORY_DATA, *PBL_MEMORY_DATA;
-
-typedef struct _BL_FIRMWARE_DESCRIPTOR
-{
- ULONG Version;
- ULONG Unknown;
- EFI_HANDLE ImageHandle;
- EFI_SYSTEM_TABLE *SystemTable;
-} BL_FIRMWARE_DESCRIPTOR, *PBL_FIRMWARE_DESCRIPTOR;
-
-typedef struct _BL_RETURN_ARGUMENTS
-{
- ULONG Version;
- NTSTATUS Status;
- ULONG Flags;
- ULONGLONG DataSize;
- ULONGLONG DataPage;
-} BL_RETURN_ARGUMENTS, *PBL_RETURN_ARGUMENTS;
-
-typedef struct _BL_MEMORY_DESCRIPTOR
-{
- LIST_ENTRY ListEntry;
- union
- {
- struct
- {
- ULONGLONG BasePage;
- ULONGLONG VirtualPage;
- };
- struct
- {
- ULONGLONG BaseAddress;
- ULONGLONG VirtualAddress;
- };
- };
- ULONGLONG PageCount;
- ULONG Flags;
- BL_MEMORY_TYPE Type;
-} BL_MEMORY_DESCRIPTOR, *PBL_MEMORY_DESCRIPTOR;
-
-typedef struct _BL_BCD_OPTION
-{
- ULONG Type;
- ULONG DataOffset;
- ULONG DataSize;
- ULONG ListOffset;
- ULONG NextEntryOffset;
- ULONG Empty;
-} BL_BCD_OPTION, *PBL_BCD_OPTION;
-
-typedef struct _BL_APPLICATION_ENTRY
-{
- CHAR Signature[8];
- ULONG Flags;
- GUID Guid;
- ULONG Unknown[4];
- BL_BCD_OPTION BcdData;
-} BL_APPLICATION_ENTRY, *PBL_APPLICATION_ENTRY;
-
-typedef struct _BL_LOADED_APPLICATION_ENTRY
-{
- ULONG Flags;
- GUID Guid;
- PBL_BCD_OPTION BcdData;
-} BL_LOADED_APPLICATION_ENTRY, *PBL_LOADED_APPLICATION_ENTRY;
-
-typedef struct _BL_MENU_STATUS
-{
- union
- {
- struct
- {
- ULONG AnyKey : 1;
- ULONG AdvancedOptions : 1;
- ULONG BootOptions : 1;
- ULONG OemKey : 1;
- ULONG Exit : 1;
- ULONG Reserved : 27;
- };
- ULONG AsULong;
- };
- ULONG BootIndex;
- WCHAR KeyValue;
-} BL_MENU_STATUS, *PL_MENU_STATUS;
-
-typedef enum _BL_BOOT_ERROR_STATUS
-{
- Reboot = 1,
- Recover = 2,
- RecoverOem = 3,
- OsSelection = 4,
- NextOs = 5,
- TryAgain = 6,
- AdvancedOptions = 7,
- BootOptions = 8
-} BL_BOOT_ERROR_STATUS;
-
-typedef struct _BL_HARDDISK_DEVICE
-{
- ULONG PartitionType;
- union
- {
- struct
- {
- ULONG PartitionSignature;
- } Mbr;
-
- struct
- {
- GUID PartitionSignature;
- } Gpt;
-
- struct
- {
- ULONG DiskNumber;
- } Raw;
- };
-} BL_HARDDISK_DEVICE;
-
-typedef struct _BL_LOCAL_DEVICE
-{
- BL_LOCAL_DEVICE_TYPE Type;
- union
- {
- struct
- {
- ULONG DriveNumber;
- } FloppyDisk;
-
- BL_HARDDISK_DEVICE HardDisk;
-
- BL_HARDDISK_DEVICE VirtualHardDisk;
-
- struct
- {
- PHYSICAL_ADDRESS ImageBase;
- LARGE_INTEGER ImageSize;
- ULONG ImageOffset;
- } RamDisk;
-
- ULONG File; // unknown for now
- };
-} BL_LOCAL_DEVICE, *PBL_LOCAL_DEVICE;
-
-typedef struct _BL_DEVICE_DESCRIPTOR
-{
- DEVICE_TYPE DeviceType;
- ULONG Flags;
- ULONG Size;
- ULONG Unknown;
- union
- {
- BL_LOCAL_DEVICE Local;
-
- struct
- {
- ULONG Unknown;
- } Remote;
-
- struct
- {
- union
- {
- ULONG PartitionNumber;
- } Mbr;
-
- union
- {
- GUID PartitionGuid;
- } Gpt;
-
- BL_LOCAL_DEVICE Disk;
- } Partition;
- };
-} BL_DEVICE_DESCRIPTOR, *PBL_DEVICE_DESCRIPTOR;
-
-typedef struct _BL_FILE_PATH_DESCRIPTOR
-{
- ULONG Version;
- ULONG Length;
- ULONG PathType;
- UCHAR Path[ANYSIZE_ARRAY];
-} BL_FILE_PATH_DESCRIPTOR, *PBL_FILE_PATH_DESCRIPTOR;
-
-typedef struct _BL_WINDOWS_LOAD_OPTIONS
-{
- CHAR Signature[8];
- ULONG Version;
- ULONG Length;
- ULONG OsPathOffset;
- WCHAR LoadOptions[ANYSIZE_ARRAY];
-} BL_WINDOWS_LOAD_OPTIONS, *PBL_WINDOWS_LOAD_OPTIONS;
-
-typedef struct _BL_ARCH_CONTEXT
-{
- BL_ARCH_MODE Mode;
- BL_TRANSLATION_TYPE TranslationType;
- ULONG ContextFlags;
-} BL_ARCH_CONTEXT, *PBL_ARCH_CONTEXT;
-
-typedef struct _BL_MEMORY_DESCRIPTOR_LIST
-{
- LIST_ENTRY ListHead;
- PLIST_ENTRY First;
- PLIST_ENTRY This;
- ULONG Type;
-} BL_MEMORY_DESCRIPTOR_LIST, *PBL_MEMORY_DESCRIPTOR_LIST;
-
-typedef struct _BL_ADDRESS_RANGE
-{
- ULONGLONG Minimum;
- ULONGLONG Maximum;
-} BL_ADDRESS_RANGE, *PBL_ADDRESS_RANGE;
-
-typedef struct _BL_FILE_INFORMATION
-{
- ULONGLONG Size;
- ULONGLONG Offset;
- PWCHAR FsName;
- ULONG Flags;
-} BL_FILE_INFORMATION, *PBL_FILE_INFORMATION;
-
-typedef struct _BL_FILE_CALLBACKS
-{
- PBL_FILE_OPEN Open;
- PBL_FILE_CLOSE Close;
- PBL_FILE_READ Read;
- PBL_FILE_WRITE Write;
- PBL_FILE_GET_NEXT GetNext;
- PBL_FILE_GET_INFO GetInfo;
- PBL_FILE_SET_INFO SetInfo;
-} BL_FILE_CALLBACKS, *PBL_FILE_CALLBACKS;
-
-typedef struct _BL_FILE_ENTRY
-{
- PWCHAR FilePath;
- ULONG DeviceId;
- ULONG FileId;
- ULONG Flags;
- ULONG ReferenceCount;
- ULONG Unknown;
- ULONGLONG TotalBytesRead;
- ULONGLONG Unknown2;
- BL_FILE_CALLBACKS Callbacks;
- PVOID FsSpecificData;
-} BL_FILE_ENTRY, *PBL_FILE_ENTRY;
-
-typedef struct _BL_FILE_SYSTEM_ENTRY
-{
- LIST_ENTRY ListEntry;
- PBL_FS_INIT_CALLBACK InitCallback;
- PBL_FS_DESTROY_CALLBACK DestroyCallback;
- PBL_FS_MOUNT_CALLBACK MountCallback;
- PBL_FS_PURGE_CALLBACK PurgeCallback;
-} BL_FILE_SYSTEM_ENTRY, *PBL_FILE_SYSTEM_ENTRY;
-
-typedef struct _BL_FILE_SYSTEM_REGISTRATION_TABLE
-{
- PBL_FS_INIT_CALLBACK Init;
- PBL_FS_DESTROY_CALLBACK Destroy;
- PBL_FS_MOUNT_CALLBACK Mount;
- PBL_FS_PURGE_CALLBACK Purge;
-} BL_FILE_SYSTEM_REGISTRATION_TABLE;
-
-typedef struct _BL_DISPLAY_STATE
-{
- ULONG BgColor;
- ULONG FgColor;
- ULONG XPos;
- ULONG YPos;
- ULONG CursorVisible;
-} BL_DISPLAY_STATE, *PBL_DISPLAY_STATE;
-
-typedef struct _BL_DISPLAY_MODE
-{
- ULONG HRes;
- ULONG VRes;
- ULONG HRes2;
-} BL_DISPLAY_MODE, *PBL_DISPLAY_MODE;
-
-typedef struct _BL_TEXT_CONSOLE_VTABLE
-{
- PCONSOLE_DESTRUCT Destruct;
- PCONSOLE_REINITIALIZE Reinitialize;
- PCONSOLE_GET_TEXT_STATE GetTextState;
- PCONSOLE_SET_TEXT_STATE SetTextState;
- PCONSOLE_GET_TEXT_RESOLUTION GetTextResolution;
- PCONSOLE_SET_TEXT_RESOLUTION SetTextResolution;
- PCONSOLE_CLEAR_TEXT ClearText;
- PCONSOLE_WRITE_TEXT WriteText;
-} BL_TEXT_CONSOLE_VTABLE, *PBL_TEXT_CONSOLE_VTABLE;
-
-typedef struct _BL_GRAPHICS_CONSOLE_VTABLE
-{
- BL_TEXT_CONSOLE_VTABLE Text;
- PCONSOLE_IS_ENABLED IsEnabled;
- PCONSOLE_ENABLE Enable;
- PVOID GetConsoleResolution;
- PCONSOLE_GET_GRAPHICAL_RESOLUTION GetGraphicalResolution;
- PCONSOLE_GET_GRAPHICAL_RESOLUTION GetOriginalResolution;
- PCONSOLE_SET_GRAPHICAL_RESOLUTION SetOriginalResolution;
- /// more for graphics ///
-} BL_GRAPHICS_CONSOLE_VTABLE, *PBL_GRAPHICS_CONSOLE_VTABLE;
-
-typedef struct _BL_TEXT_CONSOLE
-{
- PBL_TEXT_CONSOLE_VTABLE Callbacks;
- BL_DISPLAY_STATE State;
- BL_DISPLAY_MODE DisplayMode;
- BOOLEAN Active;
- EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL* Protocol;
- ULONG Mode;
- EFI_SIMPLE_TEXT_OUTPUT_MODE OldMode;
-} BL_TEXT_CONSOLE, *PBL_TEXT_CONSOLE;
-
-typedef struct _BL_INPUT_CONSOLE_VTABLE
-{
- PCONSOLE_DESTRUCT Destruct;
- PCONSOLE_REINITIALIZE Reinitialize;
- //PCONSOLE_IS_KEY_PENDING IsKeyPending;
- //PCONSOLE_READ_INPUT ReadInput;
- //PCONSOLE_ERASE_BUFFER EraseBuffer;
- //PCONSOLE_FILL_BUFFER FillBuffer;
-} BL_INPUT_CONSOLE_VTABLE, *PBL_INPUT_CONSOLE_VTABLE;
-
-typedef struct _BL_INPUT_CONSOLE
-{
- PBL_INPUT_CONSOLE_VTABLE Callbacks;
- PULONG Buffer;
- PULONG DataStart;
- PULONG DataEnd;
- PULONG EndBuffer;
-} BL_INPUT_CONSOLE, *PBL_INPUT_CONSOLE;
-
-typedef enum _BL_GRAPHICS_CONSOLE_TYPE
-{
- BlGopConsole,
- BlUgaConsole
-} BL_GRAPHICS_CONSOLE_TYPE;
-
-typedef struct _BL_GRAPHICS_CONSOLE
-{
- BL_TEXT_CONSOLE TextConsole;
- BL_DISPLAY_MODE DisplayMode;
- ULONG PixelDepth;
- ULONG FgColor;
- ULONG BgColor;
- BL_DISPLAY_MODE OldDisplayMode;
- ULONG OldPixelDepth;
- EFI_HANDLE Handle;
- BL_GRAPHICS_CONSOLE_TYPE Type;
- EFI_GRAPHICS_OUTPUT_PROTOCOL* Protocol;
- PVOID FrameBuffer;
- ULONG FrameBufferSize;
- ULONG PixelsPerScanLine;
- ULONG Mode;
- ULONG OldMode;
-} BL_GRAPHICS_CONSOLE, *PBL_GRAPHICS_CONSOLE;
-
-typedef struct _BL_REMOTE_CONSOLE
-{
- BL_TEXT_CONSOLE TextConsole;
-} BL_REMOTE_CONSOLE, *PBL_REMOTE_CONSOLE;
-
-typedef struct _BL_HASH_TABLE
-{
- PLIST_ENTRY HashLinks;
- ULONG Size;
- PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction;
- PBL_HASH_TABLE_HASH_FUNCTION HashFunction;
-} BL_HASH_TABLE, *PBL_HASH_TABLE;
-
-typedef struct _BL_HASH_ENTRY
-{
- ULONG Size;
- ULONG Flags;
- PVOID Value;
-} BL_HASH_ENTRY, *PBL_HASH_ENTRY;
-
-typedef struct _BL_HASH_VALUE
-{
- ULONG DataSize;
- PVOID Data;
-} BL_HASH_VALUE, *PBL_HASH_VALUE;
-
-typedef struct _BL_HASH_NODE
-{
- LIST_ENTRY ListEntry;
- BL_HASH_ENTRY Entry;
- BL_HASH_VALUE Value;
-} BL_HASH_NODE, *PBL_HASH_NODE;
-
-typedef struct _BL_BLOCK_DEVICE_INFORMATION
-{
- BL_LOCAL_DEVICE_TYPE Type;
- ULONG DeviceFlags;
- ULONG Unknown;
- BL_PARTITION_TYPE PartitionType;
- ULONG BlockSize;
- ULONG Alignment;
- ULONGLONG LastBlock;
- ULONGLONG Offset;
- ULONG Block;
- struct
- {
- union
- {
- struct
- {
- ULONG Signature;
- } Mbr;
- struct
- {
- GUID Signature;
- } Gpt;
- };
- } Disk;
-} BL_BLOCK_DEVICE_INFORMATION, *PBL_BLOCK_DEVICE_INFORMATION;
-
-typedef struct _BL_DEVICE_INFORMATION
-{
- BL_DEVICE_TYPE DeviceType;
- union
- {
- BL_BLOCK_DEVICE_INFORMATION BlockDeviceInfo;
- };
-} BL_DEVICE_INFORMATION, *PBL_DEVICE_INFORMATION;
-
-typedef struct _BL_BLOCK_DEVICE
-{
- BL_BLOCK_DEVICE_INFORMATION;
- ULONGLONG StartOffset;
- EFI_BLOCK_IO* Protocol;
- EFI_HANDLE Handle;
-} BL_BLOCK_DEVICE, *PBL_BLOCK_DEVICE;
-
-typedef struct _BL_PROTOCOL_HANDLE
-{
- EFI_HANDLE Handle;
- PVOID Interface;
-} BL_PROTOCOL_HANDLE, *PBL_PROTOCOL_HANDLE;
-
-typedef struct _BL_DEVICE_CALLBACKS
-{
- PBL_DEVICE_ENUMERATE_DEVICE_CLASS EnumerateDeviceClass;
- PBL_DEVICE_OPEN Open;
- PBL_DEVICE_CLOSE Close;
- PBL_DEVICE_READ Read;
- PBL_DEVICE_WRITE Write;
- PBL_DEVICE_GET_INFORMATION GetInformation;
- PBL_DEVICE_SET_INFORMATION SetInformation;
- PBL_DEVICE_RESET Reset;
- PBL_DEVICE_FLUSH Flush;
- PBL_DEVICE_CREATE Create;
-} BL_DEVICE_CALLBACKS, *PBL_DEVICE_CALLBACKS;
-
-typedef struct _BL_DEVICE_ENTRY
-{
- ULONG DeviceId;
- ULONG Flags;
- ULONG Unknown;
- ULONG ReferenceCount;
- BL_DEVICE_CALLBACKS Callbacks;
- PVOID DeviceSpecificData;
- PBL_DEVICE_DESCRIPTOR DeviceDescriptor;
-} BL_DEVICE_ENTRY, *PBL_DEVICE_ENTRY;
-
-typedef struct _BL_IMG_FILE
-{
- UCHAR Flags;
- union
- {
- PVOID BaseAddress;
- ULONG FileId;
- };
- ULONG FileSize;
- PWCHAR FileName;
-} BL_IMG_FILE, *PBL_IMG_FILE;
-
-typedef struct _BL_IMAGE_APPLICATION_ENTRY
-{
- PBL_APPLICATION_ENTRY AppEntry;
- PVOID ImageBase;
- ULONG ImageSize;
-} BL_IMAGE_APPLICATION_ENTRY, *PBL_IMAGE_APPLICATION_ENTRY;
-
-typedef struct _BL_BUFFER_DESCRIPTOR
-{
- PVOID Buffer;
- ULONG ActualSize;
- ULONG BufferSize;
-} BL_BUFFER_DESCRIPTOR, *PBL_BUFFER_DESCRIPTOR;
-
-typedef struct _BL_DEFERRED_FONT_FILE
-{
- LIST_ENTRY ListEntry;
- ULONG Flags;
- PBL_DEVICE_DESCRIPTOR Device;
- PWCHAR FontPath;
-} BL_DEFERRED_FONT_FILE, *PBL_DEFERRED_FONT_FILE;
-
-#pragma pack(push)
-#pragma pack(1)
-typedef struct _BMP_HEADER
-{
- USHORT Signature;
- ULONG Size;
- USHORT Reserved[2];
- ULONG Offset;
-} BMP_HEADER, *PBMP_HEADER;
-
-typedef struct _DIB_HEADER
-{
- ULONG Size;
- ULONG Width;
- ULONG Height;
- USHORT Planes;
- USHORT BitCount;
- ULONG Compression;
- ULONG SizeImage;
- ULONG XPelsPerMeter;
- ULONG YPelsPerMEter;
- ULONG ClrUsed;
- ULONG ClrImportant;
-} DIB_HEADER, *PDIB_HEADER;
-
-typedef struct _BITMAP
-{
- BMP_HEADER BmpHeader;
- DIB_HEADER DibHeader;
-} BITMAP, *PBITMAP;
-#pragma pack(pop)
-
-typedef struct _COORD
-{
- ULONG X;
- ULONG Y;
-} COORD, *PCOORD;
-
-typedef struct _BL_PD_DATA_BLOB
-{
- PVOID Data;
- ULONG DataSize;
- ULONG BlobSize;
-} BL_PD_DATA_BLOB, *PBL_PD_DATA_BLOB;
-
-/* INLINE ROUTINES ***********************************************************/
-
-FORCEINLINE
-VOID
-BlSetupDefaultParameters (
- _Out_ PBL_LIBRARY_PARAMETERS LibraryParameters
- )
-{
- BL_LIBRARY_PARAMETERS DefaultParameters =
- {
- 0x20,
- BlVirtual,
- 1024,
- 2 * 1024 * 1024,
- 0,
- NULL,
- 0,
- NULL
- };
-
- /* Copy the defaults */
- RtlCopyMemory(LibraryParameters, &DefaultParameters, sizeof(*LibraryParameters));
-}
-
-FORCEINLINE
-VOID
-MmMdInitializeListHead (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST List
- )
-{
- /* Initialize the list */
- InitializeListHead(&List->ListHead);
- List->First = &List->ListHead;
- List->This = NULL;
- List->Type = 0;
-}
-
-FORCEINLINE
-PVOID
-PhysicalAddressToPtr (
- _In_ PHYSICAL_ADDRESS PhysicalAddress)
-{
- return (PVOID)(ULONG_PTR)PhysicalAddress.QuadPart;
-}
-
-/* INITIALIZATION ROUTINES ***************************************************/
-
-NTSTATUS
-BlInitializeLibrary(
- _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters,
- _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
- );
-
-NTSTATUS
-BlpArchInitialize (
- _In_ ULONG Phase
- );
-
-NTSTATUS
-BlpFwInitialize (
- _In_ ULONG Phase,
- _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareParameters
- );
-
-NTSTATUS
-BlpMmInitialize (
- _In_ PBL_MEMORY_DATA MemoryData,
- _In_ BL_TRANSLATION_TYPE TranslationType,
- _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
- );
-
-NTSTATUS
-MmBaInitialize (
- VOID
- );
-
-NTSTATUS
-MmPaInitialize (
- _In_ PBL_MEMORY_DATA MemoryData,
- _In_ ULONG MinimumPages
- );
-
-NTSTATUS
-MmArchInitialize (
- _In_ ULONG Phase,
- _In_ PBL_MEMORY_DATA MemoryData,
- _In_ BL_TRANSLATION_TYPE TranslationType,
- _In_ BL_TRANSLATION_TYPE LibraryTranslationType
- );
-
-NTSTATUS
-MmHaInitialize (
- _In_ ULONG HeapSize,
- _In_ ULONG HeapAttributes
- );
-
-VOID
-MmMdInitialize (
- _In_ ULONG Phase,
- _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
- );
-
-NTSTATUS
-BlpDeviceInitialize (
- VOID
- );
-
-NTSTATUS
-BlpIoInitialize (
- VOID
- );
-
-NTSTATUS
-BlpFileInitialize (
- VOID
- );
-
-NTSTATUS
-BlpDisplayInitialize (
- _In_ ULONG Flags
- );
-
-NTSTATUS
-BlpDisplayReinitialize (
- VOID
- );
-
-VOID
-BlDestroyLibrary (
- VOID
- );
-
-NTSTATUS
-BcInitialize (
- VOID
- );
-
-/* FIRMWARE ROUTINES *********************************************************/
-
-VOID
-EfiPrintf (
- _In_ PWCHAR Format,
- ...
- );
-
-NTSTATUS
-BlFwGetParameters(
- _In_ PBL_FIRMWARE_DESCRIPTOR Parameters
- );
-
-NTSTATUS
-BlFwEnumerateDevice (
- _In_ PBL_DEVICE_DESCRIPTOR Device
- );
-
-NTSTATUS
-EfiAllocatePages (
- _In_ ULONG Type,
- _In_ ULONG Pages,
- _Inout_ EFI_PHYSICAL_ADDRESS* Memory
- );
-
-NTSTATUS
-EfiStall (
- _In_ ULONG StallTime
- );
-
-NTSTATUS
-EfiConInExReset (
- VOID
- );
-
-NTSTATUS
-EfiConInReset (
- VOID
- );
-
-NTSTATUS
-EfiConOutOutputString (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ PWCHAR String
- );
-
-NTSTATUS
-EfiConOutQueryMode (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ ULONG Mode,
- _In_ UINTN* Columns,
- _In_ UINTN* Rows
- );
-
-NTSTATUS
-EfiConOutSetMode (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ ULONG Mode
- );
-
-VOID
-EfiConOutReadCurrentMode (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE* Mode
- );
-
-NTSTATUS
-EfiConOutSetAttribute (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ ULONG Attribute
- );
-
-NTSTATUS
-EfiConOutSetCursorPosition (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ ULONG Column,
- _In_ ULONG Row
- );
-
-NTSTATUS
-EfiConOutEnableCursor (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ BOOLEAN Visible
- );
-
-NTSTATUS
-EfiLocateHandleBuffer (
- _In_ EFI_LOCATE_SEARCH_TYPE SearchType,
- _In_ EFI_GUID *Protocol,
- _Inout_ PULONG HandleCount,
- _Inout_ EFI_HANDLE** Buffer
- );
-
-NTSTATUS
-EfiOpenProtocol (
- _In_ EFI_HANDLE Handle,
- _In_ EFI_GUID *Protocol,
- _Out_ PVOID* Interface
- );
-
-NTSTATUS
-EfiCloseProtocol (
- _In_ EFI_HANDLE Handle,
- _In_ EFI_GUID *Protocol
- );
-
-NTSTATUS
-EfiGopGetCurrentMode (
- _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
- _Out_ UINTN* Mode,
- _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Information
- );
-
-NTSTATUS
-EfiGopSetMode (
- _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
- _In_ ULONG Mode
- );
-
-VOID
-EfiGopGetFrameBuffer (
- _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
- _Out_ PHYSICAL_ADDRESS* FrameBuffer,
- _Out_ UINTN *FrameBufferSize
- );
-
-VOID
-EfiResetSystem (
- _In_ EFI_RESET_TYPE ResetType
- );
-
-EFI_DEVICE_PATH*
-EfiGetLeafNode (
- _In_ EFI_DEVICE_PATH *DevicePath
- );
-
-EFI_DEVICE_PATH *
-EfiIsDevicePathParent (
- _In_ EFI_DEVICE_PATH *DevicePath1,
- _In_ EFI_DEVICE_PATH *DevicePath2
- );
-
-NTSTATUS
-EfipGetRsdt (
- _Out_ PPHYSICAL_ADDRESS FoundRsdt
- );
-
-NTSTATUS
-EfiFreePages (
- _In_ ULONG Pages,
- _In_ EFI_PHYSICAL_ADDRESS PhysicalAddress
- );
-
-/* PLATFORM TIMER ROUTINES ***************************************************/
-
-NTSTATUS
-BlpTimeCalibratePerformanceCounter (
- VOID
- );
-
-ULONGLONG
-BlTimeQueryPerformanceCounter (
- _Out_opt_ PLARGE_INTEGER Frequency
- );
-
-ULONGLONG
-BlArchGetPerformanceCounter (
- VOID
- );
-
-/* RESOURCE LOCALE INTERNATIONALIZATION ROUTINES *****************************/
-
-NTSTATUS
-BlpDisplayRegisterLocale (
- _In_ PWCHAR Locale
- );
-
-/* FONT ROUTINES *************************************************************/
-
-VOID
-BfiFreeDeferredFontFile (
- _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
- );
-
-NTSTATUS
-BfLoadFontFile (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PWCHAR FontPath
- );
-
-NTSTATUS
-BfLoadDeferredFontFiles (
- VOID
- );
-
-NTSTATUS
-BfClearScreen (
- _In_ PBL_GRAPHICS_CONSOLE Console
- );
-
-NTSTATUS
-BfClearToEndOfLine (
- _In_ PBL_GRAPHICS_CONSOLE Console
- );
-
-/* FILESYSTEM ROUTINES *******************************************************/
-
-NTSTATUS
-FatInitialize (
- VOID
- );
-
-NTSTATUS
-FatMount (
- _In_ ULONG DeviceId,
- _In_ ULONG Unknown,
- _Out_ PBL_FILE_ENTRY* FileEntry
- );
-
-NTSTATUS
-EtfsInitialize (
- VOID
- );
-
-NTSTATUS
-EtfsMount (
- _In_ ULONG DeviceId,
- _In_ ULONG Unknown,
- _Out_ PBL_FILE_ENTRY* FileEntry
- );
-
-/* DEBUG ROUTINES ************************************************************/
-
-BOOLEAN
-BlBdDebuggerEnabled (
- VOID
- );
-
-NTSTATUS
-BlBdPullRemoteFile (
- _In_ PWCHAR FilePath,
- _Out_ PVOID BaseAddress,
- _Out_ PULONGLONG FileSize
- );
-
-VOID
-BlStatusPrint (
- _In_ PCWCH Format,
- ...
- );
-
-VOID
-BlStatusError (
- _In_ ULONG ErrorCode,
- _In_ ULONG Parameter1,
- _In_ ULONG_PTR Parameter2,
- _In_ ULONG_PTR Parameter3,
- _In_ ULONG_PTR Parameter4
- );
-
-/* UTILITY ROUTINES **********************************************************/
-
-VOID
-BlArchCpuId (
- _In_ ULONG Function,
- _In_ ULONG SubFunction,
- _Out_ PCPU_INFO Result
- );
-
-CPU_VENDORS
-BlArchGetCpuVendor (
- VOID
- );
-
-BOOLEAN
-BlArchIsCpuIdFunctionSupported (
- _In_ ULONG Function
- );
-
-VOID
-BlUtlUpdateProgress (
- _In_ ULONG Percentage,
- _Out_opt_ PBOOLEAN Completed
- );
-
-NTSTATUS
-BlUtlGetAcpiTable (
- _Out_ PVOID* TableAddress,
- _In_ ULONG Signature
- );
-
-NTSTATUS
-BlUtlInitialize (
- VOID
- );
-
-NTSTATUS
-BlUtlRegisterProgressRoutine (
- VOID
- );
-
-ULONG
-BlUtlCheckSum (
- _In_ ULONG PartialSum,
- _In_ PUCHAR Buffer,
- _In_ ULONG Length,
- _In_ ULONG Flags
- );
-
-NTSTATUS
-BlGetApplicationBaseAndSize (
- _Out_ PVOID* ImageBase,
- _Out_ PULONG ImageSize
- );
-
-VOID
-BlDestroyBootEntry (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
- );
-
-NTSTATUS
-BlPdQueryData (
- _In_ const GUID* DataGuid,
- _In_ PVOID Unknown,
- _Inout_ PBL_PD_DATA_BLOB DataBlob
- );
-
-/* FIRMWARE UTILITY ROUTINES *************************************************/
-
-EFI_STATUS
-EfiGetEfiStatusCode(
- _In_ NTSTATUS Status
- );
-
-NTSTATUS
-EfiGetNtStatusCode (
- _In_ EFI_STATUS EfiStatus
- );
-
-VOID
-BlFwReboot (
- VOID
- );
-
-NTSTATUS
-MmFwFreePages (
- _In_ ULONG BasePage,
- _In_ ULONG PageCount
- );
-
-PGUID
-BlGetApplicationIdentifier (
- VOID
- );
-
-NTSTATUS
-BlpSecureBootEFIIsEnabled (
- VOID
- );
-
-NTSTATUS
-BlSecureBootIsEnabled (
- _Out_ PBOOLEAN SecureBootEnabled
- );
-
-NTSTATUS
-BlSecureBootCheckForFactoryReset (
- VOID
- );
-
-/* RESOURCE ROUTINES *********************************************************/
-
-PWCHAR
-BlResourceFindMessage (
- _In_ ULONG MsgId
- );
-
-PWCHAR
-BlResourceFindHtml (
- VOID
- );
-
-NTSTATUS
-BlpResourceInitialize (
- VOID
- );
-
-/* TABLE ROUTINES ************************************************************/
-
-NTSTATUS
-BlTblMap (
- _In_ PVOID *Table,
- _In_ ULONG Count,
- _In_ PBL_TBL_MAP_ROUTINE MapCallback
- );
-
-PVOID
-BlTblFindEntry (
- _In_ PVOID *Table,
- _In_ ULONG Count,
- _Out_ PULONG EntryIndex,
- _In_ PBL_TBL_LOOKUP_ROUTINE Callback,
- _In_ PVOID Argument1,
- _In_ PVOID Argument2,
- _In_ PVOID Argument3,
- _In_ PVOID Argument4
- );
-
-NTSTATUS
-BlTblSetEntry (
- _Inout_ PVOID** Table,
- _Inout_ PULONG Count,
- _In_ PVOID Entry,
- _Out_ PULONG EntryIndex,
- _In_ PBL_TBL_SET_ROUTINE Callback
- );
-
-NTSTATUS
-TblDoNotPurgeEntry (
- _In_ PVOID Entry
- );
-
-/* HASH TABLE ROUTINES *******************************************************/
-
-NTSTATUS
-BlHtStore (
- _In_ ULONG TableId,
- _In_ PBL_HASH_ENTRY Entry,
- _In_ PVOID Data,
- _In_ ULONG DataSize
- );
-
-NTSTATUS
-BlHtDelete (
- _In_ ULONG TableId,
- _In_ PBL_HASH_ENTRY Entry
- );
-
-NTSTATUS
-BlHtLookup (
- _In_ ULONG TableId,
- _In_ PBL_HASH_ENTRY Entry,
- _Out_ PBL_HASH_VALUE *Value
- );
-
-NTSTATUS
-BlHtCreate (
- _In_ ULONG Size,
- _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction,
- _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction,
- _Out_ PULONG Id
- );
-
-/* BCD OPTION ROUTINES *******************************************************/
-
-PBL_BCD_OPTION
-MiscGetBootOption (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type
- );
-
-ULONG
-BlGetBootOptionListSize (
- _In_ PBL_BCD_OPTION BcdOption
- );
-
-ULONG
-BlGetBootOptionSize (
- _In_ PBL_BCD_OPTION BcdOption
- );
-
-NTSTATUS
-BlGetBootOptionString (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PWCHAR* Value
- );
-
-NTSTATUS
-BlGetBootOptionInteger (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PULONGLONG Value
- );
-
-NTSTATUS
-BlGetBootOptionBoolean (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PBOOLEAN Value
- );
-
-NTSTATUS
-BlpGetBootOptionIntegerList (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PULONGLONG* Value,
- _Out_ PULONGLONG Count,
- _In_ BOOLEAN NoCopy
- );
-
-NTSTATUS
-BlGetBootOptionDevice (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PBL_DEVICE_DESCRIPTOR* Value,
- _In_opt_ PBL_BCD_OPTION* ExtraOptions
- );
-
-NTSTATUS
-BlGetBootOptionGuid (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PGUID Value
- );
-
-NTSTATUS
-BlGetBootOptionGuidList (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PGUID *Value,
- _In_ PULONG Count
- );
-
-NTSTATUS
-BlCopyBootOptions (
- _In_ PBL_BCD_OPTION OptionList,
- _Out_ PBL_BCD_OPTION *CopiedOptions
- );
-
-NTSTATUS
-BlAppendBootOptionBoolean (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ ULONG OptionId,
- _In_ BOOLEAN Value
- );
-
-NTSTATUS
-BlAppendBootOptionInteger (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ ULONG OptionId,
- _In_ ULONGLONG Value
- );
-
-NTSTATUS
-BlAppendBootOptionString (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ ULONG OptionId,
- _In_ PWCHAR OptionString
- );
-
-NTSTATUS
-BlAppendBootOptions (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ PBL_BCD_OPTION Options
- );
-
-VOID
-BlRemoveBootOption (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type
- );
-
-NTSTATUS
-BlReplaceBootOptions (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ PBL_BCD_OPTION NewOptions
- );
-
-/* BOOT REGISTRY ROUTINES ****************************************************/
-
-VOID
-BiCloseKey (
- _In_ HANDLE KeyHandle
- );
-
-NTSTATUS
-BiOpenKey(
- _In_ HANDLE ParentHandle,
- _In_ PWCHAR KeyName,
- _Out_ PHANDLE Handle
- );
-
-NTSTATUS
-BiLoadHive (
- _In_ PBL_FILE_PATH_DESCRIPTOR FilePath,
- _Out_ PHANDLE HiveHandle
- );
-
-NTSTATUS
-BiGetRegistryValue (
- _In_ HANDLE KeyHandle,
- _In_ PWCHAR ValueName,
- _In_ ULONG Type,
- _Out_ PVOID* Buffer,
- _Out_ PULONG ValueLength
- );
-
-NTSTATUS
-BiEnumerateSubKeys (
- _In_ HANDLE KeyHandle,
- _Out_ PWCHAR** SubKeyList,
- _Out_ PULONG SubKeyCount
- );
-
-NTSTATUS
-BiDeleteKey (
- _In_ HANDLE KeyHandle
- );
-
-VOID
-BiDereferenceHive (
- _In_ HANDLE KeyHandle
- );
-
-/* CONTEXT ROUTINES **********************************************************/
-
-VOID
-BlpArchSwitchContext (
- _In_ BL_ARCH_MODE NewMode
- );
-
-VOID
-BlpArchEnableTranslation (
- VOID
- );
-
-VOID
-Archx86TransferTo32BitApplicationAsm (
- VOID
- );
-
-/* MEMORY DESCRIPTOR ROUTINES ************************************************/
-
-VOID
-MmMdDbgDumpList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList,
- _In_opt_ ULONG MaxCount
-);
-
-VOID
-MmMdInitializeList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList,
- _In_ ULONG Type,
- _In_ PLIST_ENTRY ListHead
- );
-
-PBL_MEMORY_DESCRIPTOR
-MmMdFindDescriptor (
- _In_ ULONG WhichList,
- _In_ ULONG Flags,
- _In_ ULONGLONG Page
- );
-
-PBL_MEMORY_DESCRIPTOR
-MmMdFindDescriptorFromMdl (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ ULONG Flags,
- _In_ ULONGLONG Page
- );
-
-NTSTATUS
-MmMdCopyList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST DestinationList,
- _In_ PBL_MEMORY_DESCRIPTOR_LIST SourceList,
- _In_opt_ PBL_MEMORY_DESCRIPTOR ListDescriptor,
- _Out_ PULONG ActualCount,
- _In_ ULONG Count,
- _In_ ULONG Flags
- );
-
-ULONG
-MmMdCountList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
- );
-
-VOID
-MmMdFreeList(
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
- );
-
-PBL_MEMORY_DESCRIPTOR
-MmMdInitByteGranularDescriptor (
- _In_ ULONG Flags,
- _In_ BL_MEMORY_TYPE Type,
- _In_ ULONGLONG BasePage,
- _In_ ULONGLONG VirtualPage,
- _In_ ULONGLONG PageCount
- );
-
-VOID
-MmMdFreeGlobalDescriptors (
- VOID
- );
-
-NTSTATUS
-MmMdAddDescriptorToList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor,
- _In_ ULONG Flags
- );
-
-NTSTATUS
-MmMdTruncateDescriptors (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList,
- _In_ ULONGLONG BasePage
- );
-
-VOID
-MmMdRemoveDescriptorFromList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ PBL_MEMORY_DESCRIPTOR Entry
- );
-
-BOOLEAN
-MmMdFindSatisfyingRegion (
- _In_ PBL_MEMORY_DESCRIPTOR Descriptor,
- _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor,
- _In_ ULONGLONG Pages,
- _In_ PBL_ADDRESS_RANGE BaseRange,
- _In_ PBL_ADDRESS_RANGE VirtualRange,
- _In_ BOOLEAN TopDown,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ ULONG Flags,
- _In_ ULONG Alignment
- );
-
-NTSTATUS
-MmMdRemoveRegionFromMdlEx (
- __in PBL_MEMORY_DESCRIPTOR_LIST MdList,
- __in ULONG Flags,
- __in ULONGLONG BasePage,
- __in ULONGLONG PageCount,
- __in PBL_MEMORY_DESCRIPTOR_LIST NewMdList
- );
-
-NTSTATUS
-MmMdFreeDescriptor (
- _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
- );
-
-/* PAGE ALLOCATOR ROUTINES ***************************************************/
-
-NTSTATUS
-MmPaTruncateMemory (
- _In_ ULONGLONG BasePage
- );
-
-NTSTATUS
-BlMmAllocatePhysicalPages(
- _Inout_ PPHYSICAL_ADDRESS Address,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ ULONGLONG PageCount,
- _In_ ULONG Attributes,
- _In_ ULONG Alignment
- );
-
-NTSTATUS
-MmPapAllocatePhysicalPagesInRange (
- _Inout_ PPHYSICAL_ADDRESS BaseAddress,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ ULONGLONG Pages,
- _In_ ULONG Attributes,
- _In_ ULONG Alignment,
- _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList,
- _In_opt_ PBL_ADDRESS_RANGE Range,
- _In_ ULONG RangeType
- );
-
-NTSTATUS
-MmPaReleaseSelfMapPages (
- _In_ PHYSICAL_ADDRESS Address
- );
-
-NTSTATUS
-MmPaReserveSelfMapPages (
- _Inout_ PPHYSICAL_ADDRESS PhysicalAddress,
- _In_ ULONG Alignment,
- _In_ ULONG PageCount
- );
-
-NTSTATUS
-BlMmFreePhysicalPages (
- _In_ PHYSICAL_ADDRESS Address
- );
-
-NTSTATUS
-MmPapFreePages (
- _In_ PVOID Address,
- _In_ ULONG WhichList
- );
-
-NTSTATUS
-MmPapAllocatePagesInRange (
- _Inout_ PVOID* PhysicalAddress,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ ULONGLONG Pages,
- _In_ ULONG Attributes,
- _In_ ULONG Alignment,
- _In_opt_ PBL_ADDRESS_RANGE Range,
- _In_ ULONG Type
- );
-
-NTSTATUS
-MmFwGetMemoryMap (
- _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap,
- _In_ ULONG Flags
- );
-
-NTSTATUS
-BlpMmInitializeConstraints (
- VOID
- );
-
-NTSTATUS
-BlMmRemoveBadMemory (
- VOID
- );
-
-NTSTATUS
-BlMmGetMemoryMap (
- _In_ PLIST_ENTRY MemoryMap,
- _In_ PBL_BUFFER_DESCRIPTOR MemoryParameters,
- _In_ ULONG WhichTypes,
- _In_ ULONG Flags
- );
-
-/* VIRTUAL MEMORY ROUTINES ***************************************************/
-
-NTSTATUS
-MmSelectMappingAddress (
- _Out_ PVOID* MappingAddress,
- _In_ PVOID PreferredAddress,
- _In_ ULONGLONG Size,
- _In_ ULONG AllocationAttributes,
- _In_ ULONG Flags,
- _In_ PHYSICAL_ADDRESS PhysicalAddress
- );
-
-NTSTATUS
-MmMapPhysicalAddress (
- _Inout_ PPHYSICAL_ADDRESS PhysicalAddress,
- _Out_ PVOID* VirtualAddress,
- _Inout_ PULONGLONG Size,
- _In_ ULONG CacheAttributes
- );
-
-NTSTATUS
-MmUnmapVirtualAddress (
- _Inout_ PVOID* VirtualAddress,
- _Inout_ PULONGLONG Size
- );
-
-NTSTATUS
-BlMmMapPhysicalAddressEx (
- _In_ PVOID* VirtualAddress,
- _In_ ULONG Attributes,
- _In_ ULONGLONG Size,
- _In_ PHYSICAL_ADDRESS PhysicalAddress
- );
-
-NTSTATUS
-BlMmUnmapVirtualAddressEx (
- _In_ PVOID VirtualAddress,
- _In_ ULONGLONG Size
- );
-
-BOOLEAN
-BlMmTranslateVirtualAddress (
- _In_ PVOID VirtualAddress,
- _Out_ PPHYSICAL_ADDRESS PhysicalAddress
- );
-
-BOOLEAN
-MmArchTranslateVirtualAddress (
- _In_ PVOID VirtualAddress,
- _Out_opt_ PPHYSICAL_ADDRESS PhysicalAddress,
- _Out_opt_ PULONG CachingFlags
- );
-
-/* BLOCK ALLOCATOR ROUTINES **************************************************/
-
-NTSTATUS
-BlpMmCreateBlockAllocator (
- VOID
- );
-
-/* HEAP ALLOCATOR ROUTINES ***************************************************/
-
-PVOID
-BlMmAllocateHeap (
- _In_ SIZE_T Size
- );
-
-NTSTATUS
-BlMmFreeHeap (
- _In_ PVOID Buffer
- );
-
-/* DISPLAY ROUTINES **********************************************************/
-
-VOID
-BlDisplayGetTextCellResolution (
- _Out_ PULONG TextWidth,
- _Out_ PULONG TextHeight
- );
-
-NTSTATUS
-BlDisplaySetScreenResolution (
- VOID
- );
-
-NTSTATUS
-BlDisplayGetScreenResolution (
- _Out_ PULONG HRes,
- _Out_ PULONG Vres
- );
-
-VOID
-BlDisplayInvalidateOemBitmap (
- VOID
- );
-
-PBITMAP
-BlDisplayGetOemBitmap (
- _Out_ PCOORD Offset,
- _Out_opt_ PULONG Flags
- );
-
-BOOLEAN
-BlDisplayValidOemBitmap (
- VOID
- );
-
-NTSTATUS
-BlDisplayClearScreen (
- VOID
- );
-
-NTSTATUS
-BlDisplaySetCursorType (
- _In_ ULONG Type
- );
-
-/* I/O ROUTINES **************************************************************/
-
-NTSTATUS
-BlpIoRegisterDestroyRoutine (
- _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
- );
-
-NTSTATUS
-BlDeviceClose (
- _In_ ULONG DeviceId
- );
-
-BOOLEAN
-BlDeviceIsVirtualPartitionDevice (
- _In_ PBL_DEVICE_DESCRIPTOR InputDevice,
- _Outptr_ PBL_DEVICE_DESCRIPTOR* VirtualDevice
- );
-
-NTSTATUS
-BlpDeviceOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ ULONG Flags,
- _In_ ULONG Unknown,
- _Out_ PULONG DeviceId
- );
-
-NTSTATUS
-BlDeviceGetInformation (
- _In_ ULONG DeviceId,
- _Out_ PBL_DEVICE_INFORMATION DeviceInformation
- );
-
-NTSTATUS
-BlDeviceSetInformation (
- _In_ ULONG DeviceId,
- _In_ PBL_DEVICE_INFORMATION DeviceInformation
- );
-
-NTSTATUS
-BlDeviceReadAtOffset (
- _In_ ULONG DeviceId,
- _In_ ULONG Size,
- _In_ ULONGLONG Offset,
- _In_ PVOID Buffer,
- _Out_ PULONG BytesRead
- );
-
-/* IMAGE ROUTINES ************************************************************/
-
-NTSTATUS
-BlImgLoadImageWithProgress2 (
- _In_ ULONG DeviceId,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ PWCHAR FileName,
- _Inout_ PVOID* MappedBase,
- _Inout_ PULONG MappedSize,
- _In_ ULONG ImageFlags,
- _In_ BOOLEAN ShowProgress,
- _Out_opt_ PUCHAR* HashBuffer,
- _Out_opt_ PULONG HashSize
- );
-
-PIMAGE_SECTION_HEADER
-BlImgFindSection (
- _In_ PVOID ImageBase,
- _In_ ULONG ImageSize
- );
-
-NTSTATUS
-BlImgLoadBootApplication (
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
- _Out_ PULONG AppHandle
- );
-
-NTSTATUS
-BlImgStartBootApplication (
- _In_ ULONG AppHandle,
- _Inout_ PBL_RETURN_ARGUMENTS ReturnArguments
- );
-
-NTSTATUS
-BlImgUnloadBootApplication (
- _In_ ULONG AppHandle
- );
-
-VOID
-BlImgQueryCodeIntegrityBootOptions (
- _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry,
- _Out_ PBOOLEAN IntegrityChecksDisabled,
- _Out_ PBOOLEAN TestSigning
- );
-
-/* FILE I/O ROUTINES *********************************************************/
-
-NTSTATUS
-BlFileClose (
- _In_ ULONG FileId
- );
-
-NTSTATUS
-BlFileReadAtOffsetEx (
- _In_ ULONG FileId,
- _In_ ULONG Size,
- _In_ ULONGLONG ByteOffset,
- _In_ PVOID Buffer,
- _Out_ PULONG BytesReturned,
- _In_ ULONG Flags
- );
-
-NTSTATUS
-BlFileGetInformation (
- _In_ ULONG FileId,
- _In_ PBL_FILE_INFORMATION FileInfo
- );
-
-NTSTATUS
-BlFileOpen (
- _In_ ULONG DeviceId,
- _In_ PWCHAR FileName,
- _In_ ULONG Flags,
- _Out_ PULONG FileId
- );
-
-/* BLOCK I/O ROUTINES *******************************************************/
-
-NTSTATUS
-BlockIoEfiCompareDevice (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ EFI_HANDLE Handle
- );
-
-/* INPUT CONSOLE ROUTINES ****************************************************/
-
-VOID
-ConsoleInputLocalDestruct (
- _In_ struct _BL_INPUT_CONSOLE* Console
- );
-
-NTSTATUS
-ConsoleInputBaseReinitialize (
- _In_ struct _BL_INPUT_CONSOLE* Console
- );
-
-NTSTATUS
-ConsoleCreateLocalInputCnsole (
- VOID
- );
-
-/* TEXT CONSOLE ROUTINES *****************************************************/
-
-VOID
-ConsoleGraphicalDestruct (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console
- );
-
-NTSTATUS
-ConsoleGraphicalClearText (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ BOOLEAN LineOnly
- );
-
-NTSTATUS
-ConsoleGraphicalClearPixels (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ ULONG Color
- );
-
-NTSTATUS
-ConsoleGraphicalReinitialize (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console
- );
-
-NTSTATUS
-ConsoleGraphicalSetTextState (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ ULONG Mask,
- _In_ PBL_DISPLAY_STATE TextState
- );
-
-BOOLEAN
-ConsoleGraphicalIsEnabled (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console
- );
-
-NTSTATUS
-ConsoleGraphicalGetGraphicalResolution (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console,
- _In_ PBL_DISPLAY_MODE DisplayMode
- );
-
-NTSTATUS
-ConsoleGraphicalGetOriginalResolution (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console,
- _In_ PBL_DISPLAY_MODE DisplayMode
- );
-
-NTSTATUS
-ConsoleGraphicalEnable (
- _In_ struct _BL_GRAPHICS_CONSOLE* Console,
- _In_ BOOLEAN Enable
- );
-
-VOID
-ConsoleTextLocalDestruct (
- _In_ struct _BL_TEXT_CONSOLE* Console
- );
-
-NTSTATUS
-ConsoleTextLocalReinitialize (
- _In_ struct _BL_TEXT_CONSOLE* Console
- );
-
-NTSTATUS
-ConsoleTextBaseGetTextState (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _Out_ PBL_DISPLAY_STATE TextState
- );
-
-NTSTATUS
-ConsoleTextLocalSetTextState (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ ULONG Flags,
- _In_ PBL_DISPLAY_STATE TextState
- );
-
-NTSTATUS
-ConsoleTextBaseGetTextResolution (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _Out_ PULONG TextResolution
- );
-
-NTSTATUS
-ConsoleTextLocalSetTextResolution (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ ULONG NewTextResolution,
- _Out_ PULONG OldTextResolution
- );
-
-NTSTATUS
-ConsoleTextLocalClearText (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ BOOLEAN LineOnly
- );
-
-NTSTATUS
-ConsoleTextLocalWriteText (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ PCHAR Text,
- _In_ ULONG Attribute
- );
-
-NTSTATUS
-ConsoleTextLocalConstruct (
- _In_ PBL_TEXT_CONSOLE TextConsole,
- _In_ BOOLEAN Activate
- );
-
-BOOLEAN
-ConsolepFindResolution (
- _In_ PBL_DISPLAY_MODE Mode,
- _In_ PBL_DISPLAY_MODE List,
- _In_ ULONG MaxIndex
- );
-
-NTSTATUS
-ConsoleFirmwareTextClear (
- _In_ PBL_TEXT_CONSOLE Console,
- _In_ BOOLEAN LineOnly
- );
-
-VOID
-ConsoleFirmwareTextClose (
- _In_ PBL_TEXT_CONSOLE TextConsole
- );
-
-NTSTATUS
-ConsoleFirmwareTextOpen (
- _In_ PBL_TEXT_CONSOLE TextConsole
- );
-
-NTSTATUS
-ConsoleFirmwareTextSetState (
- _In_ PBL_TEXT_CONSOLE TextConsole,
- _In_ UCHAR Mask,
- _In_ PBL_DISPLAY_STATE State
- );
-
-NTSTATUS
-ConsoleGraphicalConstruct (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- );
-
-NTSTATUS
-ConsoleCreateRemoteConsole (
- _In_ PBL_TEXT_CONSOLE* TextConsole
- );
-
-NTSTATUS
-ConsoleEfiGraphicalOpenProtocol (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
- _In_ BL_GRAPHICS_CONSOLE_TYPE Type
- );
-
-VOID
-ConsoleFirmwareGraphicalClose (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- );
-
-VOID
-ConsoleFirmwareGraphicalDisable (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- );
-
-NTSTATUS
-ConsoleFirmwareGraphicalClear (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ ULONG Color
- );
-
-NTSTATUS
-ConsoleFirmwareGraphicalEnable (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- );
-
-NTSTATUS
-ConsoleEfiUgaOpen (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- );
-
-VOID
-ConsoleEfiUgaClose (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- );
-
-VOID
-ConsoleEfiGopClose (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- );
-
-NTSTATUS
-ConsoleEfiGopOpen (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- );
-
-NTSTATUS
-ConsoleEfiGopEnable (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- );
-
-NTSTATUS
-ConsoleEfiUgaSetResolution (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
- _In_ PBL_DISPLAY_MODE DisplayMode,
- _In_ ULONG DisplayModeCount
- );
-
-NTSTATUS
-ConsoleCreateLocalInputConsole (
- VOID
- );
-
-NTSTATUS
-ConsoleInputLocalEraseBuffer (
- _In_ PBL_INPUT_CONSOLE Console,
- _In_opt_ PULONG ValueToFill
- );
-
-VOID
-ConsolepClearBuffer (
- _In_ PUCHAR FrameBuffer,
- _In_ ULONG Width,
- _In_ PUCHAR FillColor,
- _In_ ULONG Height,
- _In_ ULONG ScanlineWidth,
- _In_ ULONG PixelDepth
- );
-
-NTSTATUS
-ConsolepConvertColorToPixel (
- _In_ BL_COLOR Color,
- _Out_ PUCHAR Pixel
- );
-
-extern ULONG MmDescriptorCallTreeCount;
-extern ULONG BlpApplicationFlags;
-extern BL_LIBRARY_PARAMETERS BlpLibraryParameters;
-extern BL_TRANSLATION_TYPE MmTranslationType;
-extern PBL_ARCH_CONTEXT CurrentExecutionContext;
-extern PBL_DEVICE_DESCRIPTOR BlpBootDevice;
-extern BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry;
-extern EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *EfiConOut;
-extern EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *EfiConInEx;
-extern EFI_GUID EfiGraphicsOutputProtocol;
-extern EFI_GUID EfiUgaDrawProtocol;
-extern EFI_GUID EfiLoadedImageProtocol;
-extern EFI_GUID EfiDevicePathProtocol;
-extern EFI_GUID EfiBlockIoProtocol;
-extern EFI_GUID EfiSimpleTextInputExProtocol;
-extern EFI_GUID EfiRootAcpiTableGuid;
-extern EFI_GUID EfiRootAcpiTable10Guid;
-extern EFI_GUID EfiGlobalVariable;
-extern ULONG ConsoleGraphicalResolutionListFlags;
-extern BL_DISPLAY_MODE ConsoleGraphicalResolutionList[];
-extern BL_DISPLAY_MODE ConsoleTextResolutionList[];
-extern ULONG ConsoleGraphicalResolutionListSize;
-extern PVOID DspRemoteInputConsole;
-extern PVOID DspLocalInputConsole;
-extern WCHAR BlScratchBuffer[8192];
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedAllocated;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedUnallocated;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFwAllocationTracker;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedUnallocated;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlReservedAllocated;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlBadMemory;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlTruncatedMemory;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlPersistentMemory;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlCompleteBadMemory;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlFreeVirtual;
-extern BL_MEMORY_DESCRIPTOR_LIST MmMdlMappingTrackers;
-extern ULONGLONG BlpTimePerformanceFrequency;
-extern LIST_ENTRY RegisteredFileSystems;
-extern BL_ADDRESS_RANGE MmArchKsegAddressRange;
-extern ULONG_PTR MmArchTopOfApplicationAddressSpace;
-extern PBL_MM_RELOCATE_SELF_MAP BlMmRelocateSelfMap;
-extern PBL_MM_FLUSH_TLB BlMmFlushTlb;
-extern PBL_MM_MOVE_VIRTUAL_ADDRESS_RANGE BlMmMoveVirtualAddressRange;
-extern PBL_MM_ZERO_VIRTUAL_ADDRESS_RANGE BlMmZeroVirtualAddressRange;
-extern PBL_STATUS_ERROR_HANDLER BlpStatusErrorHandler;
-
-#endif
diff --git a/boot/environ/lib/arch/i386/arch.c b/boot/environ/lib/arch/i386/arch.c
deleted file mode 100644
index de5c0e2ccae..00000000000
--- a/boot/environ/lib/arch/i386/arch.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/arch/i386/arch.c
- * PURPOSE: Boot Library Architectural Initialization for i386
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-BL_ARCH_CONTEXT FirmwareExecutionContext;
-BL_ARCH_CONTEXT ApplicationExecutionContext;
-PBL_ARCH_CONTEXT CurrentExecutionContext;
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-DECLSPEC_NORETURN
-ArchTrapNoProcess (
- VOID
- )
-{
- /* Do nothing, this is an unsupported debugging interrupt */
-#if defined(__GNUC__)
- __asm__ __volatile__ ("iret");
-#elif defined (_MSC_VER)
- _asm { iret };
-#else
-#error wtf are you using
-#endif
- __assume(0);
-}
-
-VOID
-ArchSwitchContext (
- _In_ PBL_ARCH_CONTEXT NewContext,
- _In_ PBL_ARCH_CONTEXT OldContext
- )
-{
- /* Are we switching to real mode? */
- if (NewContext->Mode == BlRealMode)
- {
- /* Disable paging */
- __writecr0(__readcr0() & ~CR0_PG);
-
- /* Are we coming from PAE mode? */
- if ((OldContext != NULL) && (OldContext->TranslationType == BlPae))
- {
- /* Turn off PAE */
- __writecr4(__readcr4() & ~CR4_PAE);
- }
-
- /* Enable interrupts */
- _enable();
- }
- else
- {
- /* Switching to protected mode -- disable interrupts if needed */
- if (!(NewContext->ContextFlags & BL_CONTEXT_INTERRUPTS_ON))
- {
- _disable();
- }
-
- /* Are we enabling paging for the first time? */
- if (NewContext->ContextFlags & BL_CONTEXT_PAGING_ON)
- {
- /* In PAE mode? */
- if (NewContext->TranslationType == BlPae)
- {
- /* Turn on PAE */
- __writecr4(__readcr4() | CR4_PAE);
- }
-
- /* Turn on paging */
- __writecr0(__readcr0() | CR0_PG);
- }
- }
-}
-
-NTSTATUS
-ArchInitializeContext (
- _In_ PBL_ARCH_CONTEXT Context
- )
-{
- NTSTATUS Status = STATUS_SUCCESS;
-
- /* Are we initializing real mode? */
- if (Context->Mode == BlRealMode)
- {
- /* Disable paging, enable interrupts */
- Context->ContextFlags &= ~BL_CONTEXT_PAGING_ON;
- Context->ContextFlags |= BL_CONTEXT_INTERRUPTS_ON;
- }
- else if (!(BlpApplicationFlags & BL_APPLICATION_FLAG_CONVERTED_FROM_EFI) ||
- (BlpLibraryParameters.TranslationType != BlNone))
- {
- /* Read the current translation type */
- Context->TranslationType = BlpLibraryParameters.TranslationType;
-
- /* Disable paging (it's already on), enable interrupts */
- Context->ContextFlags &= ~BL_CONTEXT_PAGING_ON;
- Context->ContextFlags |= BL_CONTEXT_INTERRUPTS_ON;
-
- /* Enable FXSR support in the FPU */
- __writecr4(__readcr4() | CR4_FXSR);
- }
- else
- {
- /* Invalid context */
- Status = STATUS_NOT_SUPPORTED;
- }
-
- /* Return context status */
- return Status;
-}
-
-NTSTATUS
-ArchInitializeContexts (
- VOID
- )
-{
- PBL_ARCH_CONTEXT Context = NULL;
- NTSTATUS EfiStatus, AppStatus;
-
- /* No current context */
- CurrentExecutionContext = NULL;
-
- /* Setup the EFI and Application modes respectively */
- FirmwareExecutionContext.Mode = BlRealMode;
- ApplicationExecutionContext.Mode = BlProtectedMode;
-
- /* Initialize application mode */
- AppStatus = ArchInitializeContext(&ApplicationExecutionContext);
- if (NT_SUCCESS(AppStatus))
- {
- /* Set it as current if it worked */
- Context = &ApplicationExecutionContext;
- CurrentExecutionContext = &ApplicationExecutionContext;
- }
-
- /* Initialize EFI mode */
- EfiStatus = ArchInitializeContext(&FirmwareExecutionContext);
- if (NT_SUCCESS(EfiStatus))
- {
- /* Set it as current if application context failed */
- if (!NT_SUCCESS(AppStatus))
- {
- Context = &FirmwareExecutionContext;
- CurrentExecutionContext = &FirmwareExecutionContext;
- }
-
- /* Switch to application mode, or EFI if that one failed */
- ArchSwitchContext(Context, NULL);
- EfiStatus = STATUS_SUCCESS;
- }
-
- /* Return initialization state */
- return EfiStatus;
-}
-
-VOID
-BlpArchSwitchContext (
- _In_ BL_ARCH_MODE NewMode
- )
-{
- PBL_ARCH_CONTEXT Context;
-
- /* In real mode, use EFI, otherwise, use the application mode */
- Context = &FirmwareExecutionContext;
- if (NewMode != BlRealMode)
- {
- Context = &ApplicationExecutionContext;
- }
-
- /* Are we in a different mode? */
- if (CurrentExecutionContext->Mode != NewMode)
- {
- /* Switch to the new one */
- ArchSwitchContext(Context, CurrentExecutionContext);
- CurrentExecutionContext = Context;
- }
-}
-
-VOID
-BlpArchEnableTranslation (
- VOID
- )
-{
- PBL_ARCH_CONTEXT Context;
-
- /* Does the current execution context already have paging enabled? */
- Context = CurrentExecutionContext;
- if (!(Context->ContextFlags & BL_CONTEXT_PAGING_ON))
- {
- /* No -- does it have interrupts enabled? */
- if (Context->ContextFlags & BL_CONTEXT_INTERRUPTS_ON)
- {
- /* Disable them */
- _disable();
- Context->ContextFlags &= ~BL_CONTEXT_INTERRUPTS_ON;
- }
-
- /* Are we enabling PAE? */
- if (Context->TranslationType == BlPae)
- {
- /* Make sure CR4 reflects this */
- __writecr4(__readcr4() | CR4_PAE);
- }
-
- /* Enable paging in the CPU */
- __writecr0(__readcr0() | CR0_PG);
-
- /* Reflect that paging is enabled */
- Context->ContextFlags |= BL_CONTEXT_PAGING_ON;
- }
-}
-
-/*++
-* @name BlpArchInitialize
-*
-* The BlpArchInitialize function initializes the Boot Library.
-*
-* @param Phase
-* Pointer to the Boot Application Parameter Block.
-*
-* @return NT_SUCCESS if the boot library was loaded correctly, relevant error
-* otherwise.
-*
-*--*/
-NTSTATUS
-BlpArchInitialize (
- _In_ ULONG Phase
- )
-{
- KDESCRIPTOR Idtr;
- USHORT CodeSegment;
- NTSTATUS Status;
- PKIDTENTRY IdtBase;
-
- /* Assume success */
- Status = STATUS_SUCCESS;
-
- /* Is this phase 1? */
- if (Phase != 0)
- {
- /* Get the IDT */
- __sidt(&Idtr);
- IdtBase = (PKIDTENTRY)Idtr.Base;
-
- /* Get the Code Segment */
-#if defined(__GNUC__)
- __asm__ __volatile__ ("mov %%cs,%0\n\t" :"=r" (CodeSegment));
-#elif defined (_MSC_VER)
- _asm { mov CodeSegment, cs };
-#else
-#error wtf are you using
-#endif
-
- /* Set up INT 3, ASSERT, and SECURITY_ASSERT to be no-op (for Rtl) */
- IdtBase[3].Offset = (USHORT)(ULONG_PTR)ArchTrapNoProcess;
- IdtBase[3].Selector = CodeSegment;
- IdtBase[3].Access = 0x8E00u;
- IdtBase[3].ExtendedOffset = (ULONG_PTR)ArchTrapNoProcess >> 16;
- IdtBase[0x2C].Offset = (USHORT)(ULONG_PTR)ArchTrapNoProcess;
- IdtBase[0x2C].Selector = CodeSegment;
- IdtBase[0x2C].Access = 0x8E00u;
- IdtBase[0x2C].ExtendedOffset = (ULONG_PTR)ArchTrapNoProcess >> 16;
- IdtBase[0x2D].Offset = (USHORT)(ULONG_PTR)ArchTrapNoProcess;
- IdtBase[0x2D].Selector = CodeSegment;
- IdtBase[0x2D].Access = 0x8E00u;
- IdtBase[0x2D].ExtendedOffset = (ULONG_PTR)ArchTrapNoProcess >> 16;
-
- /* Write the IDT back */
- Idtr.Base = (ULONG)IdtBase;
- __lidt(&Idtr);
-
- /* Reset FPU state */
-#if defined(__GNUC__)
- __asm__ __volatile__ ("fninit");
-#elif defined (_MSC_VER)
- _asm { fninit };
-#else
-#error wtf are you using
-#endif
- }
- else
- {
- /* Reset TSC if needed */
- if ((__readmsr(0x10) >> 32) & 0xFFC00000)
- {
- __writemsr(0x10, 0);
- }
-
- /* Initialize all the contexts */
- Status = ArchInitializeContexts();
- }
-
- /* Return initialization state */
- return Status;
-}
-
diff --git a/boot/environ/lib/arch/i386/transfer.s b/boot/environ/lib/arch/i386/transfer.s
deleted file mode 100644
index 4bf9ef5782a..00000000000
--- a/boot/environ/lib/arch/i386/transfer.s
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/arch/transfer.asm
- * PURPOSE: Boot Library i386 Transfer Functions
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include
-#include
-
-EXTERN _GdtRegister:FWORD
-EXTERN _IdtRegister:FWORD
-EXTERN _BootAppGdtRegister:FWORD
-EXTERN _BootAppIdtRegister:FWORD
-EXTERN _BootApp32Stack:DWORD
-EXTERN _BootApp32EntryRoutine:DWORD
-EXTERN _BootApp32Parameters:DWORD
-
-/* FUNCTIONS ****************************************************************/
-.code
-
-PUBLIC _Archx86TransferTo32BitApplicationAsm
-_Archx86TransferTo32BitApplicationAsm:
-
- /* Save non-volatile registers */
- push ebp
- push esi
- push edi
- push ebx
-
- /* Save data segments */
- push es
- push ds
-
- /* Save the old stack */
- mov ebx, esp
-
- /* Save current GDT/IDT, then load new one */
- sgdt _GdtRegister+2
- sidt _IdtRegister+2
- lgdt _BootAppGdtRegister+2
- lidt _BootAppIdtRegister+2
-
- /* Load the new stack */
- xor ebp, ebp
- mov esp, _BootApp32Stack
-
- /* Push old stack onto new stack */
- push ebx
-
- /* Call the entry routine, passing the parameters */
- mov eax, _BootApp32Parameters
- push eax
- mov eax, _BootApp32EntryRoutine
- call eax
-
- /* Retore old stack */
- pop ebx
- mov esp, ebx
-
- /* Restore old GDT/IDT */
- lgdt _GdtRegister+2
- lidt _IdtRegister+2
-
- /* Retore old segments */
- pop ds
- pop es
-
- /* Retore non-volatiles */
- pop ebx
- pop edi
- pop esi
- pop ebp
-
- /* All done */
- ret
-
-END
diff --git a/boot/environ/lib/arch/stub/arch.c b/boot/environ/lib/arch/stub/arch.c
deleted file mode 100644
index 31c96e79945..00000000000
--- a/boot/environ/lib/arch/stub/arch.c
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/arch/stub/arch.c
- * PURPOSE: Boot Library Architectural Initialization Skeleton Code
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-PBL_ARCH_CONTEXT CurrentExecutionContext;
-PBL_MM_RELOCATE_SELF_MAP BlMmRelocateSelfMap;
-PBL_MM_MOVE_VIRTUAL_ADDRESS_RANGE BlMmMoveVirtualAddressRange;
-PBL_MM_ZERO_VIRTUAL_ADDRESS_RANGE BlMmZeroVirtualAddressRange;
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-BlpArchSwitchContext (
- _In_ BL_ARCH_MODE NewMode
- )
-{
-}
-
-/*++
-* @name BlpArchInitialize
-*
-* The BlpArchInitialize function initializes the Boot Library.
-*
-* @param Phase
-* Pointer to the Boot Application Parameter Block.
-*
-* @return NT_SUCCESS if the boot library was loaded correctly, relevant error
-* otherwise.
-*
-*--*/
-NTSTATUS
-BlpArchInitialize (
- _In_ ULONG Phase
- )
-{
- EfiPrintf(L" BlpArchInitialize NOT IMPLEMENTED for this platform\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-VOID
-Archx86TransferTo32BitApplicationAsm (VOID)
-{
- EfiPrintf(L" Archx86TransferTo32BitApplicationAsm NOT IMPLEMENTED for this platform\r\n");
-}
-
-NTSTATUS
-OslArchTransferToKernel(
- _In_ struct _LOADER_PARAMETER_BLOCK *LoaderBlock,
- _In_ PVOID KernelEntrypoint
- )
-{
- EfiPrintf(L" OslArchTransferToKernel NOT IMPLEMENTED for this platform\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
diff --git a/boot/environ/lib/bd/.keep b/boot/environ/lib/bd/.keep
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/boot/environ/lib/bootlib.c b/boot/environ/lib/bootlib.c
deleted file mode 100644
index 11ab756a481..00000000000
--- a/boot/environ/lib/bootlib.c
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/bootlib.c
- * PURPOSE: Boot Library Initialization
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-BL_LIBRARY_PARAMETERS BlpLibraryParameters;
-PBL_DEVICE_DESCRIPTOR BlpBootDevice;
-PWCHAR BlpApplicationBaseDirectory;
-PBOOT_APPLICATION_PARAMETER_BLOCK BlpApplicationParameters;
-BL_LOADED_APPLICATION_ENTRY BlpApplicationEntry;
-BOOLEAN BlpLibraryParametersInitialized;
-ULONG BlpApplicationFlags;
-
-ULONG PdPersistAllocations;
-LIST_ENTRY BlpPdListHead;
-
-/* FUNCTIONS *****************************************************************/
-
-/*++
- * @name InitializeLibrary
- *
- * The InitializeLibrary function initializes the Boot Library.
- *
- * @param BootParameters
- * Pointer to the Boot Application Parameter Block.
- *
- * @param LibraryParameters
- * Pointer to the Boot Library Parameters.
- *
- * @return NT_SUCCESS if the boot library was loaded correctly, relevant error
- * otherwise.
- *
- *--*/
-NTSTATUS
-InitializeLibrary (
- _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters,
- _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
- )
-{
- NTSTATUS Status;
- PBL_MEMORY_DATA MemoryData;
- PBL_APPLICATION_ENTRY AppEntry;
- PBL_FIRMWARE_DESCRIPTOR FirmwareDescriptor;
- LARGE_INTEGER BootFrequency;
- ULONG_PTR ParamPointer;
-
- /* Validate correct Boot Application data */
- ParamPointer = (ULONG_PTR)BootAppParameters;
- if (!(BootAppParameters) ||
- (BootAppParameters->Signature[0] != BOOT_APPLICATION_SIGNATURE_1) ||
- (BootAppParameters->Signature[1] != BOOT_APPLICATION_SIGNATURE_2) ||
- (BootAppParameters->Size < sizeof(*BootAppParameters)))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Get sub-structures */
- MemoryData = (PBL_MEMORY_DATA)(ParamPointer + BootAppParameters->MemoryDataOffset);
- FirmwareDescriptor = (PBL_FIRMWARE_DESCRIPTOR)(ParamPointer + BootAppParameters->FirmwareParametersOffset);
- AppEntry = (PBL_APPLICATION_ENTRY)(ParamPointer + BootAppParameters->AppEntryOffset);
- BlpBootDevice = (PBL_DEVICE_DESCRIPTOR)(ParamPointer + BootAppParameters->BootDeviceOffset);
- BlpApplicationBaseDirectory = LibraryParameters->ApplicationBaseDirectory;
-
- /* Initialize the firmware table */
- Status = BlpFwInitialize(0, FirmwareDescriptor);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Find boot application entry */
- if (strncmp(AppEntry->Signature, BL_APP_ENTRY_SIGNATURE, 7))
- {
- Status = STATUS_INVALID_PARAMETER_9;
- goto Quickie;
- }
-
- /* Read parameters */
- BlpApplicationParameters = BootAppParameters;
- BlpLibraryParameters = *LibraryParameters;
-
- /* Check if the caller sent us their internal BCD options */
- if (AppEntry->Flags & BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL)
- {
- /* These are external to us now, as far as we are concerned */
- AppEntry->Flags &= ~BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL;
- AppEntry->Flags |= BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL;
- }
-
- /* Save the application entry flags */
- BlpApplicationEntry.Flags = AppEntry->Flags;
-
- /* Copy the GUID and point to the options */
- BlpApplicationEntry.Guid = AppEntry->Guid;
- BlpApplicationEntry.BcdData = &AppEntry->BcdData;
-
- /* Everything has been captured */
- BlpLibraryParametersInitialized = TRUE;
-
- /* Initialize the architecture (PM or RM) switching */
- Status = BlpArchInitialize(0);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Initialize the memory manager */
- Status = BlpMmInitialize(MemoryData,
- BootAppParameters->MemoryTranslationType,
- LibraryParameters);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"MM init failed!\r\n");
- goto Quickie;
- }
-
- /* Initialize firmware now that the heap, etc works */
- Status = BlpFwInitialize(1, FirmwareDescriptor);
- if (!NT_SUCCESS(Status))
- {
- /* Destroy memory manager in phase 1 */
- //BlpMmDestroy(1);
- EfiPrintf(L"Firmware2 init failed!\r\n");
- return Status;
- }
-
- /* Modern systems have an undocumented BCD system for the boot frequency */
- Status = BlGetBootOptionInteger(BlpApplicationEntry.BcdData,
- 0x15000075,
- (PULONGLONG)&BootFrequency.QuadPart);
- if (NT_SUCCESS(Status) && (BootFrequency.QuadPart))
- {
- /* Use it if present */
- BlpTimePerformanceFrequency = BootFrequency.QuadPart;
- }
- else
- {
- /* Use the TSC for calibration */
- Status = BlpTimeCalibratePerformanceCounter();
- if (!NT_SUCCESS(Status))
- {
- /* Destroy memory manager in phase 1 */
- EfiPrintf(L"TSC calibration failed\r\n");
- //BlpMmDestroy(1);
- return Status;
- }
- }
-
- /* Now setup the rest of the architecture (IDT, etc) */
- Status = BlpArchInitialize(1);
- if (!NT_SUCCESS(Status))
- {
- /* Destroy memory manager in phase 1 */
- EfiPrintf(L"Arch2 init failed\r\n");
- //BlpMmDestroy(1);
- return Status;
- }
-
-#ifdef BL_TPM_SUPPORT
- /* Initialize support for Trusted Platform Module v1.2 */
- BlpTpmInitialize();
-#endif
-
-#ifdef BL_TPM_SUPPORT
- /* Initialize the event manager */
- EnSubsystemInitialized = 1;
- InitializeListHead(&EnEventNotificationList);
-#endif
-
- /* Initialize the I/O Manager */
- Status = BlpIoInitialize();
- if (!NT_SUCCESS(Status))
- {
- /* Destroy memory manager in phase 1 and the event manager */
- EfiPrintf(L"IO init failed\r\n");
-#ifdef BL_TPM_SUPPORT
- if (EnSubsystemInitialized)
- {
- BlpEnDestroy();
- }
-#endif
- //BlpMmDestroy(1);
- return Status;
- }
-
-#ifdef BL_NET_SUPPORT
- /* Initialize the network stack */
- Status = BlNetInitialize();
- if (!NT_SUCCESS(Status))
- {
- /* Destroy the I/O, event, and memory managers in phase 1 */
- BlpIoDestroy();
-#ifdef BL_TPM_SUPPORT
- if (EnSubsystemInitialized)
- {
- BlpEnDestroy();
- }
-#endif
- BlpMmDestroy(1);
- return Status;
- }
-#endif
-
- /* Initialize the utility library */
- Status = BlUtlInitialize();
- if (!NT_SUCCESS(Status))
- {
- /* Destroy the network, I/O, event, and memory managers in phase 1 */
-#ifdef BL_NET_SUPPORT
- BlNetDestroy();
-#endif
- //BlpIoDestroy();
-#ifdef BL_TPM_SUPPORT
- if (EnSubsystemInitialized)
- {
- BlpEnDestroy();
- }
-#endif
- //BlpMmDestroy(1);
- EfiPrintf(L"Util init failed\r\n");
- return Status;
- }
-
-#ifdef BL_KD_SUPPORT
- /* Initialize PCI Platform Support */
- PltInitializePciConfiguration();
-#endif
-
-#ifdef BL_SECURE_BOOT_SUPPORT
- /* Read the current SecureBoot Policy*/
- Status = BlSecureBootSetActivePolicyFromPersistedData();
- if (!NT_SUCCESS(Status))
- {
- /* Destroy everything that we've currently set up */
-#ifdef BL_KD_SUPPORT
- PltDestroyPciConfiguration();
-#endif
-#ifdef BL_NET_SUPPORT
- BlNetDestroy();
-#endif
- BlpIoDestroy();
-#ifdef BL_TPM_SUPPORT
- if (EnSubsystemInitialized)
- {
- BlpEnDestroy();
- }
-#endif
- BlpMmDestroy(1);
- return Status;
- }
-#endif
-
-#ifdef BL_TPM_SUPPORT
- /* Initialize phase 0 of the security subsystem */
- SipInitializePhase0();
-#endif
-
-#ifdef BL_KD_SUPPORT
- /* Bring up the boot debugger, now that SecureBoot has been processed */
- BlBdInitialize();
-#endif
-
-#ifdef BL_ETW_SUPPORT
- /* Initialize internal logging */
- BlpLogInitialize();
-#endif
-
- /* Are graphics enabled? */
- if (!(LibraryParameters->LibraryFlags & BL_LIBRARY_FLAG_NO_DISPLAY))
- {
- /* Initialize the graphics library */
- BlpDisplayInitialize(LibraryParameters->LibraryFlags);
- }
-
- /* Initialize the boot application persistent data */
- PdPersistAllocations = 0;
- InitializeListHead(&BlpPdListHead);
-
-#ifdef BL_TPM_SUPPORT
- /* Now setup the security subsystem in phase 1 */
- BlpSiInitialize(1);
-#endif
-
- /* Setup the text, UI and font resources */
- Status = BlpResourceInitialize();
- if (!NT_SUCCESS(Status))
- {
- /* Tear down everything if this failed */
- if (!(LibraryParameters->LibraryFlags & BL_LIBRARY_FLAG_NO_DISPLAY))
- {
-// BlpDisplayDestroy();
- }
-#ifdef BL_KD_SUPPORT
- BlpBdDestroy();
- PltDestroyPciConfiguration();
-#endif
-#ifdef BL_NET_SUPPORT
- BlNetDestroy();
-#endif
- //BlpIoDestroy();
-#ifdef BL_TPM_SUPPORT
- if (EnSubsystemInitialized)
- {
- BlpEnDestroy();
- }
-#endif
- //BlpMmDestroy(1);
- return Status;
- }
-
-#if BL_BITLOCKER_SUPPORT
- /* Setup the boot cryptography library */
- g_pEnvironmentData = &SymCryptEnvironmentWindowsBootLibrary;
- if (SymCryptEnvWindowsBootLibInit)
- {
- SymCryptEnvWindowsBootLibInit();
- }
-#endif
-
- /* We are fully initialized, remember this and exit with success */
- BlpLibraryParameters.LibraryFlags |= BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED;
- Status = STATUS_SUCCESS;
-
-Quickie:
- return Status;
-}
-
-/*++
- * @name BlInitializeLibrary
- *
- * The BlInitializeLibrary function initializes, or re-initializes, the
- * Boot Library.
- *
- * @param BootParameters
- * Pointer to the Boot Application Parameter Block.
- *
- * @param LibraryParameters
- * Pointer to the Boot Library Parameters.
- *
- * @return NT_SUCCESS if the boot library was loaded correctly, relevant error
- * otherwise.
- *
- *--*/
-NTSTATUS
-BlInitializeLibrary(
- _In_ PBOOT_APPLICATION_PARAMETER_BLOCK BootAppParameters,
- _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
- )
-{
- NTSTATUS Status;
-
- /* Are we re-initializing the library? */
- if (LibraryParameters->LibraryFlags & BL_LIBRARY_FLAG_REINITIALIZE)
- {
- /* From scratch? */
- BlpLibraryParameters = *LibraryParameters;
- if (LibraryParameters->LibraryFlags & BL_LIBRARY_FLAG_REINITIALIZE_ALL)
- {
-#ifdef BL_TPM_SUPPORT
- /* Reinitialize the TPM security enclave as BCD hash changed */
- BlpSiInitialize(1);
-#endif
-#ifdef BL_KD_SUPPORT
- /* Reinitialize the boot debugger as BCD debug options changed */
- BlBdInitialize();
-#endif
-
- /* Reparse the bad page list now that the BCD has been reloaded */
- BlMmRemoveBadMemory();
-
- /* Reparse the low/high physical address limits as well */
- BlpMmInitializeConstraints();
-
- /* Redraw the graphics console as needed */
- BlpDisplayInitialize(LibraryParameters->LibraryFlags);
-
- /* Reinitialize resources (language may have changed) */
- BlpResourceInitialize();
- }
-
- /* Nothing to do, we're done */
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* Nope, this is first time initialization */
- Status = InitializeLibrary(BootAppParameters, LibraryParameters);
- }
-
- /* Return initialization status */
- return Status;
-}
-
-VOID
-BlDestroyLibrary (
- VOID
- )
-{
- EfiPrintf(L"Destroy not yet implemented\r\n");
- return;
-}
-
-PGUID
-BlGetApplicationIdentifier (
- VOID
- )
-{
- /* Return the GUID, if one was present */
- return (BlpApplicationEntry.Flags & BL_APPLICATION_ENTRY_FLAG_NO_GUID) ?
- NULL : &BlpApplicationEntry.Guid;
-}
-
-NTSTATUS
-BlGetApplicationBaseAndSize (
- _Out_ PVOID* ImageBase,
- _Out_ PULONG ImageSize
- )
-{
- /* Fail if output parameters are missing */
- if (!ImageBase || !ImageSize)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Return the requested data */
- *ImageBase = (PVOID)(ULONG_PTR)BlpApplicationParameters->ImageBase;
- *ImageSize = BlpApplicationParameters->ImageSize;
- return STATUS_SUCCESS;
-}
-
-VOID
-BlDestroyBootEntry (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry
- )
-{
- /* Check if we had allocated BCD options */
- if (AppEntry->Flags & BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL)
- {
- BlMmFreeHeap(AppEntry->BcdData);
- }
-
- /* Free the entry itself */
- BlMmFreeHeap(AppEntry);
-}
-
-NTSTATUS
-BlPdQueryData (
- _In_ const GUID* DataGuid,
- _In_ PVOID Unknown,
- _Inout_ PBL_PD_DATA_BLOB DataBlob
- )
-{
- /* Check for invalid or missing parameters */
- if (!(DataBlob) ||
- !(DataGuid) ||
- ((DataBlob->BlobSize) && !(DataBlob->Data)))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Check if there's no persistent data blobs */
- if (IsListEmpty(&BlpPdListHead))
- {
- return STATUS_NOT_FOUND;
- }
-
- /* Not yet handled, TODO */
- EfiPrintf(L"Boot persistent data not yet implemented\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
diff --git a/boot/environ/lib/firmware/efi/firmware.c b/boot/environ/lib/firmware/efi/firmware.c
deleted file mode 100644
index 2fb9df0243c..00000000000
--- a/boot/environ/lib/firmware/efi/firmware.c
+++ /dev/null
@@ -1,2592 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/firmware/efi/firmware.c
- * PURPOSE: Boot Library Firmware Initialization for EFI
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-PBL_FIRMWARE_DESCRIPTOR EfiFirmwareParameters;
-BL_FIRMWARE_DESCRIPTOR EfiFirmwareData;
-EFI_HANDLE EfiImageHandle;
-EFI_SYSTEM_TABLE* EfiSystemTable;
-
-EFI_SYSTEM_TABLE *EfiST;
-EFI_BOOT_SERVICES *EfiBS;
-EFI_RUNTIME_SERVICES *EfiRT;
-EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *EfiConOut;
-EFI_SIMPLE_TEXT_INPUT_PROTOCOL *EfiConIn;
-EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *EfiConInEx;
-PHYSICAL_ADDRESS EfiRsdt;
-
-EFI_GUID EfiGraphicsOutputProtocol = EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID;
-EFI_GUID EfiUgaDrawProtocol = EFI_UGA_DRAW_PROTOCOL_GUID;
-EFI_GUID EfiLoadedImageProtocol = EFI_LOADED_IMAGE_PROTOCOL_GUID;
-EFI_GUID EfiDevicePathProtocol = EFI_DEVICE_PATH_PROTOCOL_GUID;
-EFI_GUID EfiSimpleTextInputExProtocol = EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL_GUID;
-EFI_GUID EfiBlockIoProtocol = EFI_BLOCK_IO_PROTOCOL_GUID;
-EFI_GUID EfiRootAcpiTableGuid = EFI_ACPI_20_TABLE_GUID;
-EFI_GUID EfiRootAcpiTable10Guid = EFI_ACPI_TABLE_GUID;
-EFI_GUID EfiGlobalVariable = EFI_GLOBAL_VARIABLE;
-EFI_GUID BlpEfiSecureBootPrivateNamespace = { 0x77FA9ABD , 0x0359, 0x4D32, { 0xBD, 0x60, 0x28, 0xF4, 0xE7, 0x8F, 0x78, 0x4B } };
-
-WCHAR BlScratchBuffer[8192];
-
-BOOLEAN BlpFirmwareChecked;
-BOOLEAN BlpFirmwareEnabled;
-
-/* FUNCTIONS *****************************************************************/
-
-EFI_DEVICE_PATH *
-EfiIsDevicePathParent (
- _In_ EFI_DEVICE_PATH *DevicePath1,
- _In_ EFI_DEVICE_PATH *DevicePath2
- )
-{
- EFI_DEVICE_PATH* CurrentPath1;
- EFI_DEVICE_PATH* CurrentPath2;
- USHORT Length1, Length2;
-
- /* Start with the current nodes */
- CurrentPath1 = DevicePath1;
- CurrentPath2 = DevicePath2;
-
- /* Loop each element of the device path */
- while (!(IsDevicePathEndType(CurrentPath1)) &&
- !(IsDevicePathEndType(CurrentPath2)))
- {
- /* Check if the element has a different length */
- Length1 = DevicePathNodeLength(CurrentPath1);
- Length2 = DevicePathNodeLength(CurrentPath2);
- if (Length1 != Length2)
- {
- /* Then they're not related */
- return NULL;
- }
-
- /* Check if the rest of the element data matches */
- if (RtlCompareMemory(CurrentPath1, CurrentPath2, Length1) != Length1)
- {
- /* Nope, not related */
- return NULL;
- }
-
- /* Move to the next element */
- CurrentPath1 = NextDevicePathNode(CurrentPath1);
- CurrentPath2 = NextDevicePathNode(CurrentPath2);
- }
-
- /* If the last element in path 1 is empty, then path 2 is the child (deeper) */
- if (!IsDevicePathEndType(CurrentPath1))
- {
- return DevicePath2;
- }
-
- /* If the last element in path 2 is empty, then path 1 is the child (deeper) */
- if (!IsDevicePathEndType(CurrentPath2))
- {
- return DevicePath1;
- }
-
- /* They're both the end, so they're identical, so there's no parent */
- return NULL;
-}
-
-EFI_DEVICE_PATH*
-EfiGetLeafNode (
- _In_ EFI_DEVICE_PATH *DevicePath
- )
-{
- EFI_DEVICE_PATH *NextDevicePath;
-
- /* Make sure we're not already at the end */
- if (!IsDevicePathEndType(DevicePath))
- {
- /* Grab the next node element, and keep going until the end */
- for (NextDevicePath = NextDevicePathNode(DevicePath);
- !IsDevicePathEndType(NextDevicePath);
- NextDevicePath = NextDevicePathNode(NextDevicePath))
- {
- /* Save the current node we're at */
- DevicePath = NextDevicePath;
- }
- }
-
- /* This now contains the deepest (leaf) node */
- return DevicePath;
-}
-
-VOID
-EfiPrintf (
- _In_ PWCHAR Format,
- ...
- )
-{
- va_list args;
- va_start(args, Format);
-
- /* Capture the buffer in our scratch pad, and NULL-terminate */
- vsnwprintf(BlScratchBuffer, RTL_NUMBER_OF(BlScratchBuffer) - 1, Format, args);
- BlScratchBuffer[RTL_NUMBER_OF(BlScratchBuffer) - 1] = UNICODE_NULL;
-
- /* Check which mode we're in */
- if (CurrentExecutionContext->Mode == BlRealMode)
- {
- /* Call EFI directly */
- EfiConOut->OutputString(EfiConOut, BlScratchBuffer);
- }
- else
- {
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
-
- /* Call EFI directly */
- if (EfiConOut != NULL)
- {
- EfiConOut->OutputString(EfiConOut, BlScratchBuffer);
- }
-
- /* Switch back to protected mode */
- BlpArchSwitchContext(BlProtectedMode);
- }
-
- /* All done */
- va_end(args);
-}
-
-BOOLEAN EfiProtHashTableInitialized;
-ULONG EfiProtHashTableId;
-
-typedef struct _BL_EFI_PROTOCOL
-{
- LIST_ENTRY ListEntry;
- EFI_GUID* Protocol;
- PVOID Interface;
- LONG ReferenceCount;
- BOOLEAN AddressMapped;
-} BL_EFI_PROTOCOL, *PBL_EFI_PROTOCOL;
-
-NTSTATUS
-EfiVmOpenProtocol (
- _In_ EFI_HANDLE Handle,
- _In_ EFI_GUID* Protocol,
- _Outptr_ PVOID* Interface
- )
-{
- BOOLEAN AddressMapped;
- PLIST_ENTRY HashList, NextEntry;
- PHYSICAL_ADDRESS InterfaceAddress, TranslatedAddress;
- NTSTATUS Status;
- BL_HASH_ENTRY HashEntry;
- PBL_HASH_VALUE HashValue;
- PBL_EFI_PROTOCOL EfiProtocol;
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
- PVOID InterfaceVa;
-
- /* Initialize failure paths */
- AddressMapped = FALSE;
- HashList = NULL;
- InterfaceAddress.QuadPart = 0;
-
- /* Have we initialized the protocol table yet? */
- if (!EfiProtHashTableInitialized)
- {
- /* Nope -- create the hash table */
- Status = BlHtCreate(0, NULL, NULL, &EfiProtHashTableId);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Remember for next time */
- EfiProtHashTableInitialized = TRUE;
- }
-
- /* Check if we already have a list of protocols for this handle */
- HashEntry.Flags = BL_HT_VALUE_IS_INLINE;
- HashEntry.Size = sizeof(Handle);
- HashEntry.Value = Handle;
- Status = BlHtLookup(EfiProtHashTableId, &HashEntry, &HashValue);
- if (NT_SUCCESS(Status))
- {
- /* We do -- the hash value is the list itself */
- HashList = (PLIST_ENTRY)HashValue->Data;
- NextEntry = HashList->Flink;
-
- /* Iterate over it */
- while (NextEntry != HashList)
- {
- /* Get each protocol in the list, checking for a match */
- EfiProtocol = CONTAINING_RECORD(NextEntry,
- BL_EFI_PROTOCOL,
- ListEntry);
- if (EfiProtocol->Protocol == Protocol)
- {
- /* Match found -- add a reference and return it */
- EfiProtocol->ReferenceCount++;
- *Interface = EfiProtocol->Interface;
- return STATUS_SUCCESS;
- }
-
- /* Try the next entry */
- NextEntry = NextEntry->Flink;
- }
- }
-
- /* Switch to real mode for firmware call */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Check if this is EFI 1.02 */
- if (EfiST->Hdr.Revision == EFI_1_02_SYSTEM_TABLE_REVISION)
- {
- /* Use the old call */
- EfiStatus = EfiBS->HandleProtocol(Handle,
- Protocol,
- (PVOID*)&InterfaceAddress);
- }
- else
- {
- /* Use the EFI 2.00 API instead */
- EfiStatus = EfiBS->OpenProtocol(Handle,
- Protocol,
- (PVOID*)&InterfaceAddress,
- EfiImageHandle,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL);
- }
-
- /* Switch back to protected mode if needed */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Check the result, and bail out on failure */
- Status = EfiGetNtStatusCode(EfiStatus);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Check what address the interface lives at, and translate it */
- InterfaceVa = PhysicalAddressToPtr(InterfaceAddress);
- if (BlMmTranslateVirtualAddress(InterfaceVa, &TranslatedAddress))
- {
- /* We expect firmware to be 1:1 mapped, fail if not */
- if (InterfaceAddress.QuadPart != TranslatedAddress.QuadPart)
- {
- return STATUS_NOT_SUPPORTED;
- }
- }
- else
- {
- /* Create a virtual (1:1) mapping for the interface */
- Status = BlMmMapPhysicalAddressEx(&InterfaceVa,
- BlMemoryFixed,
- PAGE_SIZE,
- InterfaceAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Remember for cleanup */
- AddressMapped = TRUE;
- }
-
- /* The caller now has the interface */
- *Interface = InterfaceVa;
-
- /* Did we already have some protocols on this handle? */
- if (!HashList)
- {
- /* Nope, this is the first time -- so allocate the list */
- HashList = BlMmAllocateHeap(sizeof(*HashList));
- if (!HashList)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Initialize it */
- InitializeListHead(HashList);
-
- /* And then store it in the hash table for this handle */
- Status = BlHtStore(EfiProtHashTableId,
- &HashEntry,
- HashList,
- sizeof(*HashList));
- if (!NT_SUCCESS(Status))
- {
- BlMmFreeHeap(HashList);
- goto Quickie;
- }
- }
-
- /* Finally, allocate a protocol tracker structure */
- EfiProtocol = BlMmAllocateHeap(sizeof(*EfiProtocol));
- if (!EfiProtocol)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* And store this information in case the protocol is needed again */
- EfiProtocol->Protocol = Protocol;
- EfiProtocol->Interface = *Interface;
- EfiProtocol->ReferenceCount = 1;
- EfiProtocol->AddressMapped = AddressMapped;
- InsertTailList(HashList, &EfiProtocol->ListEntry);
-
- /* Passthru to success case */
- AddressMapped = FALSE;
-
-Quickie:
- /* Failure path -- did we map anything ?*/
- if (AddressMapped)
- {
- /* Get rid of it */
- BlMmUnmapVirtualAddressEx(InterfaceVa, PAGE_SIZE);
- *Interface = NULL;
- }
-
- /* Return the failure */
- return Status;
-}
-
-NTSTATUS
-EfiOpenProtocol (
- _In_ EFI_HANDLE Handle,
- _In_ EFI_GUID *Protocol,
- _Outptr_ PVOID* Interface
- )
-{
- EFI_STATUS EfiStatus;
- NTSTATUS Status;
- BL_ARCH_MODE OldMode;
-
- /* Are we using virtual memory/ */
- if (MmTranslationType != BlNone)
- {
- /* We need complex tracking to make this work */
- Status = EfiVmOpenProtocol(Handle, Protocol, Interface);
- }
- else
- {
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Are we on legacy 1.02? */
- if (EfiST->FirmwareRevision == EFI_1_02_SYSTEM_TABLE_REVISION)
- {
- /* Make the legacy call */
- EfiStatus = EfiBS->HandleProtocol(Handle, Protocol, Interface);
- }
- else
- {
- /* Use the UEFI version */
- EfiStatus = EfiBS->OpenProtocol(Handle,
- Protocol,
- Interface,
- EfiImageHandle,
- NULL,
- EFI_OPEN_PROTOCOL_GET_PROTOCOL);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
- }
-
- /* Convert the error to an NTSTATUS */
- Status = EfiGetNtStatusCode(EfiStatus);
- }
-
- /* Clear the interface on failure, and return the status */
- if (!NT_SUCCESS(Status))
- {
- *Interface = NULL;
- }
-
- return Status;
-}
-
-NTSTATUS
-EfiVmpCloseProtocol (
- _In_ EFI_HANDLE Handle,
- _In_ EFI_GUID* Protocol
- )
-{
- EFI_STATUS EfiStatus;
- BL_ARCH_MODE OldMode;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Are we on legacy 1.02? */
- if (EfiST->FirmwareRevision == EFI_1_02_SYSTEM_TABLE_REVISION)
- {
- /* Nothing to close */
- EfiStatus = EFI_SUCCESS;
- }
- else
- {
- /* Use the UEFI version */
- EfiStatus = EfiBS->CloseProtocol(Handle,
- Protocol,
- EfiImageHandle,
- NULL);
-
- /* Normalize not found as success */
- if (EfiStatus == EFI_NOT_FOUND)
- {
- EfiStatus = EFI_SUCCESS;
- }
- }
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert to NT status */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiVmpFreeInterfaceEntry (
- _In_ EFI_HANDLE Handle,
- _In_ PBL_EFI_PROTOCOL EfiProtocol
- )
-{
- NTSTATUS Status;
- BL_HASH_ENTRY HashEntry;
-
- /* Assume success */
- Status = STATUS_SUCCESS;
-
- /* Is this the last protocol on this handle? */
- if (IsListEmpty(&EfiProtocol->ListEntry))
- {
- /* Delete the hash table entry for this handle */
- HashEntry.Value = Handle;
- HashEntry.Size = sizeof(Handle);
- HashEntry.Flags = BL_HT_VALUE_IS_INLINE;
- Status = BlHtDelete(EfiProtHashTableId, &HashEntry);
-
- /* This will free the list head itself */
- BlMmFreeHeap(EfiProtocol->ListEntry.Flink);
- }
- else
- {
- /* Simply remove this entry */
- RemoveEntryList(&EfiProtocol->ListEntry);
- }
-
- /* Had we virtually mapped this protocol? */
- if (EfiProtocol->AddressMapped)
- {
- /* Unmap it */
- BlMmUnmapVirtualAddressEx(EfiProtocol->Interface, PAGE_SIZE);
- }
-
- /* Free the protocol entry, and return */
- BlMmFreeHeap(EfiProtocol);
- return Status;
-}
-
-NTSTATUS
-EfiVmCloseProtocol (
- _In_ EFI_HANDLE Handle,
- _In_ EFI_GUID* Protocol
- )
-{
- BL_HASH_ENTRY HashEntry;
- PLIST_ENTRY ListHead, NextEntry;
- NTSTATUS Status, CloseStatus;
- PBL_HASH_VALUE HashValue;
- PBL_EFI_PROTOCOL EfiProtocol;
-
- /* Lookup the list entry for this handle */
- HashEntry.Size = sizeof(Handle);
- HashEntry.Flags = BL_HT_VALUE_IS_INLINE;
- HashEntry.Value = Handle;
- Status = BlHtLookup(EfiProtHashTableId, &HashEntry, &HashValue);
- if (!NT_SUCCESS(Status))
- {
- /* This handle was never used for any protocols */
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Iterate through the list of opened protocols */
- ListHead = (PLIST_ENTRY)HashValue->Data;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Get this protocol entry and check for a match */
- EfiProtocol = CONTAINING_RECORD(NextEntry, BL_EFI_PROTOCOL, ListEntry);
- if (EfiProtocol->Protocol == Protocol)
- {
- /* Drop a reference -- was it the last one? */
- if (EfiProtocol->ReferenceCount-- == 1)
- {
- /* Yep -- free this entry */
- Status = EfiVmpFreeInterfaceEntry(Handle, EfiProtocol);
-
- /* Call firmware to close the protocol */
- CloseStatus = EfiVmpCloseProtocol(Handle, Protocol);
- if (!NT_SUCCESS(CloseStatus))
- {
- /* Override free status if close was a failure */
- Status = CloseStatus;
- }
-
- /* Return final status */
- return Status;
- }
- }
-
- /* Next entry */
- NextEntry = NextEntry->Flink;
- }
-
- /* This protocol was never opened */
- return STATUS_INVALID_PARAMETER;
-}
-
-NTSTATUS
-EfiCloseProtocol (
- _In_ EFI_HANDLE Handle,
- _In_ EFI_GUID *Protocol
- )
-{
- EFI_STATUS EfiStatus;
- NTSTATUS Status;
- BL_ARCH_MODE OldMode;
-
- /* Are we using virtual memory/ */
- if (MmTranslationType != BlNone)
- {
- /* We need complex tracking to make this work */
- Status = EfiVmCloseProtocol(Handle, Protocol);
- }
- else
- {
- /* Are we on legacy 1.02? */
- if (EfiST->FirmwareRevision == EFI_1_02_SYSTEM_TABLE_REVISION)
- {
- /* Nothing to close */
- EfiStatus = EFI_SUCCESS;
- }
- else
- {
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Use the UEFI version */
- EfiStatus = EfiBS->CloseProtocol(Handle, Protocol, EfiImageHandle, NULL);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Normalize not found as success */
- if (EfiStatus == EFI_NOT_FOUND)
- {
- EfiStatus = EFI_SUCCESS;
- }
- }
-
- /* Convert the error to an NTSTATUS */
- Status = EfiGetNtStatusCode(EfiStatus);
- }
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-EfiGetVariable (
- _In_ PWCHAR VariableName,
- _In_ EFI_GUID* VendorGuid,
- _Out_opt_ PULONG Attributes,
- _Inout_ PULONG DataSize,
- _Out_ PVOID Data
- )
-{
- EFI_STATUS EfiStatus;
- NTSTATUS Status;
- BL_ARCH_MODE OldMode;
- ULONG LocalAttributes;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"getvar vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Call the runtime API */
- EfiStatus = EfiRT->GetVariable(VariableName,
- VendorGuid,
- (UINT32*)&LocalAttributes,
- (UINTN*)DataSize,
- Data);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Return attributes back to the caller if asked to */
- if (Attributes)
- {
- *Attributes = LocalAttributes;
- }
-
- /* Convert the error to an NTSTATUS and return it */
- Status = EfiGetNtStatusCode(EfiStatus);
- return Status;
-}
-
-NTSTATUS
-BlpSecureBootEFIIsEnabled (
- VOID
- )
-{
- NTSTATUS Status;
- BOOLEAN SetupMode, SecureBoot;
- ULONG DataSize;
-
- /* Assume setup mode enabled, and no secure boot */
- SecureBoot = FALSE;
- SetupMode = TRUE;
-
- /* Get the SetupMode variable */
- DataSize = sizeof(SetupMode);
- Status = EfiGetVariable(L"SetupMode",
- &EfiGlobalVariable,
- NULL,
- &DataSize,
- &SetupMode);
- if (NT_SUCCESS(Status))
- {
- /* If it worked, get the SecureBoot variable */
- DataSize = sizeof(SecureBoot);
- Status = EfiGetVariable(L"SecureBoot",
- &EfiGlobalVariable,
- NULL,
- &DataSize,
- &SecureBoot);
- if (NT_SUCCESS(Status))
- {
- /* In setup mode or without secureboot turned on, return failure */
- if ((SecureBoot != TRUE) || (SetupMode))
- {
- Status = STATUS_INVALID_SIGNATURE;
- }
-
- // BlpSbdiStateFlags |= 8u;
- }
- }
-
- /* Return secureboot status */
- return Status;
-}
-
-NTSTATUS
-BlSecureBootIsEnabled (
- _Out_ PBOOLEAN SecureBootEnabled
- )
-{
- NTSTATUS Status;
-
- /* Have we checked before ? */
- if (!BlpFirmwareChecked)
- {
- /* First time checking */
- Status = BlpSecureBootEFIIsEnabled();
- if NT_SUCCESS(Status)
- {
- /* Yep, it's on */
- BlpFirmwareEnabled = TRUE;
- }
-
- /* Don't check again */
- BlpFirmwareChecked = TRUE;
- }
-
- /* Return the firmware result */
- *SecureBootEnabled = BlpFirmwareEnabled;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlSecureBootCheckForFactoryReset (
- VOID
- )
-{
- BOOLEAN SecureBootEnabled;
- NTSTATUS Status;
- ULONG DataSize;
-
- /* Initialize locals */
- DataSize = 0;
- SecureBootEnabled = FALSE;
-
- /* Check if secureboot is enabled */
- Status = BlSecureBootIsEnabled(&SecureBootEnabled);
- if (!(NT_SUCCESS(Status)) || !(SecureBootEnabled))
- {
- /* It's not. Check if there's a revocation list */
- Status = EfiGetVariable(L"RevocationList",
- &BlpEfiSecureBootPrivateNamespace,
- NULL,
- &DataSize,
- NULL);
- if ((NT_SUCCESS(Status)) || (Status == STATUS_BUFFER_TOO_SMALL))
- {
- /* We don't support this yet */
- EfiPrintf(L"Not yet supported\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
- }
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-NTSTATUS
-EfiConInReset (
- VOID
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"coninreset vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- EfiStatus = EfiConIn->Reset(EfiConIn, FALSE);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiConInExReset (
- VOID
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"conreset vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- EfiStatus = EfiConInEx->Reset(EfiConInEx, FALSE);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiConInExSetState (
- _In_ EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL *ConInEx,
- _In_ EFI_KEY_TOGGLE_STATE* KeyToggleState
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
- PHYSICAL_ADDRESS ConInExPhys, KeyTogglePhys;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Translate pointers from virtual to physical */
- BlMmTranslateVirtualAddress(ConInEx, &ConInExPhys);
- ConInEx = (EFI_SIMPLE_TEXT_INPUT_EX_PROTOCOL*)PhysicalAddressToPtr(ConInExPhys);
- BlMmTranslateVirtualAddress(KeyToggleState, &KeyTogglePhys);
- KeyToggleState = (EFI_KEY_TOGGLE_STATE*)PhysicalAddressToPtr(KeyTogglePhys);
-
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Make the EFI call */
- EfiStatus = ConInEx->SetState(ConInEx, KeyToggleState);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiSetWatchdogTimer (
- VOID
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Make the EFI call */
- EfiStatus = EfiBS->SetWatchdogTimer(0, 0, 0, NULL);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiGetMemoryMap (
- _Out_ UINTN* MemoryMapSize,
- _Inout_ EFI_MEMORY_DESCRIPTOR *MemoryMap,
- _Out_ UINTN* MapKey,
- _Out_ UINTN* DescriptorSize,
- _Out_ UINTN* DescriptorVersion
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
- PHYSICAL_ADDRESS MemoryMapSizePhysical, MemoryMapPhysical, MapKeyPhysical;
- PHYSICAL_ADDRESS DescriptorSizePhysical, DescriptorVersionPhysical;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Convert all of the addresses to physical */
- BlMmTranslateVirtualAddress(MemoryMapSize, &MemoryMapSizePhysical);
- MemoryMapSize = (UINTN*)PhysicalAddressToPtr(MemoryMapSizePhysical);
- BlMmTranslateVirtualAddress(MemoryMap, &MemoryMapPhysical);
- MemoryMap = (EFI_MEMORY_DESCRIPTOR*)PhysicalAddressToPtr(MemoryMapPhysical);
- BlMmTranslateVirtualAddress(MapKey, &MapKeyPhysical);
- MapKey = (UINTN*)PhysicalAddressToPtr(MapKeyPhysical);
- BlMmTranslateVirtualAddress(DescriptorSize, &DescriptorSizePhysical);
- DescriptorSize = (UINTN*)PhysicalAddressToPtr(DescriptorSizePhysical);
- BlMmTranslateVirtualAddress(DescriptorVersion, &DescriptorVersionPhysical);
- DescriptorVersion = (UINTN*)PhysicalAddressToPtr(DescriptorVersionPhysical);
-
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Make the EFI call */
- EfiStatus = EfiBS->GetMemoryMap(MemoryMapSize,
- MemoryMap,
- MapKey,
- DescriptorSize,
- DescriptorVersion);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiFreePages (
- _In_ ULONG Pages,
- _In_ EFI_PHYSICAL_ADDRESS PhysicalAddress
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Make the EFI call */
- EfiStatus = EfiBS->FreePages(PhysicalAddress, Pages);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiStall (
- _In_ ULONG StallTime
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Make the EFI call */
- EfiStatus = EfiBS->Stall(StallTime);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiConOutQueryMode (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ ULONG Mode,
- _In_ UINTN* Columns,
- _In_ UINTN* Rows
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"conqmode vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- EfiStatus = TextInterface->QueryMode(TextInterface, Mode, Columns, Rows);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiConOutSetMode (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ ULONG Mode
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"setmode vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- EfiStatus = TextInterface->SetMode(TextInterface, Mode);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiConOutSetAttribute (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ ULONG Attribute
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"sattr vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- EfiStatus = TextInterface->SetAttribute(TextInterface, Attribute);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiConOutSetCursorPosition (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ ULONG Column,
- _In_ ULONG Row
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"setcursor vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- EfiStatus = TextInterface->SetCursorPosition(TextInterface, Column, Row);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiConOutEnableCursor (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ BOOLEAN Visible
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"enablecurso vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- EfiStatus = TextInterface->EnableCursor(TextInterface, Visible);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiConOutOutputString (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _In_ PWCHAR String
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"output string vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- EfiStatus = TextInterface->OutputString(TextInterface, String);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-VOID
-EfiConOutReadCurrentMode (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextInterface,
- _Out_ EFI_SIMPLE_TEXT_OUTPUT_MODE* Mode
- )
-{
- BL_ARCH_MODE OldMode;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"readmode vm path\r\n");
- EfiStall(10000000);
- return;
- }
-
- /* Make the EFI call */
- RtlCopyMemory(Mode, TextInterface->Mode, sizeof(*Mode));
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-}
-
-VOID
-EfiGopGetFrameBuffer (
- _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
- _Out_ PHYSICAL_ADDRESS* FrameBuffer,
- _Out_ UINTN *FrameBufferSize
- )
-{
- BL_ARCH_MODE OldMode;
- PHYSICAL_ADDRESS GopInterfacePhys, FrameBufferPhys, FrameBufferSizePhys;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Translate pointer to physical */
- BlMmTranslateVirtualAddress(GopInterface, &GopInterfacePhys);
- GopInterface = PhysicalAddressToPtr(GopInterfacePhys);
-
- /* Translate pointer to physical */
- BlMmTranslateVirtualAddress(FrameBuffer, &FrameBufferPhys);
- FrameBuffer = PhysicalAddressToPtr(FrameBufferPhys);
-
- /* Translate pointer to physical */
- BlMmTranslateVirtualAddress(FrameBufferSize, &FrameBufferSizePhys);
- FrameBufferSize = PhysicalAddressToPtr(FrameBufferSizePhys);
-
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Make the EFI call */
- FrameBuffer->QuadPart = GopInterface->Mode->FrameBufferBase;
- *FrameBufferSize = GopInterface->Mode->FrameBufferSize;
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-}
-
-NTSTATUS
-EfiGopGetCurrentMode (
- _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
- _Out_ UINTN* Mode,
- _Out_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Information
- )
-{
- BL_ARCH_MODE OldMode;
- PHYSICAL_ADDRESS GopInterfacePhys, ModePhys, InformationPhys;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Translate pointer to physical */
- if (!BlMmTranslateVirtualAddress(GopInterface, &GopInterfacePhys))
- {
- return STATUS_UNSUCCESSFUL;
- }
- GopInterface = PhysicalAddressToPtr(GopInterfacePhys);
-
- /* Translate pointer to physical */
- if (!BlMmTranslateVirtualAddress(Mode, &ModePhys))
- {
- return STATUS_UNSUCCESSFUL;
- }
- Mode = PhysicalAddressToPtr(ModePhys);
-
- /* Translate pointer to physical */
- if (!BlMmTranslateVirtualAddress(Information, &InformationPhys))
- {
- return STATUS_UNSUCCESSFUL;
- }
- Information = PhysicalAddressToPtr(InformationPhys);
-
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Make the EFI call */
- *Mode = GopInterface->Mode->Mode;
- RtlCopyMemory(Information, GopInterface->Mode->Info, sizeof(*Information));
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Return back */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-EfiGopSetMode (
- _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopInterface,
- _In_ ULONG Mode
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
- BOOLEAN ModeChanged;
- NTSTATUS Status;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"gopsmode vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- if (Mode == GopInterface->Mode->Mode)
- {
- EfiStatus = EFI_SUCCESS;
- ModeChanged = FALSE;
- }
- {
- EfiStatus = GopInterface->SetMode(GopInterface, Mode);
- ModeChanged = TRUE;
- }
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Print out to the debugger if the mode was changed */
- Status = EfiGetNtStatusCode(EfiStatus);
- if ((ModeChanged) && (NT_SUCCESS(Status)))
- {
- /* FIXME @TODO: Should be BlStatusPrint */
- EfiPrintf(L"Console video mode set to 0x%x\r\n", Mode);
- }
-
- /* Convert the error to an NTSTATUS */
- return Status;
-}
-
-NTSTATUS
-EfiLocateHandleBuffer (
- _In_ EFI_LOCATE_SEARCH_TYPE SearchType,
- _In_ EFI_GUID *Protocol,
- _Inout_ PULONG HandleCount,
- _Inout_ EFI_HANDLE** Buffer
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
- UINTN BufferSize;
- PVOID InputBuffer;
- BOOLEAN TranslateResult;
- PHYSICAL_ADDRESS BufferPhys;
-
- /* Bail out if we're missing parameters */
- if (!(Buffer) || !(HandleCount))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Check if a buffer was passed in*/
- InputBuffer = *Buffer;
- if (InputBuffer)
- {
- /* Then we should already have a buffer size*/
- BufferSize = sizeof(EFI_HANDLE) * *HandleCount;
- }
- else
- {
- /* Then no buffer size exists */
- BufferSize = 0;
- }
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Translate the input buffer from virtual to physical */
- TranslateResult = BlMmTranslateVirtualAddress(InputBuffer, &BufferPhys);
- InputBuffer = TranslateResult ? PhysicalAddressToPtr(BufferPhys) : NULL;
-
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Try the first time */
- EfiStatus = EfiBS->LocateHandle(SearchType,
- Protocol,
- NULL,
- &BufferSize,
- InputBuffer);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Check result of first search */
- if (EfiStatus == EFI_BUFFER_TOO_SMALL)
- {
- /* Did we have an existing buffer? */
- if (*Buffer)
- {
- /* Free it */
- BlMmFreeHeap(*Buffer);
- }
-
- /* Allocate a new one */
- InputBuffer = BlMmAllocateHeap(BufferSize);
- *Buffer = InputBuffer;
- if (!InputBuffer)
- {
- /* No space, fail */
- return STATUS_NO_MEMORY;
- }
-
- if (OldMode != BlRealMode)
- {
- /* Translate the input buffer from virtual to physical */
- TranslateResult = BlMmTranslateVirtualAddress(InputBuffer,
- &BufferPhys);
- InputBuffer = TranslateResult ? PhysicalAddressToPtr(BufferPhys) : NULL;
-
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Try again */
- EfiStatus = EfiBS->LocateHandle(SearchType,
- Protocol,
- NULL,
- &BufferSize,
- InputBuffer);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
- }
-
- /* Return the number of handles */
- *HandleCount = BufferSize / sizeof(EFI_HANDLE);
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-VOID
-EfiResetSystem (
- _In_ EFI_RESET_TYPE ResetType
- )
-{
- BL_ARCH_MODE OldMode;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"reset vm path\r\n");
- EfiStall(10000000);
- return;
- }
-
- /* Call the EFI runtime */
- EfiRT->ResetSystem(ResetType, EFI_SUCCESS, 0, NULL);
-}
-
-NTSTATUS
-EfiConnectController (
- _In_ EFI_HANDLE ControllerHandle
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
-
- /* Is this EFI 1.02? */
- if (EfiST->Hdr.Revision == EFI_1_02_SYSTEM_TABLE_REVISION)
- {
- /* This function didn't exist back then */
- return STATUS_NOT_SUPPORTED;
- }
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- EfiPrintf(L"connectctrl vm path\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Make the EFI call */
- EfiStatus = EfiBS->ConnectController(ControllerHandle, NULL, NULL, TRUE);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfiAllocatePages (
- _In_ ULONG Type,
- _In_ ULONG Pages,
- _Inout_ EFI_PHYSICAL_ADDRESS* Memory
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
- PHYSICAL_ADDRESS MemoryPhysical;
-
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* Translate output address */
- BlMmTranslateVirtualAddress(Memory, &MemoryPhysical);
- Memory = (EFI_PHYSICAL_ADDRESS*)PhysicalAddressToPtr(MemoryPhysical);
-
- /* Switch to real mode */
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Make the EFI call */
- EfiStatus = EfiBS->AllocatePages(Type, EfiLoaderData, Pages, Memory);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the error to an NTSTATUS */
- return EfiGetNtStatusCode(EfiStatus);
-}
-
-NTSTATUS
-EfipGetSystemTable (
- _In_ EFI_GUID *TableGuid,
- _Out_ PPHYSICAL_ADDRESS TableAddress
- )
-{
- ULONG i;
- NTSTATUS Status;
-
- /* Assume failure */
- Status = STATUS_NOT_FOUND;
-
- /* Loop through the configuration tables */
- for (i = 0; i < EfiST->NumberOfTableEntries; i++)
- {
- /* Check if this one matches the one we want */
- if (RtlEqualMemory(&EfiST->ConfigurationTable[i].VendorGuid,
- TableGuid,
- sizeof(*TableGuid)))
- {
- /* Return its address */
- TableAddress->QuadPart = (ULONG_PTR)EfiST->ConfigurationTable[i].VendorTable;
- Status = STATUS_SUCCESS;
- break;
- }
- }
-
- /* Return the search result */
- return Status;
-}
-
-NTSTATUS
-EfipGetRsdt (
- _Out_ PPHYSICAL_ADDRESS FoundRsdt
- )
-{
- NTSTATUS Status;
- ULONG Length;
- PHYSICAL_ADDRESS RsdpAddress, Rsdt;
- PRSDP Rsdp;
-
- /* Assume failure */
- Length = 0;
- Rsdp = NULL;
-
- /* Check if we already know it */
- if (EfiRsdt.QuadPart)
- {
- /* Return it */
- *FoundRsdt = EfiRsdt;
- return STATUS_SUCCESS;
- }
-
- /* Otherwise, look for the ACPI 2.0 RSDP (XSDT really) */
- Status = EfipGetSystemTable(&EfiRootAcpiTableGuid, &RsdpAddress);
- if (!NT_SUCCESS(Status))
- {
- /* Didn't fint it, look for the ACPI 1.0 RSDP (RSDT really) */
- Status = EfipGetSystemTable(&EfiRootAcpiTable10Guid, &RsdpAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- }
-
- /* Map it */
- Length = sizeof(*Rsdp);
- Status = BlMmMapPhysicalAddressEx((PVOID*)&Rsdp,
- 0,
- Length,
- RsdpAddress);
- if (NT_SUCCESS(Status))
- {
- /* Check the revision (anything >= 2.0 is XSDT) */
- if (Rsdp->Revision)
- {
- /* Check if the table is bigger than just its header */
- if (Rsdp->Length > Length)
- {
- /* Capture the real length */
- Length = Rsdp->Length;
-
- /* Unmap our header mapping */
- BlMmUnmapVirtualAddressEx(Rsdp, sizeof(*Rsdp));
-
- /* And map the whole thing now */
- Status = BlMmMapPhysicalAddressEx((PVOID*)&Rsdp,
- 0,
- Length,
- RsdpAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- }
-
- /* Read the XSDT address from the table*/
- Rsdt = Rsdp->XsdtAddress;
- }
- else
- {
- /* ACPI 1.0 so just read the RSDT */
- Rsdt.QuadPart = Rsdp->RsdtAddress;
- }
-
- /* Save it for later */
- EfiRsdt = Rsdt;
-
- /* And return it back */
- *FoundRsdt = Rsdt;
- }
-
- /* Check if we had mapped the RSDP */
- if (Rsdp)
- {
- /* Unmap it */
- BlMmUnmapVirtualAddressEx(Rsdp, Length);
- }
-
- /* Return search result back to caller */
- return Status;
-}
-
-BL_MEMORY_ATTR
-MmFwpGetOsAttributeType (
- _In_ ULONGLONG Attribute
- )
-{
- BL_MEMORY_ATTR OsAttribute = 0;
-
- if (Attribute & EFI_MEMORY_UC)
- {
- OsAttribute = BlMemoryUncached;
- }
-
- if (Attribute & EFI_MEMORY_WC)
- {
- OsAttribute |= BlMemoryWriteCombined;
- }
-
- if (Attribute & EFI_MEMORY_WT)
- {
- OsAttribute |= BlMemoryWriteThrough;
- }
-
- if (Attribute & EFI_MEMORY_WB)
- {
- OsAttribute |= BlMemoryWriteBack;
- }
-
- if (Attribute & EFI_MEMORY_UCE)
- {
- OsAttribute |= BlMemoryUncachedExported;
- }
-
- if (Attribute & EFI_MEMORY_WP)
- {
- OsAttribute |= BlMemoryWriteProtected;
- }
-
- if (Attribute & EFI_MEMORY_RP)
- {
- OsAttribute |= BlMemoryReadProtected;
- }
-
- if (Attribute & EFI_MEMORY_XP)
- {
- OsAttribute |= BlMemoryExecuteProtected;
- }
-
- if (Attribute & EFI_MEMORY_RUNTIME)
- {
- OsAttribute |= BlMemoryRuntime;
- }
-
- return OsAttribute;
-}
-
-BL_MEMORY_TYPE
-MmFwpGetOsMemoryType (
- _In_ EFI_MEMORY_TYPE MemoryType
- )
-{
- BL_MEMORY_TYPE OsType;
-
- switch (MemoryType)
- {
- case EfiLoaderCode:
- case EfiLoaderData:
- OsType = BlLoaderMemory;
- break;
-
- case EfiBootServicesCode:
- case EfiBootServicesData:
- OsType = BlEfiBootMemory;
- break;
-
- case EfiRuntimeServicesCode:
- OsType = BlEfiRuntimeCodeMemory;
- break;
-
- case EfiRuntimeServicesData:
- OsType = BlEfiRuntimeDataMemory;
- break;
-
- case EfiConventionalMemory:
- OsType = BlConventionalMemory;
- break;
-
- case EfiUnusableMemory:
- OsType = BlUnusableMemory;
- break;
-
- case EfiACPIReclaimMemory:
- OsType = BlAcpiReclaimMemory;
- break;
-
- case EfiACPIMemoryNVS:
- OsType = BlAcpiNvsMemory;
- break;
-
- case EfiMemoryMappedIO:
- OsType = BlDeviceIoMemory;
- break;
-
- case EfiMemoryMappedIOPortSpace:
- OsType = BlDevicePortMemory;
- break;
-
- case EfiPalCode:
- OsType = BlPalMemory;
- break;
-
- default:
- OsType = BlReservedMemory;
- break;
- }
-
- return OsType;
-}
-
-NTSTATUS
-MmFwGetMemoryMap (
- _Out_ PBL_MEMORY_DESCRIPTOR_LIST MemoryMap,
- _In_ ULONG Flags
- )
-{
- BL_LIBRARY_PARAMETERS LibraryParameters = BlpLibraryParameters;
- BOOLEAN UseEfiBuffer, HaveRamDisk;
- NTSTATUS Status;
- ULONGLONG Pages, StartPage, EndPage, EfiBufferPage;
- UINTN EfiMemoryMapSize, MapKey, DescriptorSize, DescriptorVersion;
- EFI_PHYSICAL_ADDRESS EfiBuffer = 0;
- EFI_MEMORY_DESCRIPTOR* EfiMemoryMap;
- EFI_STATUS EfiStatus;
- BL_ARCH_MODE OldMode;
- EFI_MEMORY_DESCRIPTOR EfiDescriptor;
- BL_MEMORY_TYPE MemoryType;
- PBL_MEMORY_DESCRIPTOR Descriptor;
- BL_MEMORY_ATTR Attribute;
- PVOID LibraryBuffer;
-
- /* Initialize EFI memory map attributes */
- EfiMemoryMapSize = MapKey = DescriptorSize = DescriptorVersion = 0;
- LibraryBuffer = NULL;
-
- /* Increment the nesting depth */
- MmDescriptorCallTreeCount++;
-
- /* Determine if we should use EFI or our own allocator at this point */
- UseEfiBuffer = Flags & BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS;
- if (!(LibraryParameters.LibraryFlags & BL_LIBRARY_FLAG_INITIALIZATION_COMPLETED))
- {
- UseEfiBuffer = TRUE;
- }
-
- /* Bail out if we don't have a list to use */
- if (MemoryMap == NULL)
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Free the current descriptor list */
- MmMdFreeList(MemoryMap);
-
- /* Call into EFI to get the size of the memory map */
- Status = EfiGetMemoryMap(&EfiMemoryMapSize,
- NULL,
- &MapKey,
- &DescriptorSize,
- &DescriptorVersion);
- if (Status != STATUS_BUFFER_TOO_SMALL)
- {
- /* This should've failed because our buffer was too small, nothing else */
- if (NT_SUCCESS(Status))
- {
- Status = STATUS_UNSUCCESSFUL;
- }
- goto Quickie;
- }
-
- /* Add 4 more descriptors just in case things changed */
- EfiMemoryMapSize += (4 * DescriptorSize);
- Pages = BYTES_TO_PAGES(EfiMemoryMapSize);
-
- /* Should we use EFI to grab memory? */
- if (UseEfiBuffer)
- {
- /* Yes -- request one more page to align up correctly */
- Pages++;
-
- /* Grab the required pages */
- Status = EfiAllocatePages(AllocateAnyPages,
- Pages,
- &EfiBuffer);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"EFI allocation failed: %lx\r\n", Status);
- goto Quickie;
- }
-
- /* Free the pages for now */
- Status = EfiFreePages(Pages, EfiBuffer);
- if (!NT_SUCCESS(Status))
- {
- EfiBuffer = 0;
- goto Quickie;
- }
-
- /* Now round to the actual buffer size, removing the extra page */
- EfiBuffer = ROUND_TO_PAGES(EfiBuffer);
- Pages--;
- Status = EfiAllocatePages(AllocateAddress,
- Pages,
- &EfiBuffer);
- if (!NT_SUCCESS(Status))
- {
- EfiBuffer = 0;
- goto Quickie;
- }
-
- /* Get the final aligned size and proper buffer */
- EfiMemoryMapSize = EFI_PAGES_TO_SIZE(Pages);
- EfiMemoryMap = (EFI_MEMORY_DESCRIPTOR*)(ULONG_PTR)EfiBuffer;
-
- /* Switch to real mode if not already in it */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Call EFI to get the memory map */
- EfiStatus = EfiBS->GetMemoryMap(&EfiMemoryMapSize,
- EfiMemoryMap,
- &MapKey,
- &DescriptorSize,
- &DescriptorVersion);
-
- /* Switch back into the previous mode */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert the result code */
- Status = EfiGetNtStatusCode(EfiStatus);
- }
- else
- {
- /* Round the map to pages */
- Pages = BYTES_TO_PAGES(EfiMemoryMapSize);
-
- /* Allocate a large enough buffer */
- Status = MmPapAllocatePagesInRange(&LibraryBuffer,
- BlLoaderData,
- Pages,
- 0,
- 0,
- 0,
- 0);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to allocate mapped VM for EFI map: %lx\r\n", Status);
- goto Quickie;
- }
-
- /* Call EFI to get the memory map */
- EfiMemoryMap = LibraryBuffer;
- Status = EfiGetMemoryMap(&EfiMemoryMapSize,
- LibraryBuffer,
- &MapKey,
- &DescriptorSize,
- &DescriptorVersion);
- }
-
- /* So far so good? */
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to get EFI memory map: %lx\r\n", Status);
- goto Quickie;
- }
-
- /* Did we get correct data from firmware? */
- if (((EfiMemoryMapSize % DescriptorSize)) ||
- (DescriptorSize < sizeof(EFI_MEMORY_DESCRIPTOR)))
- {
- EfiPrintf(L"Incorrect descriptor size\r\n");
- Status = STATUS_UNSUCCESSFUL;
- goto Quickie;
- }
-
- /* Did we boot from a RAM disk? */
- if ((BlpBootDevice->DeviceType == LocalDevice) &&
- (BlpBootDevice->Local.Type == RamDiskDevice))
- {
- /* We don't handle this yet */
- EfiPrintf(L"RAM boot not supported\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
- goto Quickie;
- }
- else
- {
- /* We didn't, so there won't be any need to find the memory descriptor */
- HaveRamDisk = FALSE;
- }
-
- /* Loop the EFI memory map */
-#if 0
- EfiPrintf(L"UEFI MEMORY MAP\r\n\r\n");
- EfiPrintf(L"TYPE START END ATTRIBUTES\r\n");
- EfiPrintf(L"===============================================================\r\n");
-#endif
- while (EfiMemoryMapSize != 0)
- {
- /* Check if this is an EFI buffer, but we're not in real mode */
- if ((UseEfiBuffer) && (OldMode != BlRealMode))
- {
- BlpArchSwitchContext(BlRealMode);
- }
-
- /* Capture it so we can go back to protected mode (if possible) */
- EfiDescriptor = *EfiMemoryMap;
-
- /* Go back to protected mode, if we had switched */
- if ((UseEfiBuffer) && (OldMode != BlRealMode))
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Convert to OS memory type */
- MemoryType = MmFwpGetOsMemoryType(EfiDescriptor.Type);
-
- /* Round up or round down depending on where the memory is coming from */
- if (MemoryType == BlConventionalMemory)
- {
- StartPage = BYTES_TO_PAGES(EfiDescriptor.PhysicalStart);
- }
- else
- {
- StartPage = EfiDescriptor.PhysicalStart >> PAGE_SHIFT;
- }
-
- /* Calculate the ending page */
- EndPage = StartPage + EfiDescriptor.NumberOfPages;
-
- /* If after rounding, we ended up with 0 pages, skip this */
- if (StartPage == EndPage)
- {
- goto LoopAgain;
- }
-#if 0
- EfiPrintf(L"%08X 0x%016I64X-0x%016I64X 0x%I64X\r\n",
- MemoryType,
- StartPage << PAGE_SHIFT,
- EndPage << PAGE_SHIFT,
- EfiDescriptor.Attribute);
-#endif
- /* Check for any range of memory below 1MB */
- if (StartPage < 0x100)
- {
- /* Does this range actually contain NULL? */
- if (StartPage == 0)
- {
- /* Manually create a reserved descriptof for this page */
- Attribute = MmFwpGetOsAttributeType(EfiDescriptor.Attribute);
- Descriptor = MmMdInitByteGranularDescriptor(Attribute,
- BlReservedMemory,
- 0,
- 0,
- 1);
- if (!Descriptor)
- {
- Status = STATUS_INSUFFICIENT_RESOURCES;
- break;
- }
-
- /* Add this descriptor into the list */
- Status = MmMdAddDescriptorToList(MemoryMap,
- Descriptor,
- BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to add zero page descriptor: %lx\r\n", Status);
- break;
- }
-
- /* Now handle the rest of the range, unless this was it */
- StartPage = 1;
- if (EndPage == 1)
- {
- goto LoopAgain;
- }
- }
-
- /* Does the range go beyond 1MB? */
- if (EndPage > 0x100)
- {
- /* Then create the descriptor for everything up until the megabyte */
- Attribute = MmFwpGetOsAttributeType(EfiDescriptor.Attribute);
- Descriptor = MmMdInitByteGranularDescriptor(Attribute,
- MemoryType,
- StartPage,
- 0,
- 0x100 - StartPage);
- if (!Descriptor)
- {
- Status = STATUS_INSUFFICIENT_RESOURCES;
- break;
- }
-
- /* Check if this region is currently free RAM */
- if (Descriptor->Type == BlConventionalMemory)
- {
- /* Set the appropriate flag on the descriptor */
- Descriptor->Flags |= BlMemoryBelow1MB;
- }
-
- /* Add this descriptor into the list */
- Status = MmMdAddDescriptorToList(MemoryMap,
- Descriptor,
- BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to add 1MB descriptor: %lx\r\n", Status);
- break;
- }
-
- /* Now handle the rest of the range above 1MB */
- StartPage = 0x100;
- }
- }
-
- /* Check if we loaded from a RAM disk */
- if (HaveRamDisk)
- {
- /* We don't handle this yet */
- EfiPrintf(L"RAM boot not supported\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
- goto Quickie;
- }
-
- /* Create a descriptor for the current range */
- Attribute = MmFwpGetOsAttributeType(EfiDescriptor.Attribute);
- Descriptor = MmMdInitByteGranularDescriptor(Attribute,
- MemoryType,
- StartPage,
- 0,
- EndPage - StartPage);
- if (!Descriptor)
- {
- Status = STATUS_INSUFFICIENT_RESOURCES;
- break;
- }
-
- /* Check if this region is currently free RAM below 1MB */
- if ((Descriptor->Type == BlConventionalMemory) && (EndPage <= 0x100))
- {
- /* Set the appropriate flag on the descriptor */
- Descriptor->Flags |= BlMemoryBelow1MB;
- }
-
- /* Add the descriptor to the list, requesting coalescing as asked */
- Status = MmMdAddDescriptorToList(MemoryMap,
- Descriptor,
- BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG |
- ((Flags & BL_MM_FLAG_REQUEST_COALESCING) ?
- BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG : 0));
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to add full descriptor: %lx\r\n", Status);
- break;
- }
-
-LoopAgain:
- /* Consume this descriptor, and move to the next one */
- EfiMemoryMapSize -= DescriptorSize;
- EfiMemoryMap = (PVOID)((ULONG_PTR)EfiMemoryMap + DescriptorSize);
- }
-
- /* Check if we are using the local UEFI buffer */
- if (!UseEfiBuffer)
- {
- goto Quickie;
- }
-
- /* Free the EFI buffer */
- Status = EfiFreePages(Pages, EfiBuffer);
- if (!NT_SUCCESS(Status))
- {
- /* Keep the pages marked 'in use' and fake success */
- Status = STATUS_SUCCESS;
- goto Quickie;
- }
-
- /* Get the base page of the EFI buffer */
- EfiBufferPage = EfiBuffer >> PAGE_SHIFT;
- Pages = (EfiBufferPage + Pages) - EfiBufferPage;
-
- /* Don't try freeing below */
- EfiBuffer = 0;
-
- /* Find the current descriptor for the allocation */
- Descriptor = MmMdFindDescriptorFromMdl(MemoryMap,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- EfiBufferPage);
- if (!Descriptor)
- {
- Status = STATUS_UNSUCCESSFUL;
- goto Quickie;
- }
-
- /* Convert it to a free descriptor */
- Descriptor = MmMdInitByteGranularDescriptor(Descriptor->Flags,
- BlConventionalMemory,
- EfiBufferPage,
- 0,
- Pages);
- if (!Descriptor)
- {
- Status = STATUS_INSUFFICIENT_RESOURCES;
- goto Quickie;
- }
-
- /* Remove the region from the memory map */
- Status = MmMdRemoveRegionFromMdlEx(MemoryMap,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- EfiBufferPage,
- Pages,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- MmMdFreeDescriptor(Descriptor);
- goto Quickie;
- }
-
- /* Add it back as free memory */
- Status = MmMdAddDescriptorToList(MemoryMap,
- Descriptor,
- BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG);
-
-Quickie:
- /* Free the EFI buffer, if we had one */
- if (EfiBuffer != 0)
- {
- EfiFreePages(Pages, EfiBuffer);
- }
-
- /* Free the library-allocated buffer, if we had one */
- if (LibraryBuffer != 0)
- {
- MmPapFreePages(LibraryBuffer, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
-
- /* On failure, free the memory map if one was passed in */
- if (!NT_SUCCESS(Status) && (MemoryMap != NULL))
- {
- MmMdFreeList(MemoryMap);
- }
-
- /* Decrement the nesting depth and return */
- MmDescriptorCallTreeCount--;
- return Status;
-}
-
-NTSTATUS
-BlpFwInitialize (
- _In_ ULONG Phase,
- _In_ PBL_FIRMWARE_DESCRIPTOR FirmwareData
- )
-{
- NTSTATUS Status = STATUS_SUCCESS;
- EFI_KEY_TOGGLE_STATE KeyToggleState;
-
- /* Check if we have valid firmware data */
- if (!(FirmwareData) || !(FirmwareData->Version))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Check which boot phase we're in */
- if (Phase != 0)
- {
- /* Memory manager is ready, open the extended input protocol */
- Status = EfiOpenProtocol(EfiST->ConsoleInHandle,
- &EfiSimpleTextInputExProtocol,
- (PVOID*)&EfiConInEx);
- if (NT_SUCCESS(Status))
- {
- /* Set the initial key toggle state */
- KeyToggleState = EFI_TOGGLE_STATE_VALID | 40;
- EfiConInExSetState(EfiConInEx, &KeyToggleState);
- }
-
- /* Setup the watchdog timer */
- EfiSetWatchdogTimer();
- }
- else
- {
- /* Make a copy of the parameters */
- EfiFirmwareParameters = &EfiFirmwareData;
-
- /* Check which version we received */
- if (FirmwareData->Version == 1)
- {
- /* FIXME: Not supported */
- Status = STATUS_NOT_SUPPORTED;
- }
- else if (FirmwareData->Version >= BL_FIRMWARE_DESCRIPTOR_VERSION)
- {
- /* Version 2 -- save the data */
- EfiFirmwareData = *FirmwareData;
- EfiSystemTable = FirmwareData->SystemTable;
- EfiImageHandle = FirmwareData->ImageHandle;
-
- /* Set the EDK-II style variables as well */
- EfiST = EfiSystemTable;
- EfiBS = EfiSystemTable->BootServices;
- EfiRT = EfiSystemTable->RuntimeServices;
- EfiConOut = EfiSystemTable->ConOut;
- EfiConIn = EfiSystemTable->ConIn;
- EfiConInEx = NULL;
- }
- else
- {
- /* Unknown version */
- Status = STATUS_NOT_SUPPORTED;
- }
- }
-
- /* Return the initialization state */
- return Status;
-}
-
-NTSTATUS
-BlFwGetParameters (
- _In_ PBL_FIRMWARE_DESCRIPTOR Parameters
- )
-{
- /* Make sure we got an argument */
- if (!Parameters)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Copy the static data */
- *Parameters = *EfiFirmwareParameters;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlFwEnumerateDevice (
- _In_ PBL_DEVICE_DESCRIPTOR Device
- )
-{
- NTSTATUS Status;
- ULONG PathProtocols, BlockProtocols;
- EFI_HANDLE* PathArray;
- EFI_HANDLE* BlockArray;
-
- /* Initialize locals */
- BlockArray = NULL;
- PathArray = NULL;
- PathProtocols = 0;
- BlockProtocols = 0;
-
- /* Enumeration only makes sense on disks or partitions */
- if ((Device->DeviceType != DiskDevice) &&
- (Device->DeviceType != LegacyPartitionDevice) &&
- (Device->DeviceType != PartitionDevice))
- {
- return STATUS_NOT_SUPPORTED;
- }
-
- /* Enumerate the list of device paths */
- Status = EfiLocateHandleBuffer(ByProtocol,
- &EfiDevicePathProtocol,
- &PathProtocols,
- &PathArray);
- if (NT_SUCCESS(Status))
- {
- /* Loop through each one */
- Status = STATUS_NOT_FOUND;
- while (PathProtocols)
- {
- /* Attempt to connect the driver for this device epath */
- Status = EfiConnectController(PathArray[--PathProtocols]);
- if (NT_SUCCESS(Status))
- {
- /* Now enumerate any block I/O devices the driver added */
- Status = EfiLocateHandleBuffer(ByProtocol,
- &EfiBlockIoProtocol,
- &BlockProtocols,
- &BlockArray);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* Loop through each one */
- while (BlockProtocols)
- {
- /* Check if one of the new devices is the one we want */
- Status = BlockIoEfiCompareDevice(Device,
- BlockArray[--BlockProtocols]);
- if (NT_SUCCESS(Status))
- {
- /* Yep, all done */
- goto Quickie;
- }
- }
-
- /* Move on to the next device path */
- BlMmFreeHeap(BlockArray);
- BlockArray = NULL;
- }
- }
- }
-
-Quickie:
- /* We're done -- free the array of device path protocols, if any */
- if (PathArray)
- {
- BlMmFreeHeap(PathArray);
- }
-
- /* We're done -- free the array of block I/O protocols, if any */
- if (BlockArray)
- {
- BlMmFreeHeap(BlockArray);
- }
-
- /* Return if we found the device or not */
- return Status;
-}
-
-/*++
- * @name EfiGetEfiStatusCode
- *
- * The EfiGetEfiStatusCode routine converts an NT Status to an EFI status.
- *
- * @param Status
- * NT Status code to be converted.
- *
- * @remark Only certain, specific NT status codes are converted to EFI codes.
- *
- * @return The corresponding EFI Status code, EFI_NO_MAPPING otherwise.
- *
- *--*/
-EFI_STATUS
-EfiGetEfiStatusCode(
- _In_ NTSTATUS Status
- )
-{
- switch (Status)
- {
- case STATUS_NOT_SUPPORTED:
- return EFI_UNSUPPORTED;
- case STATUS_DISK_FULL:
- return EFI_VOLUME_FULL;
- case STATUS_INSUFFICIENT_RESOURCES:
- return EFI_OUT_OF_RESOURCES;
- case STATUS_MEDIA_WRITE_PROTECTED:
- return EFI_WRITE_PROTECTED;
- case STATUS_DEVICE_NOT_READY:
- return EFI_NOT_STARTED;
- case STATUS_DEVICE_ALREADY_ATTACHED:
- return EFI_ALREADY_STARTED;
- case STATUS_MEDIA_CHANGED:
- return EFI_MEDIA_CHANGED;
- case STATUS_INVALID_PARAMETER:
- return EFI_INVALID_PARAMETER;
- case STATUS_ACCESS_DENIED:
- return EFI_ACCESS_DENIED;
- case STATUS_BUFFER_TOO_SMALL:
- return EFI_BUFFER_TOO_SMALL;
- case STATUS_DISK_CORRUPT_ERROR:
- return EFI_VOLUME_CORRUPTED;
- case STATUS_REQUEST_ABORTED:
- return EFI_ABORTED;
- case STATUS_NO_MEDIA:
- return EFI_NO_MEDIA;
- case STATUS_IO_DEVICE_ERROR:
- return EFI_DEVICE_ERROR;
- case STATUS_INVALID_BUFFER_SIZE:
- return EFI_BAD_BUFFER_SIZE;
- case STATUS_NOT_FOUND:
- return EFI_NOT_FOUND;
- case STATUS_DRIVER_UNABLE_TO_LOAD:
- return EFI_LOAD_ERROR;
- case STATUS_NO_MATCH:
- return EFI_NO_MAPPING;
- case STATUS_SUCCESS:
- return EFI_SUCCESS;
- case STATUS_TIMEOUT:
- return EFI_TIMEOUT;
- default:
- return EFI_NO_MAPPING;
- }
-}
-
-/*++
- * @name EfiGetNtStatusCode
- *
- * The EfiGetNtStatusCode routine converts an EFI Status to an NT status.
- *
- * @param EfiStatus
- * EFI Status code to be converted.
- *
- * @remark Only certain, specific EFI status codes are converted to NT codes.
- *
- * @return The corresponding NT Status code, STATUS_UNSUCCESSFUL otherwise.
- *
- *--*/
-NTSTATUS
-EfiGetNtStatusCode (
- _In_ EFI_STATUS EfiStatus
- )
-{
- switch (EfiStatus)
- {
- case EFI_NOT_READY:
- case EFI_NOT_FOUND:
- return STATUS_NOT_FOUND;
- case EFI_NO_MEDIA:
- return STATUS_NO_MEDIA;
- case EFI_MEDIA_CHANGED:
- return STATUS_MEDIA_CHANGED;
- case EFI_ACCESS_DENIED:
- case EFI_SECURITY_VIOLATION:
- return STATUS_ACCESS_DENIED;
- case EFI_TIMEOUT:
- case EFI_NO_RESPONSE:
- return STATUS_TIMEOUT;
- case EFI_NO_MAPPING:
- return STATUS_NO_MATCH;
- case EFI_NOT_STARTED:
- return STATUS_DEVICE_NOT_READY;
- case EFI_ALREADY_STARTED:
- return STATUS_DEVICE_ALREADY_ATTACHED;
- case EFI_ABORTED:
- return STATUS_REQUEST_ABORTED;
- case EFI_VOLUME_FULL:
- return STATUS_DISK_FULL;
- case EFI_DEVICE_ERROR:
- return STATUS_IO_DEVICE_ERROR;
- case EFI_WRITE_PROTECTED:
- return STATUS_MEDIA_WRITE_PROTECTED;
- /* @FIXME: ReactOS Headers don't yet have this */
- //case EFI_OUT_OF_RESOURCES:
- //return STATUS_INSUFFICIENT_NVRAM_RESOURCES;
- case EFI_VOLUME_CORRUPTED:
- return STATUS_DISK_CORRUPT_ERROR;
- case EFI_BUFFER_TOO_SMALL:
- return STATUS_BUFFER_TOO_SMALL;
- case EFI_SUCCESS:
- return STATUS_SUCCESS;
- case EFI_LOAD_ERROR:
- return STATUS_DRIVER_UNABLE_TO_LOAD;
- case EFI_INVALID_PARAMETER:
- return STATUS_INVALID_PARAMETER;
- case EFI_UNSUPPORTED:
- return STATUS_NOT_SUPPORTED;
- case EFI_BAD_BUFFER_SIZE:
- return STATUS_INVALID_BUFFER_SIZE;
- default:
- return STATUS_UNSUCCESSFUL;
- }
-}
diff --git a/boot/environ/lib/firmware/fwutil.c b/boot/environ/lib/firmware/fwutil.c
deleted file mode 100644
index b408f69c578..00000000000
--- a/boot/environ/lib/firmware/fwutil.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/firmware/fwutil.c
- * PURPOSE: Boot Library Firmware Utility Functions
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-VOID
-BlFwReboot (
- VOID
- )
-{
-#ifdef BL_KD_SUPPORTED
- /* Stop the boot debugger*/
- BlBdStop();
-#endif
-
- /* Reset the machine */
- EfiResetSystem(EfiResetCold);
-}
-
-NTSTATUS
-MmFwFreePages (
- _In_ ULONG BasePage,
- _In_ ULONG PageCount
- )
-{
- /* Free the pages */
- return EfiFreePages(PageCount, BasePage << PAGE_SHIFT);
-}
diff --git a/boot/environ/lib/io/blkcache.c b/boot/environ/lib/io/blkcache.c
deleted file mode 100644
index efedf541f40..00000000000
--- a/boot/environ/lib/io/blkcache.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/blkcache.c
- * PURPOSE: Boot Library Block Cache Management Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-ULONG BcpBlockAllocatorHandle;
-ULONG BcpHashTableId;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-BcpDestroy (
- VOID
- )
-{
- //BcpPurgeCacheEntries();
- //return BlpMmDeleteBlockAllocator(BcpBlockAllocatorHandle);
- EfiPrintf(L"Destructor for block cache not yet implemented\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-BOOLEAN
-BcpCompareKey (
- _In_ PBL_HASH_ENTRY Entry1,
- _In_ PBL_HASH_ENTRY Entry2
- )
-{
- PULONG Value1, Value2;
-
- Value1 = Entry1->Value;
- Value2 = Entry2->Value;
- return Entry1->Size == Entry2->Size && Entry1->Flags == Entry2->Flags && *Value1 == *Value2 && Value1[1] == Value2[1] && Value1[2] == Value2[2];
-}
-
-ULONG
-BcpHashFunction (
- _In_ PBL_HASH_ENTRY Entry,
- _In_ ULONG TableSize
- )
-{
- ULONG i, j, ValueHash;
- PUCHAR ValueBuffer;
-
- j = 0;
- ValueHash = 0;
- i = 0;
-
- ValueBuffer = Entry->Value;
-
- do
- {
- ValueHash += ValueBuffer[i++];
- } while (i < 8);
-
- do
- {
- ValueHash += ValueBuffer[j++ + 8];
- } while (j < 4);
-
- return ValueHash % TableSize;
-}
-
-NTSTATUS
-BcInitialize (
- VOID
- )
-{
- NTSTATUS Status;
-
- Status = BlHtCreate(50, BcpHashFunction, BcpCompareKey, &BcpHashTableId);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- BcpBlockAllocatorHandle = BlpMmCreateBlockAllocator();
- if (BcpBlockAllocatorHandle == -1)
- {
- Status = STATUS_UNSUCCESSFUL;
- goto Quickie;
- }
-
- Status = BlpIoRegisterDestroyRoutine(BcpDestroy);
- if (Status >= 0)
- {
- return Status;
- }
-
-Quickie:
- EfiPrintf(L"Failure path not yet implemented\r\n");
-#if 0
- if (BcpHashTableId != -1)
- {
- BlHtDestroy(BcpHashTableId);
- }
- if (BcpBlockAllocatorHandle != -1)
- {
- BlpMmDeleteBlockAllocator(BcpBlockAllocatorHandle);
- }
-#endif
- return Status;
-}
diff --git a/boot/environ/lib/io/device.c b/boot/environ/lib/io/device.c
deleted file mode 100644
index 7ba7a18b7e4..00000000000
--- a/boot/environ/lib/io/device.c
+++ /dev/null
@@ -1,2345 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/device.c
- * PURPOSE: Boot Library Device Management Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-typedef struct _BL_DEVICE_IO_INFORMATION
-{
- ULONGLONG ReadCount;
- ULONGLONG WriteCount;
-} BL_DEVICE_IO_INFORMATION, *PBL_DEVICE_IO_INFORMATION;
-
-LIST_ENTRY DmRegisteredDevices;
-ULONG DmTableEntries;
-LIST_ENTRY DmRegisteredDevices;
-PVOID* DmDeviceTable;
-
-BL_DEVICE_IO_INFORMATION DmDeviceIoInformation;
-
-/* FUNCTIONS *****************************************************************/
-
-typedef struct _BL_REGISTERED_DEVICE
-{
- LIST_ENTRY ListEntry;
- BL_DEVICE_CALLBACKS Callbacks;
-} BL_REGISTERED_DEVICE, *PBL_REGISTERED_DEVICE;
-
-PVOID* BlockIoDeviceTable;
-ULONG BlockIoDeviceTableEntries;
-
-ULONG BlockIoFirmwareRemovableDiskCount;
-ULONG BlockIoFirmwareRawDiskCount;
-ULONG BlockIoFirmwareCdromCount;
-
-PVOID BlockIopAlignedBuffer;
-ULONG BlockIopAlignedBufferSize;
-
-PVOID BlockIopPartialBlockBuffer;
-ULONG BlockIopPartialBlockBufferSize;
-
-PVOID BlockIopPrefetchBuffer;
-
-PVOID BlockIopReadBlockBuffer;
-ULONG BlockIopReadBlockBufferSize;
-
-ULONG HashTableId;
-
-BOOLEAN BlockIoInitialized;
-
-NTSTATUS
-BlockIoOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- );
-
-NTSTATUS
-BlockIoGetInformation (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _Out_ PBL_DEVICE_INFORMATION DeviceInformation
- );
-
-NTSTATUS
-BlockIoSetInformation (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _Out_ PBL_DEVICE_INFORMATION DeviceInformation
- );
-
-NTSTATUS
-BlockIoRead (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _In_ PVOID Buffer,
- _In_ ULONG Size,
- _Out_ PULONG BytesRead
- );
-
-BL_DEVICE_CALLBACKS BlockIoDeviceFunctionTable =
-{
- NULL,
- BlockIoOpen,
- NULL,
- BlockIoRead,
- NULL,
- BlockIoGetInformation,
- BlockIoSetInformation
-};
-
-NTSTATUS
-BlockIoFirmwareWrite (
- _In_ PBL_BLOCK_DEVICE BlockDevice,
- _In_ PVOID Buffer,
- _In_ ULONGLONG Block,
- _In_ ULONGLONG BlockCount
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlockIoFirmwareRead (
- _In_ PBL_BLOCK_DEVICE BlockDevice,
- _In_ PVOID Buffer,
- _In_ ULONGLONG Block,
- _In_ ULONGLONG BlockCount
- )
-{
- NTSTATUS Status;
- EFI_BLOCK_IO *BlockProtocol;
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
- ULONG FailureCount;
-
- for (FailureCount = 0, Status = STATUS_SUCCESS;
- FailureCount < 2 && NT_SUCCESS(Status);
- FailureCount++)
- {
- BlockProtocol = BlockDevice->Protocol;
-
- OldMode = CurrentExecutionContext->Mode;
- if (CurrentExecutionContext->Mode != 1)
- {
- Status = STATUS_NOT_IMPLEMENTED;
- break;
- }
-
- //EfiPrintf(L"EFI Reading BLOCK %d off media %lx (%d blocks)\r\n",
- //Block, BlockProtocol->Media->MediaId, BlockCount);
- EfiStatus = BlockProtocol->ReadBlocks(BlockProtocol,
- BlockProtocol->Media->MediaId,
- Block,
- BlockProtocol->Media->BlockSize * BlockCount,
- Buffer);
- if (EfiStatus == EFI_SUCCESS)
- {
- //EfiPrintf(L"EFI Read complete into buffer\r\n");
- //EfiPrintf(L"Buffer data: %lx %lx %lx %lx\r\n", *(PULONG)Buffer, *((PULONG)Buffer + 1), *((PULONG)Buffer + 2), *((PULONG)Buffer + 3));
- }
-
- if (OldMode != 1)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- Status = EfiGetNtStatusCode(EfiStatus);
- if (Status != STATUS_MEDIA_CHANGED)
- {
- break;
- }
-
- EfiCloseProtocol(BlockDevice->Handle, &EfiBlockIoProtocol);
-
- Status = EfiOpenProtocol(BlockDevice->Handle,
- &EfiBlockIoProtocol,
- (PVOID*)BlockDevice->Protocol);
- }
-
- return Status;
-}
-
-NTSTATUS
-BlockIopFirmwareOperation (
- PBL_DEVICE_ENTRY DeviceEntry,
- _In_ PVOID Buffer,
- _In_ ULONGLONG Block,
- _In_ ULONGLONG BlockCount,
- _In_ ULONG OperationType
- )
-{
- ULONG FailureCount;
- PBL_BLOCK_DEVICE BlockDevice;
- NTSTATUS Status;
-
- BlockDevice = DeviceEntry->DeviceSpecificData;
-
- if (OperationType == 1)
- {
- for (FailureCount = 0; FailureCount < 3; FailureCount++)
- {
- Status = BlockIoFirmwareWrite(BlockDevice, Buffer, Block, BlockCount);
- if (Status >= 0)
- {
- break;
- }
- }
- }
- else
- {
- for (FailureCount = 0; FailureCount < 3; FailureCount++)
- {
- Status = BlockIoFirmwareRead(BlockDevice, Buffer, Block, BlockCount);
- if (Status >= 0)
- {
- break;
- }
- }
- }
- return Status;
-}
-
-NTSTATUS
-BlockIopFreeAlignedBuffer (
- _Inout_ PVOID* Buffer,
- _Inout_ PULONG BufferSize
- )
-{
- NTSTATUS Status;
-
- if (*BufferSize)
- {
- Status = MmPapFreePages(*Buffer, BL_MM_INCLUDE_MAPPED_ALLOCATED);
-
- *Buffer = NULL;
- *BufferSize = 0;
- }
- else
- {
- Status = STATUS_SUCCESS;
- }
-
- return Status;
-}
-
-NTSTATUS
-BlockIopAllocateAlignedBuffer (
- _Inout_ PVOID* Buffer,
- _Inout_ PULONG BufferSize,
- _In_ ULONG Size,
- _In_ ULONG Alignment
- )
-{
- NTSTATUS Status;
-
- if (!Alignment)
- {
- ++Alignment;
- }
-
- Status = STATUS_SUCCESS;
- if ((Size > *BufferSize) || ((Alignment - 1) & (ULONG_PTR)*Buffer))
- {
- BlockIopFreeAlignedBuffer(Buffer, BufferSize);
-
- *BufferSize = ROUND_TO_PAGES(Size);
-
- Status = MmPapAllocatePagesInRange(Buffer,
- BlLoaderDeviceMemory,
- *BufferSize >> PAGE_SHIFT,
- 0,
- Alignment >> PAGE_SHIFT,
- NULL,
- 0);
- if (!NT_SUCCESS(Status))
- {
- *BufferSize = 0;
- }
- }
-
- return Status;
-}
-
-NTSTATUS
-BlockIopReadUsingPrefetch (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _In_ PVOID Buffer,
- _In_ ULONG BlockCount
- )
-{
- EfiPrintf(L"No prefetch support\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlockIopOperation (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _In_ PVOID Buffer,
- _In_ ULONG BlockCount,
- _In_ ULONG OperationType
- )
-{
- PBL_BLOCK_DEVICE BlockDevice;
- ULONG BufferSize, Alignment;
- ULONGLONG Offset;
- NTSTATUS Status;
-
- BlockDevice = DeviceEntry->DeviceSpecificData;
- BufferSize = BlockDevice->BlockSize * BlockCount;
- Offset = BlockDevice->Block + BlockDevice->StartOffset;
- if ((BlockDevice->LastBlock + 1) < (BlockDevice->Block + BlockCount))
- {
- EfiPrintf(L"Read past end of device\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- Alignment = BlockDevice->Alignment;
- if (!(Alignment) || !((Alignment - 1) & (ULONG_PTR)Buffer))
- {
- Status = BlockIopFirmwareOperation(DeviceEntry,
- Buffer,
- Offset,
- BlockCount,
- OperationType);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"EFI op failed: %lx\r\n", Status);
- return Status;
- }
-
- return STATUS_SUCCESS;
- }
-
- Status = BlockIopAllocateAlignedBuffer(&BlockIopAlignedBuffer,
- &BlockIopAlignedBufferSize,
- BufferSize,
- BlockDevice->Alignment);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"No memory for align\r\n");
- return STATUS_NO_MEMORY;
- }
-
- if (OperationType == 1)
- {
- RtlCopyMemory(BlockIopAlignedBuffer, Buffer, BufferSize);
- }
-
- Status = BlockIopFirmwareOperation(DeviceEntry,
- BlockIopAlignedBuffer,
- Offset,
- BlockCount,
- OperationType);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- if (!OperationType)
- {
- RtlCopyMemory(Buffer, BlockIopAlignedBuffer, BufferSize);
- }
-
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlockIopReadWriteVirtualDevice (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _In_ PVOID Buffer,
- _In_ ULONG Size,
- _In_ ULONG Operation,
- _Out_ PULONG BytesRead
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlockIopReadPhysicalDevice (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _In_ PVOID Buffer,
- _In_ ULONG Size,
- _Out_ PULONG BytesRead
- )
-{
- PBL_BLOCK_DEVICE BlockDevice;
- PVOID ReadBuffer;
- ULONGLONG OffsetEnd, AlignedOffsetEnd, Offset;
- NTSTATUS Status;
-
- BlockDevice = DeviceEntry->DeviceSpecificData;
- ReadBuffer = Buffer;
- OffsetEnd = Size + BlockDevice->Offset;
- if (OffsetEnd < Size)
- {
- OffsetEnd = -1;
- return STATUS_INTEGER_OVERFLOW;
- }
-
- AlignedOffsetEnd = ~(BlockDevice->BlockSize - 1) & (OffsetEnd + BlockDevice->BlockSize - 1);
- if (AlignedOffsetEnd < OffsetEnd)
- {
- return STATUS_INTEGER_OVERFLOW;
- }
-
- if ((BlockDevice->Offset) || (Size != AlignedOffsetEnd))
- {
- Status = BlockIopAllocateAlignedBuffer(&BlockIopReadBlockBuffer,
- &BlockIopReadBlockBufferSize,
- AlignedOffsetEnd,
- BlockDevice->Alignment);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to allocate buffer: %lx\r\n", Status);
- return Status;
- }
-
- ReadBuffer = BlockIopReadBlockBuffer;
- }
-
- Offset = AlignedOffsetEnd / BlockDevice->BlockSize;
-
- if (BlockDevice->Unknown & 2)
- {
- Status = BlockIopReadUsingPrefetch(DeviceEntry,
- ReadBuffer,
- AlignedOffsetEnd / BlockDevice->BlockSize);
- if (NT_SUCCESS(Status))
- {
- goto ReadComplete;
- }
- }
-
- Status = BlockIopOperation(DeviceEntry, ReadBuffer, Offset, 0);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Block I/O failed: %lx\r\n", Status);
- return Status;
- }
-
- BlockDevice->Block += Offset;
-
-ReadComplete:
- if (ReadBuffer != Buffer)
- {
- RtlCopyMemory(Buffer,
- (PVOID)((ULONG_PTR)ReadBuffer +
- (ULONG_PTR)BlockDevice->Offset),
- Size);
- }
-
- if (BytesRead)
- {
- *BytesRead = Size;
- }
-
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlockIopBlockInformationCheck (
- _In_ PBL_BLOCK_DEVICE BlockDevice,
- _In_opt_ PULONG DesiredSize,
- _Out_opt_ PULONG Size,
- _Out_opt_ PULONG OutputAdjustedSize
- )
-{
- ULONG RealSize;
- ULONGLONG Offset, LastOffset, RemainingOffset, MaxOffset;
- NTSTATUS Status;
-
- RealSize = 0;
-
- Offset = (BlockDevice->Offset * BlockDevice->BlockSize) + BlockDevice->Block;
-
- if (Offset > ((BlockDevice->LastBlock + 1) * BlockDevice->BlockSize))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- LastOffset = (BlockDevice->LastBlock * BlockDevice->BlockSize) + BlockDevice->BlockSize - 1;
-
- MaxOffset = BlockDevice->LastBlock;
- if (MaxOffset < BlockDevice->BlockSize)
- {
- MaxOffset = BlockDevice->BlockSize;
- }
-
- if (LastOffset < MaxOffset)
- {
-
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- if (Offset > LastOffset)
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- RemainingOffset = LastOffset - Offset + 1;
-
- if (DesiredSize != FALSE)
- {
- RealSize = *DesiredSize;
- }
- else
- {
- RealSize = ULONG_MAX;
- }
-
- if (RemainingOffset < RealSize)
- {
- if (Size == FALSE)
- {
- RealSize = 0;
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- RealSize = RemainingOffset;
- }
-
- Status = STATUS_SUCCESS;
-
-Quickie:
- if (Size)
- {
- *Size = RealSize;
- }
-
- return Status;
-}
-
-NTSTATUS
-BlockIoRead (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _In_ PVOID Buffer,
- _In_ ULONG Size,
- _Out_ PULONG BytesRead
- )
-{
- PBL_BLOCK_DEVICE BlockDevice;
- NTSTATUS Status;
-
- /* Get the device-specific data, which is our block device descriptor */
- BlockDevice = DeviceEntry->DeviceSpecificData;
-
- /* Make sure that the buffer and size is valid */
- Status = BlockIopBlockInformationCheck(BlockDevice, &Size, BytesRead, &Size);
- if (NT_SUCCESS(Status))
- {
- /* Check if this is a virtual device or a physical device */
- if (BlockDevice->DeviceFlags & BL_BLOCK_DEVICE_VIRTUAL_FLAG)
- {
- /* Do a virtual read or write */
- Status = BlockIopReadWriteVirtualDevice(DeviceEntry, Buffer, Size, 0, BytesRead);
- }
- else
- {
- /* Do a physical read or write */
- Status = BlockIopReadPhysicalDevice(DeviceEntry, Buffer, Size, BytesRead);
- }
- }
- else if (BytesRead)
- {
- /* We failed, if the caller wanted bytes read, return 0 */
- *BytesRead = 0;
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-NTSTATUS
-BlockIoSetInformation (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _Out_ PBL_DEVICE_INFORMATION DeviceInformation
- )
-{
- PBL_BLOCK_DEVICE BlockDevice;
- ULONGLONG Offset;
-
- BlockDevice = DeviceEntry->DeviceSpecificData;
-
- /* Take the current block number and block-offset and conver to full offset */
- Offset = DeviceInformation->BlockDeviceInfo.Block * BlockDevice->BlockSize +
- DeviceInformation->BlockDeviceInfo.Offset;
-
- /* Make sure that the full offset is still within the bounds of the device */
- if (Offset > ((BlockDevice->LastBlock + 1) * BlockDevice->BlockSize - 1))
- {
- EfiPrintf(L"Offset out of bounds\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Convery the full raw offset into a block number and block-offset */
- BlockDevice->Block = Offset / BlockDevice->BlockSize;
- BlockDevice->Offset = Offset % BlockDevice->BlockSize;
-
- /* Return the unknown */
- BlockDevice->Unknown = DeviceInformation->BlockDeviceInfo.Unknown;
-
- /* All done */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlockIoGetInformation (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _Out_ PBL_DEVICE_INFORMATION DeviceInformation
- )
-{
- /* Copy the device specific data into the block device information */
- RtlCopyMemory(&DeviceInformation->BlockDeviceInfo,
- DeviceEntry->DeviceSpecificData,
- sizeof(DeviceInformation->BlockDeviceInfo));
-
- /* Hardcode the device type */
- DeviceInformation->DeviceType = DiskDevice;
- return STATUS_SUCCESS;
-}
-
-BOOLEAN
-BlDeviceIsVirtualPartitionDevice (
- _In_ PBL_DEVICE_DESCRIPTOR InputDevice,
- _Outptr_ PBL_DEVICE_DESCRIPTOR* VirtualDevice
- )
-{
- BOOLEAN IsVirtual;
- PBL_LOCAL_DEVICE ParentDisk;
-
- /* Assume it isn't */
- IsVirtual = FALSE;
-
- /* Check if this is a partition device */
- if ((InputDevice->DeviceType == LegacyPartitionDevice) ||
- (InputDevice->DeviceType == PartitionDevice))
- {
- /* Check if the parent disk is a VHD */
- ParentDisk = &InputDevice->Partition.Disk;
- if (ParentDisk->Type == VirtualDiskDevice)
- {
- /* This is a virtual partition device -- does the caller want it? */
- IsVirtual = TRUE;
- if (VirtualDevice)
- {
- *VirtualDevice = (PBL_DEVICE_DESCRIPTOR)(&ParentDisk->VirtualHardDisk + 1);
- }
- }
- }
-
- /* Return */
- return IsVirtual;
-}
-
-NTSTATUS
-BlDeviceSetInformation (
- _In_ ULONG DeviceId,
- _Out_ PBL_DEVICE_INFORMATION DeviceInformation
- )
-{
- PBL_DEVICE_ENTRY DeviceEntry;
-
- /* This parameter is not optional */
- if (!DeviceInformation)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure the device ID is valid */
- if (DmTableEntries <= DeviceId)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Get the device entry */
- DeviceEntry = DmDeviceTable[DeviceId];
- if (!DeviceEntry)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure the device is open */
- if (!(DeviceEntry->Flags & BL_DEVICE_ENTRY_OPENED))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Set the device information */
- return DeviceEntry->Callbacks.SetInformation(DeviceEntry, DeviceInformation);
-}
-
-NTSTATUS
-BlDeviceGetInformation (
- _In_ ULONG DeviceId,
- _Out_ PBL_DEVICE_INFORMATION DeviceInformation
- )
-{
- PBL_DEVICE_ENTRY DeviceEntry;
-
- /* This parameter is not optional */
- if (!DeviceInformation)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure the device ID is valid */
- if (DmTableEntries <= DeviceId)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Get the device entry */
- DeviceEntry = DmDeviceTable[DeviceId];
- if (!DeviceEntry)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure the device is open */
- if (!(DeviceEntry->Flags & BL_DEVICE_ENTRY_OPENED))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Return the device information */
- DeviceInformation->DeviceType = DeviceEntry->DeviceDescriptor->DeviceType;
- return DeviceEntry->Callbacks.GetInformation(DeviceEntry, DeviceInformation);
-}
-
-NTSTATUS
-BlDeviceRead (
- _In_ ULONG DeviceId,
- _In_ PVOID Buffer,
- _In_ ULONG Size,
- _Out_opt_ PULONG BytesRead
- )
-{
- PBL_DEVICE_ENTRY DeviceEntry;
- NTSTATUS Status;
- ULONG BytesTransferred;
-
- /* Make sure we have a buffer, and the device ID is valid */
- if (!(Buffer) || (DmTableEntries <= DeviceId))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Get the device entry for it */
- DeviceEntry = DmDeviceTable[DeviceId];
- if (!DeviceEntry)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure this is a device opened for read access */
- if (!(DeviceEntry->Flags & BL_DEVICE_ENTRY_OPENED) ||
- !(DeviceEntry->Flags & BL_DEVICE_ENTRY_READ_ACCESS))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Issue the read */
- Status = DeviceEntry->Callbacks.Read(DeviceEntry,
- Buffer,
- Size,
- &BytesTransferred);
- if (!DeviceEntry->Unknown)
- {
- /* Update performance counters */
- DmDeviceIoInformation.ReadCount += BytesTransferred;
- }
-
- /* Return back how many bytes were read, if caller wants to know */
- if (BytesRead)
- {
- *BytesRead = BytesTransferred;
- }
-
- /* Return read result */
- return Status;
-}
-
-NTSTATUS
-BlDeviceReadAtOffset (
- _In_ ULONG DeviceId,
- _In_ ULONG Size,
- _In_ ULONGLONG Offset,
- _In_ PVOID Buffer,
- _Out_ PULONG BytesRead
- )
-{
- NTSTATUS Status;
- BL_DEVICE_INFORMATION DeviceInfo;
-
- /* Get the current block and offset */
- Status = BlDeviceGetInformation(DeviceId, &DeviceInfo);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Get the block and block-offset based on the new raw offset */
- DeviceInfo.BlockDeviceInfo.Block = Offset / DeviceInfo.BlockDeviceInfo.BlockSize;
- DeviceInfo.BlockDeviceInfo.Offset = Offset % DeviceInfo.BlockDeviceInfo.BlockSize;
-
- /* Update the block and offset */
- Status = BlDeviceSetInformation(DeviceId, &DeviceInfo);
- if (NT_SUCCESS(Status))
- {
- /* Now issue a read, with this block and offset configured */
- Status = BlDeviceRead(DeviceId, Buffer, Size, BytesRead);
- }
-
- /* All good, return the caller */
- return Status;
-}
-
-BOOLEAN
-BlpDeviceCompare (
- _In_ PBL_DEVICE_DESCRIPTOR Device1,
- _In_ PBL_DEVICE_DESCRIPTOR Device2
- )
-{
- BOOLEAN DeviceMatch;
- ULONG DeviceSize;
-
- /* Assume failure */
- DeviceMatch = FALSE;
-
- /* Check if the two devices exist and are identical in type */
- if ((Device1) && (Device2) && (Device1->DeviceType == Device2->DeviceType))
- {
- /* Take the bigger of the two sizes */
- DeviceSize = max(Device1->Size, Device2->Size);
- if (DeviceSize >= (ULONG)FIELD_OFFSET(BL_DEVICE_DESCRIPTOR, Local))
- {
- /* Compare the two devices up to their size */
- if (RtlEqualMemory(&Device1->Local,
- &Device2->Local,
- DeviceSize - FIELD_OFFSET(BL_DEVICE_DESCRIPTOR, Local)))
- {
- /* They match! */
- DeviceMatch = TRUE;
- }
- }
- }
-
- /* Return matching state */
- return DeviceMatch;
-}
-
-NTSTATUS
-BlockIopFreeAllocations (
- _In_ PBL_BLOCK_DEVICE BlockDevice
- )
-{
- /* If a block device was passed in, free it */
- if (BlockDevice)
- {
- BlMmFreeHeap(BlockDevice);
- }
-
- /* Nothing else to do */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlockIoEfiGetBlockIoInformation (
- _In_ PBL_BLOCK_DEVICE BlockDevice
- )
-{
- NTSTATUS Status;
- EFI_BLOCK_IO_MEDIA *Media;
-
- /* Open the Block I/O protocol on this device */
- Status = EfiOpenProtocol(BlockDevice->Handle,
- &EfiBlockIoProtocol,
- (PVOID*)&BlockDevice->Protocol);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Get information on the block media */
- Media = BlockDevice->Protocol->Media;
-
- /* Set the appropriate device flags */
- BlockDevice->DeviceFlags = 0;
- if (Media->RemovableMedia)
- {
- BlockDevice->DeviceFlags = BL_BLOCK_DEVICE_REMOVABLE_FLAG;
- }
- if (Media->MediaPresent)
- {
- BlockDevice->DeviceFlags |= BL_BLOCK_DEVICE_PRESENT_FLAG;
- }
-
- /* No clue */
- BlockDevice->Unknown = 0;
-
- /* Set the block size */
- BlockDevice->BlockSize = Media->BlockSize;
-
- /* Make sure there's a last block value */
- if (!Media->LastBlock)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Don't let it be too high */
- if (Media->LastBlock > 0xFFFFFFFFFFE)
- {
- BlockDevice->LastBlock = 0xFFFFFFFFFFE;
- }
- else
- {
- BlockDevice->LastBlock = Media->LastBlock;
- }
-
- /* Make the alignment the smaller of the I/O alignment or the block size */
- if (Media->IoAlign >= Media->BlockSize)
- {
- BlockDevice->Alignment = Media->IoAlign;
- }
- else
- {
- BlockDevice->Alignment = Media->BlockSize;
- }
-
- /* All good */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlockIoEfiGetChildHandle (
- _In_ PBL_PROTOCOL_HANDLE ProtocolInterface,
- _In_ PBL_PROTOCOL_HANDLE ChildProtocolInterface)
-{
- NTSTATUS Status;
- ULONG i, DeviceCount;
- EFI_DEVICE_PATH *DevicePath, *ParentDevicePath;
- EFI_HANDLE *DeviceHandles;
- EFI_HANDLE Handle;
-
- /* Find all the Block I/O device handles on the system */
- DeviceCount = 0;
- DeviceHandles = 0;
- Status = EfiLocateHandleBuffer(ByProtocol,
- &EfiBlockIoProtocol,
- &DeviceCount,
- &DeviceHandles);
- if (!NT_SUCCESS(Status))
- {
- /* Failed to enumerate, bail out */
- return Status;
- }
-
- /* Loop all the handles */
- for (i = 0; i < DeviceCount; i++)
- {
- /* Check if this is the device itself */
- Handle = DeviceHandles[i];
- if (Handle == ProtocolInterface->Handle)
- {
- /* Skip it */
- continue;
- }
-
- /* Get the device path of this device */
- Status = EfiOpenProtocol(Handle,
- &EfiDevicePathProtocol,
- (PVOID*)&DevicePath);
- if (!NT_SUCCESS(Status))
- {
- /* We failed, skip it */
- continue;
- }
-
- /* See if we are its parent */
- ParentDevicePath = EfiIsDevicePathParent(ProtocolInterface->Interface,
- DevicePath);
- if (ParentDevicePath == ProtocolInterface->Interface)
- {
- /* Yup, return back to caller */
- ChildProtocolInterface->Handle = Handle;
- ChildProtocolInterface->Interface = DevicePath;
- Status = STATUS_SUCCESS;
- goto Quickie;
- }
-
- /* Close the device path */
- EfiCloseProtocol(Handle, &EfiDevicePathProtocol);
- }
-
- /* If we got here, nothing was found */
- Status = STATUS_NO_SUCH_DEVICE;
-
-Quickie:
- /* Free the handle array buffer */
- BlMmFreeHeap(DeviceHandles);
- return Status;
-}
-
-NTSTATUS
-BlockIoGetGPTDiskSignature (
- _In_ PBL_DEVICE_ENTRY DeviceEntry,
- _Out_ PGUID DiskSignature
- )
-{
- EfiPrintf(L"GPT not supported\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlockIoEfiGetDeviceInformation (
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- NTSTATUS Status;
- PBL_DEVICE_DESCRIPTOR Device;
- PBL_BLOCK_DEVICE BlockDevice;
- EFI_DEVICE_PATH *LeafNode;
- BL_PROTOCOL_HANDLE Protocol[2];
- ACPI_HID_DEVICE_PATH *AcpiPath;
- HARDDRIVE_DEVICE_PATH *DiskPath;
- BOOLEAN Found;
- ULONG i;
-
- /* Extract the identifier, and the block device object */
- Device = DeviceEntry->DeviceDescriptor;
- BlockDevice = (PBL_BLOCK_DEVICE)DeviceEntry->DeviceSpecificData;
-
- /* Initialize protocol handles */
- Protocol[0].Handle = BlockDevice->Handle;
- Protocol[1].Handle = 0;
-
- /* Open this device */
- Status = EfiOpenProtocol(Protocol[0].Handle,
- &EfiDevicePathProtocol,
- &Protocol[0].Interface);
- if (!NT_SUCCESS(Status))
- {
- /* Fail */
- return Status;
- }
-
- /* Iterate twice -- once for the top level, once for the bottom */
- for (i = 0, Found = FALSE; Found == FALSE && Protocol[i].Handle; i++)
- {
- /* Check what kind of leaf node device this is */
- LeafNode = EfiGetLeafNode(Protocol[i].Interface);
- EfiPrintf(L"Pass %d, Leaf node: %p Type: %d\r\n", i, LeafNode, LeafNode->Type);
- if (LeafNode->Type == ACPI_DEVICE_PATH)
- {
- /* We only support floppy drives */
- AcpiPath = (ACPI_HID_DEVICE_PATH*)LeafNode;
- if ((AcpiPath->HID == EISA_PNP_ID(0x604)) ||
- (AcpiPath->HID == EISA_PNP_ID(0x700)))
- {
- /* Set the boot library specific device types */
- Device->DeviceType = LocalDevice;
- Device->Local.Type = FloppyDevice;
-
- /* The ACPI UID is the drive number */
- Device->Local.FloppyDisk.DriveNumber = AcpiPath->UID;
-
- /* We found a match */
- Found = TRUE;
- }
- }
- else if ((LeafNode->Type == MEDIA_DEVICE_PATH) && (i == 1))
- {
- /* Extract the disk path and check if it's a physical disk */
- DiskPath = (HARDDRIVE_DEVICE_PATH*)LeafNode;
- EfiPrintf(L"Disk path: %p Type: %lx\r\n", DiskPath, LeafNode->SubType);
- if (LeafNode->SubType == MEDIA_HARDDRIVE_DP)
- {
- /* Set this as a local device */
- Device->Local.Type = LocalDevice;
-
- /* Check if this is an MBR partition */
- if (DiskPath->SignatureType == SIGNATURE_TYPE_MBR)
- {
- /* Set that this is a local partition */
- Device->DeviceType = LegacyPartitionDevice;
- Device->Partition.Disk.Type = LocalDevice;
-
- /* Write the MBR partition signature */
- BlockDevice->PartitionType = MbrPartition;
- BlockDevice->Disk.Mbr.Signature = *(PULONG)&DiskPath->Signature[0];
- Found = TRUE;
- }
- else if (DiskPath->SignatureType == SIGNATURE_TYPE_GUID)
- {
- /* Set this as a GPT partition */
- BlockDevice->PartitionType = GptPartition;
- Device->Local.HardDisk.PartitionType = GptPartition;
-
- /* Get the GPT signature */
- Status = BlockIoGetGPTDiskSignature(DeviceEntry,
- &Device->Local.HardDisk.Gpt.PartitionSignature);
- if (NT_SUCCESS(Status))
- {
- /* Copy it */
- RtlCopyMemory(&BlockDevice->Disk.Gpt.Signature,
- &Device->Local.HardDisk.Gpt.PartitionSignature,
- sizeof(BlockDevice->Disk.Gpt.Signature));
- Found = TRUE;
- }
- }
-
- /* Otherwise, this is a raw disk */
- BlockDevice->PartitionType = RawPartition;
- Device->Local.HardDisk.PartitionType = RawPartition;
- Device->Local.HardDisk.Raw.DiskNumber = BlockIoFirmwareRawDiskCount++;
- }
- else if (LeafNode->SubType == MEDIA_CDROM_DP)
- {
- /* Set block device information */
- EfiPrintf(L"Found CD-ROM\r\n");
- BlockDevice->PartitionType = RawPartition;
- BlockDevice->Type = CdRomDevice;
-
- /* Set CDROM data */
- Device->Local.Type = CdRomDevice;
- Device->Local.FloppyDisk.DriveNumber = 0;
- Found = TRUE;
- }
- }
- else if ((LeafNode->Type != MEDIA_DEVICE_PATH) &&
- (LeafNode->Type != ACPI_DEVICE_PATH) &&
- (i == 0))
- {
- /* This is probably a messaging device node. Are we under it? */
- Status = BlockIoEfiGetChildHandle(Protocol, &Protocol[1]);
- EfiPrintf(L"Pass 0, non DP/ACPI path. Child handle obtained: %lx\r\n", Protocol[1].Handle);
- if (!NT_SUCCESS(Status))
- {
- /* We're not. So this must be a raw device */
- Device->DeviceType = LocalDevice;
- Found = TRUE;
-
- /* Is it a removable raw device? */
- if (BlockDevice->DeviceFlags & BL_BLOCK_DEVICE_REMOVABLE_FLAG)
- {
- /* This is a removable (CD or Floppy or USB) device */
- BlockDevice->Type = FloppyDevice;
- Device->Local.Type = FloppyDevice;
- Device->Local.FloppyDisk.DriveNumber = BlockIoFirmwareRemovableDiskCount++;
- EfiPrintf(L"Found Floppy\r\n");
- }
- else
- {
- /* It's a fixed device */
- BlockDevice->Type = DiskDevice;
- Device->Local.Type = DiskDevice;
-
- /* Set it as a raw partition */
- Device->Local.HardDisk.PartitionType = RawPartition;
- Device->Local.HardDisk.Mbr.PartitionSignature = BlockIoFirmwareRawDiskCount++;
- EfiPrintf(L"Found raw disk\r\n");
- }
- }
- }
- }
-
- /* Close any protocols that we opened for each handle */
- while (i)
- {
- EfiCloseProtocol(Protocol[--i].Handle, &EfiDevicePathProtocol);
- }
-
- /* Return appropriate status */
- return Found ? STATUS_SUCCESS : STATUS_NOT_SUPPORTED;
-}
-
-NTSTATUS
-BlockIoEfiReset (
- VOID
- )
-{
- EfiPrintf(L"not implemented\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlockIoEfiFlush (
- VOID
- )
-{
- EfiPrintf(L"not implemented\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlockIoEfiCreateDeviceEntry (
- _In_ PBL_DEVICE_ENTRY *DeviceEntry,
- _Out_ PVOID Handle
- )
-{
- PBL_DEVICE_ENTRY IoDeviceEntry;
- PBL_BLOCK_DEVICE BlockDevice;
- NTSTATUS Status;
- PBL_DEVICE_DESCRIPTOR Device;
-
- /* Allocate the entry for this device and zero it out */
- IoDeviceEntry = BlMmAllocateHeap(sizeof(*IoDeviceEntry));
- if (!IoDeviceEntry)
- {
- return STATUS_NO_MEMORY;
- }
- RtlZeroMemory(IoDeviceEntry, sizeof(*IoDeviceEntry));
-
- /* Allocate the device descriptor for this device and zero it out */
- Device = BlMmAllocateHeap(sizeof(*Device));
- if (!Device)
- {
- return STATUS_NO_MEMORY;
- }
- RtlZeroMemory(Device, sizeof(*Device));
-
- /* Allocate the block device specific data, and zero it out */
- BlockDevice = BlMmAllocateHeap(sizeof(*BlockDevice));
- if (!BlockDevice)
- {
- return STATUS_NO_MEMORY;
- }
- RtlZeroMemory(BlockDevice, sizeof(*BlockDevice));
-
- /* Save the descriptor and block device specific data */
- IoDeviceEntry->DeviceSpecificData = BlockDevice;
- IoDeviceEntry->DeviceDescriptor = Device;
-
- /* Set the size of the descriptor */
- Device->Size = sizeof(*Device);
-
- /* Copy the standard I/O callbacks */
- RtlCopyMemory(&IoDeviceEntry->Callbacks,
- &BlockIoDeviceFunctionTable,
- sizeof(IoDeviceEntry->Callbacks));
-
- /* Add the two that are firmware specific */
- IoDeviceEntry->Callbacks.Reset = BlockIoEfiReset;
- IoDeviceEntry->Callbacks.Flush = BlockIoEfiFlush;
-
- /* Save the EFI handle */
- BlockDevice->Handle = Handle;
-
- /* Get information on this device from EFI, caching it in the device */
- Status = BlockIoEfiGetBlockIoInformation(BlockDevice);
- if (NT_SUCCESS(Status))
- {
- /* Build the descriptor structure for this device */
- Status = BlockIoEfiGetDeviceInformation(IoDeviceEntry);
- if (NT_SUCCESS(Status))
- {
- /* We have a fully constructed device, return it */
- *DeviceEntry = IoDeviceEntry;
- return STATUS_SUCCESS;
- }
- }
-
- /* Failure path, free the descriptor if we allocated one */
- if (IoDeviceEntry->DeviceDescriptor)
- {
- BlMmFreeHeap(IoDeviceEntry->DeviceDescriptor);
- }
-
- /* Free any other specific allocations */
- BlockIopFreeAllocations(IoDeviceEntry->DeviceSpecificData);
-
- /* Free the device entry itself and return the failure code */
- BlMmFreeHeap(IoDeviceEntry);
- EfiPrintf(L"Failed: %lx\r\n", Status);
- return Status;
-}
-
-NTSTATUS
-BlockIoEfiCompareDevice (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ EFI_HANDLE Handle
- )
-{
- PBL_LOCAL_DEVICE LocalDeviceInfo, EfiLocalDeviceInfo;
- PBL_DEVICE_ENTRY DeviceEntry;
- PBL_DEVICE_DESCRIPTOR EfiDevice;
- NTSTATUS Status;
-
- DeviceEntry = NULL;
-
- /* Check if no device was given */
- if (!Device)
- {
- /* Fail the comparison */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Check if this is a local disk device */
- if (Device->DeviceType != DiskDevice)
- {
- /* Nope -- is it a partition device? */
- if ((Device->DeviceType != LegacyPartitionDevice) &&
- (Device->DeviceType != PartitionDevice))
- {
- /* Nope, so we can't compare */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* If so, return the device information for the parent disk */
- LocalDeviceInfo = &Device->Partition.Disk;
- }
- else
- {
- /* Just return the disk information itself */
- LocalDeviceInfo = &Device->Local;
- }
-
- /* Create an EFI device entry for the EFI device handle */
- Status = BlockIoEfiCreateDeviceEntry(&DeviceEntry, Handle);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Read the descriptor and assume failure for now */
- EfiDevice = DeviceEntry->DeviceDescriptor;
- Status = STATUS_UNSUCCESSFUL;
-
- /* Check if the EFI device is a disk */
- if (EfiDevice->DeviceType != DiskDevice)
- {
- /* Nope, is it a partition? */
- if ((EfiDevice->DeviceType != LegacyPartitionDevice) &&
- (EfiDevice->DeviceType != PartitionDevice))
- {
- /* Neither, invalid handle so bail out */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Yes, so get the information of the parent disk */
- EfiLocalDeviceInfo = &EfiDevice->Partition.Disk;
- }
- else
- {
- /* It's a disk, so get the disk information itself */
- EfiLocalDeviceInfo = &EfiDevice->Local;
- }
-
- /* Are the two devices the same type? */
- if (EfiLocalDeviceInfo->Type != LocalDeviceInfo->Type)
- {
- /* Nope, that was easy */
- goto Quickie;
- }
-
- /* Yes, what kind of device is the EFI side? */
- switch (EfiLocalDeviceInfo->Type)
- {
- case LocalDevice:
-
- /* Local hard drive, compare the signature */
- if (RtlCompareMemory(&EfiLocalDeviceInfo->HardDisk,
- &LocalDeviceInfo->HardDisk,
- sizeof(LocalDeviceInfo->HardDisk)) ==
- sizeof(LocalDeviceInfo->HardDisk))
- {
- Status = STATUS_SUCCESS;
- }
- break;
-
- case FloppyDevice:
- case CdRomDevice:
-
- /* Removable floppy or CD, compare the disk number */
- if (RtlCompareMemory(&EfiLocalDeviceInfo->FloppyDisk,
- &LocalDeviceInfo->FloppyDisk,
- sizeof(LocalDeviceInfo->FloppyDisk)) ==
- sizeof(LocalDeviceInfo->FloppyDisk))
- {
- Status = STATUS_SUCCESS;
- }
- break;
-
- case RamDiskDevice:
-
- /* RAM disk, compare the size and base information */
- if (RtlCompareMemory(&EfiLocalDeviceInfo->RamDisk,
- &LocalDeviceInfo->RamDisk,
- sizeof(LocalDeviceInfo->RamDisk)) ==
- sizeof(LocalDeviceInfo->RamDisk))
- {
- Status = STATUS_SUCCESS;
- }
- break;
-
- case FileDevice:
-
- /* File, compare the file identifier */
- if (RtlCompareMemory(&EfiLocalDeviceInfo->File,
- &LocalDeviceInfo->File,
- sizeof(LocalDeviceInfo->File)) ==
- sizeof(LocalDeviceInfo->File))
- {
- Status = STATUS_SUCCESS;
- }
- break;
-
- /* Something else we don't support */
- default:
- break;
- }
-
-Quickie:
- /* All done, did we have an EFI device entry? */
- if (DeviceEntry)
- {
- /* Free it, since we only needed it locally for comparison */
- BlMmFreeHeap(DeviceEntry->DeviceDescriptor);
- BlockIopFreeAllocations(DeviceEntry->DeviceSpecificData);
- BlMmFreeHeap(DeviceEntry);
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-NTSTATUS
-BlockIoFirmwareOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_BLOCK_DEVICE BlockIoDevice
- )
-{
- NTSTATUS Status;
- BOOLEAN DeviceMatch;
- BL_HASH_ENTRY HashEntry;
- ULONG i, Id, DeviceCount;
- PBL_DEVICE_ENTRY DeviceEntry;
- EFI_HANDLE* DeviceHandles;
-
- /* Initialize everything */
- DeviceEntry = NULL;
- DeviceCount = 0;
- DeviceHandles = 0;
- DeviceEntry = NULL;
-
- /* Ask EFI for handles to all block devices */
- Status = EfiLocateHandleBuffer(ByProtocol,
- &EfiBlockIoProtocol,
- &DeviceCount,
- &DeviceHandles);
- if (!NT_SUCCESS(Status))
- {
- return STATUS_NO_SUCH_DEVICE;
- }
-
- /* Build a hash entry, with the value inline */
- HashEntry.Flags = BL_HT_VALUE_IS_INLINE;
- HashEntry.Size = sizeof(EFI_HANDLE);
-
- /* Loop each device we got */
- DeviceMatch = FALSE;
- Status = STATUS_NO_SUCH_DEVICE;
- for (i = 0; i < DeviceCount; i++)
- {
- /* Check if we have a match in the device hash table */
- HashEntry.Value = DeviceHandles[i];
- Status = BlHtLookup(HashTableId, &HashEntry, 0);
- if (NT_SUCCESS(Status))
- {
- /* We already know about this device */
- EfiPrintf(L"Device is known\r\n");
- continue;
- }
-
- /* New device, store it in the hash table */
- Status = BlHtStore(HashTableId,
- &HashEntry,
- DeviceHandles[i],
- sizeof(DeviceHandles[i]));
- if (!NT_SUCCESS(Status))
- {
- /* Free the array and fail */
- BlMmFreeHeap(DeviceHandles);
- break;
- }
-
- /* Create an entry for this device*/
- Status = BlockIoEfiCreateDeviceEntry(&DeviceEntry, DeviceHandles[i]);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"EFI create failed: %lx\r\n", Status);
- continue;
- }
-
- /* Add the device entry to the device table */
- Status = BlTblSetEntry(&BlockIoDeviceTable,
- &BlockIoDeviceTableEntries,
- DeviceEntry,
- &Id,
- TblDoNotPurgeEntry);
- if (!NT_SUCCESS(Status))
- {
- /* Remove it from teh hash table */
- BlHtDelete(HashTableId, &HashEntry);
-
- /* Free the block I/O device data */
- BlockIopFreeAllocations(DeviceEntry->DeviceSpecificData);
-
- /* Free the descriptor */
- BlMmFreeHeap(DeviceEntry->DeviceDescriptor);
-
- /* Free the entry */
- BlMmFreeHeap(DeviceEntry);
- break;
- }
-
- /* Does this device match what we're looking for? */
- DeviceMatch = BlpDeviceCompare(DeviceEntry->DeviceDescriptor, Device);
- if (DeviceMatch)
- {
- /* Yep, return the data back */
- RtlCopyMemory(BlockIoDevice,
- DeviceEntry->DeviceSpecificData,
- sizeof(*BlockIoDevice));
- Status = STATUS_SUCCESS;
- break;
- }
- }
-
- /* Free the device handle buffer array */
- BlMmFreeHeap(DeviceHandles);
-
- /* Return status */
- return Status;
-}
-
-NTSTATUS
-PartitionOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- EfiPrintf(L"Not implemented!\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-VhdFileDeviceOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- EfiPrintf(L"Not implemented!\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-DiskClose (
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- NTSTATUS Status, LocalStatus;
- PBL_BLOCK_DEVICE BlockDevice;
-
- /* Assume success */
- Status = STATUS_SUCCESS;
- BlockDevice = DeviceEntry->DeviceSpecificData;
-
- /* Close the protocol */
- LocalStatus = EfiCloseProtocol(BlockDevice->Handle, &EfiBlockIoProtocol);
- if (!NT_SUCCESS(LocalStatus))
- {
- /* Only inherit failures */
- Status = LocalStatus;
- }
-
- /* Free the block device allocations */
- LocalStatus = BlockIopFreeAllocations(BlockDevice);
- if (!NT_SUCCESS(LocalStatus))
- {
- /* Only inherit failures */
- Status = LocalStatus;
- }
-
- /* Return back to caller */
- return Status;
-}
-
-NTSTATUS
-DiskOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- NTSTATUS Status;
-
- /* Use firmware-specific functions to open the disk */
- Status = BlockIoFirmwareOpen(Device, DeviceEntry->DeviceSpecificData);
- if (NT_SUCCESS(Status))
- {
- /* Overwrite with our own close routine */
- DeviceEntry->Callbacks.Close = DiskClose;
- }
-
- /* Return back to caller */
- return Status;
-}
-
-NTSTATUS
-RdDeviceOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- EfiPrintf(L"Not implemented!\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-FileDeviceOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- EfiPrintf(L"Not implemented!\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-SpOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- EfiPrintf(L"Not implemented!\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-UdpOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- EfiPrintf(L"Not implemented!\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-BL_DEVICE_CALLBACKS FileDeviceFunctionTable =
-{
- NULL,
- FileDeviceOpen,
- NULL,
-};
-
-BL_DEVICE_CALLBACKS PartitionDeviceFunctionTable =
-{
- NULL,
- PartitionOpen,
- NULL,
-};
-
-BL_DEVICE_CALLBACKS RamDiskDeviceFunctionTable =
-{
- NULL,
- RdDeviceOpen,
- NULL,
-};
-
-BL_DEVICE_CALLBACKS DiskDeviceFunctionTable =
-{
- NULL,
- DiskOpen,
- NULL,
-};
-
-BL_DEVICE_CALLBACKS VirtualDiskDeviceFunctionTable =
-{
- NULL,
- VhdFileDeviceOpen,
- NULL,
-};
-
-BL_DEVICE_CALLBACKS UdpFunctionTable =
-{
- NULL,
- UdpOpen,
- NULL,
-};
-
-BL_DEVICE_CALLBACKS SerialPortFunctionTable =
-{
- NULL,
- SpOpen,
- NULL,
-};
-
-BOOLEAN
-DeviceTableCompare (
- _In_ PVOID Entry,
- _In_ PVOID Argument1,
- _In_ PVOID Argument2,
- _Inout_ PVOID Argument3,
- _Inout_ PVOID Argument4
- )
-{
- BOOLEAN Found;
- PBL_DEVICE_DESCRIPTOR Device = (PBL_DEVICE_DESCRIPTOR)Argument1;
- PBL_DEVICE_ENTRY DeviceEntry = (PBL_DEVICE_ENTRY)Entry;
- ULONG Flags = *(PULONG)Argument2;
- ULONG Unknown = *(PULONG)Argument3;
-
- /* Assume failure */
- Found = FALSE;
-
- /* Compare the device descriptor */
- if (BlpDeviceCompare(DeviceEntry->DeviceDescriptor, Device))
- {
- /* Compare something */
- if (DeviceEntry->Unknown == Unknown)
- {
- /* Compare flags */
- if ((!(Flags & BL_DEVICE_READ_ACCESS) || (DeviceEntry->Flags & BL_DEVICE_ENTRY_READ_ACCESS)) &&
- (!(Flags & BL_DEVICE_WRITE_ACCESS) || (DeviceEntry->Flags & BL_DEVICE_ENTRY_WRITE_ACCESS)))
- {
- /* And more flags */
- if (((Flags & 8) || !(DeviceEntry->Flags & 8)) &&
- (!(Flags & 8) || (DeviceEntry->Flags & 8)))
- {
- /* Found a match! */
- Found = TRUE;
- }
- }
- }
- }
-
- /* Return matching state */
- return Found;
-}
-
-NTSTATUS
-DeviceTableDestroyEntry (
- _In_ PVOID Entry,
- _In_ ULONG DeviceId
- )
-{
- PBL_DEVICE_ENTRY DeviceEntry = (PBL_DEVICE_ENTRY)Entry;
- NTSTATUS Status;
-
- /* Call the close routine for this entry */
- Status = DeviceEntry->Callbacks.Close(DmDeviceTable[DeviceId]);
-
- /* Free the descriptor, and the device itself */
- BlMmFreeHeap(DeviceEntry->DeviceDescriptor);
- BlMmFreeHeap(DeviceEntry);
-
- /* Clear out the netry, and return */
- DmDeviceTable[DeviceId] = NULL;
- return Status;
-}
-
-NTSTATUS
-DeviceTablePurge (
- _In_ PVOID Entry
- )
-{
- PBL_DEVICE_ENTRY DeviceEntry = (PBL_DEVICE_ENTRY)Entry;
- NTSTATUS Status;
-
- /* Check if the device is opened */
- if (DeviceEntry->Flags & BL_DEVICE_ENTRY_OPENED)
- {
- /* It is, so can't purge it */
- Status = STATUS_UNSUCCESSFUL;
- }
- else
- {
- /* It isn't, so destroy the entry */
- Status = DeviceTableDestroyEntry(DeviceEntry, DeviceEntry->DeviceId);
- }
-
- /* Return back to caller */
- return Status;
-}
-
-NTSTATUS
-BlockIoDeviceTableDestroyEntry (
- _In_ PVOID Entry,
- _In_ ULONG DeviceId
- )
-{
- PBL_DEVICE_ENTRY DeviceEntry = (PBL_DEVICE_ENTRY)Entry;
- NTSTATUS Status;
-
- /* Call the close routine for this entry */
- Status = DeviceEntry->Callbacks.Close(DeviceEntry);
-
- /* Free the descriptor, and the device itself */
- BlMmFreeHeap(DeviceEntry->DeviceDescriptor);
- BlMmFreeHeap(DeviceEntry);
-
- /* Clear out the netry, and return */
- BlockIoDeviceTable[DeviceId] = NULL;
- return Status;
-}
-
-NTSTATUS
-BlockIoDeviceTableDestroy (
- VOID
- )
-{
- NTSTATUS Status;
-
- /* Call the entry destructor on each entry in the table */
- Status = BlTblMap(BlockIoDeviceTable,
- BlockIoDeviceTableEntries,
- BlockIoDeviceTableDestroyEntry);
-
- /* Free the table and return */
- BlMmFreeHeap(BlockIoDeviceTable);
- return Status;
-}
-
-NTSTATUS
-BlockIopDestroy (
- VOID
- )
-{
- /* Free the prefetch buffer */
- BlMmFreeHeap(BlockIopPrefetchBuffer);
-
- /* Set state to non initialized */
- BlockIoInitialized = FALSE;
-
- /* Return back */
- return STATUS_SUCCESS;
-}
-
-ULONG
-BlockIoEfiHashFunction (
- _In_ PBL_HASH_ENTRY Entry,
- _In_ ULONG TableSize
- )
-{
- /* Get rid of the alignment bits to have a more unique number */
- return ((ULONG_PTR)Entry->Value >> 3) % TableSize;
-}
-
-NTSTATUS
-BlockIopInitialize (
- VOID
- )
-{
- NTSTATUS Status;
-
- /* Allocate the block device table and zero it out */
- BlockIoDeviceTableEntries = 8;
- BlockIoDeviceTable = BlMmAllocateHeap(sizeof(PVOID) *
- BlockIoDeviceTableEntries);
- if (!BlockIoDeviceTableEntries)
- {
- return STATUS_NO_MEMORY;
- }
- RtlZeroMemory(BlockIoDeviceTable, sizeof(PVOID) * BlockIoDeviceTableEntries);
-
- /* Register our destructor */
- Status = BlpIoRegisterDestroyRoutine(BlockIoDeviceTableDestroy);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Initialize all counters */
- BlockIoFirmwareRemovableDiskCount = 0;
- BlockIoFirmwareRawDiskCount = 0;
- BlockIoFirmwareCdromCount = 0;
-
- /* Initialize the buffers and their sizes */
- BlockIopAlignedBuffer = NULL;
- BlockIopAlignedBufferSize = 0;
- BlockIopPartialBlockBuffer = NULL;
- BlockIopPartialBlockBufferSize = 0;
- BlockIopPrefetchBuffer = NULL;
- BlockIopReadBlockBuffer = NULL;
- BlockIopReadBlockBufferSize = 0;
-
- /* Allocate the prefetch buffer */
- Status = MmPapAllocatePagesInRange(&BlockIopPrefetchBuffer,
- BlLoaderDeviceMemory,
- 0x100,
- 0,
- 0,
- NULL,
- 0);
- if (NT_SUCCESS(Status))
- {
- /* Initialize the block cache */
- Status = BcInitialize();
- if (NT_SUCCESS(Status))
- {
- /* Initialize the block device hash table */
- Status = BlHtCreate(29, BlockIoEfiHashFunction, NULL, &HashTableId);
- if (NT_SUCCESS(Status))
- {
- /* Register our destructor */
- Status = BlpIoRegisterDestroyRoutine(BlockIopDestroy);
- if (NT_SUCCESS(Status))
- {
- /* We're good */
- BlockIoInitialized = TRUE;
- }
- }
- }
- }
-
- /* Check if this is the failure path */
- if (!NT_SUCCESS(Status))
- {
- /* Free the prefetch buffer is one was allocated */
- if (BlockIopPrefetchBuffer)
- {
- MmPapFreePages(BlockIopPrefetchBuffer, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-BOOLEAN
-BlockIoDeviceTableCompare (
- _In_ PVOID Entry,
- _In_ PVOID Argument1,
- _In_ PVOID Argument2,
- _In_ PVOID Argument3,
- _In_ PVOID Argument4
- )
-{
- PBL_DEVICE_ENTRY DeviceEntry = (PBL_DEVICE_ENTRY)Entry;
- PBL_DEVICE_DESCRIPTOR Device = (PBL_DEVICE_DESCRIPTOR)Argument1;
-
- /* Compare the two devices */
- return BlpDeviceCompare(DeviceEntry->DeviceDescriptor, Device);
-}
-
-NTSTATUS
-BlockIoOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PBL_DEVICE_ENTRY DeviceEntry
- )
-{
- NTSTATUS Status;
- PBL_BLOCK_DEVICE BlockDevice;
- PBL_DEVICE_ENTRY FoundDeviceEntry;
- ULONG Dummy;
-
- /* Check if the block I/O manager is initialized */
- if (!BlockIoInitialized)
- {
- /* First call, initialize it now */
- Status = BlockIopInitialize();
- if (!NT_SUCCESS(Status))
- {
- /* Failed to initialize block I/O */
- return Status;
- }
- }
-
- /* Copy a function table for block I/O devices */
- RtlCopyMemory(&DeviceEntry->Callbacks,
- &BlockIoDeviceFunctionTable,
- sizeof(DeviceEntry->Callbacks));
-
- /* Allocate a block I/O device */
- BlockDevice = BlMmAllocateHeap(sizeof(*BlockDevice));
- if (!BlockDevice)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Set this as the device-specific data for this device entry */
- Status = STATUS_SUCCESS;
- DeviceEntry->DeviceSpecificData = BlockDevice;
-
- /* Check if we already have this device in our device table */
- FoundDeviceEntry = BlTblFindEntry(BlockIoDeviceTable,
- BlockIoDeviceTableEntries,
- &Dummy,
- BlockIoDeviceTableCompare,
- Device,
- NULL,
- NULL,
- NULL);
- if (FoundDeviceEntry)
- {
- /* We already found a device, so copy its device data and callbacks */
- //EfiPrintf(L"Block I/O Device entry found: %p\r\n", FoundDeviceEntry);
- RtlCopyMemory(BlockDevice, FoundDeviceEntry->DeviceSpecificData, sizeof(*BlockDevice));
- RtlCopyMemory(&DeviceEntry->Callbacks,
- &FoundDeviceEntry->Callbacks,
- sizeof(DeviceEntry->Callbacks));
- return Status;
- }
-
- /* Zero out the device for now */
- RtlZeroMemory(BlockDevice, sizeof(*BlockDevice));
-
- /* Is this a disk? */
- if (Device->DeviceType == DiskDevice)
- {
- /* What type of disk is it? */
- switch (Device->Local.Type)
- {
- /* Is it a raw physical disk? */
- case LocalDevice:
- case FloppyDevice:
- case CdRomDevice:
- /* Open a disk device */
- Status = DiskDeviceFunctionTable.Open(Device, DeviceEntry);
- break;
-
- /* Is it a RAM disk? */
- case RamDiskDevice:
- /* Open a RAM disk */
- Status = RamDiskDeviceFunctionTable.Open(Device, DeviceEntry);
- break;
-
- /* Is it a file? */
- case FileDevice:
- /* Open a file */
- Status = FileDeviceFunctionTable.Open(Device, DeviceEntry);
- break;
-
- /* Is it a VHD? */
- case VirtualDiskDevice:
- /* Open a virtual disk */
- Status = VirtualDiskDeviceFunctionTable.Open(Device, DeviceEntry);
- break;
-
- /* Is it something else? */
- default:
- /* Not supported */
- Status = STATUS_INVALID_PARAMETER;
- break;
- }
- }
- else if ((Device->DeviceType == LegacyPartitionDevice) ||
- (Device->DeviceType == PartitionDevice))
- {
- /* This is a partition on a disk, open it as such */
- Status = PartitionDeviceFunctionTable.Open(Device, DeviceEntry);
- }
- else
- {
- /* Other devices are not supported */
- Status = STATUS_INVALID_PARAMETER;
- }
-
- /* Check for failure */
- if (!NT_SUCCESS(Status))
- {
- /* Free any allocations for this device */
- BlockIopFreeAllocations(BlockDevice);
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-NTSTATUS
-BlpDeviceResolveLocate (
- _In_ PBL_DEVICE_DESCRIPTOR InputDevice,
- _Out_ PBL_DEVICE_DESCRIPTOR* LocateDevice
- )
-{
- EfiPrintf(L"Not implemented!\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlDeviceClose (
- _In_ ULONG DeviceId
- )
-{
- PBL_DEVICE_ENTRY DeviceEntry;
-
- /* Validate the device ID */
- if (DmTableEntries <= DeviceId)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure there's a device there */
- DeviceEntry = DmDeviceTable[DeviceId];
- if (DeviceEntry == NULL)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure the device is active */
- if (!(DeviceEntry->Flags & BL_DEVICE_ENTRY_OPENED))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Drop a reference and check if it's the last one */
- DeviceEntry->ReferenceCount--;
- if (!DeviceEntry->ReferenceCount)
- {
- /* Mark the device as inactive */
- DeviceEntry->Flags = ~BL_DEVICE_ENTRY_OPENED;
- }
-
- /* We're good */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlpDeviceOpen (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ ULONG Flags,
- _In_ ULONG Unknown,
- _Out_ PULONG DeviceId
- )
-{
- NTSTATUS Status;
- PBL_DEVICE_ENTRY DeviceEntry;
- PBL_DEVICE_DESCRIPTOR LocateDeviceDescriptor;
- PBL_REGISTERED_DEVICE RegisteredDevice;
- PLIST_ENTRY NextEntry, ListHead;
-
- DeviceEntry = NULL;
-
- /* Check for missing parameters */
- if (!(Device) || !(DeviceId) || !(Device->Size))
- {
- /* Bail out */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Make sure both read and write access are set */
- if (!(Flags & (BL_DEVICE_READ_ACCESS | BL_DEVICE_WRITE_ACCESS)))
- {
- /* Bail out */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Check if the boot device is being opened */
- if (Device->DeviceType == BootDevice)
- {
- /* Select it */
- Device = BlpBootDevice;
- }
-
- /* Check if the 'locate' device is being opened */
- if (Device->DeviceType == LocateDevice)
- {
- /* Go find it */
- Status = BlpDeviceResolveLocate(Device, &LocateDeviceDescriptor);
- if (!NT_SUCCESS(Status))
- {
- /* Not found, bail out */
- goto Quickie;
- }
-
- /* Select it */
- Device = LocateDeviceDescriptor;
- }
-
- /* Check if the device isn't ready yet */
- if (Device->Flags & 1)
- {
- /* Return a failure */
- Status = STATUS_DEVICE_NOT_READY;
- goto Quickie;
- }
-
- /* Check if we already have an entry for the device */
- DeviceEntry = BlTblFindEntry(DmDeviceTable,
- DmTableEntries,
- DeviceId,
- DeviceTableCompare,
- Device,
- &Flags,
- &Unknown,
- NULL);
- if (DeviceEntry)
- {
- /* Return it, taking a reference on it */
- *DeviceId = DeviceEntry->DeviceId;
- ++DeviceEntry->ReferenceCount;
- DeviceEntry->Flags |= BL_DEVICE_ENTRY_OPENED;
- return STATUS_SUCCESS;
- }
-
- /* We don't, allocate one */
- DeviceEntry = BlMmAllocateHeap(sizeof(*DeviceEntry));
- if (!DeviceEntry)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Fill it out */
- RtlZeroMemory(DeviceEntry, sizeof(*DeviceEntry));
- DeviceEntry->ReferenceCount = 1;
- DeviceEntry->Flags |= (BL_DEVICE_ENTRY_OPENED |
- BL_DEVICE_ENTRY_READ_ACCESS |
- BL_DEVICE_ENTRY_WRITE_ACCESS);
- DeviceEntry->Unknown = Unknown;
-
- /* Save flag 8 if needed */
- if (Flags & 8)
- {
- DeviceEntry->Flags |= 8;
- }
-
- /* Allocate a device descriptor for the device */
- DeviceEntry->DeviceDescriptor = BlMmAllocateHeap(Device->Size);
- if (!DeviceEntry->DeviceDescriptor)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Copy the descriptor that was passed in */
- RtlCopyMemory(DeviceEntry->DeviceDescriptor, Device, Device->Size);
-
- /* Now loop the list of dynamically registered devices */
- ListHead = &DmRegisteredDevices;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Get the device */
- RegisteredDevice = CONTAINING_RECORD(NextEntry,
- BL_REGISTERED_DEVICE,
- ListEntry);
-
- /* Open the device */
- Status = RegisteredDevice->Callbacks.Open(Device, DeviceEntry);
- if (NT_SUCCESS(Status))
- {
- /* The device was opened, so we have the right one */
- goto DeviceOpened;
- }
-
- /* Nope, keep trying */
- NextEntry = NextEntry->Flink;
- }
-
- /* Well, it wasn't a dynamic device. Is it a block device? */
- if ((Device->DeviceType == PartitionDevice) ||
- (Device->DeviceType == DiskDevice) ||
- (Device->DeviceType == LegacyPartitionDevice))
- {
- /* Call the Block I/O handler */
- Status = BlockIoDeviceFunctionTable.Open(Device, DeviceEntry);
- }
- else if (Device->DeviceType == SerialDevice)
- {
- /* It's a serial device, call the serial device handler */
- Status = SerialPortFunctionTable.Open(Device, DeviceEntry);
- }
- else if (Device->DeviceType == UdpDevice)
- {
- /* It's a network device, call the UDP device handler */
- Status = UdpFunctionTable.Open(Device, DeviceEntry);
- }
- else
- {
- /* Unsupported type of device */
- Status = STATUS_NOT_IMPLEMENTED;
- }
-
- /* Check if the device was opened successfully */
- if (NT_SUCCESS(Status))
- {
-DeviceOpened:
- /* Save the entry in the device table */
- Status = BlTblSetEntry(&DmDeviceTable,
- &DmTableEntries,
- DeviceEntry,
- DeviceId,
- DeviceTablePurge);
- if (NT_SUCCESS(Status))
- {
- /* It worked -- return the ID in the table to the caller */
- EfiPrintf(L"Device ID: %lx\r\n", *DeviceId);
- DeviceEntry->DeviceId = *DeviceId;
- return STATUS_SUCCESS;
- }
- }
-
-Quickie:
- /* Failure path -- did we allocate a device entry? */
- EfiPrintf(L"Block failure: %lx\r\n", Status);
- if (DeviceEntry)
- {
- /* Yep -- did it have a descriptor? */
- if (DeviceEntry->DeviceDescriptor)
- {
- /* Free it */
- BlMmFreeHeap(DeviceEntry->DeviceDescriptor);
- }
-
- /* Free the entry */
- BlMmFreeHeap(DeviceEntry);
- }
-
- /* Return the failure */
- return Status;
-}
-
-NTSTATUS
-BlpDeviceInitialize (
- VOID
- )
-{
- NTSTATUS Status;
-
- /* Initialize the table count and list of devices */
- DmTableEntries = 8;
- InitializeListHead(&DmRegisteredDevices);
-
- /* Initialize device information */
- DmDeviceIoInformation.ReadCount = 0;
- DmDeviceIoInformation.WriteCount = 0;
-
- /* Allocate the device table */
- DmDeviceTable = BlMmAllocateHeap(DmTableEntries * sizeof(PVOID));
- if (DmDeviceTable)
- {
- /* Clear it */
- RtlZeroMemory(DmDeviceTable, DmTableEntries * sizeof(PVOID));
-#if BL_BITLOCKER_SUPPORT
- /* Initialize BitLocker support */
- Status = FvebInitialize();
-#else
- Status = STATUS_SUCCESS;
-#endif
- }
- else
- {
- /* No memory, we'll fail */
- Status = STATUS_NO_MEMORY;
- }
-
- /* Return initialization state */
- return Status;
-}
-
diff --git a/boot/environ/lib/io/display/display.c b/boot/environ/lib/io/display/display.c
deleted file mode 100644
index f842a025cdb..00000000000
--- a/boot/environ/lib/io/display/display.c
+++ /dev/null
@@ -1,989 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/platform/display.c
- * PURPOSE: Boot Library Display Management Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-#include
-
-/* DATA VARIABLES ************************************************************/
-
-PVOID BfiCachedStrikeData;
-LIST_ENTRY BfiDeferredListHead;
-LIST_ENTRY BfiFontFileListHead;
-PVOID BfiGraphicsRectangle;
-
-ULONG ConsoleGraphicalResolutionListFlags;
-BL_DISPLAY_MODE ConsoleGraphicalResolutionList[3] =
-{
- {1024, 768, 1024},
- {800, 600, 800},
- {1024, 600, 1024}
-};
-ULONG ConsoleGraphicalResolutionListSize = RTL_NUMBER_OF(ConsoleGraphicalResolutionList);
-
-BL_DISPLAY_MODE ConsoleTextResolutionList[1] =
-{
- {80, 25, 80}
-};
-
-PVOID DspRemoteInputConsole;
-PVOID DspTextConsole;
-PVOID DspGraphicalConsole;
-PVOID DspLocalInputConsole;
-
-/* FUNCTIONS *****************************************************************/
-
-BOOLEAN
-DsppGraphicsDisabledByBcd (
- VOID
- )
-{
- BOOLEAN Disabled;
- NTSTATUS Status;
-
- /* Get the boot option, and if present, return the result */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_GraphicsModeDisabled,
- &Disabled);
- return (NT_SUCCESS(Status) && (Disabled));
-}
-
-NTSTATUS
-DsppLoadFontFile (
- _In_ PWCHAR FontFileName
- )
-{
- PBL_DEVICE_DESCRIPTOR FontDevice;
- NTSTATUS Status;
- SIZE_T NameLength, DirectoryLength, TotalLength;
- PWCHAR FontPath, FontDirectory;
- BL_LIBRARY_PARAMETERS LibraryParameters;
- BOOLEAN CustomDirectory, CustomDevice;
-
- /* Initialize locals */
- CustomDirectory = TRUE;
- CustomDevice = TRUE;
- FontDevice = NULL;
- FontPath = NULL;
- FontDirectory = NULL;
-
- /* Check if a custom font path should be used */
- Status = BlGetBootOptionString(BlpApplicationEntry.BcdData,
- BcdLibraryString_FontPath,
- &FontDirectory);
- if (!NT_SUCCESS(Status))
- {
- /* Nope, use the one configured by the library */
- CustomDirectory = FALSE;
- RtlCopyMemory(&LibraryParameters,
- &BlpLibraryParameters,
- sizeof(LibraryParameters)),
- FontDirectory = LibraryParameters.FontBaseDirectory;
- }
-
- /* Do we still not have a font directory? */
- if (!FontDirectory)
- {
- /* Use the boot device and boot directory */
- CustomDevice = FALSE;
- FontDevice = BlpBootDevice;
- FontDirectory = L"\\EFI\\Microsoft\\Boot\\Fonts";
- }
- else
- {
- /* Otherwise, if we have a font directory, what device is the app on? */
- Status = BlGetBootOptionDevice(BlpApplicationEntry.BcdData,
- BcdLibraryDevice_ApplicationDevice,
- &FontDevice,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- /* If we don't know the device, we can't open the path */
- goto Quickie;
- }
- }
-
- /* Figure out the length of the file name, and of the directory */
- NameLength = wcslen(FontFileName);
- DirectoryLength = wcslen(FontDirectory);
-
- /* Safely add them up*/
- Status = RtlSIZETAdd(NameLength, DirectoryLength, &TotalLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Convert to bytes */
- Status = RtlSIZETMult(TotalLength, sizeof(WCHAR), &TotalLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Add a terminating NUL */
- Status = RtlSIZETAdd(TotalLength, sizeof(UNICODE_NULL), &TotalLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Allocate the final buffer for it */
- FontPath = BlMmAllocateHeap(TotalLength);
- if (!FontPath)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Concatenate the directory with the file name */
- wcscpy(FontPath, FontDirectory);
- wcscat(FontPath, FontFileName);
-
- /* Try to load this font */
- Status = BfLoadFontFile(FontDevice, FontPath);
-
-Quickie:
- /* Check if we had a custom font device allocated and free it */
- if ((CustomDevice) && (FontDevice))
- {
- BlMmFreeHeap(FontDevice);
- }
-
- /* Check if we had a custom font directory allocated and free it */
- if ((CustomDirectory) && (CustomDevice))
- {
- ASSERT(FontDirectory);
- BlMmFreeHeap(FontDirectory);
- }
-
- /* Check if we had allocated a font path and free it */
- if (FontPath)
- {
- BlMmFreeHeap(FontPath);
- }
-
- /* Return back */
- return Status;
-}
-
-NTSTATUS
-BlpDisplayRegisterLocale (
- _In_ PWCHAR Locale
- )
-{
- BOOLEAN StandardLocale;
- NTSTATUS Status;
- PWCHAR FontFileName;
- PBL_DEFERRED_FONT_FILE DeferredFont;
- PLIST_ENTRY NextEntry;
- WCHAR Prefix[3];
-
- /* Assume custom locale */
- StandardLocale = FALSE;
-
- /* Bail out if the locale string seems invalid */
- if (wcslen(Locale) < 2)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Check the prefix first, then traditional vs. simplified */
- Prefix[0] = Locale[0];
- Prefix[1] = Locale[1];
- Prefix[2] = UNICODE_NULL;
- if (!_wcsicmp(Prefix, L"ja"))
- {
- FontFileName = L"\\jpn_boot.ttf";
- }
- else if (!_wcsicmp(Prefix, L"ko"))
- {
- FontFileName = L"\\kor_boot.ttf";
- }
- else if (!(_wcsicmp(Locale, L"zh-CN")) ||
- !(_wcsicmp(Locale, L"zh-CHS")) ||
- !(_wcsicmp(Locale, L"zh-Hans")))
- {
- FontFileName = L"\\chs_boot.ttf";
- }
- else if (!(_wcsicmp(Locale, L"zh-TW")) &&
- !(_wcsicmp(Locale, L"zh-CHT")) &&
- !(_wcsicmp(Locale, L"zh-HK")) &&
- !(_wcsicmp(Locale, L"zh-Hant")))
- {
- FontFileName = L"\\cht_boot.ttf";
- }
- else
- {
- StandardLocale = TRUE;
- FontFileName = L"\\wgl4_boot.ttf";
- }
-
- /* Parse all the currently deferred fonts*/
- NextEntry = BfiDeferredListHead.Flink;
- while (NextEntry != &BfiDeferredListHead)
- {
- /* Grab the font */
- DeferredFont = CONTAINING_RECORD(NextEntry, BL_DEFERRED_FONT_FILE, ListEntry);
-
- /* Move to the next entry, and remove this one */
- NextEntry = NextEntry->Flink;
- RemoveEntryList(&DeferredFont->ListEntry);
-
- /* Free the deferred font, we'll be loading a new one */
- BfiFreeDeferredFontFile(DeferredFont);
- }
-
- /* Load the primary font */
- Status = DsppLoadFontFile(FontFileName);
- if (NT_SUCCESS(Status) && !(StandardLocale))
- {
- /* Also load the standard US one if we loaded a different one */
- Status = DsppLoadFontFile(L"\\wgl4_boot.ttf");
- }
-
- /* Return back to caller */
- return Status;
-}
-
-NTSTATUS
-DsppInitialize (
- _In_ ULONG Flags
- )
-{
- BL_LIBRARY_PARAMETERS LibraryParameters = BlpLibraryParameters;
- BOOLEAN NoGraphics, HighestMode;
- NTSTATUS Status;
- PBL_DISPLAY_MODE DisplayMode;
- ULONGLONG GraphicsResolution;
- PBL_GRAPHICS_CONSOLE GraphicsConsole;
- PBL_TEXT_CONSOLE TextConsole, RemoteConsole;
-
- /* Initialize font data */
- BfiCachedStrikeData = 0;
- InitializeListHead(&BfiDeferredListHead);
- InitializeListHead(&BfiFontFileListHead);
-
- /* Allocate the font rectangle */
- BfiGraphicsRectangle = BlMmAllocateHeap(90);
- if (!BfiGraphicsRectangle)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Check if display re-initialization is requested */
- if (LibraryParameters.LibraryFlags & BL_LIBRARY_FLAG_REINITIALIZE_ALL)
- {
- /* Recreate a local input console */
- ConsoleCreateLocalInputConsole();
- }
-
- /* Check if no graphics console is needed */
- if ((Flags & BL_LIBRARY_FLAG_NO_GRAPHICS_CONSOLE) ||
- (DsppGraphicsDisabledByBcd()))
- {
- /* Remember this */
- NoGraphics = TRUE;
- }
- else
- {
- /* No graphics -- remember this */
- NoGraphics = FALSE;
- }
-
- /* On first load, we always initialize a graphics display */
- GraphicsConsole = NULL;
- if (!(Flags & BL_LIBRARY_FLAG_REINITIALIZE_ALL) || !(NoGraphics))
- {
- /* Default to mode 0 (1024x768) */
- DisplayMode = &ConsoleGraphicalResolutionList[0];
-
- /* Check what resolution to use*/
- Status = BlGetBootOptionInteger(BlpApplicationEntry.BcdData,
- BcdLibraryInteger_GraphicsResolution,
- &GraphicsResolution);
- if (NT_SUCCESS(Status))
- {
- ConsoleGraphicalResolutionListFlags |= BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG;
- EfiPrintf(L"Display selection not yet handled\r\n");
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Check if the highest mode should be forced */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_GraphicsForceHighestMode,
- &HighestMode);
- if (NT_SUCCESS(Status))
- {
- ConsoleGraphicalResolutionListFlags |= BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG;
- EfiPrintf(L"High res mode not yet handled\r\n");
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Do we need graphics mode after all? */
- if (!NoGraphics)
- {
- /* Yep -- go allocate it */
- GraphicsConsole = BlMmAllocateHeap(sizeof(*GraphicsConsole));
- if (GraphicsConsole)
- {
- /* Construct it */
- Status = ConsoleGraphicalConstruct(GraphicsConsole);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"GFX FAILED: %lx\r\n", Status);
- BlMmFreeHeap(GraphicsConsole);
- GraphicsConsole = NULL;
- }
- }
- }
-
- /* Are we using something else than the default mode? */
- if (DisplayMode != &ConsoleGraphicalResolutionList[0])
- {
- EfiPrintf(L"Display path not handled\r\n");
- return STATUS_NOT_SUPPORTED;
- }
-
- /* Mask out all the flags now */
- ConsoleGraphicalResolutionListFlags &= ~(BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG |
- BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG);
- }
-
- /* Do we have a graphics console? */
- TextConsole = NULL;
- if (!GraphicsConsole)
- {
- /* Nope -- go allocate a text console */
- TextConsole = BlMmAllocateHeap(sizeof(*TextConsole));
- if (TextConsole)
- {
- /* Construct it */
- Status = ConsoleTextLocalConstruct(TextConsole, TRUE);
- if (!NT_SUCCESS(Status))
- {
- BlMmFreeHeap(TextConsole);
- TextConsole = NULL;
- }
- }
- }
-
- /* Initialize all globals to NULL */
- DspRemoteInputConsole = NULL;
- DspTextConsole = NULL;
- DspGraphicalConsole = NULL;
-
- /* If we don't have a text console, go get a remote console */
- RemoteConsole = NULL;
- if (!TextConsole)
- {
- ConsoleCreateRemoteConsole(&RemoteConsole);
- }
-
- /* Do we have a remote console? */
- if (!RemoteConsole)
- {
- /* Nope -- what about a graphical one? */
- if (GraphicsConsole)
- {
- /* Yes, use it for both graphics and text */
- DspGraphicalConsole = GraphicsConsole;
- DspTextConsole = GraphicsConsole;
- }
- else if (TextConsole)
- {
- /* Nope, but we have a text console */
- DspTextConsole = TextConsole;
- }
-
- /* Console has been setup */
- return STATUS_SUCCESS;
- }
-
- /* We have a remote console -- have to figure out how to use it*/
- EfiPrintf(L"Display path not handled\r\n");
- return STATUS_NOT_SUPPORTED;
-}
-
-NTSTATUS
-DsppReinitialize (
- _In_ ULONG Flags
- )
-{
- PBL_TEXT_CONSOLE TextConsole;
- PBL_GRAPHICS_CONSOLE GraphicsConsole;
- NTSTATUS Status;
- ULONGLONG GraphicsResolution;
- BOOLEAN HighestMode;
- BL_DISPLAY_MODE CurrentResolution;
-
- /* Do we have local input yet? */
- if (!DspLocalInputConsole)
- {
- /* Create it now */
- ConsoleCreateLocalInputConsole();
- }
-
- /* If a graphics console is present without a remote console... */
- TextConsole = NULL;
- if (!(DspRemoteInputConsole) && (DspGraphicalConsole))
- {
- /* Try to create a remote console */
- ConsoleCreateRemoteConsole(&TextConsole);
- }
-
- /* All good for now */
- Status = STATUS_SUCCESS;
-
- /* Now check if we were able to create the remote console */
- if (TextConsole)
- {
- EfiPrintf(L"EMS not supported\r\n");
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Set a local for the right cast */
- GraphicsConsole = DspGraphicalConsole;
-
- /* Nothing to do without a graphics console being reinitialized */
- if (!(Flags & BL_LIBRARY_FLAG_REINITIALIZE_ALL) ||
- !(GraphicsConsole) ||
- !(((PBL_GRAPHICS_CONSOLE_VTABLE)GraphicsConsole->TextConsole.Callbacks)->IsEnabled(GraphicsConsole)))
- {
- return Status;
- }
-
- /* Check if graphics are disabled in the BCD */
- if (DsppGraphicsDisabledByBcd())
- {
- /* Turn off the graphics console, switching back to text mode */
- Status = ((PBL_GRAPHICS_CONSOLE_VTABLE)GraphicsConsole->TextConsole.Callbacks)->Enable(GraphicsConsole, FALSE);
- }
-
- /* Check if a custom graphics resolution is set */
- if (MiscGetBootOption(BlpApplicationEntry.BcdData,
- BcdLibraryInteger_GraphicsResolution))
- {
- /* Check what it's set to */
- Status = BlGetBootOptionInteger(BlpApplicationEntry.BcdData,
- BcdLibraryInteger_GraphicsResolution,
- &GraphicsResolution);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Now check our current graphical resolution */
- Status = ((PBL_GRAPHICS_CONSOLE_VTABLE)GraphicsConsole->TextConsole.Callbacks)->GetGraphicalResolution(GraphicsConsole,
- &CurrentResolution);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Remember that we're forcing a video mode */
- ConsoleGraphicalResolutionListFlags |= BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG;
-
- /* Check which resolution to set */
- if (!GraphicsResolution)
- {
- /* 1024x768 */
- EfiPrintf(L"Display selection not yet handled\r\n");
- return STATUS_NOT_IMPLEMENTED;
- }
- else if (GraphicsResolution == 1)
- {
- /* 800x600 */
- EfiPrintf(L"Display selection not yet handled\r\n");
- return STATUS_NOT_IMPLEMENTED;
- }
- else if (GraphicsResolution == 2)
- {
- /* 1024x600 */
- EfiPrintf(L"Display selection not yet handled\r\n");
- return STATUS_NOT_IMPLEMENTED;
- }
- }
-
- /* Check if the force highest mode setting is present */
- if (MiscGetBootOption(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_GraphicsForceHighestMode))
- {
- /* Check what it's set to */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_GraphicsForceHighestMode,
- &HighestMode);
- if ((NT_SUCCESS(Status)) && (HighestMode))
- {
- /* Remember that high rest mode is being forced */
- ConsoleGraphicalResolutionListFlags |= BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG;
-
- /* Turn it on */
- //((PBL_GRAPHICS_CONSOLE_VTABLE)GraphicsConsole->TextConsole.Callbacks)->SetGraphicalResolution(GraphicsConsole, 0, 0);
-
- /* All done now */
- ConsoleGraphicalResolutionListFlags |= ~BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG;
- EfiPrintf(L"High res mode not yet handled\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
- }
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-NTSTATUS
-BlpDisplayReinitialize (
- VOID
- )
-{
- NTSTATUS Status = STATUS_SUCCESS;
- PBL_TEXT_CONSOLE TextConsole;
- PBL_INPUT_CONSOLE InputConsole;
-
- /* Do we have a local console? */
- InputConsole = DspLocalInputConsole;
- if (InputConsole)
- {
- /* Reinitialize it */
- Status = InputConsole->Callbacks->Reinitialize((PBL_TEXT_CONSOLE)InputConsole);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- }
-
- /* Do we have a text console? */
- TextConsole = DspTextConsole;
- if (TextConsole)
- {
- /* Reinitialize it */
- Status = TextConsole->Callbacks->Reinitialize(TextConsole);
- }
-
- /* Return status */
- return Status;
-}
-
-NTSTATUS
-BlpDisplayInitialize (
- _In_ ULONG Flags
- )
-{
- NTSTATUS Status;
-
- /* Are we resetting or initializing? */
- if (Flags & BL_LIBRARY_FLAG_REINITIALIZE)
- {
- /* This is a reset */
- Status = DsppReinitialize(Flags);
- if (NT_SUCCESS(Status))
- {
- /* Re-initialize the class as well */
- Status = BlpDisplayReinitialize();
- }
- }
- else
- {
- /* Initialize the display */
- Status = DsppInitialize(Flags);
- }
-
- /* Return display initialization state */
- return Status;
-}
-
-VOID
-BlDisplayGetTextCellResolution (
- _Out_ PULONG TextWidth,
- _Out_ PULONG TextHeight
- )
-{
- NTSTATUS Status;
- PBL_GRAPHICS_CONSOLE GraphicsConsole;
-
- /* If the caller doesn't want anything, bail out */
- if (!(TextWidth) || !(TextHeight))
- {
- return;
- }
-
- /* Do we have a text console? */
- Status = STATUS_UNSUCCESSFUL;
- if (DspTextConsole)
- {
- /* Do we have a graphics console? */
- GraphicsConsole = DspGraphicalConsole;
- if (GraphicsConsole)
- {
- /* Is it currently active? */
- if (((PBL_GRAPHICS_CONSOLE_VTABLE)GraphicsConsole->TextConsole.Callbacks)->IsEnabled(GraphicsConsole))
- {
- /* Yep -- query it */
- EfiPrintf(L"GFX active, not supported query\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
- //Status = ((PBL_GRAPHICS_CONSOLE_VTABLE)GraphicsConsole->TextConsole.Callbacks)->GetTextCellResolution(GraphicsConsole);
- }
- }
- }
-
- /* Check if we failed to get it from the graphics console */
- if (!NT_SUCCESS(Status))
- {
- /* Set default text size */
- *TextWidth = 8;
- *TextHeight = 8;
- }
-}
-
-NTSTATUS
-BlDisplaySetScreenResolution (
- VOID
- )
-{
- PBL_GRAPHICS_CONSOLE Console;
- NTSTATUS Status;
-
- /* Assume success */
- Status = STATUS_SUCCESS;
-
- /* Do we have a graphics console? */
- Console = DspGraphicalConsole;
- if (Console)
- {
- /* Is it currently active? */
- if (((PBL_GRAPHICS_CONSOLE_VTABLE)Console->TextConsole.Callbacks)->IsEnabled(Console))
- {
- /* If so, disable it */
- return ((PBL_GRAPHICS_CONSOLE_VTABLE)Console->TextConsole.Callbacks)->Enable(Console, FALSE);
- }
- }
-
- /* We should've now fallen back to text mode */
- if (!DspTextConsole)
- {
- /* Then fail, as no display appears active */
- Status = STATUS_UNSUCCESSFUL;
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-NTSTATUS
-BlDisplayGetScreenResolution (
- _Out_ PULONG HRes,
- _Out_ PULONG VRes
- )
-{
- NTSTATUS Status;
- BL_DISPLAY_MODE Resolution;
- PBL_GRAPHICS_CONSOLE GraphicsConsole;
-
- /* Assume failure if no consoles are active */
- Status = STATUS_UNSUCCESSFUL;
-
- /* Do we have a text console? */
- if (DspTextConsole)
- {
- /* Do we have an active graphics console? */
- GraphicsConsole = DspGraphicalConsole;
- if ((GraphicsConsole) &&
- (((PBL_GRAPHICS_CONSOLE_VTABLE)GraphicsConsole->TextConsole.Callbacks)->IsEnabled(GraphicsConsole)))
- {
- /* Get the resolution */
- Status = ((PBL_GRAPHICS_CONSOLE_VTABLE)GraphicsConsole->TextConsole.Callbacks)->GetGraphicalResolution(GraphicsConsole, &Resolution);
- if (NT_SUCCESS(Status))
- {
- /* Return it back to the caller */
- *HRes = Resolution.HRes;
- *VRes = Resolution.VRes;
- }
- }
- else
- {
- /* Return defaults */
- *HRes = 640;
- *VRes = 200;
- Status = STATUS_SUCCESS;
- }
- }
-
- /* Return if we got a valid resolution back */
- return Status;
-}
-
-VOID
-BlDisplayInvalidateOemBitmap (
- VOID
- )
-{
- PBGRT_TABLE BgrtTable;
- NTSTATUS Status;
-
- /* Search for the BGRT */
- Status = BlUtlGetAcpiTable((PVOID*)&BgrtTable, BGRT_SIGNATURE);
- if (NT_SUCCESS(Status))
- {
- /* Mark the bitmap as invalid */
- BgrtTable->Status &= ~BGRT_STATUS_IMAGE_VALID;
-
- /* Unmap the table */
- BlMmUnmapVirtualAddressEx(BgrtTable, BgrtTable->Header.Length);
- }
-}
-
-PBITMAP
-BlDisplayGetOemBitmap (
- _In_opt_ PCOORD Offsets,
- _Out_opt_ PULONG Flags
- )
-{
- NTSTATUS Status;
- ULONG Size;
- PHYSICAL_ADDRESS PhysicalAddress;
- PBGRT_TABLE BgrtTable;
- PBITMAP Bitmap;
- PBMP_HEADER Header;
-
- Bitmap = NULL;
- BgrtTable = NULL;
-
- /* Search for the BGRT */
- Status = BlUtlGetAcpiTable((PVOID*)&BgrtTable, BGRT_SIGNATURE);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Make sure this is really a BGRT */
- if (BgrtTable->Header.Signature != BGRT_SIGNATURE)
- {
- Status = STATUS_ACPI_INVALID_TABLE;
- goto Quickie;
- }
-
- /* Make sure the BGRT table length is valid */
- if (BgrtTable->Header.Length != sizeof(*BgrtTable))
- {
- Status = STATUS_ACPI_INVALID_TABLE;
- goto Quickie;
- }
-
- /* Make sure its a bitmap */
- if (BgrtTable->ImageType != BgrtImageTypeBitmap)
- {
- Status = STATUS_ACPI_INVALID_TABLE;
- goto Quickie;
- }
-
- /* Make sure it's somewhere in RAM */
- if (!BgrtTable->LogoAddress)
- {
- Status = STATUS_ACPI_INVALID_TABLE;
- goto Quickie;
- }
-
- /* Map the bitmap header only for now */
- PhysicalAddress.QuadPart = BgrtTable->LogoAddress;
- Status = BlMmMapPhysicalAddressEx((PVOID*)&Header,
- 0,
- sizeof(BMP_HEADER),
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Capture the real size of the header */
- Size = Header->Size;
-
- /* Unmap the bitmap header */
- BlMmUnmapVirtualAddressEx(BgrtTable, sizeof(BMP_HEADER));
-
- /* If the real size is smaller than at least a V3 bitmap, bail out */
- if (Size < sizeof(BITMAP))
- {
- Status = STATUS_ACPI_INVALID_TABLE;
- goto Quickie;
- }
-
- /* Map the real size of the header */
- Status = BlMmMapPhysicalAddressEx((PVOID*)&Bitmap,
- 0,
- Size,
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Make sure this is a non-compressed 24-bit or 32-bit V3 bitmap */
- if ((Bitmap->BmpHeader.Signature != 'MB') ||
- (Bitmap->DibHeader.Compression) ||
- ((Bitmap->DibHeader.BitCount != 24) &&
- (Bitmap->DibHeader.BitCount != 32)) ||
- (Bitmap->DibHeader.Size != sizeof(DIB_HEADER)))
- {
- Status = STATUS_ACPI_INVALID_TABLE;
- goto Quickie;
- }
-
- /* Check if caller wants the offsets back */
- if (Offsets)
- {
- /* Give them away */
- Offsets->X = BgrtTable->OffsetX;
- Offsets->Y = BgrtTable->OffsetY;
- }
-
- /* Check if the caller wants flags */
- if (Flags)
- {
- /* Return if the image is valid */
- *Flags = BgrtTable->Status & BGRT_STATUS_IMAGE_VALID;
- }
-
-Quickie:
- /* Check if we had mapped the BGRT */
- if (BgrtTable)
- {
- /* Unmap it */
- BlMmUnmapVirtualAddressEx(BgrtTable, BgrtTable->Header.Length);
- }
-
- /* Check if this is the failure path */
- if (!NT_SUCCESS(Status))
- {
- /* Did we have the OEM bitmap mapped? */
- if (Bitmap)
- {
- /* Unmap it */
- BlMmUnmapVirtualAddressEx(Bitmap, Bitmap->BmpHeader.Size);
- }
-
- /* No bitmap to return */
- Bitmap = NULL;
- }
-
- /* Return the bitmap back, if any */
- return Bitmap;
-}
-
-BOOLEAN
-BlDisplayValidOemBitmap (
- VOID
- )
-{
- PBITMAP Bitmap;
- ULONG HRes, VRes, Height, Width, Flags;
- COORD Offsets;
- BOOLEAN Result;
- NTSTATUS Status;
-
- /* First check if mobile graphics are enabled */
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_MobileGraphics,
- &Result);
- if ((NT_SUCCESS(Status)) && (Result))
- {
- /* Yes, so use the firmware image */
- return TRUE;
- }
-
- /* Nope, so we'll check the ACPI OEM bitmap */
- Result = FALSE;
- Bitmap = BlDisplayGetOemBitmap(&Offsets, &Flags);
-
- /* Is there one? */
- if (Bitmap)
- {
- /* Is it valid? */
- if (Flags & BGRT_STATUS_IMAGE_VALID)
- {
- /* Get the current screen resolution */
- Status = BlDisplayGetScreenResolution(&HRes, &VRes);
- if (NT_SUCCESS(Status))
- {
- /* Is there a valid width? */
- Width = Bitmap->DibHeader.Width;
- if (Width)
- {
- /* Is there a valid height? */
- Height = Bitmap->DibHeader.Height;
- if (Height)
- {
- /* Will if fit on this screen? */
- if (((Width + Offsets.X) <= HRes) &&
- ((Height + Offsets.Y) <= VRes))
- {
- /* Then it's all good! */
- Result = TRUE;
- }
- }
- }
- }
- }
-
- /* Unmap the bitmap for now, it will be drawn later */
- BlMmUnmapVirtualAddressEx(Bitmap, Bitmap->BmpHeader.Size);
- }
-
- /* Return that a valid OEM bitmap exists */
- return Result;
-}
-
-NTSTATUS
-BlDisplayClearScreen (
- VOID
- )
-{
- NTSTATUS Status;
- PBL_TEXT_CONSOLE TextConsole;
-
- /* Nothing to do if there's no text console */
- Status = STATUS_SUCCESS;
- TextConsole = DspTextConsole;
- if (TextConsole)
- {
- /* Otherwise, clear the whole screen */
- Status = TextConsole->Callbacks->ClearText(TextConsole, FALSE);
- if (NT_SUCCESS(Status))
- {
- /* Invalidate the OEM bitmap at this point */
- BlDisplayInvalidateOemBitmap();
- }
- }
-
- /* All done */
- return Status;
-};
-
-NTSTATUS
-BlDisplaySetCursorType (
- _In_ ULONG Type
- )
-{
- NTSTATUS Status;
- PBL_TEXT_CONSOLE TextConsole;
- BL_DISPLAY_STATE State;
-
- /* Nothing to do if there's no text console */
- Status = STATUS_SUCCESS;
- TextConsole = DspTextConsole;
- if (TextConsole)
- {
- /* Write visibility state and call the function to change it */
- State.CursorVisible = Type;
- Status = TextConsole->Callbacks->SetTextState(TextConsole, 8, &State);
- }
-
- /* All done */
- return Status;
-}
diff --git a/boot/environ/lib/io/display/efi/gop.c b/boot/environ/lib/io/display/efi/gop.c
deleted file mode 100644
index bafc8f2da11..00000000000
--- a/boot/environ/lib/io/display/efi/gop.c
+++ /dev/null
@@ -1,280 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/display/efi/gop.c
- * PURPOSE: Boot Library EFI GOP Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-ConsoleEfiGopGetGraphicalFormat (
- _In_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *ModeInfo,
- _Out_ PULONG PixelDepth
- )
-{
- /* Convert the format to depth */
- if (ModeInfo->PixelFormat == PixelBlueGreenRedReserved8BitPerColor)
- {
- *PixelDepth = 32;
- return STATUS_SUCCESS;
- }
- if (ModeInfo->PixelFormat == PixelBitMask)
- {
- *PixelDepth = 24;
- return STATUS_SUCCESS;
- }
- return STATUS_UNSUCCESSFUL;
-}
-
-BOOLEAN
-ConsoleEfiGopIsPixelFormatSupported (
- _In_ EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Mode
- )
-{
- BOOLEAN Supported;
- EFI_PIXEL_BITMASK PixelMask;
-
- Supported = FALSE;
-
- /* Check if it's simple BGR8 */
- if (Mode->PixelFormat == PixelBlueGreenRedReserved8BitPerColor)
- {
- Supported = TRUE;
- }
- else
- {
- /* Otherwise, we can check if it's a masked format */
- if (Mode->PixelFormat == PixelBitMask)
- {
- /* Check if the masked format is BGR8 */
- PixelMask.BlueMask = 0xFF;
- PixelMask.GreenMask = 0xFF00;
- PixelMask.RedMask = 0xFF0000;
- PixelMask.ReservedMask = 0;
- if (RtlEqualMemory(&Mode->PixelInformation,
- &PixelMask,
- sizeof(PixelMask)))
- {
- Supported = TRUE;
- }
- }
- }
-
- /* Return if the format was supported */
- return Supported;
-}
-
-
-NTSTATUS
-ConsoleEfiGopFindModeFromAllowed (
- _In_ EFI_GRAPHICS_OUTPUT_PROTOCOL *GopProtocol,
- _In_ PBL_DISPLAY_MODE SupportedModes,
- _In_ ULONG MaximumIndex,
- _Out_ PULONG SupportedMode
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-ConsoleEfiGopEnable (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- )
-{
- PVOID FrameBuffer;
- UINTN CurrentMode, Dummy;
- ULONG Mode, PixelDepth;
- UINTN FrameBufferSize;
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION ModeInformation;
- EFI_GRAPHICS_OUTPUT_PROTOCOL* Protocol;
- NTSTATUS Status;
- PHYSICAL_ADDRESS FrameBufferPhysical;
-
- /* Capture the current mode and protocol */
- Mode = GraphicsConsole->Mode;
- Protocol = GraphicsConsole->Protocol;
-
- /* Get the current mode and its information */
- Status = EfiGopGetCurrentMode(Protocol, &CurrentMode, &ModeInformation);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Check if we're not in the mode we should be */
- if (CurrentMode != Mode)
- {
- /* Switch modes */
- Status = EfiGopSetMode(Protocol, Mode);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Reset the OEM bitmap and get the new more information */
- BlDisplayInvalidateOemBitmap();
- EfiGopGetCurrentMode(Protocol, &Dummy, &ModeInformation);
- }
-
- /* Get the pixel depth for this mode */
- Status = ConsoleEfiGopGetGraphicalFormat(&ModeInformation, &PixelDepth);
- if (NT_SUCCESS(Status))
- {
- /* Get the framebuffer for this mode */
- EfiGopGetFrameBuffer(Protocol, &FrameBufferPhysical, &FrameBufferSize);
-
- /* Map the framebuffer, try as writeback first */
- FrameBuffer = NULL;
- Status = BlMmMapPhysicalAddressEx(&FrameBuffer,
- BlMemoryWriteBack,
- FrameBufferSize,
- FrameBufferPhysical);
- if (!NT_SUCCESS(Status))
- {
- /* That didn't work, so try uncached next */
- Status = BlMmMapPhysicalAddressEx(&FrameBuffer,
- BlMemoryUncached,
- FrameBufferSize,
- FrameBufferPhysical);
- }
- }
-
- /* Check if getting all the required information worked out */
- if (NT_SUCCESS(Status))
- {
- /* Capture the resolution, depth, and framebuffer information */
- GraphicsConsole->DisplayMode.HRes = ModeInformation.HorizontalResolution;
- GraphicsConsole->DisplayMode.VRes = ModeInformation.VerticalResolution;
- GraphicsConsole->DisplayMode.HRes2 = ModeInformation.PixelsPerScanLine;
- GraphicsConsole->PixelDepth = PixelDepth;
- GraphicsConsole->FrameBuffer = FrameBuffer;
- GraphicsConsole->FrameBufferSize = FrameBufferSize;
- GraphicsConsole->PixelsPerScanLine = ModeInformation.PixelsPerScanLine;
-
- /* All good */
- Status = STATUS_SUCCESS;
- }
- else if (CurrentMode != GraphicsConsole->Mode)
- {
- /* We failed somewhere, reset the mode and the OEM bitmap back */
- EfiGopSetMode(Protocol, CurrentMode);
- BlDisplayInvalidateOemBitmap();
- }
-
- /* Return back to caller */
- return Status;
-}
-
-VOID
-ConsoleEfiGopClose (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- )
-{
- ULONG OldMode;
-
- /* Did we switch modes when we turned on the console? */
- OldMode = GraphicsConsole->OldMode;
- if (GraphicsConsole->Mode != OldMode)
- {
- /* Restore the old mode and reset the OEM bitmap in ACPI */
- EfiGopSetMode(GraphicsConsole->Protocol, OldMode);
- BlDisplayInvalidateOemBitmap();
- }
-
- /* Close the GOP protocol */
- EfiCloseProtocol(GraphicsConsole->Handle,
- &EfiGraphicsOutputProtocol);
-}
-
-NTSTATUS
-ConsoleEfiGopOpen (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- )
-{
- NTSTATUS Status;
- EFI_GRAPHICS_OUTPUT_PROTOCOL *GopProtocol;
- ULONG Mode, PixelDepth;
- UINTN CurrentMode;
- EFI_GRAPHICS_OUTPUT_MODE_INFORMATION ModeInformation;
- BOOLEAN CurrentModeOk;
-
- /* Open a handle to GOP */
- Status = EfiOpenProtocol(GraphicsConsole->Handle,
- &EfiGraphicsOutputProtocol,
- (PVOID*)&GopProtocol);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"GOP OPEN failed: %lx\r\n", Status);
- return STATUS_NOT_SUPPORTED;
- }
-
- /* Get the current mode */
- Status = EfiGopGetCurrentMode(GopProtocol, &CurrentMode, &ModeInformation);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"GOP mode failed: %lx\r\n", Status);
- goto Quickie;
- }
-
- Mode = CurrentMode;
-
- /* Check if any custom BCD options were provided */
- if (ConsoleGraphicalResolutionListFlags &
- (BL_DISPLAY_GRAPHICS_FORCED_VIDEO_MODE_FLAG |
- BL_DISPLAY_GRAPHICS_FORCED_HIGH_RES_MODE_FLAG))
- {
- /* We'll have to find a mode */
- CurrentModeOk = FALSE;
- }
- else
- {
- /* Then we should be in the default mode, check if the pixel format is OK */
- CurrentModeOk = ConsoleEfiGopIsPixelFormatSupported(&ModeInformation);
- }
-
- /* Is the mode/format OK? */
- if (!CurrentModeOk)
- {
- /* Nope -- we'll have to go find one */
- Status = ConsoleEfiGopFindModeFromAllowed(GopProtocol,
- ConsoleGraphicalResolutionList,
- ConsoleGraphicalResolutionListSize,
- &Mode);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
- }
-
- /* Store mode information */
- GraphicsConsole->Protocol = GopProtocol;
- GraphicsConsole->Mode = Mode;
- GraphicsConsole->OldMode = CurrentMode;
-
- /* Get format information */
- Status = ConsoleEfiGopGetGraphicalFormat(&ModeInformation, &PixelDepth);
- if (NT_SUCCESS(Status))
- {
- /* Store it */
- GraphicsConsole->OldDisplayMode.HRes = ModeInformation.HorizontalResolution;
- GraphicsConsole->OldDisplayMode.VRes = ModeInformation.VerticalResolution;
- GraphicsConsole->OldDisplayMode.HRes2 = ModeInformation.PixelsPerScanLine;
- GraphicsConsole->PixelDepth = PixelDepth;
- return STATUS_SUCCESS;
- }
-
-Quickie:
- /* We failed, close the protocol and return the failure code */
- EfiPrintf(L"Get format failed: %lx\r\n", Status);
- EfiCloseProtocol(GraphicsConsole->Handle, &EfiGraphicsOutputProtocol);
- return Status;
-}
-
diff --git a/boot/environ/lib/io/display/efi/guicons.c b/boot/environ/lib/io/display/efi/guicons.c
deleted file mode 100644
index 441ccb26f13..00000000000
--- a/boot/environ/lib/io/display/efi/guicons.c
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/display/efi/guicons.c
- * PURPOSE: Boot Library EFI GUI Console Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-ConsoleFirmwareGraphicalClose (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- )
-{
- /* Call the correct close routine based on the console mode */
- if (GraphicsConsole->Type == BlUgaConsole)
- {
- ConsoleEfiUgaClose(GraphicsConsole);
- }
- else
- {
- ConsoleEfiGopClose(GraphicsConsole);
- }
-}
-
-NTSTATUS
-ConsoleEfiGraphicalOpenProtocol (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
- _In_ BL_GRAPHICS_CONSOLE_TYPE Type
- )
-{
- ULONG HandleIndex, HandleCount;
- EFI_HANDLE* HandleArray;
- EFI_HANDLE Handle;
- NTSTATUS Status;
- PVOID Interface;
-
- /* Find a device handle that implements either GOP or UGA */
- HandleCount = 0;
- HandleArray = NULL;
- Status = EfiLocateHandleBuffer(ByProtocol,
- (Type == BlGopConsole) ?
- &EfiGraphicsOutputProtocol :
- &EfiUgaDrawProtocol,
- &HandleCount,
- &HandleArray);
- if (!NT_SUCCESS(Status))
- {
- /* Nothing supports this (no video card?) */
- EfiPrintf(L"Status: %lx Count: %d\r\n", Status, HandleCount);
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Scan through the handles we received */
- for (HandleIndex = 0; HandleIndex < HandleCount; HandleIndex++)
- {
- /* Try to open each one */
- GraphicsConsole->Handle = HandleArray[HandleIndex];
- Handle = HandleArray[HandleIndex];
- Status = EfiOpenProtocol(Handle, &EfiDevicePathProtocol, &Interface);
- if (NT_SUCCESS(Status))
- {
- /* Test worked, close the protocol */
- EfiCloseProtocol(Handle, &EfiDevicePathProtocol);
-
- /* Now open the real protocol we want, either UGA or GOP */
- Status = Type ? ConsoleEfiUgaOpen(GraphicsConsole) :
- ConsoleEfiGopOpen(GraphicsConsole);
- if (NT_SUCCESS(Status))
- {
- /* It worked -- store the type of console this is */
- GraphicsConsole->Type = Type;
- return STATUS_SUCCESS;
- }
- }
- }
-
- /* We failed to find a working GOP/UGA protocol provider */
- return STATUS_UNSUCCESSFUL;
-}
-
-NTSTATUS
-ConsoleFirmwareGraphicalClear (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ ULONG Color
- )
-{
- NTSTATUS Status;
- UCHAR Pixel[4] = { 0 };
-
- /* Convert the standard color to a firmware pixel color */
- Status = ConsolepConvertColorToPixel(Color, Pixel);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Check if this is GOP or UGA */
- if (Console->Type == BlUgaConsole)
- {
- EfiPrintf(L"Uga not supported\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
- }
- else
- {
- /* For GOP, just fill the screen */
- ConsolepClearBuffer(Console->FrameBuffer,
- Console->DisplayMode.HRes,
- Pixel,
- Console->DisplayMode.VRes,
- Console->PixelsPerScanLine,
- Console->PixelDepth);
- Status = STATUS_SUCCESS;
- }
-
- /* All clear */
- return Status;
-}
-
-NTSTATUS
-ConsoleFirmwareGraphicalEnable (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- )
-{
- NTSTATUS Status;
-
- /* Check what type of console this is */
- if (GraphicsConsole->Type == BlUgaConsole)
- {
- /* Handle UGA */
- Status = ConsoleEfiUgaSetResolution(GraphicsConsole,
- &GraphicsConsole->DisplayMode,
- 1);
- }
- else
- {
- /* Handle GOP */
- Status = ConsoleEfiGopEnable(GraphicsConsole);
- }
-
- /* Return back to caller */
- return Status;
-}
-
-VOID
-ConsoleFirmwareGraphicalDisable (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- )
-{
- /* Is this a GOP console? */
- if (GraphicsConsole->Type == BlGopConsole)
- {
- /* Did we map a framebuffer? */
- if (GraphicsConsole->FrameBuffer)
- {
- /* Unmap it */
- BlMmUnmapVirtualAddressEx(GraphicsConsole->FrameBuffer,
- GraphicsConsole->FrameBufferSize);
- }
- }
-}
diff --git a/boot/environ/lib/io/display/efi/textcons.c b/boot/environ/lib/io/display/efi/textcons.c
deleted file mode 100644
index fe950f9d7fb..00000000000
--- a/boot/environ/lib/io/display/efi/textcons.c
+++ /dev/null
@@ -1,625 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/display/efi/textcons.c
- * PURPOSE: Boot Library EFI Text Console Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-/* FUNCTIONS *****************************************************************/
-
-BL_COLOR
-ConsoleEfiTextGetColorForeground (
- _In_ UINT32 Attributes
- )
-{
- /* Read the foreground color attribute and convert to CGA color index */
- switch (Attributes & 0x0F)
- {
- case EFI_BLACK:
- return Black;
- case EFI_BLUE:
- return Blue;
- case EFI_GREEN:
- return Green;
- case EFI_RED:
- return Red;
- case EFI_CYAN:
- return Cyan;
- case EFI_MAGENTA:
- return Magenta;
- case EFI_BROWN:
- return Brown;
- case EFI_LIGHTGRAY:
- return LtGray;
- case EFI_DARKGRAY:
- return Gray;
- case EFI_LIGHTBLUE:
- return LtBlue;
- case EFI_LIGHTGREEN:
- return LtGreen;
- case EFI_LIGHTCYAN:
- return LtCyan;
- case EFI_LIGHTRED:
- return LtRed;
- case EFI_LIGHTMAGENTA:
- return LtMagenta;
- case EFI_YELLOW:
- return Yellow;
- case EFI_WHITE:
- default:
- return White;
- }
-}
-
-BL_COLOR
-ConsoleEfiTextGetColorBackground (
- _In_ UINT32 Attributes
- )
-{
- /* Read the background color attribute and convert to CGA color index */
- switch (Attributes & 0xF0)
- {
- case EFI_BACKGROUND_MAGENTA:
- return Magenta;
- case EFI_BACKGROUND_BROWN:
- return Brown;
- case EFI_BACKGROUND_LIGHTGRAY:
- return White;
- case EFI_BACKGROUND_BLACK:
- default:
- return Black;
- case EFI_BACKGROUND_RED:
- return Red;
- case EFI_BACKGROUND_GREEN:
- return Green;
- case EFI_BACKGROUND_CYAN:
- return Cyan;
- case EFI_BACKGROUND_BLUE:
- return Blue;
- }
-}
-
-ULONG
-ConsoleEfiTextGetEfiColorBackground (
- _In_ BL_COLOR Color
- )
-{
- /* Convert the CGA color index into an EFI background attribute */
- switch (Color)
- {
- case Blue:
- case LtBlue:
- return EFI_BACKGROUND_BLUE;
- case Green:
- case LtGreen:
- return EFI_BACKGROUND_GREEN;
- case Cyan:
- case LtCyan:
- return EFI_BACKGROUND_CYAN;
- case Red:
- case LtRed:
- return EFI_BACKGROUND_RED;
- case Magenta:
- case LtMagenta:
- return EFI_BACKGROUND_MAGENTA;
- case Brown:
- case Yellow:
- return EFI_BACKGROUND_BROWN;
- case LtGray:
- case White:
- return EFI_BACKGROUND_LIGHTGRAY;
- case Black:
- case Gray:
- default:
- return EFI_BACKGROUND_BLACK;
- }
-}
-
-ULONG
-ConsoleEfiTextGetEfiColorForeground (
- _In_ BL_COLOR Color
- )
-{
- /* Convert the CGA color index into an EFI foreground attribute */
- switch (Color)
- {
- case Black:
- return EFI_BLACK;
- case Blue:
- return EFI_BLUE;
- case Green:
- return EFI_GREEN;
- case Cyan:
- return EFI_CYAN;
- case Red:
- return EFI_RED;
- case Magenta:
- return EFI_MAGENTA;
- case Brown:
- return EFI_BROWN;
- case LtGray:
- return EFI_LIGHTGRAY;
- case Gray:
- return EFI_DARKGRAY;
- case LtBlue:
- return EFI_LIGHTBLUE;
- case LtGreen:
- return EFI_LIGHTGREEN;
- case LtCyan:
- return EFI_LIGHTCYAN;
- case LtRed:
- return EFI_LIGHTRED;
- case LtMagenta:
- return EFI_LIGHTMAGENTA;
- case Yellow:
- return EFI_YELLOW;
- case White:
- default:
- return EFI_WHITE;
- }
-}
-
-ULONG
-ConsoleEfiTextGetAttribute (
- BL_COLOR BgColor,
- BL_COLOR FgColor
- )
-{
- /* Convert each part and OR into a single attribute */
- return ConsoleEfiTextGetEfiColorBackground(BgColor) |
- ConsoleEfiTextGetEfiColorForeground(FgColor);
-}
-
-VOID
-ConsoleEfiTextGetStateFromMode (
- _In_ EFI_SIMPLE_TEXT_OUTPUT_MODE *Mode,
- _Out_ PBL_DISPLAY_STATE State
- )
-{
- ULONG TextWidth, TextHeight;
-
- /* Get all the EFI data and convert it into our own structure */
- BlDisplayGetTextCellResolution(&TextWidth, &TextHeight);
- State->FgColor = ConsoleEfiTextGetColorForeground(Mode->Attribute);
- State->BgColor = ConsoleEfiTextGetColorBackground(Mode->Attribute);
- State->XPos = Mode->CursorColumn * TextWidth;
- State->YPos = Mode->CursorRow * TextHeight;
- State->CursorVisible = Mode->CursorVisible != FALSE;
-}
-
-NTSTATUS
-ConsoleFirmwareTextSetState (
- _In_ PBL_TEXT_CONSOLE TextConsole,
- _In_ UCHAR Mask,
- _In_ PBL_DISPLAY_STATE State
- )
-{
- NTSTATUS Status;
- ULONG FgColor, BgColor, Attribute, XPos, YPos, TextHeight, TextWidth;
- BOOLEAN Visible;
-
- /* Check if foreground state is being set */
- if (Mask & 1)
- {
- /* Check if there's a difference from current */
- FgColor = State->FgColor;
- if (TextConsole->State.FgColor != FgColor)
- {
- /* Ignore invalid color */
- if (FgColor > White)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Convert from NT/CGA format to EFI, and then set the attribute */
- Attribute = ConsoleEfiTextGetAttribute(TextConsole->State.BgColor,
- FgColor);
- Status = EfiConOutSetAttribute(TextConsole->Protocol, Attribute);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Update cached state */
- TextConsole->State.FgColor = FgColor;
- }
- }
-
- /* Check if background state is being set */
- if (Mask & 2)
- {
- /* Check if there's a difference from current */
- BgColor = State->BgColor;
- if (TextConsole->State.BgColor != BgColor)
- {
- /* Ignore invalid color */
- if (BgColor > White)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Convert from NT/CGA format to EFI, and then set the attribute */
- Attribute = ConsoleEfiTextGetAttribute(BgColor,
- TextConsole->State.FgColor);
- Status = EfiConOutSetAttribute(TextConsole->Protocol, Attribute);
-
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Update cached state */
- TextConsole->State.BgColor = BgColor;
- }
- }
-
- /* Check if position state is being set */
- if (Mask & 4)
- {
- /* Check if there's a difference from current */
- XPos = State->XPos;
- YPos = State->YPos;
- if ((TextConsole->State.XPos != XPos) ||
- (TextConsole->State.YPos != YPos))
- {
- /* Set the new cursor position */
- BlDisplayGetTextCellResolution(&TextWidth, &TextHeight);
- Status = EfiConOutSetCursorPosition(TextConsole->Protocol,
- XPos/ TextWidth,
- YPos / TextHeight);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Update cached state */
- TextConsole->State.XPos = XPos;
- TextConsole->State.YPos = YPos;
- }
- }
-
- /* Check if cursor state is being set */
- if (Mask & 8)
- {
- /* Check if there's a difference from current */
- Visible = State->CursorVisible;
- if (TextConsole->State.CursorVisible != Visible)
- {
- /* Ignore invalid state */
- if (Visible >= 3)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Set the new cursor state */
- Status = EfiConOutEnableCursor(TextConsole->Protocol, Visible);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Update cached status */
- TextConsole->State.CursorVisible = Visible;
- }
- }
-
- /* Return success */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-ConsoleEfiTextFindModeFromAllowed (
- _In_ SIMPLE_TEXT_OUTPUT_INTERFACE *TextProtocol,
- _In_ PBL_DISPLAY_MODE SupportedModes,
- _In_ ULONG MaxIndex,
- _Out_ PULONG SupportedMode
- )
-{
- EFI_SIMPLE_TEXT_OUTPUT_MODE ModeInfo;
- ULONG MaxMode, MaxQueriedMode, Mode, i, MatchingMode;
- UINTN HRes, VRes;
- ULONGLONG ModeListSize;
- PBL_DISPLAY_MODE ModeEntry, ModeList, SupportedModeEntry;
- NTSTATUS Status;
-
- /* Read information on the current mode */
- EfiConOutReadCurrentMode(TextProtocol, &ModeInfo);
-
- /* Figure out the max mode, and how many modes we'll have to read */
- MaxMode = ModeInfo.MaxMode;
- ModeListSize = sizeof(*ModeEntry) * ModeInfo.MaxMode;
- if (ModeListSize > MAXULONG)
- {
- return STATUS_INTEGER_OVERFLOW;
- }
-
- /* Allocate a list for all the supported EFI modes */
- ModeList = BlMmAllocateHeap(ModeListSize);
- if (!ModeList)
- {
- return STATUS_INSUFFICIENT_RESOURCES;
- }
-
- /* Scan all the EFI modes */
- EfiPrintf(L"Scanning through %d modes\r\n", MaxMode);
- for (MaxQueriedMode = 0, Mode = 0; Mode < MaxMode; Mode++)
- {
- /* Query information on this mode */
- ModeEntry = &ModeList[MaxQueriedMode];
- if (NT_SUCCESS(EfiConOutQueryMode(TextProtocol,
- Mode,
- &HRes,
- &VRes)))
- {
- /* This mode was successfully queried. Save the data */
- EfiPrintf(L"EFI Firmware Supported Mode %d is H: %d V: %d\r\n", Mode, HRes, VRes);
- ModeEntry->HRes = HRes;
- ModeEntry->VRes = VRes;
- ModeEntry->HRes2 = HRes;
- MaxQueriedMode = Mode + 1;
- }
- }
-
- /* Loop all the supported mode entries */
- for (i = 0; i < MaxIndex; i++)
- {
- /* Loop all the UEFI queried modes */
- SupportedModeEntry = &SupportedModes[i];
- for (MatchingMode = 0; MatchingMode < MaxQueriedMode; MatchingMode++)
- {
- /* Check if the UEFI mode is compatible with our supported mode */
- ModeEntry = &ModeList[MatchingMode];
- EfiPrintf(L"H1: %d V1: %d - H2: %d - V2: %d\r\n", ModeEntry->HRes, ModeEntry->VRes, SupportedModeEntry->HRes, SupportedModeEntry->VRes);
- if ((ModeEntry->HRes == SupportedModeEntry->HRes) &&
- (ModeEntry->VRes == SupportedModeEntry->VRes))
- {
- /* Yep -- free the mode list and return this mode */
- BlMmFreeHeap(ModeList);
- *SupportedMode = MatchingMode;
- return STATUS_SUCCESS;
- }
- }
- }
-
- /* We can't do anything -- there are no matching modes */
- Status = STATUS_UNSUCCESSFUL;
- BlMmFreeHeap(ModeList);
- return Status;
-}
-
-VOID
-ConsoleFirmwareTextClose (
- _In_ PBL_TEXT_CONSOLE TextConsole
- )
-{
- ULONG Mode;
- BL_DISPLAY_STATE DisplayState;
-
- /* Read the original mode, and see if it's different than the one now */
- Mode = TextConsole->OldMode.Mode;
- if (Mode != TextConsole->Mode)
- {
- /* Restore to the original mode */
- EfiConOutSetMode(TextConsole->Protocol, Mode);
- }
-
- /* Read the EFI settings for the original mode */
- ConsoleEfiTextGetStateFromMode(&TextConsole->OldMode, &DisplayState);
-
- /* Set the original settings */
- ConsoleFirmwareTextSetState(TextConsole, 0xF, &DisplayState);
-}
-
-NTSTATUS
-ConsoleFirmwareTextOpen (
- _In_ PBL_TEXT_CONSOLE TextConsole
- )
-{
- BL_DISPLAY_MODE DisplayMode;
- EFI_SIMPLE_TEXT_OUTPUT_MODE CurrentMode, NewMode;
- UINTN HRes, VRes;
- ULONG Mode;
- NTSTATUS Status;
-
- /* Read the current mode and its settings */
- EfiConOutReadCurrentMode(EfiConOut, &CurrentMode);
- Status = EfiConOutQueryMode(EfiConOut, CurrentMode.Mode, &HRes, &VRes);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Save the current mode and its settings */
- NewMode = CurrentMode;
- DisplayMode.VRes = VRes;
- DisplayMode.HRes = HRes;
- DisplayMode.HRes2 = HRes;
-
- /* Check if the current mode is compatible with one of our modes */
- if (!ConsolepFindResolution(&DisplayMode, ConsoleTextResolutionList, 1))
- {
- /* It isn't -- find a matching EFI mode for what we need */
- EfiPrintf(L"In incorrect mode, scanning for right one\r\n");
- Status = ConsoleEfiTextFindModeFromAllowed(EfiConOut,
- ConsoleTextResolutionList,
- 1,
- &Mode);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to find mode: %lx\r\n", Status);
- return Status;
- }
-
- /* Set the new EFI mode */
- EfiPrintf(L"Setting new mode: %d\r\n", Mode);
- Status = EfiConOutSetMode(EfiConOut, Mode);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Read the current mode and its settings */
- EfiConOutReadCurrentMode(EfiConOut, &NewMode);
- Status = EfiConOutQueryMode(EfiConOut, Mode, &HRes, &VRes);
- if (!NT_SUCCESS(Status))
- {
- EfiConOutSetMode(EfiConOut, CurrentMode.Mode);
- return Status;
- }
-
- /* Save the current mode and its settings */
- DisplayMode.HRes = HRes;
- DisplayMode.VRes = VRes;
- DisplayMode.HRes2 = HRes;
- }
-
- /* Capture all the current settings */
- ConsoleEfiTextGetStateFromMode(&NewMode, &TextConsole->State);
- TextConsole->Mode = NewMode.Mode;
- TextConsole->DisplayMode = DisplayMode;
- TextConsole->Protocol = EfiConOut;
- TextConsole->OldMode = CurrentMode;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-ConsoleInputBaseEraseBuffer (
- _In_ PBL_INPUT_CONSOLE Console,
- _In_opt_ PULONG FillValue
- )
-{
- ULONG ValueToFill;
- PULONG i;
-
- /* Check if we should fill with a particular value */
- if (FillValue)
- {
- /* Use it */
- ValueToFill = *FillValue;
- }
- else
- {
- /* Otherwise, use default */
- ValueToFill = 0x10020;
- }
-
- /* Set the input buffer to its last location */
- Console->DataStart = Console->DataEnd;
-
- /* Fill the buffer with the value */
- for (i = Console->Buffer; i < Console->EndBuffer; i++)
- {
- *i = ValueToFill;
- }
-
- /* All done */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-ConsoleInputLocalEraseBuffer (
- _In_ PBL_INPUT_CONSOLE Console,
- _In_opt_ PULONG FillValue
- )
-{
- NTSTATUS Status, EfiStatus;
-
- /* Erase the software buffer */
- Status = ConsoleInputBaseEraseBuffer(Console, FillValue);
-
- /* Reset the hardware console */
- EfiStatus = EfiConInEx ? EfiConInExReset() : EfiConInReset();
- if (!NT_SUCCESS(EfiStatus))
- {
- /* Normalize the failure code */
- EfiStatus = STATUS_UNSUCCESSFUL;
- }
-
- /* Check if software reset worked */
- if (NT_SUCCESS(Status))
- {
- /* Then return the firmware code */
- Status = EfiStatus;
- }
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-ConsoleFirmwareTextClear (
- _In_ PBL_TEXT_CONSOLE Console,
- _In_ BOOLEAN LineOnly
- )
-{
- BL_ARCH_MODE OldMode;
- EFI_STATUS EfiStatus;
- NTSTATUS Status;
- ULONG i, Column, Row, TextWidth, TextHeight;
-
- /* Get the text resolution */
- BlDisplayGetTextCellResolution(&TextWidth, &TextHeight);
-
- /* Are we just clearing a line? */
- if (LineOnly)
- {
- /* Get the current column and row */
- Column = Console->State.XPos / TextWidth;
- Row = Console->State.YPos / TextHeight;
-
- /* Loop over every remaining character */
- for (i = 0; i < Console->DisplayMode.HRes - Column - 1; i++)
- {
- /* Write a space on top of it */
- Status = EfiConOutOutputString(Console->Protocol, L" ");
- if (!NT_SUCCESS(Status))
- {
- break;
- }
- }
-
- /* And reset the cursor back at the initial position */
- Status = EfiConOutSetCursorPosition(Console->Protocol,
- Column,
- Row);
- }
- else
- {
- /* Are we in protected mode? */
- OldMode = CurrentExecutionContext->Mode;
- if (OldMode != BlRealMode)
- {
- /* FIXME: Not yet implemented */
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Clear the screen */
- EfiStatus = Console->Protocol->ClearScreen(Console->Protocol);
-
- /* Switch back to protected mode if we came from there */
- if (OldMode != BlRealMode)
- {
- BlpArchSwitchContext(OldMode);
- }
-
- /* Conver to NT status -- did that work? */
- Status = EfiGetNtStatusCode(EfiStatus);
- if (NT_SUCCESS(Status))
- {
- /* Reset current positions */
- Console->State.XPos = 0;
- Console->State.YPos = 0;
- }
- }
-
- /* All done */
- return Status;
-}
-
diff --git a/boot/environ/lib/io/display/efi/uga.c b/boot/environ/lib/io/display/efi/uga.c
deleted file mode 100644
index 6cdff33afd4..00000000000
--- a/boot/environ/lib/io/display/efi/uga.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/display/efi/uga.c
- * PURPOSE: Boot Library EFI UGA Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-ConsoleEfiUgaOpen (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- )
-{
- EfiPrintf(L"UGA not implemented\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-VOID
-ConsoleEfiUgaClose (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- )
-{
- return;
-}
-
-NTSTATUS
-ConsoleEfiUgaSetResolution (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole,
- _In_ PBL_DISPLAY_MODE DisplayMode,
- _In_ ULONG DisplayModeCount
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
diff --git a/boot/environ/lib/io/display/emscons.c b/boot/environ/lib/io/display/emscons.c
deleted file mode 100644
index b351189f754..00000000000
--- a/boot/environ/lib/io/display/emscons.c
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/display/emscons.c
- * PURPOSE: Boot Library Remote Console Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-ConsoleRemoteConstruct (
- _In_ PBL_REMOTE_CONSOLE RemoteConsole
- )
-{
-#ifdef BL_EMS_SUPPORT
-#error Implement me
-#else
- /* We don't support EMS for now */
- return STATUS_NOT_IMPLEMENTED;
-#endif
-}
-
-NTSTATUS
-ConsoleCreateRemoteConsole (
- _In_ PBL_TEXT_CONSOLE* TextConsole
- )
-{
- PBL_REMOTE_CONSOLE RemoteConsole;
- NTSTATUS Status;
-
- /* Allocate the remote console */
- RemoteConsole = BlMmAllocateHeap(sizeof(*RemoteConsole));
- if (!RemoteConsole)
- {
- return STATUS_INSUFFICIENT_RESOURCES;
- }
-
- /* Construct it */
- Status = ConsoleRemoteConstruct(RemoteConsole);
- if (!NT_SUCCESS(Status))
- {
- /* Failed to construct it, delete it */
- BlMmFreeHeap(RemoteConsole);
- return Status;
- }
-
- /* Save the global pointer and return a pointer to the text console */
- DspRemoteInputConsole = RemoteConsole;
- *TextConsole = &RemoteConsole->TextConsole;
- return STATUS_SUCCESS;
-}
diff --git a/boot/environ/lib/io/display/guicons.c b/boot/environ/lib/io/display/guicons.c
deleted file mode 100644
index f4bf312768d..00000000000
--- a/boot/environ/lib/io/display/guicons.c
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/display/guicons.c
- * PURPOSE: Boot Library GUI Console Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-BL_GRAPHICS_CONSOLE_VTABLE ConsoleGraphicalVtbl =
-{
- {
- (PCONSOLE_DESTRUCT)ConsoleGraphicalDestruct,
- (PCONSOLE_REINITIALIZE)ConsoleGraphicalReinitialize,
- ConsoleTextBaseGetTextState,
- (PCONSOLE_SET_TEXT_STATE)ConsoleGraphicalSetTextState,
- NULL, // GetTextResolution
- NULL, // SetTextResolution
- (PCONSOLE_CLEAR_TEXT)ConsoleGraphicalClearText
- },
- ConsoleGraphicalIsEnabled,
- ConsoleGraphicalEnable,
- NULL,
- ConsoleGraphicalGetGraphicalResolution,
- ConsoleGraphicalGetOriginalResolution,
- NULL,
-};
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-ConsoleGraphicalSetTextState (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ ULONG Mask,
- _In_ PBL_DISPLAY_STATE TextState
- )
-{
- /* Is the text console active? */
- if (Console->TextConsole.Active)
- {
- /* Let it handle that */
- return ConsoleFirmwareTextSetState(&Console->TextConsole,
- Mask,
- TextState);
- }
-
- /* Not yet */
- EfiPrintf(L"FFX set not implemented\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-ConsoleGraphicalConstruct (
- _In_ PBL_GRAPHICS_CONSOLE GraphicsConsole
- )
-{
- NTSTATUS Status;
-
- /* Create a text console */
- Status = ConsoleTextLocalConstruct(&GraphicsConsole->TextConsole, FALSE);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Text failed: %lx\r\n", Status);
- return Status;
- }
-
- /* But overwrite its callbacks with ours */
- GraphicsConsole->TextConsole.Callbacks = &ConsoleGraphicalVtbl.Text;
-
- /* Try to create a GOP console */
- Status = ConsoleEfiGraphicalOpenProtocol(GraphicsConsole, BlGopConsole);
- if (!NT_SUCCESS(Status))
- {
- /* That failed, try an older EFI 1.02 UGA console */
- EfiPrintf(L"GOP open failed!\r\n", Status);
- Status = ConsoleEfiGraphicalOpenProtocol(GraphicsConsole, BlUgaConsole);
- if (!NT_SUCCESS(Status))
- {
- /* That failed too, give up */
- EfiPrintf(L"UGA failed!\r\n", Status);
- ConsoleTextLocalDestruct(&GraphicsConsole->TextConsole);
- return STATUS_UNSUCCESSFUL;
- }
- }
-
- /* Enable the console */
- Status = ConsoleFirmwareGraphicalEnable(GraphicsConsole);
- if (!NT_SUCCESS(Status))
- {
- /* Failed to enable it, undo everything */
- EfiPrintf(L"Enable failed\r\n");
- ConsoleFirmwareGraphicalClose(GraphicsConsole);
- ConsoleTextLocalDestruct(&GraphicsConsole->TextConsole);
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Save the graphics text color from the text mode text color */
- GraphicsConsole->FgColor = GraphicsConsole->TextConsole.State.FgColor;
- GraphicsConsole->BgColor = GraphicsConsole->TextConsole.State.BgColor;
- return STATUS_SUCCESS;
-}
-
-VOID
-ConsolepClearBuffer (
- _In_ PUCHAR FrameBuffer,
- _In_ ULONG Width,
- _In_ PUCHAR FillColor,
- _In_ ULONG Height,
- _In_ ULONG ScanlineWidth,
- _In_ ULONG PixelDepth
- )
-{
- PUCHAR Scanline, Current, FrameBufferEnd, LineEnd;
- ULONG LineBytes, WidthBytes, BytesPerPixel;
-
- /* Get the BPP */
- BytesPerPixel = PixelDepth / 8;
-
- /* Using that, calculate the size of a scan line */
- LineBytes = ScanlineWidth * BytesPerPixel;
-
- /* And the size of line we'll have to clear */
- WidthBytes = Width * BytesPerPixel;
-
- /* Allocate a scanline */
- Scanline = BlMmAllocateHeap(WidthBytes);
- if (Scanline)
- {
- /* For each remaining pixel on the scanline */
- Current = Scanline;
- while (Width--)
- {
- /* Copy in the fill color */
- RtlCopyMemory(Current, FillColor, BytesPerPixel);
- Current += BytesPerPixel;
- }
-
- /* For each scanline in the frame buffer */
- while (Height--)
- {
- /* Copy our constructed scanline */
- RtlCopyMemory(FrameBuffer, Scanline, WidthBytes);
- FrameBuffer += LineBytes;
- }
- }
- else
- {
- FrameBufferEnd = FrameBuffer + Height * LineBytes;
- ScanlineWidth = BytesPerPixel * (ScanlineWidth - Width);
- while (FrameBuffer != FrameBufferEnd)
- {
- if (FrameBuffer != (FrameBuffer + WidthBytes))
- {
- LineEnd = FrameBuffer + WidthBytes;
- do
- {
- RtlCopyMemory(FrameBuffer, FillColor, BytesPerPixel);
- FrameBuffer += BytesPerPixel;
- }
- while (FrameBuffer != LineEnd);
- }
-
- FrameBuffer += ScanlineWidth;
- }
- }
-}
-
-NTSTATUS
-ConsolepConvertColorToPixel (
- _In_ BL_COLOR Color,
- _Out_ PUCHAR Pixel
- )
-{
- NTSTATUS Status;
-
- /* Assume success */
- Status = STATUS_SUCCESS;
-
- /* Convert the color to a pixel value */
- switch (Color)
- {
- case Black:
- Pixel[1] = 0;
- Pixel[2] = 0;
- Pixel[0] = 0;
- break;
- case Blue:
- Pixel[1] = 0;
- Pixel[2] = 0;
- Pixel[0] = 0x7F;
- break;
- case Green:
- Pixel[1] = 0x7F;
- Pixel[2] = 0;
- Pixel[0] = 0;
- break;
- case Cyan:
- Pixel[1] = 0x7F;
- Pixel[2] = 0;
- Pixel[0] = 0x7F;
- break;
- case Red:
- Pixel[1] = 0;
- Pixel[2] = 0x7F;
- Pixel[0] = 0x7F;
- break;
- case Magenta:
- Pixel[1] = 0;
- Pixel[2] = 0x7F;
- Pixel[0] = 0x7F;
- break;
- case Brown:
- Pixel[1] = 0x3F;
- Pixel[2] = 0x7F;
- Pixel[0] = 0;
- break;
- case LtGray:
- Pixel[1] = 0xBFu;
- Pixel[2] = 0xBFu;
- *Pixel = 0xBFu;
- break;
- case Gray:
- Pixel[1] = 0x7F;
- Pixel[2] = 0x7F;
- Pixel[0] = 0x7F;
- break;
- case LtBlue:
- Pixel[1] = 0;
- Pixel[2] = 0;
- Pixel[0] = 0xFF;
- break;
- case LtGreen:
- Pixel[1] = 0xFF;
- Pixel[2] = 0;
- Pixel[0] = 0;
- break;
- case LtCyan:
- Pixel[1] = 0xFF;
- Pixel[2] = 0;
- Pixel[0] = 0xFF;
- break;
- case LtRed:
- Pixel[1] = 0;
- Pixel[2] = 0xFF;
- Pixel[0] = 0;
- break;
- case LtMagenta:
- Pixel[1] = 0;
- Pixel[2] = 0xFF;
- Pixel[0] = 0xFF;
- break;
- case Yellow:
- Pixel[1] = 0xFF;
- Pixel[2] = 0xFF;
- Pixel[0] = 0;
- break;
- case White:
- Pixel[1] = 0xFF;
- Pixel[2] = 0xFF;
- Pixel[0] = 0xFF;
- break;
- default:
- Status = STATUS_INVALID_PARAMETER;
- break;
- }
- return Status;
-}
-
-NTSTATUS
-ConsoleGraphicalClearPixels (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ ULONG Color
- )
-{
- NTSTATUS Status;
-
- /* Check if the text console is active */
- if (Console->TextConsole.Active)
- {
- /* We shouldn't be here */
- Status = STATUS_UNSUCCESSFUL;
- }
- else
- {
- /* Clear it in graphics mode */
- Status = ConsoleFirmwareGraphicalClear(Console, Color);
- }
-
- /* All good */
- return Status;
-}
-
-NTSTATUS
-ConsoleGraphicalClearText (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ BOOLEAN LineOnly
- )
-{
- /* Is the text console active? */
- if (Console->TextConsole.Active)
- {
- /* Let firmware clear do it */
- return ConsoleFirmwareTextClear(&Console->TextConsole, LineOnly);
- }
-
- /* Are we clearing a line only? */
- if (LineOnly)
- {
- return BfClearToEndOfLine(Console);
- }
-
- /* Nope -- the whole screen */
- return BfClearScreen(Console);
-}
-
-BOOLEAN
-ConsoleGraphicalIsEnabled (
- _In_ PBL_GRAPHICS_CONSOLE Console
- )
-{
- /* Is the text console active? If so, the graphics console isn't */
- return !Console->TextConsole.Active;
-}
-
-VOID
-ConsoleGraphicalDestruct (
- _In_ PBL_GRAPHICS_CONSOLE Console
- )
-{
- /* Is the text console active? */
- if (Console->TextConsole.Active)
- {
- /* Disable it */
- ConsoleFirmwareGraphicalDisable(Console);
- }
-
- /* Close the firmware protocols */
- ConsoleFirmwareGraphicalClose(Console);
-
- /* Destroy the console object */
- ConsoleTextLocalDestruct(&Console->TextConsole);
-}
-
-NTSTATUS
-ConsoleGraphicalReinitialize (
- _In_ PBL_GRAPHICS_CONSOLE Console
- )
-{
- /* Is the text console active? */
- if (Console->TextConsole.Active)
- {
- /* Reinitialize it */
- ConsoleTextLocalReinitialize(&Console->TextConsole);
- }
-
- /* Disable the graphics console */
- ConsoleFirmwareGraphicalDisable(Console);
-
- /* Then bring it back again */
- return ConsoleFirmwareGraphicalEnable(Console);
-}
-
-NTSTATUS
-ConsoleGraphicalEnable (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ BOOLEAN Enable
- )
-{
- BOOLEAN Active;
- NTSTATUS Status;
-
- /* The text mode console state should be the opposite of what we want to do */
- Active = Console->TextConsole.Active;
- if (Active == Enable)
- {
- /* Are we trying to enable graphics? */
- if (Enable)
- {
- /* Enable the console */
- Status = ConsoleFirmwareGraphicalEnable(Console);
- if (NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Is the text console active? */
- if (Console->TextConsole.Active)
- {
- /* Turn it off */
- ConsoleFirmwareTextClose(&Console->TextConsole);
- Console->TextConsole.Active = FALSE;
- }
-
- /* Preserve the text colors */
- Console->FgColor = Console->TextConsole.State.FgColor;
- Console->BgColor = Console->TextConsole.State.BgColor;
- }
- else
- {
- /* We are turning off graphics -- is the text console active? */
- if (Active != TRUE)
- {
- /* It isn't, so let's turn it on */
- Status = ConsoleFirmwareTextOpen(&Console->TextConsole);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Remember that it's on */
- Console->TextConsole.Active = TRUE;
- }
-
- /* Disable the graphics console */
- ConsoleFirmwareGraphicalDisable(Console);
- }
- }
-
- /* All good */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-ConsoleGraphicalGetGraphicalResolution (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ PBL_DISPLAY_MODE DisplayMode
- )
-{
- /* Is the text console active? */
- if (Console->TextConsole.Active)
- {
- /* There's no graphics resolution then */
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Return the current display mode */
- *DisplayMode = Console->DisplayMode;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-ConsoleGraphicalGetOriginalResolution (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ PBL_DISPLAY_MODE DisplayMode
- )
-{
- /* Is the text console active? */
- if (Console->TextConsole.Active)
- {
- /* There's no graphics resolution then */
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Return the current display mode */
- *DisplayMode = Console->OldDisplayMode;
- return STATUS_SUCCESS;
-}
diff --git a/boot/environ/lib/io/display/textcons.c b/boot/environ/lib/io/display/textcons.c
deleted file mode 100644
index a7a74ad3a2e..00000000000
--- a/boot/environ/lib/io/display/textcons.c
+++ /dev/null
@@ -1,270 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/display/textcons.c
- * PURPOSE: Boot Library Text Console Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-BL_TEXT_CONSOLE_VTABLE ConsoleTextLocalVtbl =
-{
- ConsoleTextLocalDestruct,
- ConsoleTextLocalReinitialize,
- ConsoleTextBaseGetTextState,
- ConsoleTextLocalSetTextState,
- ConsoleTextBaseGetTextResolution,
- ConsoleTextLocalSetTextResolution,
- ConsoleTextLocalClearText,
- ConsoleTextLocalWriteText
-};
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-ConsoleTextLocalDestruct (
- _In_ struct _BL_TEXT_CONSOLE* Console
- )
-{
-
-}
-
-NTSTATUS
-ConsoleTextLocalReinitialize (
- _In_ struct _BL_TEXT_CONSOLE* Console
- )
-{
- EfiPrintf(L"Not active yet!\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-ConsoleTextBaseGetTextState (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _Out_ PBL_DISPLAY_STATE TextState
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-ConsoleTextLocalSetTextState (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ ULONG Mask,
- _In_ PBL_DISPLAY_STATE TextState
- )
-{
- return ConsoleFirmwareTextSetState(Console, Mask, TextState);
-}
-
-NTSTATUS
-ConsoleTextBaseGetTextResolution (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _Out_ PULONG TextResolution
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-ConsoleTextLocalSetTextResolution (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ ULONG NewTextResolution,
- _Out_ PULONG OldTextResolution
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-ConsoleTextLocalClearText (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ BOOLEAN LineOnly
- )
-{
- return ConsoleFirmwareTextClear(Console, LineOnly);
-}
-
-NTSTATUS
-ConsoleTextLocalWriteText (
- _In_ struct _BL_TEXT_CONSOLE* Console,
- _In_ PCHAR Text,
- _In_ ULONG Attribute
- )
-{
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-ConsoleTextLocalConstruct (
- _In_ PBL_TEXT_CONSOLE TextConsole,
- _In_ BOOLEAN Activate
- )
-{
- NTSTATUS Status;
- BL_DISPLAY_STATE TextState;
-
- /* Set our callbacks */
- TextConsole->Callbacks = &ConsoleTextLocalVtbl;
-
- /* Are we activating this console? */
- if (Activate)
- {
- /* Call firmware to activate it */
- Status = ConsoleFirmwareTextOpen(TextConsole);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to activate console: %lx\r\n", Status);
- return Status;
- }
- }
-
- /* Set default text state */
- TextState.BgColor = 0;
- TextState.XPos = 0;
- TextState.YPos = 0;
- TextState.CursorVisible = FALSE;
- TextState.FgColor = White;
-
- /* Are we activating? */
- if (Activate)
- {
- /* Call firmware to set it */
- Status = ConsoleFirmwareTextSetState(TextConsole, 0xF, &TextState);
- if (!NT_SUCCESS(Status))
- {
- /* We failed, back down */
- EfiPrintf(L"Failed to set console state: %lx\r\n", Status);
- ConsoleFirmwareTextClose(TextConsole);
- return Status;
- }
- }
- else
- {
- /* Just save the state for now, someone else can activate later */
- TextConsole->State = TextState;
- }
-
- /* Remember if we activated it */
- TextConsole->Active = Activate;
- return STATUS_SUCCESS;
-}
-
-BOOLEAN
-ConsolepFindResolution (
- _In_ PBL_DISPLAY_MODE Mode,
- _In_ PBL_DISPLAY_MODE List,
- _In_ ULONG MaxIndex
- )
-{
- PBL_DISPLAY_MODE ListEnd;
-
- /* Loop until we hit the maximum supported list index */
- ListEnd = &List[MaxIndex];
- while (List != ListEnd)
- {
- /* Does this resolution match? */
- if ((Mode->HRes == List->HRes) && (Mode->VRes == List->VRes))
- {
- /* Yep -- we got a match */
- return TRUE;
-
- }
-
- /* Try another one*/
- List++;
- }
-
- /* No matches were found */
- return FALSE;
-}
-
-BL_INPUT_CONSOLE_VTABLE ConsoleInputLocalVtbl =
-{
- (PCONSOLE_DESTRUCT)ConsoleInputLocalDestruct,
- (PCONSOLE_REINITIALIZE)ConsoleInputBaseReinitialize,
-};
-
-VOID
-ConsoleInputLocalDestruct (
- _In_ PBL_INPUT_CONSOLE Console
- )
-{
- /* Erase the current input buffer, and tear down the console */
- ConsoleInputLocalEraseBuffer(Console, NULL);
- BlMmFreeHeap(Console->Buffer);
-}
-
-NTSTATUS
-ConsoleInputBaseConstruct (
- _In_ PBL_INPUT_CONSOLE Console
- )
-{
- PULONG Buffer;
-
- /* Allocate a new 512 byte buffer */
- Buffer = BlMmAllocateHeap(512);
- Console->Buffer = Buffer;
- if (!Buffer)
- {
- return STATUS_INSUFFICIENT_RESOURCES;
- }
-
- /* Set the current buffer pointers to it */
- Console->DataStart = Buffer;
- Console->DataEnd = Buffer;
-
- /* Set the end 128 data entries into the buffer */
- Console->EndBuffer = Buffer + 128;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-ConsoleInputBaseReinitialize (
- _In_ PBL_INPUT_CONSOLE Console
- )
-{
- PULONG Buffer;
-
- /* Reset all the buffer pointers to the current buffer */
- Buffer = Console->Buffer;
- Console->DataStart = Buffer;
- Console->DataEnd = Buffer;
- Console->EndBuffer = Buffer + 128;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-ConsoleCreateLocalInputConsole (
- VOID
- )
-{
- PBL_INPUT_CONSOLE InputConsole;
- NTSTATUS Status;
-
- /* Allocate the input console */
- InputConsole = BlMmAllocateHeap(sizeof(*InputConsole));
- if (!InputConsole)
- {
- return STATUS_INSUFFICIENT_RESOURCES;
- }
-
- /* Construct it */
- Status = ConsoleInputBaseConstruct(InputConsole);
- if (!NT_SUCCESS(Status))
- {
- /* Tear down on failure */
- BlMmFreeHeap(InputConsole);
- return Status;
- }
-
- /* Set the callback table, and set us as the local input console */
- InputConsole->Callbacks = &ConsoleInputLocalVtbl;
- DspLocalInputConsole = InputConsole;
- return STATUS_SUCCESS;
-}
diff --git a/boot/environ/lib/io/etfs.c b/boot/environ/lib/io/etfs.c
deleted file mode 100644
index 498f883a258..00000000000
--- a/boot/environ/lib/io/etfs.c
+++ /dev/null
@@ -1,995 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/etfs.c
- * PURPOSE: Boot Library El Torito File System Management Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include
-#include
-typedef struct _RAW_ET_VD
-{
- UCHAR BootIndicator;
- UCHAR StandardId[5];
- UCHAR Version;
- UCHAR SystemId[32];
- UCHAR Reserved[32];
- ULONG BootCatalogOffset;
- UCHAR Padding[1973];
-} RAW_ET_VD, *PRAW_ET_VD;
-
-/* DATA VARIABLES ************************************************************/
-
-typedef struct _BL_ETFS_DEVICE
-{
- ULONG RootDirOffset;
- ULONG RootDirSize;
- ULONG BlockSize;
- ULONG VolumeSize;
- BOOLEAN IsIso;
- PUCHAR MemoryBlock;
- ULONG Offset;
-} BL_ETFS_DEVICE, *PBL_ETFS_DEVICE;
-
-typedef struct _BL_ETFS_FILE
-{
- ULONG DiskOffset;
- ULONG DirOffset;
- ULONG DirEntOffset;
-
- BL_FILE_INFORMATION;
-
- ULONG DeviceId;
-} BL_ETFS_FILE, *PBL_ETFS_FILE;
-
-ULONG EtfsDeviceTableEntries;
-PVOID* EtfsDeviceTable;
-
-NTSTATUS
-EtfsOpen (
- _In_ PBL_FILE_ENTRY Directory,
- _In_ PWCHAR FileName,
- _In_ ULONG Flags,
- _Out_ PBL_FILE_ENTRY *FileEntry
- );
-
-NTSTATUS
-EtfsGetInformation (
- _In_ PBL_FILE_ENTRY FileEntry,
- _Out_ PBL_FILE_INFORMATION FileInfo
- );
-
-NTSTATUS
-EtfsSetInformation (
- _In_ PBL_FILE_ENTRY FileEntry,
- _In_ PBL_FILE_INFORMATION FileInfo
- );
-
-NTSTATUS
-EtfsRead (
- _In_ PBL_FILE_ENTRY FileEntry,
- _In_ PVOID Buffer,
- _In_ ULONG Size,
- _Out_opt_ PULONG BytesReturned
- );
-
-BL_FILE_CALLBACKS EtfsFunctionTable =
-{
- EtfsOpen,
- NULL,
- EtfsRead,
- NULL,
- NULL,
- EtfsGetInformation,
- EtfsSetInformation
-};
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-EtfspGetDirectoryInfo (
- _In_ PBL_ETFS_DEVICE EtfsDevice,
- _In_ PRAW_DIR_REC DirEntry,
- _Out_ PULONG FileOffset,
- _Out_ PULONG FileSize,
- _Out_opt_ PBOOLEAN IsDirectory
- )
-{
- ULONG SectorOffset;
- BOOLEAN IsDir;
-
- *FileOffset = *(PULONG)DirEntry->FileLoc * EtfsDevice->BlockSize;
- *FileOffset += (DirEntry->XarLen * EtfsDevice->BlockSize);
-
- SectorOffset = ALIGN_DOWN_BY(*FileOffset, CD_SECTOR_SIZE);
-
- *FileSize = *(PULONG)DirEntry->DataLen;
-
- IsDir = DE_FILE_FLAGS(EtfsDevice->IsIso, DirEntry) & ISO_ATTR_DIRECTORY;
- if (IsDir)
- {
- *FileSize += ALIGN_UP_BY(SectorOffset, CD_SECTOR_SIZE) - SectorOffset;
- }
-
- if (IsDirectory)
- {
- *IsDirectory = IsDir;
- }
-}
-
-USHORT
-EtfspGetDirentNameLength (
- _In_ PRAW_DIR_REC DirEntry
- )
-{
- USHORT Length, RealLength;
- PUCHAR Pos;
-
- RealLength = Length = DirEntry->FileIdLen;
- for (Pos = DirEntry->FileId + Length - 1; Length; --Pos)
- {
- --Length;
-
- if (*Pos == ';')
- {
- RealLength = Length;
- break;
- }
- }
-
- Length = RealLength;
- for (Pos = DirEntry->FileId + Length - 1; Length; --Pos)
- {
- --Length;
-
- if (*Pos != '.')
- {
- break;
- }
-
- RealLength = Length;
- }
-
- return RealLength;
-}
-
-LONG
-EtfspCompareNames (
- __in PSTRING Name1,
- __in PUNICODE_STRING Name2
- )
-{
- ULONG i, l1, l2, l;
-
- l1 = Name1->Length;
- l2 = Name2->Length / sizeof(WCHAR);
- l = min(l1, l2);
-
- for (i = 0; i < l; i++)
- {
- if (toupper(Name1->Buffer[i]) != toupper(Name2->Buffer[i]))
- {
- return toupper(Name1->Buffer[i]) - toupper(Name2->Buffer[i]);
- }
- }
-
- if (l2 <= l1)
- {
- return l2 < l1;
- }
- else
- {
- return -1;
- }
-}
-
-BOOLEAN
-EtfspFileMatch (
- _In_ PRAW_DIR_REC DirEntry,
- _In_ PUNICODE_STRING FileName
- )
-{
- BOOLEAN Match;
- USHORT Length;
- ANSI_STRING DirName;
-
- if ((DirEntry->FileIdLen != 1) ||
- ((DirEntry->FileId[0] != 0) && (DirEntry->FileId[0] != 1)))
- {
- Length = EtfspGetDirentNameLength(DirEntry);
- DirName.Length = Length;
- DirName.MaximumLength = Length;
- DirName.Buffer = (PCHAR)DirEntry->FileId;
-
- Match = EtfspCompareNames(&DirName, FileName);
- }
- else
- {
- Match = -1;
- }
- return Match;
-}
-
-NTSTATUS
-EtfspGetDirent (
- _In_ PBL_FILE_ENTRY DirectoryEntry,
- _Out_ PRAW_DIR_REC *DirEntry,
- _Inout_ PULONG DirentOffset
- )
-{
- PBL_ETFS_FILE EtfsFile;
- ULONG FileOffset, DirectoryOffset, AlignedOffset, RemainderOffset;
- ULONG DeviceId, ReadSize, DirLen;
- PBL_ETFS_DEVICE EtfsDevice;
- BOOLEAN NeedRead, IsMulti;
- NTSTATUS result;
- PRAW_DIR_REC DirEnt;
- PUCHAR MemoryBlock;
-
- EtfsFile = DirectoryEntry->FsSpecificData;
- DeviceId = EtfsFile->DeviceId;
- FileOffset = EtfsFile->DiskOffset;
- EtfsDevice = EtfsDeviceTable[DeviceId];
-
- DirectoryOffset = *DirentOffset;
- MemoryBlock = EtfsDevice->MemoryBlock;
-
- IsMulti = 0;
-
- AlignedOffset = (FileOffset + *DirentOffset) & ~CD_SECTOR_SIZE;
- RemainderOffset = *DirentOffset + FileOffset - AlignedOffset;
-
- ReadSize = 2048 - RemainderOffset;
- NeedRead = AlignedOffset == EtfsDevice->Offset ? 0 : 1;
-
-ReadAgain:
- if (DirectoryOffset >= EtfsFile->Size)
- {
- return STATUS_NO_SUCH_FILE;
- }
-
- while (ReadSize < MIN_DIR_REC_SIZE)
- {
- DirectoryOffset += ReadSize;
- AlignedOffset += 2048;
- ReadSize = 2048;
- RemainderOffset = 0;
- NeedRead = 1;
- if (DirectoryOffset >= EtfsFile->Size)
- {
- return STATUS_NO_SUCH_FILE;
- }
- }
-
- if (NeedRead)
- {
- result = BlDeviceReadAtOffset(DirectoryEntry->DeviceId,
- CD_SECTOR_SIZE,
- AlignedOffset,
- MemoryBlock,
- NULL);
- if (!NT_SUCCESS(result))
- {
- EfiPrintf(L"Device read failed %lx\r\n", result);
- return result;
- }
-
- NeedRead = FALSE;
- EtfsDevice->Offset = AlignedOffset;
- }
-
- if (!*(MemoryBlock + RemainderOffset))
- {
- AlignedOffset += 2048;
- NeedRead = TRUE;
-
- RemainderOffset = 0;
- DirectoryOffset += ReadSize;
- ReadSize = 2048;
- goto ReadAgain;
- }
-
- DirEnt = (PRAW_DIR_REC)(MemoryBlock + RemainderOffset);
- DirLen = DirEnt->DirLen;
- if (DirLen > ReadSize)
- {
- EfiPrintf(L"Dir won't fit %lx %lx\r\n", DirLen, ReadSize);
- return STATUS_NO_SUCH_FILE;
- }
-
- if (IsMulti)
- {
- if (!(DE_FILE_FLAGS(EtfsDevice->IsIso, DirEnt) & ISO_ATTR_MULTI))
- {
- IsMulti = TRUE;
- }
- }
- else if (DE_FILE_FLAGS(EtfsDevice->IsIso, DirEnt) & ISO_ATTR_MULTI)
- {
- IsMulti = TRUE;
- }
- else
- {
- if ((DirEnt->FileIdLen != 1) ||
- ((DirEnt->FileId[0] != 0) && (DirEnt->FileId[0] != 1)))
- {
- goto Quickie;
- }
- }
-
- RemainderOffset += DirLen;
- DirectoryOffset += DirLen;
- ReadSize -= DirLen;
- goto ReadAgain;
-
-Quickie:
- *DirEntry = DirEnt;
- *DirentOffset = DirectoryOffset;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-EtfspSearchForDirent (
- _In_ PBL_FILE_ENTRY DirectoryEntry,
- _In_ PWCHAR FileName,
- _Out_ PRAW_DIR_REC *DirEntry,
- _Out_ PULONG DirentOffset
- )
-{
- UNICODE_STRING Name;
- ULONG NextOffset;
- PRAW_DIR_REC DirEnt;
- NTSTATUS Status;
-
- RtlInitUnicodeString(&Name, FileName);
- for (NextOffset = *DirentOffset;
- ;
- NextOffset = NextOffset + DirEnt->DirLen)
- {
- Status = EtfspGetDirent(DirectoryEntry, &DirEnt, &NextOffset);
- if (!NT_SUCCESS(Status))
- {
- return STATUS_NO_SUCH_FILE;
- }
-
- if (!EtfspFileMatch(DirEnt, &Name))
- {
- break;
- }
- }
-
- *DirEntry = DirEnt;
- *DirentOffset = NextOffset;
- return 0;
-}
-
-NTSTATUS
-EtfspCachedSearchForDirent (
- _In_ PBL_FILE_ENTRY DirectoryEntry,
- _In_ PWCHAR FileName,
- _Out_ PRAW_DIR_REC *DirEntry,
- _Out_ PULONG DirOffset,
- _In_ BOOLEAN KeepOffset
- )
-{
- PBL_ETFS_FILE EtfsFile;
- PBL_ETFS_DEVICE EtfsDevice;
- NTSTATUS Status;
- ULONG DirentOffset;
- PRAW_DIR_REC Dirent;
- UNICODE_STRING Name;
-
- EtfsFile = DirectoryEntry->FsSpecificData;
- EtfsDevice = EtfsDeviceTable[EtfsFile->DeviceId];
- RtlInitUnicodeString(&Name, FileName);
- DirentOffset = EtfsFile->DirEntOffset;
-
- if ((KeepOffset) ||
- (ALIGN_DOWN_BY((DirentOffset + EtfsFile->DiskOffset), CD_SECTOR_SIZE) ==
- EtfsDevice->Offset))
- {
- Status = EtfspGetDirent(DirectoryEntry, &Dirent, &DirentOffset);
- if (NT_SUCCESS(Status))
- {
- if (!EtfspFileMatch(Dirent, &Name))
- {
- *DirEntry = Dirent;
- *DirOffset = DirentOffset;
- return STATUS_SUCCESS;
- }
- }
- else
- {
- DirentOffset = 0;
- }
- }
- else
- {
- DirentOffset = 0;
- }
-
- Status = EtfspSearchForDirent(DirectoryEntry,
- FileName,
- DirEntry,
- &DirentOffset);
- if (!(NT_SUCCESS(Status)) && (DirentOffset))
- {
- DirentOffset = 0;
- Status = EtfspSearchForDirent(DirectoryEntry,
- FileName,
- DirEntry,
- &DirentOffset);
- }
-
- if (NT_SUCCESS(Status))
- {
- *DirOffset = DirentOffset;
- }
-
- return Status;
-}
-
-NTSTATUS
-EtfsRead (
- _In_ PBL_FILE_ENTRY FileEntry,
- _In_ PVOID Buffer,
- _In_ ULONG Size,
- _Out_opt_ PULONG BytesReturned
- )
-{
- ULONG BytesRead;
- PBL_ETFS_FILE EtfsFile;
- NTSTATUS Status;
-
- /* Assume failure for now */
- BytesRead = 0;
-
- /* Make sure that the read is within the file's boundaries */
- EtfsFile = FileEntry->FsSpecificData;
- if ((Size + EtfsFile->Offset) > EtfsFile->Size)
- {
- /* Bail out otherwise */
- Status = STATUS_INVALID_PARAMETER;
- }
- else
- {
- /* Read the offset that matches this file's offset, on the disk */
- Status = BlDeviceReadAtOffset(FileEntry->DeviceId,
- Size,
- EtfsFile->Offset + EtfsFile->DiskOffset,
- Buffer,
- &BytesRead);
- if (NT_SUCCESS(Status))
- {
- /* Update the file offset and return the size as having been read */
- EtfsFile->Offset += Size;
- BytesRead = Size;
- }
- }
-
- /* Check if caller wanted to know how many bytes were read */
- if (BytesReturned)
- {
- /* Return the value */
- *BytesReturned = BytesRead;
- }
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-EtfsSetInformation (
- _In_ PBL_FILE_ENTRY FileEntry,
- _In_ PBL_FILE_INFORMATION FileInfo
- )
-{
- PBL_ETFS_FILE EtfsFile;
- BL_FILE_INFORMATION LocalFileInfo;
-
- /* Get the underlying ETFS file data structure */
- EtfsFile = (PBL_ETFS_FILE)FileEntry->FsSpecificData;
-
- /* Make a copy of the incoming attributes, but ignore the new offset */
- LocalFileInfo = *FileInfo;
- LocalFileInfo.Offset = EtfsFile->Offset;
-
- /* Check if these match exactly the current file */
- if (!RtlEqualMemory(&LocalFileInfo, &EtfsFile->Size, sizeof(*FileInfo)))
- {
- /* Nope -- which means caller is trying to change an immutable */
- EfiPrintf(L"Incorrect information change\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Is the offset past the end of the file? */
- if (FileInfo->Offset >= EtfsFile->Size)
- {
- /* Don't allow EOF */
- EfiPrintf(L"Offset too large: %lx vs %lx\r\n", FileInfo->Offset, EtfsFile->Size);
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Update the offset */
- EtfsFile->Offset = FileInfo->Offset;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-EtfsGetInformation (
- _In_ PBL_FILE_ENTRY FileEntry,
- _Out_ PBL_FILE_INFORMATION FileInfo
- )
-{
- PBL_ETFS_FILE EtfsFile;
-
- /* Get the underlying ETFS file data structure */
- EtfsFile = (PBL_ETFS_FILE)FileEntry->FsSpecificData;
-
- /* Copy the cached information structure within it */
- RtlCopyMemory(FileInfo, &EtfsFile->Size, sizeof(*FileInfo));
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-EtfsOpen (
- _In_ PBL_FILE_ENTRY Directory,
- _In_ PWCHAR FileName,
- _In_ ULONG Flags,
- _Out_ PBL_FILE_ENTRY *FileEntry
- )
-{
- PBL_ETFS_DEVICE EtfsDevice;
- NTSTATUS Status;
- PBL_FILE_ENTRY NewFile;
- PWCHAR FilePath, FormatString;
- PBL_ETFS_FILE EtfsFile;
- ULONG DeviceId, FileSize, DirOffset, FileOffset;
- SIZE_T Size;
- PRAW_DIR_REC DirEntry;
- BOOLEAN IsDirectory;
-
- EtfsFile = Directory->FsSpecificData;
- DeviceId = EtfsFile->DeviceId;
- EtfsDevice = EtfsDeviceTable[DeviceId];
-
- /* Find the given file (or directory) in the given directory */
- Status = EtfspCachedSearchForDirent(Directory,
- FileName,
- &DirEntry,
- &DirOffset,
- FALSE);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Find out information about the file (or directory) we found */
- EtfspGetDirectoryInfo(EtfsDevice,
- DirEntry,
- &FileOffset,
- &FileSize,
- &IsDirectory);
-
- /* Allocate a file entry */
- NewFile = BlMmAllocateHeap(sizeof(*NewFile));
- if (!NewFile)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Zero it out */
- RtlZeroMemory(NewFile, sizeof(*NewFile));
-
- /* Figure out the size of the path and filename plus a slash and NUL */
- Size = wcslen(Directory->FilePath) + wcslen(FileName) + 2;
- FilePath = BlMmAllocateHeap(Size * sizeof(WCHAR));
- if (!FilePath)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Allocate an ETFS file entry */
- EtfsFile = (PBL_ETFS_FILE)BlMmAllocateHeap(sizeof(*EtfsFile));
- if (!EtfsFile)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Zero it out */
- RtlZeroMemory(EtfsFile, sizeof(*EtfsFile));
-
- /* Capture the device ID of the directory */
- NewFile->DeviceId = Directory->DeviceId;
-
- /* Check if this is the root or a filename\directory under */
- FormatString = L"%ls%ls";
- if (Directory->FilePath[1])
- {
- FormatString = L"%ls\\%ls";
- }
-
- /* Combine the paths, and save the final path in the file entry */
- _snwprintf(FilePath, Size, FormatString, Directory->FilePath, FileName);
- NewFile->FilePath = FilePath;
-
- /* Copy the ETFS function callbacks into the file netry */
- RtlCopyMemory(&NewFile->Callbacks,
- &EtfsFunctionTable,
- sizeof(NewFile->Callbacks));
-
- /* Fill out the rest of the details */
- EtfsFile->DiskOffset = FileOffset;
- EtfsFile->DirOffset = DirOffset;
- EtfsFile->Size = FileSize;
- EtfsFile->DeviceId = DeviceId;
-
- /* Check if this is a directory */
- if (IsDirectory)
- {
- EtfsFile->Flags |= BL_ETFS_FILE_ENTRY_DIRECTORY;
- NewFile->Flags |= BL_FILE_ENTRY_DIRECTORY;
- }
-
- /* Write down the name of the filesystem */
- EtfsFile->FsName = L"cdfs";
-
- /* All done, return the file entry, and save the ETFS side */
- NewFile->FsSpecificData = EtfsFile;
- *FileEntry = NewFile;
- return Status;
-
-Quickie:
- /* Failure path -- free the file path if we had one */
- if (NewFile->FilePath)
- {
- BlMmFreeHeap(NewFile->FilePath);
- }
-
- /* Free the ETFS file entry if we had one */
- if (NewFile->FsSpecificData)
- {
- BlMmFreeHeap(NewFile->FsSpecificData);
- }
-
- /* Free the file entry itself, and return the error code */
- BlMmFreeHeap(NewFile);
- return Status;
-}
-
-NTSTATUS
-EtfspCheckCdfs (
- _In_ PBL_ETFS_DEVICE EtfsDevice,
- _In_ ULONG DeviceId,
- _Out_ PRAW_ISO_VD *VolumeDescriptor,
- _Out_ PBOOLEAN VolumeIsIso
- )
-{
- EfiPrintf(L"Raw Cdfs not implemented\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-EtfspCheckEtfs (
- _In_ PBL_ETFS_DEVICE EtfsDevice,
- _In_ ULONG DeviceId,
- _Out_ PRAW_ISO_VD *VolumeDescriptor,
- _Out_ PBOOLEAN VolumeIsIso
- )
-{
- PRAW_ISO_VD IsoVd;
- PRAW_ET_VD EtVd;
- NTSTATUS Status;
- BOOLEAN IsIso;
- BL_DEVICE_INFORMATION DeviceInformation;
- ULONG Unknown, BytesRead;
- ANSI_STRING CompareString, String;
-
- /* Save our static buffer pointer */
- IsoVd = (PRAW_ISO_VD)EtfsDevice->MemoryBlock;
- EtVd = (PRAW_ET_VD)IsoVd;
-
- /* First, read the El Torito Volume Descriptor */
- BlDeviceGetInformation(DeviceId, &DeviceInformation);
- Unknown = DeviceInformation.BlockDeviceInfo.Unknown;
- DeviceInformation.BlockDeviceInfo.Unknown |= 1;
- BlDeviceSetInformation(DeviceId, &DeviceInformation);
- Status = BlDeviceReadAtOffset(DeviceId,
- CD_SECTOR_SIZE,
- (FIRST_VD_SECTOR + 1) * CD_SECTOR_SIZE,
- EtfsDevice->MemoryBlock,
- &BytesRead);
- DeviceInformation.BlockDeviceInfo.Unknown = Unknown;
- BlDeviceSetInformation(DeviceId, &DeviceInformation);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L" read failed\r\n");
- return Status;
- }
-
- /* Remember that's where we last read */
- EtfsDevice->Offset = (FIRST_VD_SECTOR + 1) * CD_SECTOR_SIZE;
-
- /* Check if it's EL TORITO! */
- RtlInitString(&String, "EL TORITO SPECIFICATION");
- CompareString.Buffer = (PCHAR)EtVd->SystemId;
- CompareString.Length = 23;
- CompareString.MaximumLength = 23;
- if (!RtlEqualString(&CompareString, &String, TRUE))
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Check the version and boot indicator */
- if ((EtVd->Version != 1) || (EtVd->BootIndicator))
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Check if it has the CD0001 identifier */
- RtlInitString(&String, ISO_VOL_ID);
- CompareString.Buffer = (PCHAR)EtVd->StandardId;
- CompareString.Length = 5;
- CompareString.MaximumLength = 5;
- if (!RtlEqualString(&CompareString, &String, TRUE))
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Step two, we now want to read the ISO Volume Descriptor */
- DeviceInformation.BlockDeviceInfo.Unknown |= 1u;
- BlDeviceSetInformation(DeviceId, &DeviceInformation);
- Status = BlDeviceReadAtOffset(DeviceId,
- CD_SECTOR_SIZE,
- FIRST_VD_SECTOR * CD_SECTOR_SIZE,
- EtfsDevice->MemoryBlock,
- &BytesRead);
- DeviceInformation.BlockDeviceInfo.Unknown = Unknown;
- BlDeviceSetInformation(DeviceId, &DeviceInformation);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Remember where we left off */
- EtfsDevice->Offset = FIRST_VD_SECTOR * CD_SECTOR_SIZE;
-
- /* This should also say CD0001 */
- CompareString.Buffer = (PCHAR)IsoVd->StandardId;
- CompareString.Length = 5;
- CompareString.MaximumLength = 5;
- IsIso = RtlEqualString(&CompareString, &String, TRUE);
- if (!IsIso)
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* And should be a version we support */
- if ((IsoVd->Version != VERSION_1) || (IsoVd->DescType != VD_PRIMARY))
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Return back to the caller */
- *VolumeDescriptor = IsoVd;
- *VolumeIsIso = IsIso;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-EtfspDeviceContextDestroy (
- _In_ PBL_ETFS_DEVICE EtfsDevice
- )
-{
- if (EtfsDevice->MemoryBlock)
- {
- BlMmFreeHeap(EtfsDevice->MemoryBlock);
- }
-
- BlMmFreeHeap(EtfsDevice);
-
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-EtfspCreateContext (
- _In_ ULONG DeviceId,
- _Out_ PBL_ETFS_DEVICE *EtfsDevice
- )
-{
- PBL_ETFS_DEVICE NewContext;
- PVOID MemoryBlock;
- NTSTATUS Status;
- BOOLEAN IsIso;
- PRAW_ISO_VD RawVd;
-
- NewContext = (PBL_ETFS_DEVICE)BlMmAllocateHeap(sizeof(*NewContext));
- if (!NewContext)
- {
- return STATUS_NO_MEMORY;
- }
- RtlZeroMemory(NewContext, sizeof(*NewContext));
-
- MemoryBlock = BlMmAllocateHeap(CD_SECTOR_SIZE);
- NewContext->MemoryBlock = MemoryBlock;
- if (!MemoryBlock)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- Status = EtfspCheckEtfs(NewContext, DeviceId, &RawVd, &IsIso);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Drive not EDFS. Checking for CDFS: %lx\r\n");
- Status = EtfspCheckCdfs(NewContext, DeviceId, &RawVd, &IsIso);
- }
-
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Drive not CDFS. Failing: %lx\r\n");
- goto Quickie;
- }
-
- NewContext->IsIso = IsIso;
- NewContext->BlockSize = RVD_LB_SIZE(RawVd, IsIso);
- NewContext->VolumeSize = RVD_VOL_SIZE(RawVd, IsIso);
-
- EtfspGetDirectoryInfo(NewContext,
- (PRAW_DIR_REC)RVD_ROOT_DE(RawVd, IsIso),
- &NewContext->RootDirOffset,
- &NewContext->RootDirSize,
- 0);
- Status = STATUS_SUCCESS;
-
-Quickie:
- if (!NT_SUCCESS(Status))
- {
- EtfspDeviceContextDestroy(NewContext);
- NewContext = NULL;
- }
-
- *EtfsDevice = NewContext;
- return Status;
-}
-
-NTSTATUS
-EtfspDeviceTableDestroyEntry (
- _In_ PBL_ETFS_DEVICE EtfsDevice,
- _In_ ULONG Index
- )
-{
- EtfspDeviceContextDestroy(EtfsDevice);
- EtfsDeviceTable[Index] = NULL;
-
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-EtfsMount (
- _In_ ULONG DeviceId,
- _In_ ULONG Unknown,
- _Out_ PBL_FILE_ENTRY* FileEntry
- )
-{
- PBL_ETFS_DEVICE EtfsDevice = NULL;
- PBL_FILE_ENTRY RootEntry;
- NTSTATUS Status;
- PBL_ETFS_FILE EtfsFile;
-
- EfiPrintf(L"Trying to mount as ETFS...\r\n");
-
- Status = EtfspCreateContext(DeviceId, &EtfsDevice);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"ETFS context failed: %lx\r\n");
- return Status;
- }
-
- Status = BlTblSetEntry(&EtfsDeviceTable,
- &EtfsDeviceTableEntries,
- EtfsDevice,
- &DeviceId,
- TblDoNotPurgeEntry);
- if (!NT_SUCCESS(Status))
- {
- EtfspDeviceContextDestroy(EtfsDevice);
- return Status;
- }
-
- RootEntry = BlMmAllocateHeap(sizeof(*RootEntry));
- if (!RootEntry)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- RtlZeroMemory(RootEntry, sizeof(*RootEntry));
-
- RootEntry->FilePath = BlMmAllocateHeap(4);
- if (!RootEntry->FilePath)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- wcsncpy(RootEntry->FilePath, L"\\", 1);
-
- RootEntry->DeviceId = DeviceId;
- RtlCopyMemory(&RootEntry->Callbacks,
- &EtfsFunctionTable,
- sizeof(RootEntry->Callbacks));
-
- EtfsFile = (PBL_ETFS_FILE)BlMmAllocateHeap(sizeof(*EtfsFile));
- if (!EtfsFile)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- RootEntry->Flags |= 0x10000;
-
- RtlZeroMemory(EtfsFile, sizeof(*EtfsFile));
- RootEntry->FsSpecificData = EtfsFile;
- EtfsFile->DeviceId = DeviceId;
- EtfsFile->Flags |= 1;
- EtfsFile->DiskOffset = EtfsDevice->RootDirOffset;
- EtfsFile->DirOffset = 0;
- EtfsFile->Size = EtfsDevice->RootDirSize;
- EtfsFile->FsName = L"cdfs";
- *FileEntry = RootEntry;
-
- return STATUS_SUCCESS;
-
-Quickie:
- if (RootEntry->FilePath)
- {
- BlMmFreeHeap(RootEntry->FilePath);
- }
- if (RootEntry->FsSpecificData)
- {
- BlMmFreeHeap(RootEntry->FsSpecificData);
- }
- if (RootEntry)
- {
- BlMmFreeHeap(RootEntry);
- }
-
- EtfspDeviceTableDestroyEntry(EtfsDevice, DeviceId);
-
- return Status;
-}
-
-NTSTATUS
-EtfsInitialize (
- VOID
- )
-{
- NTSTATUS Status;
-
- /* Allocate the device table with 2 entries*/
- EtfsDeviceTableEntries = 2;
- EtfsDeviceTable = BlMmAllocateHeap(sizeof(PBL_FILE_ENTRY) *
- EtfsDeviceTableEntries);
- if (EtfsDeviceTable)
- {
- /* Zero it out */
- RtlZeroMemory(EtfsDeviceTable,
- sizeof(PBL_FILE_ENTRY) * EtfsDeviceTableEntries);
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* No memory, fail */
- Status = STATUS_NO_MEMORY;
- }
-
- /* Return back to caller */
- return Status;
-}
-
diff --git a/boot/environ/lib/io/fat.c b/boot/environ/lib/io/fat.c
deleted file mode 100644
index 5612a89b0ba..00000000000
--- a/boot/environ/lib/io/fat.c
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/fat.c
- * PURPOSE: Boot Library FAT File System Management Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include
-#include
-
-/* DATA VARIABLES ************************************************************/
-
-PVOID* FatDeviceTable;
-ULONG FatDeviceTableEntries;
-PWCHAR FatpLongFileName;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-FatMount (
- _In_ ULONG DeviceId,
- _In_ ULONG Unknown,
- _Out_ PBL_FILE_ENTRY* FileEntry
- )
-{
- BL_DEVICE_INFORMATION DeviceInformation;
- ULONG UnknownFlag;
- NTSTATUS Status;
- PACKED_BOOT_SECTOR FatBootSector;
- BIOS_PARAMETER_BLOCK BiosBlock;
-
- /* Capture thing */
- BlDeviceGetInformation(DeviceId, &DeviceInformation);
- UnknownFlag = DeviceInformation.BlockDeviceInfo.Unknown;
-
- /* Set thing to 1 */
- DeviceInformation.BlockDeviceInfo.Unknown |= 1;
- BlDeviceSetInformation(DeviceId, &DeviceInformation);
-
- /* Read the boot sector */
- Status = BlDeviceReadAtOffset(DeviceId,
- sizeof(FatBootSector),
- 0,
- &FatBootSector,
- NULL);
-
- /* Restore thing back */
- DeviceInformation.BlockDeviceInfo.Unknown = UnknownFlag;
- BlDeviceSetInformation(DeviceId, &DeviceInformation);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed reading drive: %lx\r\n", Status);
- return Status;
- }
-
- FatUnpackBios(&BiosBlock, &FatBootSector.PackedBpb);
-
- /* For now, quickly fail if this isn't FAT */
- if (FatBootSector.Jump[0] != 0xE9)
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- EfiPrintf(L"Jump: %lx Bytes Per Sector: %d Sectors Per Cluster: %d Reserved: %d Fats: %d Sectors: %d Large Sectors: %d Media: %lx RootEntries: %d\r\n",
- FatBootSector.Jump[0],
- BiosBlock.BytesPerSector,
- BiosBlock.SectorsPerCluster,
- BiosBlock.ReservedSectors,
- BiosBlock.Fats,
- BiosBlock.Sectors,
- BiosBlock.LargeSectors,
- BiosBlock.Media,
- BiosBlock.RootEntries);
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-FatInitialize (
- VOID
- )
-{
- NTSTATUS Status;
-
- /* Allocate the device table with 2 entries*/
- FatDeviceTableEntries = 2;
- FatDeviceTable = BlMmAllocateHeap(sizeof(PBL_FILE_ENTRY) *
- FatDeviceTableEntries);
- if (FatDeviceTable)
- {
- /* Zero it out */
- RtlZeroMemory(FatDeviceTable,
- sizeof(PBL_FILE_ENTRY) * FatDeviceTableEntries);
-
- /* Allocate a 512 byte buffer for long file name conversion */
- FatpLongFileName = BlMmAllocateHeap(512);
- Status = FatpLongFileName != NULL ? STATUS_SUCCESS : STATUS_NO_MEMORY;
- }
- else
- {
- /* No memory, fail */
- Status = STATUS_NO_MEMORY;
- }
-
- /* Return back to caller */
- return Status;
-}
-
diff --git a/boot/environ/lib/io/file.c b/boot/environ/lib/io/file.c
deleted file mode 100644
index c6b4e4328f7..00000000000
--- a/boot/environ/lib/io/file.c
+++ /dev/null
@@ -1,1004 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/file.c
- * PURPOSE: Boot Library File Management Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-PVOID* FileTable;
-ULONG FileEntries;
-
-LIST_ENTRY RegisteredFileSystems;
-BL_FILE_SYSTEM_REGISTRATION_TABLE FatRegisterFunctionTable =
-{
- FatInitialize,
- NULL,
- FatMount,
- NULL
-};
-BL_FILE_SYSTEM_REGISTRATION_TABLE EtfsRegisterFunctionTable =
-{
- EtfsInitialize,
- NULL,
- EtfsMount,
- NULL
-};
-
-extern ULONG DmTableEntries;
-extern PVOID* DmDeviceTable;
-
-/* FUNCTIONS *****************************************************************/
-
-PWCHAR
-FileIoCopyParentDirectoryPath (
- _In_ PWCHAR FilePath
- )
-{
- SIZE_T PathSize, PathSizeWithNull;
- PWCHAR Backslash, ParentCopy;
-
- PathSize = wcslen(FilePath) * sizeof(WCHAR);
-
- PathSizeWithNull = PathSize + sizeof(UNICODE_NULL);
- if (PathSizeWithNull < PathSize)
- {
- return NULL;
- }
-
- ParentCopy = BlMmAllocateHeap(PathSizeWithNull);
- if (!ParentCopy)
- {
- return NULL;
- }
- wcsncpy(ParentCopy, FilePath, PathSizeWithNull / sizeof(WCHAR));
-
- Backslash = wcsrchr(ParentCopy, '\\');
- if (!Backslash)
- {
- BlMmFreeHeap(ParentCopy);
- return NULL;
- }
-
- if (Backslash == ParentCopy)
- {
- ++Backslash;
- }
-
- *Backslash = UNICODE_NULL;
- return ParentCopy;
-}
-
-PWCHAR
-FileIoCopyFileName (
- _In_ PWCHAR FilePath
- )
-{
- PWCHAR Separator, FileCopy;
- SIZE_T PathSize;
-
- Separator = wcsrchr(FilePath, '\\');
- if (!Separator)
- {
- return NULL;
- }
-
- PathSize = wcslen(Separator) * sizeof(WCHAR);
-
- FileCopy = BlMmAllocateHeap(PathSize);
- if (!FileCopy)
- {
- return NULL;
- }
-
- wcsncpy(FileCopy, Separator + 1, PathSize / sizeof(WCHAR));
- return FileCopy;
-}
-
-BOOLEAN
-FileTableCompareWithSubsetAttributes (
- _In_ PVOID Entry,
- _In_ PVOID Argument1,
- _In_ PVOID Argument2,
- _In_ PVOID Argument3,
- _In_ PVOID Argument4
- )
-{
- PBL_FILE_ENTRY FileEntry = (PBL_FILE_ENTRY)Entry;
- ULONG DeviceId = *(PULONG)Argument1;
- PWCHAR FilePath = (PWCHAR)Argument2;
- ULONG Flags = *(PULONG)Argument3;
- ULONG Unknown = *(PULONG)Argument4;
- BOOLEAN Found;
-
- Found = FALSE;
-
- if ((FileEntry->DeviceId == DeviceId) &&
- !(_wcsicmp(FileEntry->FilePath, FilePath)) &&
- (FileEntry->Unknown == Unknown))
- {
- if ((!(Flags & 1) || (FileEntry->Flags & 2)) && (!(Flags & 2) || (FileEntry->Flags & 4)))
- {
- if ((!(Flags & 4) || (FileEntry->Flags & 0x10000)) && ((Flags & 4) || !(FileEntry->Flags & 0x10000)))
- {
- Found = TRUE;
- }
- }
- }
- return Found;
-}
-
-BOOLEAN
-FileTableCompareWithSameAttributes (
- _In_ PVOID Entry,
- _In_ PVOID Argument1,
- _In_ PVOID Argument2,
- _In_ PVOID Argument3,
- _In_ PVOID Argument4
- )
-{
- PBL_FILE_ENTRY FileEntry = (PBL_FILE_ENTRY)Entry;
- ULONG DeviceId = *(PULONG)Argument1;
- PWCHAR FilePath = (PWCHAR)Argument2;
- ULONG Flags = *(PULONG)Argument3;
- ULONG Unknown = *(PULONG)Argument4;
- BOOLEAN Found;
-
- Found = FALSE;
-
- if ((FileEntry->DeviceId == DeviceId) &&
- !(_wcsicmp(FileEntry->FilePath, FilePath)) &&
- (FileEntry->Unknown == Unknown))
- {
- if ((!(Flags & 1) || (FileEntry->Flags & 2)) && ((Flags & 1) || !(FileEntry->Flags & 2)) && (!(Flags & 2) || (FileEntry->Flags & 4)) && ((Flags & 2) || !(FileEntry->Flags & 4)))
- {
- if ((!(Flags & 4) || (FileEntry->Flags & 0x10000)) && ((Flags & 4) || !(FileEntry->Flags & 0x10000)))
- {
- Found = TRUE;
- }
- }
- }
- return Found;
-}
-
-NTSTATUS
-FileTableDestroyEntry (
- _In_ PBL_FILE_ENTRY FileEntry,
- _In_ ULONG Index
- )
-{
- ULONG DeviceId;
- PBL_DEVICE_ENTRY DeviceEntry;
- NTSTATUS Status;
-
- DeviceId = FileEntry->DeviceId;
- if (DmTableEntries > DeviceId)
- {
- DeviceEntry = DmDeviceTable[DeviceId];
- if (DeviceEntry)
- {
- --DeviceEntry->ReferenceCount;
- }
- }
-
- Status = FileEntry->Callbacks.Close(FileEntry);
-
- BlMmFreeHeap(FileEntry);
-
- FileTable[Index] = NULL;
- return Status;
-}
-
-#define BL_FILE_PURGE_LIMIT 512
-
-NTSTATUS
-FileTablePurgeEntry (
- _In_ PVOID Entry
- )
-{
- PBL_FILE_ENTRY FileEntry = (PBL_FILE_ENTRY)Entry;
-
- /* Don't purge opened files, or if there's less than 512 files cached */
- if (((FileEntry->Flags & BL_FILE_ENTRY_OPENED) ||
- (FileEntry->Flags & 0x10000)) &&
- (FileEntries < BL_FILE_PURGE_LIMIT))
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Purge the entry otherwise */
- return FileTableDestroyEntry(FileEntry, FileEntry->FileId);
-}
-
-NTSTATUS
-BlFileClose (
- _In_ ULONG FileId
- )
-{
- PBL_FILE_ENTRY FileEntry;
-
- /* Validate the file ID */
- if (FileEntries <= FileId)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure a file entry actually exists */
- FileEntry = FileTable[FileId];
- if (!FileEntry)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* And that it's actually open */
- if (!(FileEntry->Flags & BL_FILE_ENTRY_OPENED))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Drop a reference, check if this was the last one */
- --FileEntry->ReferenceCount;
- if (!FileEntry->ReferenceCount)
- {
- /* File is no longer open */
- FileEntry->Flags &= ~BL_FILE_ENTRY_OPENED;
- }
-
- /* All good */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-FileIoOpen (
- _In_ ULONG DeviceId,
- _In_ PWCHAR FileName,
- _In_ ULONG Flags,
- _In_ ULONG Unknown,
- _In_ PBL_TBL_LOOKUP_ROUTINE CompareRoutine,
- _Out_opt_ PBL_FILE_ENTRY *NewFileEntry
- )
-{
- PWCHAR FileNameCopy, ParentFileName;
- NTSTATUS Status;
- PBL_DEVICE_ENTRY DeviceEntry;
- PBL_FILE_SYSTEM_ENTRY FileSystem;
- ULONG FileId, CheckFlags;
- PBL_FILE_ENTRY DirectoryEntry, FileEntry;
- PLIST_ENTRY NextEntry, ListHead;
-
- /* Preinitialize variables for failure */
- DirectoryEntry = NULL;
- FileNameCopy = NULL;
- ParentFileName = NULL;
- Status = STATUS_SUCCESS;
-
- /* Bail out if the device ID is invalid */
- if (DmTableEntries <= DeviceId)
- {
- return STATUS_ACCESS_DENIED;
- }
-
- /* Bail out if there's no device entry */
- DeviceEntry = DmDeviceTable[DeviceId];
- if (!DeviceEntry)
- {
- return STATUS_ACCESS_DENIED;
- }
-
- /* Read access is always required for touching the device */
- CheckFlags = Flags | BL_FILE_READ_ACCESS;
-
- /* Check if the device is granting us read access */
- if ((CheckFlags & BL_FILE_READ_ACCESS) &&
- (!(DeviceEntry->Flags & BL_DEVICE_ENTRY_OPENED) ||
- !(DeviceEntry->Flags & BL_DEVICE_ENTRY_READ_ACCESS)))
- {
- EfiPrintf(L"Access denied\r\n");
- return STATUS_ACCESS_DENIED;
- }
-
- /* Check if the device is granting us write access */
- if ((CheckFlags & BL_FILE_WRITE_ACCESS) &&
- (!(DeviceEntry->Flags & BL_DEVICE_ENTRY_OPENED) ||
- !(DeviceEntry->Flags & BL_DEVICE_ENTRY_WRITE_ACCESS)))
- {
- EfiPrintf(L"Access denied2\r\n");
- return STATUS_ACCESS_DENIED;
- }
-
- /* Check if we already have this file open */
- FileEntry = (PBL_FILE_ENTRY )BlTblFindEntry(FileTable,
- FileEntries,
- &FileId,
- CompareRoutine,
- &DeviceId,
- FileName,
- &Flags,
- &Unknown);
- if (FileEntry)
- {
- goto FileOpened;
- }
-
- /* Check if we are opening the root drive or an actual file/directory */
- if ((*FileName != OBJ_NAME_PATH_SEPARATOR) || (FileName[1]))
- {
- /* Get the name of the directory */
- ParentFileName = FileIoCopyParentDirectoryPath(FileName);
- if (!ParentFileName)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Open it */
- Status = FileIoOpen(DeviceId,
- ParentFileName,
- BL_FILE_READ_ACCESS | BL_DIRECTORY_ACCESS,
- Unknown,
- FileTableCompareWithSubsetAttributes,
- &DirectoryEntry);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Now get the the file name itself */
- FileNameCopy = FileIoCopyFileName(FileName);
- if (!FileNameCopy)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Open it */
- Status = DirectoryEntry->Callbacks.Open(DirectoryEntry,
- FileNameCopy,
- Flags,
- &FileEntry);
- }
- else
- {
- /* We're opening the root, scan through all the file systems */
- Status = STATUS_UNSUCCESSFUL;
- ListHead = &RegisteredFileSystems;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Try to mount this one */
- FileSystem = CONTAINING_RECORD(NextEntry, BL_FILE_SYSTEM_ENTRY, ListEntry);
- Status = FileSystem->MountCallback(DeviceId, Unknown, &FileEntry);
- if (NT_SUCCESS(Status))
- {
- /* Mount successful */
- break;
- }
-
- /* Try the next file system */
- NextEntry = NextEntry->Flink;
- }
-
- /* Nothing to free on this path */
- FileNameCopy = NULL;
- }
-
- /* Handle failure */
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Could not open file!: %lx\r\n", Status);
- goto Quickie;
- }
-
- /* Save the unknown */
- FileEntry->Unknown = Unknown;
-
- /* Convert open flags into entry flags */
- if (Flags & BL_FILE_READ_ACCESS)
- {
- FileEntry->Flags |= BL_FILE_ENTRY_READ_ACCESS;
- }
- if (Flags & BL_FILE_WRITE_ACCESS)
- {
- FileEntry->Flags |= BL_FILE_ENTRY_WRITE_ACCESS;
- }
-
- /* Save the file into the file table */
- Status = BlTblSetEntry(&FileTable,
- &FileEntries,
- (PVOID)FileEntry,
- &FileId,
- FileTablePurgeEntry);
- if (!NT_SUCCESS(Status))
- {
- /* Close it if that failed */
- FileEntry->Callbacks.Close(FileEntry);
- goto Quickie;
- }
-
- /* Add a reference on the device, and save our file ID */
- ++DeviceEntry->ReferenceCount;
- Status = STATUS_SUCCESS;
- FileEntry->FileId = FileId;
-
-FileOpened:
- /* Add a reference to the file entry, and see if this is the first one */
- if (++FileEntry->ReferenceCount == 1)
- {
- /* Reset unknowns */
- FileEntry->TotalBytesRead = 0;
- FileEntry->Unknown2 = 0;
- }
-
- /* Set the file as opened */
- FileEntry->Flags |= BL_FILE_ENTRY_OPENED;
-
- /* Not sure what this flag does */
- if (Flags & BL_UNKNOWN_ACCESS)
- {
- FileEntry->Flags |= BL_FILE_ENTRY_UNKNOWN_ACCESS;
- }
-
- /* If the caller wanted the entry back, return it */
- if (NewFileEntry)
- {
- *NewFileEntry = FileEntry;
- }
-
-Quickie:
- /* Close the parent */
- if (DirectoryEntry)
- {
- BlFileClose(DirectoryEntry->FileId);
- }
-
- /* Free the parent name copy */
- if (ParentFileName)
- {
- BlMmFreeHeap(ParentFileName);
- }
-
- /* Free the file name copy */
- if (FileNameCopy)
- {
- BlMmFreeHeap(FileNameCopy);
- }
-
- /* Return back to caller */
- return Status;
-}
-
-NTSTATUS
-BlFileOpen (
- _In_ ULONG DeviceId,
- _In_ PWCHAR FileName,
- _In_ ULONG Flags,
- _Out_ PULONG FileId
- )
-{
- NTSTATUS Status;
- PBL_FILE_ENTRY FileEntry;
- BL_DEVICE_INFORMATION DeviceInformation;
-
- /* Make sure we have a valid file name, access flags and parameters */
- if (!(FileName) ||
- (*FileName != OBJ_NAME_PATH_SEPARATOR) ||
- !(FileId) ||
- !(Flags & (BL_FILE_READ_ACCESS | BL_FILE_WRITE_ACCESS)))
- {
- EfiPrintf(L"Invalid file options\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Get information on the underlying device */
- Status = BlDeviceGetInformation(DeviceId, &DeviceInformation);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Get device info failed: %lx\r\n", Status);
- return Status;
- }
-
- /* Make sure it's a device that can host files */
- if ((DeviceInformation.DeviceType != DiskDevice) &&
- (DeviceInformation.DeviceType != LegacyPartitionDevice) &&
- (DeviceInformation.DeviceType != UdpDevice))
- {
- EfiPrintf(L"Invalid device type\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Open a file on this device, creating one if needed */
- Status = FileIoOpen(DeviceId,
- FileName,
- Flags,
- 0,
- FileTableCompareWithSameAttributes,
- &FileEntry);
- if (NT_SUCCESS(Status))
- {
- /* Return the file ID back to the caller */
- *FileId = FileEntry->FileId;
- }
-
- /* All good */
- return Status;
-}
-
-NTSTATUS
-BlFileSetInformation (
- _In_ ULONG FileId,
- _Out_ PBL_FILE_INFORMATION FileInfo
- )
-{
- PBL_FILE_ENTRY FileEntry;
-
- /* Make sure caller passed this in */
- if (!FileInfo)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Validate file ID */
- if (FileId > FileEntries)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure an opened file exits with this ID */
- FileEntry = FileTable[FileId];
- if (!(FileEntry) || !(FileEntry->Flags & BL_FILE_ENTRY_OPENED))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Do the I/O operation */
- return FileEntry->Callbacks.SetInfo(FileEntry, FileInfo);
-}
-
-NTSTATUS
-BlFileGetInformation (
- _In_ ULONG FileId,
- _In_ PBL_FILE_INFORMATION FileInfo
- )
-{
- PBL_FILE_ENTRY FileEntry;
-
- /* Make sure caller passed this in */
- if (!FileInfo)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Validate file ID */
- if (FileId > FileEntries)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure an opened file exits with this ID */
- FileEntry = FileTable[FileId];
- if (!(FileEntry) || !(FileEntry->Flags & BL_FILE_ENTRY_OPENED))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Do the I/O operation */
- return FileEntry->Callbacks.GetInfo(FileEntry, FileInfo);
-}
-
-NTSTATUS
-FileInformationCheck (
- _In_ PBL_FILE_INFORMATION FileInformation,
- _In_ BOOLEAN Write,
- _In_opt_ PULONG InputSize,
- _In_opt_ PULONG BytesReturned,
- _Out_opt_ PULONG RequiredSize
- )
-{
- NTSTATUS Status;
- ULONG Size;
-
- /* Initialize variables */
- Status = STATUS_SUCCESS;
- Size = 0;
-
- /* Make sure we didn't overshoot */
- if (FileInformation->Offset > FileInformation->Size)
- {
- /* Bail out */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Compute the appropriate 32-bit size of this read, based on file size */
- Size = ULONG_MAX;
- if ((FileInformation->Size - FileInformation->Offset) <= ULONG_MAX)
- {
- Size = (ULONG)(FileInformation->Size) - (ULONG)(FileInformation->Offset);
- }
-
- /* Check if the caller has an input buffer */
- if (InputSize)
- {
- /* Is the size bigger than what the caller can handle? */
- if (Size >= *InputSize)
- {
- /* Yes, so cap it at the size of the caller's buffer */
- Size = *InputSize;
- }
- else if (!(BytesReturned) || (Write))
- {
- /* Caller's input buffer is too smaller is fatal for writes */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
- }
-
-Quickie:
- /* Does the caller want to know how big to make their buffer? */
- if (RequiredSize)
- {
- /* Let them know*/
- *RequiredSize = Size;
- }
-
- /* Return final status */
- return Status;
-}
-
-NTSTATUS
-BlFileReadEx (
- _In_ ULONG FileId,
- _Out_ PVOID Buffer,
- _In_ ULONG Size,
- _Out_ PULONG BytesReturned,
- _In_ ULONG Flags
- )
-{
- PBL_FILE_ENTRY FileEntry;
- NTSTATUS Status;
- ULONG OldUnknown, RequiredSize;
- BOOLEAN ChangedUnknown;
- BL_DEVICE_INFORMATION DeviceInfo;
- BL_FILE_INFORMATION fileInfo;
-
- /* Initialize variables */
- RtlZeroMemory(&DeviceInfo, sizeof(DeviceInfo));
- OldUnknown = 0;
- ChangedUnknown = FALSE;
-
- /* Bail out if there's no buffer */
- if (!Buffer)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Bail out of the file ID is invalid */
- if (FileId > FileEntries)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Bail out if there's no file opened for read access */
- FileEntry = FileTable[FileId];
- if (!(FileEntry) ||
- !(FileEntry->Flags & (BL_FILE_ENTRY_OPENED | BL_FILE_ENTRY_READ_ACCESS)))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Bail out if we can't read the file's information */
- Status = BlFileGetInformation(FileId, &fileInfo);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Ensure the read attempt is valid, and fix up the size if needed */
- RequiredSize = Size;
- Status = FileInformationCheck(&fileInfo,
- FALSE,
- &RequiredSize,
- BytesReturned,
- &RequiredSize);
- if (!NT_SUCCESS(Status))
- {
- /* Invalid or illegal read attempt */
- return Status;
- }
-
- /* Is there anything left to read after all? */
- if (RequiredSize)
- {
- /* Check if flags 2 or 4 are set */
- if ((Flags & 2) || (Flags & 4))
- {
- /* Check if this is a disk or partition device */
- BlDeviceGetInformation(FileEntry->DeviceId, &DeviceInfo);
- if ((DeviceInfo.DeviceType == DiskDevice) ||
- (DeviceInfo.DeviceType == LegacyPartitionDevice))
- {
- /* Check if request flags are incompatible with device flags */
- if ((!(DeviceInfo.BlockDeviceInfo.Unknown & 1) && (Flags & 2)) ||
- (!(DeviceInfo.BlockDeviceInfo.Unknown & 2) && (Flags & 4)))
- {
- /* We're going to change the device flags */
- ChangedUnknown = TRUE;
-
- /* Set unknown flag 1 for request flag 2 */
- if (Flags & 2)
- {
- DeviceInfo.BlockDeviceInfo.Unknown |= 1;
- }
-
- /* Set unknown flag 2 for request flag 4 */
- if (Flags & 4)
- {
- DeviceInfo.BlockDeviceInfo.Unknown |= 2;
- }
-
- /* Save the new device flags */
- BlDeviceSetInformation(FileEntry->DeviceId, &DeviceInfo);
- }
- }
- }
-
- /* Issue the read to the underlying file system */
- Status = FileEntry->Callbacks.Read(FileEntry,
- Buffer,
- RequiredSize,
- BytesReturned);
- if (!NT_SUCCESS(Status))
- {
- /* Don't update the bytes read on failure */
- RequiredSize = 0;
- }
- }
- else
- {
- /* There's nothing to do, return success and 0 bytes */
- Status = STATUS_SUCCESS;
- if (BytesReturned)
- {
- *BytesReturned = 0;
- }
- }
-
- /* Increment the number of bytes read */
- FileEntry->TotalBytesRead += RequiredSize;
-
- /* Check if the unknown flag on the device was changed during this routine */
- if (ChangedUnknown)
- {
- /* Reset it back to its original value */
- DeviceInfo.BlockDeviceInfo.Unknown = OldUnknown;
- BlDeviceSetInformation(FileEntry->DeviceId, &DeviceInfo);
- }
-
- /* Return the final status */
- return Status;
-}
-
-NTSTATUS
-BlFileReadAtOffsetEx (
- _In_ ULONG FileId,
- _In_ ULONG Size,
- _In_ ULONGLONG ByteOffset,
- _In_ PVOID Buffer,
- _Out_ PULONG BytesReturned,
- _In_ ULONG Flags
- )
-{
- NTSTATUS Status;
- BL_FILE_INFORMATION FileInfo;
- ULONG RequiredSize;
- ULONGLONG FileOffset;
-
- /* Get information on the specified file */
- Status = BlFileGetInformation(FileId, &FileInfo);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Save the current offset, and overwrite it with the one we want */
- FileOffset = FileInfo.Offset;
- FileInfo.Offset = ByteOffset;
-
- /* Check the validity of the read and the actual size to read */
- RequiredSize = Size;
- Status = FileInformationCheck(&FileInfo,
- FALSE,
- &RequiredSize,
- BytesReturned,
- &RequiredSize);
- if (!NT_SUCCESS(Status))
- {
- /* Bail out if the read is invalid */
- EfiPrintf(L"File info check failure: %lx\r\n", Status);
- return Status;
- }
-
- /* Check if the offset we're requesting is not the current offset */
- if (FileInfo.Offset != FileOffset)
- {
- /* Set the new offset to use */
- Status = BlFileSetInformation(FileId, &FileInfo);
- if (!NT_SUCCESS(Status))
- {
- /* Can't do much if that failed */
- return Status;
- }
- }
-
- /* Do the read at the required offset now */
- Status = BlFileReadEx(FileId,
- Buffer,
- RequiredSize,
- BytesReturned,
- Flags);
- if (!NT_SUCCESS(Status))
- {
- /* The read failed -- had we modified the offset? */
- if (FileInfo.Offset != FileOffset)
- {
- /* Restore the offset back to its original value */
- FileInfo.Offset = FileOffset;
- BlFileSetInformation(FileId, &FileInfo);
- }
- }
-
- /* Return the status of the read */
- return Status;
-}
-
-NTSTATUS
-BlpFileRegisterFileSystem (
- _In_ PBL_FS_INIT_CALLBACK InitCallback,
- _In_ PBL_FS_DESTROY_CALLBACK DestroyCallback,
- _In_ PBL_FS_MOUNT_CALLBACK MountCallback,
- _In_ PBL_FS_PURGE_CALLBACK PurgeCallback,
- _In_ ULONG Flags
- )
-{
- PBL_FILE_SYSTEM_ENTRY FsEntry;
- NTSTATUS Status;
-
- /* Allocate an entry */
- FsEntry = BlMmAllocateHeap(sizeof(*FsEntry));
- if (!FsEntry)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Initialize the file system */
- Status = InitCallback();
- if (!NT_SUCCESS(Status))
- {
- BlMmFreeHeap(FsEntry);
- return Status;
- }
-
- /* Register the callbacks */
- FsEntry->MountCallback = MountCallback;
- FsEntry->DestroyCallback = DestroyCallback;
- FsEntry->InitCallback = InitCallback;
- FsEntry->PurgeCallback = PurgeCallback;
-
- /* Insert in the right location in the list */
- if (Flags & BL_FS_REGISTER_AT_HEAD_FLAG)
- {
- InsertHeadList(&RegisteredFileSystems, &FsEntry->ListEntry);
- }
- else
- {
- InsertTailList(&RegisteredFileSystems, &FsEntry->ListEntry);
- }
-
- /* Return */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlpFileInitialize (
- VOID
- )
-{
- NTSTATUS Status;
-
- /* Allocate the file table */
- FileEntries = 16;
- FileTable = BlMmAllocateHeap(sizeof(PBL_FILE_ENTRY) * FileEntries);
- if (!FileTable)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Initialize it */
- RtlZeroMemory(FileTable, sizeof(PBL_FILE_ENTRY) * FileEntries);
- InitializeListHead(&RegisteredFileSystems);
-
-#if 0
- /* Initialize the network file system */
- Status = BlpFileRegisterFileSystem(NetRegisterFunctionTable.Init,
- NetRegisterFunctionTable.Destroy,
- NetRegisterFunctionTable.Mount,
- NetRegisterFunctionTable.Purge,
- 1);
- if (NT_SUCCESS(Status))
- {
- /* Initialize NTFS */
- Status = BlpFileRegisterFileSystem(NtfsRegisterFunctionTable.Init,
- NtfsRegisterFunctionTable.Destroy,
- NtfsRegisterFunctionTable.Mount,
- NtfsRegisterFunctionTable.Purge,
- 0);
- }
-
- if (NT_SUCCESS(Status))
-#endif
- {
- /* Initialize FAT */
- Status = BlpFileRegisterFileSystem(FatRegisterFunctionTable.Init,
- FatRegisterFunctionTable.Destroy,
- FatRegisterFunctionTable.Mount,
- FatRegisterFunctionTable.Purge,
- 0);
- }
-
-#if 0
- if (NT_SUCCESS(Status))
- {
- /* Initialize EXFAT (FatPlus) */
- Status = BlpFileRegisterFileSystem(FppRegisterFunctionTable.Init,
- FppRegisterFunctionTable.Destroy,
- FppRegisterFunctionTable.Mount,
- FppRegisterFunctionTable.Purge,
- 0);
- }
-
- if (NT_SUCCESS(Status))
- {
- /* Initialize WIM */
- Status = BlpFileRegisterFileSystem(WimRegisterFunctionTable.Init,
- WimRegisterFunctionTable.Destroy,
- WimRegisterFunctionTable.Mount,
- WimRegisterFunctionTable.Purge,
- 0);
- }
-
- if (NT_SUCCESS(Status))
- {
- /* Initialize UDFS */
- Status = BlpFileRegisterFileSystem(UdfsRegisterFunctionTable.Init,
- UdfsRegisterFunctionTable.Destroy,
- UdfsRegisterFunctionTable.Mount,
- UdfsRegisterFunctionTable.Purge,
- 0);
- }
-#endif
- if (NT_SUCCESS(Status))
- {
- /* Initialize El-Torito CDFS */
- Status = BlpFileRegisterFileSystem(EtfsRegisterFunctionTable.Init,
- EtfsRegisterFunctionTable.Destroy,
- EtfsRegisterFunctionTable.Mount,
- EtfsRegisterFunctionTable.Purge,
- 0);
- }
-
- /* Destroy the file manager if any of the file systems didn't initialize */
- if (!NT_SUCCESS(Status))
- {
- if (FileTable)
- {
- //BlpFileDestroy();
- }
- }
- return Status;
-}
diff --git a/boot/environ/lib/io/io.c b/boot/environ/lib/io/io.c
deleted file mode 100644
index 4138b498c52..00000000000
--- a/boot/environ/lib/io/io.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/io/io.c
- * PURPOSE: Boot Library I/O Management Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-ULONG IoMgrRoutineEntries;
-PVOID* IoMgrDestroyRoutineTable;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-BlpIoRegisterDestroyRoutine (
- _In_ PBL_IO_DESTROY_ROUTINE DestroyRoutine
- )
-{
- ULONG Id;
-
- return BlTblSetEntry(&IoMgrDestroyRoutineTable,
- &IoMgrRoutineEntries,
- DestroyRoutine,
- &Id,
- TblDoNotPurgeEntry);
-}
-
-NTSTATUS
-BlpIoInitialize (
- VOID
- )
-{
- NTSTATUS Status;
- ULONG Size;
-
- /* Allocate the I/O table */
- IoMgrRoutineEntries = 4;
- Size = IoMgrRoutineEntries * sizeof(PVOID);
- IoMgrDestroyRoutineTable = BlMmAllocateHeap(Size);
- if (IoMgrDestroyRoutineTable)
- {
- /* Zero it out */
- RtlZeroMemory(IoMgrDestroyRoutineTable, Size);
-
- /* Initialize the device manager */
- Status = BlpDeviceInitialize();
-
- /* Initialize the file manager */
- if (NT_SUCCESS(Status))
- {
- Status = BlpFileInitialize();
- }
- }
- else
- {
- /* No memory */
- Status = STATUS_NO_MEMORY;
- }
-
- /* Return initialization status */
- return Status;
-}
-
-
diff --git a/boot/environ/lib/mc/.keep b/boot/environ/lib/mc/.keep
deleted file mode 100644
index e69de29bb2d..00000000000
diff --git a/boot/environ/lib/misc/bcd.c b/boot/environ/lib/misc/bcd.c
deleted file mode 100644
index bd2c85ba573..00000000000
--- a/boot/environ/lib/misc/bcd.c
+++ /dev/null
@@ -1,1364 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/misc/bcd.c
- * PURPOSE: Boot Library BCD Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-#include
-
-/* FUNCTIONS *****************************************************************/
-
-VOID
-BiNotifyEnumerationError (
- _In_ HANDLE ObjectHandle,
- _In_ PWCHAR ElementName,
- _In_ NTSTATUS Status
- )
-{
- /* Stub for now */
- UNREFERENCED_PARAMETER(ObjectHandle);
- UNREFERENCED_PARAMETER(ElementName);
- UNREFERENCED_PARAMETER(Status);
- EfiPrintf(L"Error in BiNotify: %lx for element %s\r\n", Status, ElementName);
-}
-
-ULONG
-BiConvertElementFormatToValueType (
- _In_ ULONG Format
- )
-{
- /* Strings and objects are strings */
- if ((Format == BCD_TYPE_STRING) || (Format == BCD_TYPE_OBJECT))
- {
- return REG_SZ;
- }
-
- /* Object lists are arrays of strings */
- if (Format == BCD_TYPE_OBJECT_LIST)
- {
- return REG_MULTI_SZ;
- }
-
- /* Everything else is binary */
- return REG_BINARY;
-}
-
-NTSTATUS
-BiConvertRegistryDataToElement (
- _In_ HANDLE ObjectHandle,
- _In_ PVOID Data,
- _In_ ULONG DataLength,
- _In_ BcdElementType ElementType,
- _Out_ PVOID Element,
- _Out_ PULONG ElementSize
- )
-{
- NTSTATUS Status;
- SIZE_T Length, Size, ReturnedLength;
- PBL_DEVICE_DESCRIPTOR Device;
- BOOLEAN NullTerminate;
- PBCD_DEVICE_OPTION BcdDevice, ElementDevice;
- PWCHAR BcdString, ElementString;
- PGUID ElementGuid; UNICODE_STRING GuidString;
- PULONGLONG ElementInteger;
- PUSHORT ElementWord; PBOOLEAN BcdBoolean;
-
- /* Assume failure */
- ReturnedLength = 0;
-
- /* Check what type of format we are dealing with */
- switch (ElementType.Format)
- {
- /* Devices -- they are in a binary format */
- case BCD_TYPE_DEVICE:
-
- /* First, make sure it's at least big enough for an empty descriptor */
- if (DataLength < FIELD_OFFSET(BCD_DEVICE_OPTION,
- DeviceDescriptor.Unknown))
- {
- return STATUS_OBJECT_TYPE_MISMATCH;
- }
-
- /* Both the registry and BCD format are the same */
- BcdDevice = (PBCD_DEVICE_OPTION)Data;
- ElementDevice = (PBCD_DEVICE_OPTION)Element;
-
- /* Make sure the device fits in the registry data */
- Device = &BcdDevice->DeviceDescriptor;
- Size = Device->Size;
- if ((Size + sizeof(BcdDevice->AssociatedEntry)) != DataLength)
- {
- return STATUS_OBJECT_TYPE_MISMATCH;
- }
-
- /* Check if this is a locate device */
- if (Device->DeviceType == LocateDevice)
- {
- EfiPrintf(L"Locates not yet supported\r\n");
- return STATUS_NOT_SUPPORTED;
- }
-
- /* Make sure the caller's buffer can fit the device */
- ReturnedLength = Size + sizeof(BcdDevice->AssociatedEntry);
- if (ReturnedLength > *ElementSize)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- /* It'll fit -- copy it in */
- RtlCopyMemory(&ElementDevice->DeviceDescriptor, Device, Size);
- ElementDevice->AssociatedEntry = BcdDevice->AssociatedEntry;
- Status = STATUS_SUCCESS;
- break;
-
- /* Strings -- they are stored as is */
- case BCD_TYPE_STRING:
-
- /* Make sure the string isn't empty or misaligned */
- if (!(DataLength) || (DataLength & 1))
- {
- return STATUS_OBJECT_TYPE_MISMATCH;
- }
-
- /* Both the registry and BCD format are the same */
- BcdString = (PWCHAR)Data;
- ElementString = (PWCHAR)Element;
-
- /* We'll need as much data as the string has to offer */
- ReturnedLength = DataLength;
-
- /* If the string isn't NULL-terminated, do it now */
- NullTerminate = FALSE;
- if (BcdString[(DataLength / sizeof(WCHAR)) - 1] != UNICODE_NULL)
- {
- ReturnedLength += sizeof(UNICODE_NULL);
- NullTerminate = TRUE;
- }
-
- /* Will we fit in the caller's buffer? */
- if (ReturnedLength > *ElementSize)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- /* Yep -- copy it in, and NULL-terminate if needed */
- RtlCopyMemory(Element, Data, DataLength);
- if (NullTerminate)
- {
- ElementString[DataLength / sizeof(WCHAR)] = UNICODE_NULL;
- }
-
- Status = STATUS_SUCCESS;
- break;
-
- /* Objects -- they are stored as GUID Strings */
- case BCD_TYPE_OBJECT:
-
- /* Registry data is a string, BCD data is a GUID */
- BcdString = (PWCHAR)Data;
- ElementGuid = (PGUID)Element;
-
- /* We need a GUID-sized buffer, does the caller have one? */
- ReturnedLength = sizeof(*ElementGuid);
- if (*ElementSize < ReturnedLength)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- /* Yep, copy the GUID */
- RtlInitUnicodeString(&GuidString, BcdString);
- Status = RtlGUIDFromString(&GuidString, ElementGuid);
- break;
-
- /* Object Lists -- they are stored as arrays of GUID strings */
- case BCD_TYPE_OBJECT_LIST:
-
- /* Assume an empty list*/
- ReturnedLength = 0;
- Length = 0;
- Status = STATUS_SUCCESS;
-
- /* Registry data is an array of strings, BCD data is array of GUIDs */
- BcdString = (PWCHAR)Data;
- ElementGuid = (PGUID)Element;
-
- /* Loop as long as the array still has strings */
- while (*BcdString)
- {
- /* Don't read beyond the registry data */
- if (Length >= DataLength)
- {
- break;
- }
-
- /* One more GUID -- does the caller have space? */
- ReturnedLength += sizeof(GUID);
- if (ReturnedLength <= *ElementSize)
- {
- /* Convert and add it in */
- RtlInitUnicodeString(&GuidString, BcdString);
- Status = RtlGUIDFromString(&GuidString, ElementGuid);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* Move to the next GUID in the caller's buffer */
- ElementGuid++;
- }
-
- /* Move to the next string in the registry array */
- Size = (wcslen(BcdString) * sizeof(WCHAR)) + sizeof(UNICODE_NULL);
- Length += Size;
- BcdString = (PWCHAR)((ULONG_PTR)BcdString + Length);
- }
-
- /* Check if we failed anywhere */
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* Check if we consumed more space than we have */
- if (ReturnedLength > *ElementSize)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- }
-
- /* All good here */
- break;
-
- /* Integer -- stored as binary */
- case BCD_TYPE_INTEGER:
-
- /* BCD data is a ULONGLONG, registry data is 8 bytes binary */
- ElementInteger = (PULONGLONG)Element;
- ReturnedLength = sizeof(*ElementInteger);
-
- /* Make sure the registry data makes sense */
- if (DataLength > ReturnedLength)
- {
- return STATUS_OBJECT_TYPE_MISMATCH;
- }
-
- /* Make sure the caller has space */
- if (*ElementSize < ReturnedLength)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- /* Write the integer result */
- *ElementInteger = 0;
- RtlCopyMemory(ElementInteger, Data, DataLength);
- Status = STATUS_SUCCESS;
- break;
-
- /* Boolean -- stored as binary */
- case BCD_TYPE_BOOLEAN:
-
- /* BCD data is a BOOLEAN, registry data is 2 bytes binary */
- ElementWord = (PUSHORT)Element;
- BcdBoolean = (PBOOLEAN)Data;
- ReturnedLength = sizeof(ElementWord);
-
- /* Make sure the registry data makes sense */
- if (DataLength != sizeof(*BcdBoolean))
- {
- return STATUS_OBJECT_TYPE_MISMATCH;
- }
-
- /* Make sure the caller has space */
- if (*ElementSize < ReturnedLength)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- /* Write the boolean result */
- *ElementWord = 0;
- *ElementWord = *BcdBoolean != 0;
- Status = STATUS_SUCCESS;
- break;
-
- /* Integer list --stored as binary */
- case BCD_TYPE_INTEGER_LIST:
-
- /* BCD Data is n ULONGLONGs, registry data is n*8 bytes binary */
- ReturnedLength = DataLength;
- if (!(DataLength) || (DataLength & 7))
- {
- return STATUS_OBJECT_TYPE_MISMATCH;
- }
-
- /* Make sure the caller has space */
- if (*ElementSize < ReturnedLength)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- /* Write the integer list result */
- RtlCopyMemory(Element, Data, DataLength);
- Status = STATUS_SUCCESS;
- break;
-
- /* Arbitrary data */
- default:
-
- /* Registry data is copied binary as-is */
- ReturnedLength = DataLength;
-
- /* Make sure it's not empty */
- if (!DataLength)
- {
- return STATUS_OBJECT_TYPE_MISMATCH;
- }
-
- /* Make sure the caller has space */
- if (*ElementSize < ReturnedLength)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- break;
- }
-
- /* Write the result */
- RtlCopyMemory(Element, Data, DataLength);
- Status = STATUS_SUCCESS;
- break;
- }
-
- /* If we got here due to success or space issues, write the size */
- if ((NT_SUCCESS(Status)) || (Status == STATUS_BUFFER_TOO_SMALL))
- {
- *ElementSize = ReturnedLength;
- }
-
- /* All done, return our conversion result */
- return Status;
-}
-
-NTSTATUS
-BiConvertBcdElements (
- _In_ PBCD_PACKED_ELEMENT Elements,
- _Out_opt_ PBCD_ELEMENT Buffer,
- _Inout_ PULONG BufferSize,
- _Inout_ PULONG ElementCount
- )
-{
- NTSTATUS Status;
- ULONG ElementSize, AlignedElementSize, AlignedDataSize;
- PBCD_ELEMENT_HEADER Header;
- PVOID Data;
- BOOLEAN Exists;
- ULONG i, j, Count;
-
- /* Local variable to keep track of objects */
- Count = 0;
-
- /* Safely compute the element bytes needed */
- Status = RtlULongMult(*ElementCount, sizeof(BCD_ELEMENT), &ElementSize);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Safely align the element size */
- Status = RtlULongAdd(ElementSize,
- sizeof(ULONG) - 1,
- &AlignedElementSize);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- AlignedElementSize = ALIGN_DOWN(AlignedElementSize, ULONG);
-
- /* Do a safe version of Add2Ptr to figure out where the headers will start */
- Status = RtlULongPtrAdd((ULONG_PTR)Buffer,
- AlignedElementSize,
- (PULONG_PTR)&Header);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Safely compute the header bytes needed */
- Status = RtlULongMult(*ElementCount,
- sizeof(BCD_ELEMENT_HEADER),
- &ElementSize);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Safely align the header size */
- Status = RtlULongAdd(ElementSize,
- AlignedElementSize + sizeof(ULONG) - 1,
- &AlignedElementSize);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- AlignedElementSize = ALIGN_DOWN(AlignedElementSize, ULONG);
-
- /* Do a safe version of Add2Ptr */
- Status = RtlULongPtrAdd((ULONG_PTR)Buffer,
- AlignedElementSize,
- (PULONG_PTR)&Data);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Iterate over every element */
- for (i = 0; i < *ElementCount; i++)
- {
- /* Safely align the element size */
- Status = RtlULongAdd(Elements->Size,
- sizeof(ULONG) - 1,
- &AlignedDataSize);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
- AlignedDataSize = ALIGN_DOWN(AlignedDataSize, ULONG);
-
- /* Safely add the size of this data element */
- Status = RtlULongAdd(AlignedElementSize,
- AlignedDataSize,
- &AlignedElementSize);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* Do we have enough space left? */
- if (*BufferSize >= AlignedElementSize)
- {
- /* Check if our root is an inherited object */
- Exists = FALSE;
- if (Elements->RootType.PackedValue == BcdLibraryObjectList_InheritedObjects)
- {
- /* Yes, scan for us in the current buffer */
- for (j = 0; j < Count; j++)
- {
- /* Do we already exist? */
- while (Buffer[j].Header->Type == Elements->RootType.PackedValue)
- {
- /* Yep */
- Exists = TRUE;
- break;
- }
- }
- }
-
- /* Have we already found ourselves? */
- if (!Exists)
- {
- /* Nope, one more entry */
- ++Count;
-
- /* Write out the unpacked object */
- Buffer->Body = Data;
- Buffer->Header = Header;
-
- /* Fill out its header */
- Header->Size = Elements->Size;
- Header->Type = Elements->Type;
- Header->Version = Elements->Version;
-
- /* And copy the data */
- RtlCopyMemory(Data, Elements->Data, Header->Size);
-
- /* Move to the next unpacked object and header */
- ++Buffer;
- ++Header;
-
- /* Move to the next data entry */
- Data = (PVOID)((ULONG_PTR)Data + AlignedDataSize);
- }
- }
- else
- {
- /* Nope, set failure code, but keep going so we can return count */
- Status = STATUS_BUFFER_TOO_SMALL;
- }
-
- /* Move to the next element entry */
- Elements = Elements->NextEntry;
- }
-
- /* Return the new final buffer size and count */
- *BufferSize = AlignedElementSize;
- *ElementCount = Count;
- return Status;
-}
-
-NTSTATUS
-BcdOpenObject (
- _In_ HANDLE BcdHandle,
- _In_ PGUID ObjectId,
- _Out_ PHANDLE ObjectHandle
- )
-{
- NTSTATUS Status;
- GUID LocalGuid;
- UNICODE_STRING GuidString;
- HANDLE RootObjectHandle;
-
- /* Assume failure */
- *ObjectHandle = NULL;
-
- /* Initialize GUID string */
- GuidString.Buffer = NULL;
-
- /* Open the root "Objects" handle */
- RootObjectHandle = NULL;
- Status = BiOpenKey(BcdHandle, L"Objects", &RootObjectHandle);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Capture the object ID and convert it into a string */
- LocalGuid = *ObjectId;
- Status = RtlStringFromGUID(&LocalGuid, &GuidString);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Now open the key containing this object ID */
- Status = BiOpenKey(RootObjectHandle, GuidString.Buffer, ObjectHandle);
-
-Quickie:
- /* Free the GUID string if we had one allocated */
- if (GuidString.Buffer)
- {
- RtlFreeUnicodeString(&GuidString);
- }
-
- /* Close the root handle if it was open */
- if (RootObjectHandle)
- {
- BiCloseKey(RootObjectHandle);
- }
-
- /* Return the final status */
- return Status;
-}
-
-NTSTATUS
-BcdDeleteElement (
- _In_ HANDLE ObjectHandle,
- _In_ ULONG Type
- )
-{
- NTSTATUS Status;
- HANDLE ElementsHandle, ElementHandle;
- WCHAR TypeString[22];
-
- /* Open the elements key */
- Status = BiOpenKey(ObjectHandle, L"Elements", &ElementsHandle);
- if (NT_SUCCESS(Status))
- {
- /* Convert the element ID into a string */
- if (!_ultow(Type, TypeString, 16))
- {
- /* Failed to do so */
- Status = STATUS_UNSUCCESSFUL;
- }
- else
- {
- /* Open the element specifically */
- Status = BiOpenKey(ElementsHandle, TypeString, &ElementHandle);
- if (NT_SUCCESS(Status))
- {
- /* Delete it */
- Status = BiDeleteKey(ElementHandle);
- if (NT_SUCCESS(Status))
- {
- /* No point in closing the handle anymore */
- ElementHandle = NULL;
- }
- }
- else
- {
- /* The element doesn't exist */
- Status = STATUS_NOT_FOUND;
- }
-
- /* Check if we should close the key */
- if (ElementHandle)
- {
- /* Do it */
- BiCloseKey(ElementHandle);
- }
- }
- }
-
- /* Check if we should close the elements handle */
- if (ElementsHandle)
- {
- /* Do it */
- BiCloseKey(ElementsHandle);
- }
-
- /* Return whatever the result was */
- return Status;
-}
-
-NTSTATUS
-BiEnumerateSubElements (
- _In_ HANDLE BcdHandle,
- _In_ PVOID Object,
- _In_ ULONG ElementType,
- _In_ ULONG Flags,
- _Out_opt_ PBCD_PACKED_ELEMENT* Elements,
- _Inout_ PULONG ElementSize,
- _Out_ PULONG ElementCount
- )
-{
- NTSTATUS Status;
- PBCD_PACKED_ELEMENT Element;
- HANDLE ObjectHandle;
- ULONG ParsedElements, RequiredSize;
-
- /* Assume empty */
- *ElementCount = 0;
- RequiredSize = 0;
- ParsedElements = 0;
-
- /* Open the object */
- Status = BcdOpenObject(BcdHandle, Object, &ObjectHandle);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Read the first entry, and the size available */
- Element = *Elements;
- RequiredSize = *ElementSize;
-
- /* Enumerate the object into the element array */
- Status = BiEnumerateElements(BcdHandle,
- ObjectHandle,
- ElementType,
- Flags,
- Element,
- &RequiredSize,
- &ParsedElements);
-
- /* Close the handle and bail out if we couldn't enumerate */
- BiCloseKey(ObjectHandle);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Check if the and subelements were present */
- if (ParsedElements)
- {
- /* Keep going until the last one */
- while (Element->NextEntry)
- {
- Element = Element->NextEntry;
- }
-
- /* Set the new buffer location to the last element */
- *Elements = Element;
- }
-
-Quickie:
- /* Return the number of sub-elements and their size */
- *ElementCount = ParsedElements;
- *ElementSize = RequiredSize;
- return Status;
-}
-
-NTSTATUS
-BiEnumerateSubObjectElements (
- _In_ HANDLE BcdHandle,
- _Out_ PGUID SubObjectList,
- _In_ ULONG SubObjectCount,
- _In_ ULONG Flags,
- _Out_opt_ PBCD_PACKED_ELEMENT Elements,
- _Inout_ PULONG ElementSize,
- _Out_ PULONG ElementCount
- )
-{
- NTSTATUS Status;
- ULONG SubElementCount, TotalSize, RequiredSize, CurrentSize, i;
- PBCD_PACKED_ELEMENT PreviousElement;
-
- /* Assume empty list */
- *ElementCount = 0;
- Status = STATUS_SUCCESS;
-
- /* Initialize variables */
- TotalSize = 0;
- PreviousElement = NULL;
-
- /* Set the currently remaining size based on caller's input */
- CurrentSize = *ElementSize;
-
- /* Iterate over every subje object */
- for (i = 0; i < SubObjectCount; i++)
- {
- /* Set the currently remaining buffer space */
- RequiredSize = CurrentSize;
-
- /* Enumerate the inherited sub elements */
- Status = BiEnumerateSubElements(BcdHandle,
- &SubObjectList[i],
- BcdLibraryObjectList_InheritedObjects,
- Flags,
- &Elements,
- &RequiredSize,
- &SubElementCount);
- if ((NT_SUCCESS(Status)) || (Status == STATUS_BUFFER_TOO_SMALL))
- {
- /* Safely add the length of the sub elements */
- Status = RtlULongAdd(TotalSize, RequiredSize, &TotalSize);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* Add the sub elements to the total */
- *ElementCount += SubElementCount;
-
- /* See if we have enough space*/
- if (*ElementSize >= TotalSize)
- {
- /* Were there any subelements? */
- if (SubElementCount)
- {
- /* Update to keep track of these new subelements */
- CurrentSize = *ElementSize - TotalSize;
-
- /* Link the subelements into the chain */
- PreviousElement = Elements;
- PreviousElement->NextEntry =
- (PBCD_PACKED_ELEMENT)((ULONG_PTR)Elements + TotalSize);
- Elements = PreviousElement->NextEntry;
- }
- }
- else
- {
- /* We're out of space */
- CurrentSize = 0;
- }
- }
- else if ((Status != STATUS_NOT_FOUND) &&
- (Status != STATUS_OBJECT_NAME_NOT_FOUND))
- {
- /* Some other fatal error, break out */
- break;
- }
- else
- {
- /* The sub element was not found, print a warning but keep going */
- BlStatusPrint(L"Ignoring missing BCD inherit object: {%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x}\n",
- (&SubObjectList[i])->Data1,
- (&SubObjectList[i])->Data2,
- (&SubObjectList[i])->Data3,
- (&SubObjectList[i])->Data4[0],
- (&SubObjectList[i])->Data4[1],
- (&SubObjectList[i])->Data4[2],
- (&SubObjectList[i])->Data4[3],
- (&SubObjectList[i])->Data4[4],
- (&SubObjectList[i])->Data4[5],
- (&SubObjectList[i])->Data4[6],
- (&SubObjectList[i])->Data4[7]);
- Status = STATUS_SUCCESS;
- }
- }
-
- /* Terminate the last element, if one was left */
- if (PreviousElement)
- {
- PreviousElement->NextEntry = NULL;
- }
-
- /* Set failure code if we ran out of space */
- if (*ElementSize < TotalSize)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- }
-
- /* Return final length and status */
- *ElementSize = TotalSize;
- return Status;
-}
-
-NTSTATUS
-BiEnumerateElements (
- _In_ HANDLE BcdHandle,
- _In_ HANDLE ObjectHandle,
- _In_ ULONG RootElementType,
- _In_ ULONG Flags,
- _Out_opt_ PBCD_PACKED_ELEMENT Elements,
- _Inout_ PULONG ElementSize,
- _Out_ PULONG ElementCount
- )
-{
- HANDLE ElementsHandle, ElementHandle;
- ULONG TotalLength, RegistryElementDataLength, RemainingLength;
- NTSTATUS Status;
- ULONG i;
- PVOID ElementData, SubObjectList, RegistryElementData;
- BcdElementType ElementType;
- PBCD_PACKED_ELEMENT PreviousElement, ElementsStart;
- ULONG SubElementCount, SubKeyCount, SubObjectCount, ElementDataLength;
- PWCHAR ElementName;
- PWCHAR* SubKeys;
-
- /* Assume failure */
- *ElementCount = 0;
-
- /* Initialize all locals that are checked at the end*/
- SubKeys = NULL;
- ElementsHandle = NULL;
- ElementHandle = NULL;
- ElementData = NULL;
- RegistryElementData = NULL;
- PreviousElement = NULL;
- ElementName = NULL;
- SubObjectList = NULL;
- TotalLength = 0;
- ElementDataLength = 0;
- SubObjectCount = 0;
- RemainingLength = 0;
- ElementsStart = Elements;
-
- /* Open the root object key's elements */
- Status = BiOpenKey(ObjectHandle, L"Elements", &ElementsHandle);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Enumerate all elements */
- Status = BiEnumerateSubKeys(ElementsHandle, &SubKeys, &SubKeyCount);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Iterate over each one */
- for (i = 0; i < SubKeyCount; i++)
- {
- /* Open the element */
- ElementName = SubKeys[i];
- Status = BiOpenKey(ElementsHandle, ElementName, &ElementHandle);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"ELEMENT ERROR: %lx\r\n", Status);
- EfiStall(100000);
- break;
- }
-
- /* The name of the element is its data type */
- ElementType.PackedValue = wcstoul(SubKeys[i], NULL, 16);
- if (!(ElementType.PackedValue) || (ElementType.PackedValue == -1))
- {
- EfiPrintf(L"Value invalid\r\n");
- BiCloseKey(ElementHandle);
- ElementHandle = NULL;
- continue;
- }
-
- /* Read the appropriate registry value type for this element */
- Status = BiGetRegistryValue(ElementHandle,
- L"Element",
- BiConvertElementFormatToValueType(
- ElementType.Format),
- &RegistryElementData,
- &RegistryElementDataLength);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Element invalid\r\n");
- break;
- }
-
- /* Now figure out how much space the converted element will need */
- ElementDataLength = 0;
- Status = BiConvertRegistryDataToElement(ObjectHandle,
- RegistryElementData,
- RegistryElementDataLength,
- ElementType,
- NULL,
- &ElementDataLength);
- if (Status != STATUS_BUFFER_TOO_SMALL)
- {
- break;
- }
-
- /* Allocate a buffer big enough for the converted element */
- ElementData = BlMmAllocateHeap(ElementDataLength);
- if (!ElementData)
- {
- Status = STATUS_INSUFFICIENT_RESOURCES;
- break;
- }
-
- /* And actually convert it this time around */
- Status = BiConvertRegistryDataToElement(ObjectHandle,
- RegistryElementData,
- RegistryElementDataLength,
- ElementType,
- ElementData,
- &ElementDataLength);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* Safely add space for the packed element header */
- Status = RtlULongAdd(TotalLength,
- FIELD_OFFSET(BCD_PACKED_ELEMENT, Data),
- &TotalLength);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* Safely add space for the data of the element itself */
- Status = RtlULongAdd(TotalLength, ElementDataLength, &TotalLength);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* One more element */
- ++*ElementCount;
-
- /* See how much space we were given */
- RemainingLength = *ElementSize;
- if (RemainingLength >= TotalLength)
- {
- /* Set the next pointer */
- Elements->NextEntry = (PBCD_PACKED_ELEMENT)((ULONG_PTR)ElementsStart + TotalLength);
-
- /* Fill this one out */
- Elements->RootType.PackedValue = RootElementType;
- Elements->Version = 1;
- Elements->Type = ElementType.PackedValue;
- Elements->Size = ElementDataLength;
-
- /* Add the data */
- RtlCopyMemory(Elements->Data, ElementData, ElementDataLength);
- RemainingLength -= TotalLength;
-
- /* Move to the next element on the next pass */
- PreviousElement = Elements;
- Elements = Elements->NextEntry;
- }
- else
- {
- /* We're out of space */
- RemainingLength = 0;
- }
-
- /* Are we enumerating devices, and is this a device? */
- if ((Flags & BCD_ENUMERATE_FLAG_DEVICES) &&
- (ElementType.Format == BCD_TYPE_DEVICE))
- {
- /* Yep, so go inside to enumerate it */
- Status = BiEnumerateSubElements(BcdHandle,
- ElementData,
- ElementType.PackedValue,
- Flags,
- &Elements,
- &ElementDataLength,
- &SubElementCount);
- if ((NT_SUCCESS(Status)) || (Status == STATUS_BUFFER_TOO_SMALL))
- {
- /* Safely add the length of the sub elements */
- Status = RtlULongAdd(TotalLength,
- ElementDataLength,
- &TotalLength);
- if (!NT_SUCCESS(Status))
- {
- break;
- }
-
- /* Add the sub elements to the total */
- *ElementCount += SubElementCount;
-
- /* See if we have enough space*/
- if (*ElementSize >= TotalLength)
- {
- /* Were there any subelements? */
- if (SubElementCount)
- {
- /* Update to keep track of these new subelements */
- ElementDataLength = *ElementSize - TotalLength;
-
- /* Link the subelements into the chain */
- PreviousElement = Elements;
- PreviousElement->NextEntry =
- (PBCD_PACKED_ELEMENT)((ULONG_PTR)ElementsStart +
- TotalLength);
- Elements = PreviousElement->NextEntry;
- }
- }
- else
- {
- /* We're out of space */
- ElementDataLength = 0;
- }
- }
- else if ((Status != STATUS_NOT_FOUND) &&
- (Status != STATUS_OBJECT_NAME_NOT_FOUND))
- {
- /* Fatal error trying to read the data, so fail */
- break;
- }
- }
- else if ((Flags & BCD_ENUMERATE_FLAG_DEEP) &&
- (ElementType.PackedValue == BcdLibraryObjectList_InheritedObjects))
- {
- /* Inherited objects are requested, so allocate a buffer for them */
- SubObjectList = BlMmAllocateHeap(ElementDataLength);
- if (!SubObjectList)
- {
- Status = STATUS_INSUFFICIENT_RESOURCES;
- break;
- }
-
- /* Copy the elements into the list. They are arrays of GUIDs */
- RtlCopyMemory(SubObjectList, ElementData, ElementDataLength);
- SubObjectCount = ElementDataLength / sizeof(GUID);
- }
-
- /* Free our local buffers */
- BlMmFreeHeap(ElementData);
- BlMmFreeHeap(RegistryElementData);
- ElementData = NULL;
- RegistryElementData = NULL;
-
- /* Close the key */
- BiCloseKey(ElementHandle);
- ElementHandle = NULL;
- ElementName = NULL;
- }
-
- /* Did we end up here with a sub object list after successful loop parsing? */
- if ((i != 0) && (i == SubKeyCount) && (SubObjectList))
- {
- /* We will actually enumerate it now, at the end */
- Status = BiEnumerateSubObjectElements(BcdHandle,
- SubObjectList,
- SubObjectCount,
- Flags,
- Elements,
- &RemainingLength,
- &SubElementCount);
- if ((NT_SUCCESS(Status)) || (Status == STATUS_BUFFER_TOO_SMALL))
- {
- /* Safely add the length of the sub elements */
- Status = RtlULongAdd(TotalLength, RemainingLength, &TotalLength);
- if ((NT_SUCCESS(Status)) && (SubElementCount))
- {
- /* Add the sub elements to the total */
- *ElementCount += SubElementCount;
-
- /* Don't touch PreviousElement anymore */
- PreviousElement = NULL;
- }
- }
- }
-
-Quickie:
- /* Free the sub object list, if any */
- if (SubObjectList)
- {
- BlMmFreeHeap(SubObjectList);
- }
-
- /* Free any local element data */
- if (ElementData)
- {
- BlMmFreeHeap(ElementData);
- }
-
- /* Free any local registry data */
- if (RegistryElementData)
- {
- BlMmFreeHeap(RegistryElementData);
- }
-
- /* Close the handle if still opened */
- if (ElementHandle)
- {
- BiCloseKey(ElementHandle);
- }
-
- /* Terminate the last element, if any */
- if (PreviousElement)
- {
- PreviousElement->NextEntry = NULL;
- }
-
- /* Close the root handle if still opened */
- if (ElementsHandle)
- {
- BiCloseKey(ElementsHandle);
- }
-
- /* Set failure code if out of space */
- if (*ElementSize < TotalLength)
- {
- Status = STATUS_BUFFER_TOO_SMALL;
- }
-
- /* Other errors will send a notification error */
- if (!(NT_SUCCESS(Status)) && (Status != STATUS_BUFFER_TOO_SMALL))
- {
- BiNotifyEnumerationError(ObjectHandle, ElementName, Status);
- }
-
- /* Finally free the subkeys array */
- if (SubKeys)
- {
- BlMmFreeHeap(SubKeys);
- }
-
- /* And return the required, final length and status */
- *ElementSize = TotalLength;
- return Status;
-}
-
-NTSTATUS
-BiAddStoreFromFile (
- _In_ PBL_FILE_PATH_DESCRIPTOR FilePath,
- _Out_ PHANDLE StoreHandle
- )
-{
- NTSTATUS Status;
- HANDLE HiveHandle, KeyHandle;
-
- /* Load the specified hive */
- Status = BiLoadHive(FilePath, &HiveHandle);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Open the description key to make sure this is really a BCD */
- Status = BiOpenKey(HiveHandle, L"Description", &KeyHandle);
- if (NT_SUCCESS(Status))
- {
- /* It is -- close the key as we don't need it */
- BiCloseKey(KeyHandle);
- *StoreHandle = HiveHandle;
- }
- else
- {
- /* Failure, drop a reference on the hive and close the key */
- BiDereferenceHive(HiveHandle);
- BiCloseKey(HiveHandle);
- }
-
- /* Return the status */
- return Status;
-}
-
-NTSTATUS
-BiGetObjectDescription (
- _In_ HANDLE ObjectHandle,
- _Out_ PBCD_OBJECT_DESCRIPTION Description
- )
-{
- NTSTATUS Status;
- HANDLE DescriptionHandle;
- PULONG Data;
- ULONG Length;
-
- /* Initialize locals */
- Data = NULL;
- DescriptionHandle = NULL;
-
- /* Open the description key */
- Status = BiOpenKey(ObjectHandle, L"Description", &DescriptionHandle);
- if (NT_SUCCESS(Status))
- {
- /* It exists */
- Description->Valid = TRUE;
-
- /* Read the type */
- Length = 0;
- Status = BiGetRegistryValue(DescriptionHandle,
- L"Type",
- REG_DWORD,
- (PVOID*)&Data,
- &Length);
- if (NT_SUCCESS(Status))
- {
- /* Make sure it's the length we expected it to be */
- if (Length == sizeof(Data))
- {
- /* Return the type that is stored there */
- Description->Type = *Data;
- }
- else
- {
- /* Invalid type value */
- Status = STATUS_OBJECT_TYPE_MISMATCH;
- }
- }
- }
-
- /* Did we have a handle open? */
- if (DescriptionHandle)
- {
- /* Close it */
- BiCloseKey(DescriptionHandle);
- }
-
- /* Did we have data allocated? */
- if (Data)
- {
- /* Free it */
- BlMmFreeHeap(Data);
- }
-
- /* Return back to caller */
- return Status;
-}
-
-NTSTATUS
-BcdEnumerateAndUnpackElements (
- _In_ HANDLE BcdHandle,
- _In_ HANDLE ObjectHandle,
- _Out_opt_ PBCD_ELEMENT Elements,
- _Inout_ PULONG ElementSize,
- _Out_ PULONG ElementCount
- )
-{
- PVOID LocalElements;
- NTSTATUS Status;
- ULONG LocalElementCount, LocalElementSize;
-
- /* Make sure required parameters are there */
- if (!(ElementSize) || !(ElementCount) || ((Elements) && (!*ElementSize)))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Set initial count to zero */
- *ElementCount = 0;
-
- /* Do the initial enumeration to figure out the size required */
- LocalElementSize = 0;
- LocalElementCount = 0;
- Status = BiEnumerateElements(BcdHandle,
- ObjectHandle,
- 0,
- BCD_ENUMERATE_FLAG_IN_ORDER |
- BCD_ENUMERATE_FLAG_DEVICES |
- BCD_ENUMERATE_FLAG_DEEP,
- NULL,
- &LocalElementSize,
- &LocalElementCount);
- if (Status != STATUS_BUFFER_TOO_SMALL)
- {
- return Status;
- }
-
- /* Now allocate a buffer large enough to hold them */
- LocalElements = BlMmAllocateHeap(LocalElementSize);
- if (!LocalElements)
- {
- return STATUS_INSUFFICIENT_RESOURCES;
- }
-
- /* Zero out the array and do the real enumeration this time around */
- RtlZeroMemory(LocalElements, LocalElementSize);
- Status = BiEnumerateElements(BcdHandle,
- ObjectHandle,
- 0,
- BCD_ENUMERATE_FLAG_IN_ORDER |
- BCD_ENUMERATE_FLAG_DEVICES |
- BCD_ENUMERATE_FLAG_DEEP,
- LocalElements,
- &LocalElementSize,
- &LocalElementCount);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Now we know the real count */
- *ElementCount = LocalElementCount;
-
- /* Now unpack the data */
- Status = BiConvertBcdElements(LocalElements,
- Elements,
- ElementSize,
- &LocalElementCount);
- if (NT_SUCCESS(Status))
- {
- /* Not all elements may have been converted */
- *ElementCount = LocalElementCount;
- }
-
- /* Free the local (unpacked) buffer and return status */
- BlMmFreeHeap(LocalElements);
- return Status;
-}
-
-NTSTATUS
-BcdOpenStoreFromFile (
- _In_ PUNICODE_STRING FileName,
- _In_ PHANDLE BcdHandle
- )
-{
- ULONG Length;
- PBL_FILE_PATH_DESCRIPTOR FilePath;
- NTSTATUS Status;
- HANDLE LocalHandle;
-
- /* Assume failure */
- LocalHandle = NULL;
-
- /* Allocate a path descriptor */
- Length = FileName->Length + sizeof(*FilePath);
- FilePath = BlMmAllocateHeap(Length);
- if (!FilePath)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Initialize it */
- FilePath->Version = 1;
- FilePath->PathType = InternalPath;
- FilePath->Length = Length;
-
- /* Copy the name and NULL-terminate it */
- RtlCopyMemory(FilePath->Path, FileName->Buffer, Length);
- FilePath->Path[Length / sizeof(WCHAR)] = UNICODE_NULL;
-
- /* Open the BCD */
- Status = BiAddStoreFromFile(FilePath, &LocalHandle);
- if (NT_SUCCESS(Status))
- {
- /* Return the handle on success */
- *BcdHandle = LocalHandle;
- }
-
- /* Free the descriptor and return the status */
- BlMmFreeHeap(FilePath);
- return Status;
-}
-
diff --git a/boot/environ/lib/misc/bcdopt.c b/boot/environ/lib/misc/bcdopt.c
deleted file mode 100644
index 1b1600182ce..00000000000
--- a/boot/environ/lib/misc/bcdopt.c
+++ /dev/null
@@ -1,872 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/misc/bcdopt.c
- * PURPOSE: Boot Library BCD Option Parsing Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-#include
-
-/* FUNCTIONS *****************************************************************/
-
-PBL_BCD_OPTION
-MiscGetBootOption (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type
- )
-{
- ULONG_PTR NextOption = 0, ListOption;
- PBL_BCD_OPTION Option, FoundOption;
-
- /* No options, bail out */
- if (!List)
- {
- return NULL;
- }
-
- /* Loop while we find an option */
- FoundOption = NULL;
- do
- {
- /* Get the next option and see if it matches the type */
- Option = (PBL_BCD_OPTION)((ULONG_PTR)List + NextOption);
- if ((Option->Type == Type) && !(Option->Empty))
- {
- FoundOption = Option;
- break;
- }
-
- /* Store the offset of the next option */
- NextOption = Option->NextEntryOffset;
-
- /* Failed to match. Check for list options */
- ListOption = Option->ListOffset;
- if (ListOption)
- {
- /* Try to get a match in the associated option */
- Option = MiscGetBootOption((PBL_BCD_OPTION)((ULONG_PTR)Option +
- ListOption),
- Type);
- if (Option)
- {
- /* Return it */
- FoundOption = Option;
- break;
- }
- }
- } while (NextOption);
-
- /* Return the option that was found, if any */
- return FoundOption;
-}
-
-/*++
- * @name BlGetBootOptionListSize
- *
- * The BlGetBootOptionListSize routine
- *
- * @param BcdOption
- * UEFI Image Handle for the current loaded application.
- *
- * @return Size of the BCD option
- *
- *--*/
-ULONG
-BlGetBootOptionListSize (
- _In_ PBL_BCD_OPTION BcdOption
- )
-{
- ULONG Size = 0, NextOffset = 0;
- PBL_BCD_OPTION NextOption;
-
- /* Loop all the options*/
- do
- {
- /* Move to the next one */
- NextOption = (PBL_BCD_OPTION)((ULONG_PTR)BcdOption + NextOffset);
-
- /* Compute the size of the next one */
- Size += BlGetBootOptionSize(NextOption);
-
- /* Update the offset */
- NextOffset = NextOption->NextEntryOffset;
- } while (NextOffset);
-
- /* Return final computed size */
- return Size;
-}
-
-/*++
- * @name BlGetBootOptionSize
- *
- * The BlGetBootOptionSize routine
- *
- * @param BcdOption
- * UEFI Image Handle for the current loaded application.
- *
- * @return Size of the BCD option
- *
- *--*/
-ULONG
-BlGetBootOptionSize (
- _In_ PBL_BCD_OPTION BcdOption
- )
-{
- ULONG Size, Offset;
-
- /* Check if there's any data */
- if (BcdOption->DataOffset)
- {
- /* Add the size of the data */
- Size = BcdOption->DataOffset + BcdOption->DataSize;
- }
- else
- {
- /* No data, just the structure itself */
- Size = sizeof(*BcdOption);
- }
-
- /* Any associated options? */
- Offset = BcdOption->ListOffset;
- if (Offset)
- {
- /* Go get those too */
- Size += BlGetBootOptionListSize((PVOID)((ULONG_PTR)BcdOption + Offset));
- }
-
- /* Return the final size */
- return Size;
-}
-
-NTSTATUS
-BlGetBootOptionString (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PWCHAR* Value
- )
-{
- NTSTATUS Status;
- PBL_BCD_OPTION Option;
- PWCHAR String, StringCopy;
- ULONG StringLength;
- BcdElementType ElementType;
- //PGUID AppIdentifier;
-
- /* Make sure this is a BCD_STRING */
- ElementType.PackedValue = Type;
- if (ElementType.Format != BCD_TYPE_STRING)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Return the data */
- Option = MiscGetBootOption(List, Type);
- if (Option)
- {
- /* Extract the string */
- String = (PWCHAR)((ULONG_PTR)Option + Option->DataOffset);
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* No string is present */
- String = NULL;
- Status = STATUS_NOT_FOUND;
- }
-
- /* Compute the data size */
- StringLength = Option->DataSize / sizeof(WCHAR);
-
-#ifdef _SECURE_BOOT_
- /* Filter out SecureBoot Options */
- AppIdentifier = BlGetApplicationIdentifier();
- Status = BlpBootOptionCallbackString(AppIdentifier, Type, String, StringLength, &String, &StringLength);
-#else
-#endif
-
- /* Make sure we have a valid, non-filtered string */
- if (NT_SUCCESS(Status))
- {
- /* Check if we have space for one more character */
- Status = RtlULongAdd(StringLength, 1, &StringLength);
- if (NT_SUCCESS(Status))
- {
- /* Check if it's safe to multiply by two */
- Status = RtlULongMult(StringLength, sizeof(WCHAR), &StringLength);
- if (NT_SUCCESS(Status))
- {
- /* Allocate a copy for the string */
- StringCopy = BlMmAllocateHeap(StringLength);
- if (StringCopy)
- {
- /* NULL-terminate it */
- RtlCopyMemory(StringCopy,
- String,
- StringLength - sizeof(UNICODE_NULL));
- StringCopy[StringLength] = UNICODE_NULL;
- *Value = StringCopy;
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* No memory, fail */
- Status = STATUS_NO_MEMORY;
- }
- }
- }
- }
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-BlGetBootOptionGuid (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PGUID Value
- )
-{
- NTSTATUS Status;
- PBL_BCD_OPTION Option;
- PGUID Guid;
- BcdElementType ElementType;
-
- /* Make sure this is a BCD_TYPE_OBJECT */
- ElementType.PackedValue = Type;
- if (ElementType.Format != BCD_TYPE_OBJECT)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Return the data */
- Option = MiscGetBootOption(List, Type);
- if (!Option)
- {
- /* Set failure if no data exists */
- Status = STATUS_NOT_FOUND;
- }
- else
- {
- /* Copy the GUID */
- Guid = (PGUID)((ULONG_PTR)Option + Option->DataOffset);
- RtlCopyMemory(Value, Guid, Option->DataSize);
- Status = STATUS_SUCCESS;
- }
-
- /* All good */
- return Status;
-}
-
-NTSTATUS
-BlGetBootOptionGuidList (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PGUID *Value,
- _In_ PULONG Count
- )
-{
- NTSTATUS Status;
- PBL_BCD_OPTION Option;
- PGUID GuidCopy, Guid;
- ULONG GuidCount;
- BcdElementType ElementType;
-
- /* Make sure this is a BCD_TYPE_OBJECT_LIST */
- ElementType.PackedValue = Type;
- if (ElementType.Format != BCD_TYPE_OBJECT_LIST)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Return the data */
- Option = MiscGetBootOption(List, Type);
- if (!Option)
- {
- /* Set failure if no data exists */
- Status = STATUS_NOT_FOUND;
- }
- else
- {
- /* Get the GUIDs and allocate a copy for them */
- Guid = (PGUID)((ULONG_PTR)Option + Option->DataOffset);
- GuidCopy = BlMmAllocateHeap(Option->DataSize);
- if (GuidCopy)
- {
- /* Copy the GUIDs */
- RtlCopyMemory(GuidCopy, Guid, Option->DataSize);
-
- /* Return the number of GUIDs and the start of the array */
- GuidCount = Option->DataSize / sizeof(GUID);
- *Value = GuidCopy;
- *Count = GuidCount;
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* No memory for the copy */
- Status = STATUS_NO_MEMORY;
- }
- }
-
- /* All good */
- return Status;
-}
-
-NTSTATUS
-BlGetBootOptionDevice (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PBL_DEVICE_DESCRIPTOR* Value,
- _In_opt_ PBL_BCD_OPTION* ExtraOptions
- )
-{
- NTSTATUS Status;
- PBL_BCD_OPTION Option, ListData, ListCopy, SecureListData;
- PBCD_DEVICE_OPTION BcdDevice;
- ULONG DeviceSize, ListOffset, ListSize;
- PBL_DEVICE_DESCRIPTOR DeviceDescriptor, SecureDescriptor;
- //PGUID AppIdentifier;
- BcdElementType ElementType;
-
- /* Make sure this is a BCD_TYPE_DEVICE */
- ElementType.PackedValue = Type;
- if (ElementType.Format != BCD_TYPE_DEVICE)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Return the data */
- Option = MiscGetBootOption(List, Type);
- if (!Option)
- {
- /* Set failure if no data exists */
- Status = STATUS_NOT_FOUND;
- }
- else
- {
- /* Otherwise, read the size of the BCD device encoded */
- BcdDevice = (PBCD_DEVICE_OPTION)((ULONG_PTR)Option + Option->DataOffset);
- DeviceSize = BcdDevice->DeviceDescriptor.Size;
-
- /* Allocate a buffer to copy it into */
- DeviceDescriptor = BlMmAllocateHeap(DeviceSize);
- if (!DeviceDescriptor)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Copy it into that buffer */
- RtlCopyMemory(DeviceDescriptor, &BcdDevice->DeviceDescriptor, DeviceSize);
- Status = STATUS_SUCCESS;
- }
-
- /* Check if extra options were requested */
- if (ExtraOptions)
- {
- /* See where they are */
- ListOffset = Option->ListOffset;
- if (ListOffset)
- {
- /* See how big they are */
- ListData = (PBL_BCD_OPTION)((ULONG_PTR)Option + ListOffset);
- ListSize = BlGetBootOptionListSize(ListData);
-
- /* Allocate a buffer to hold them into */
- ListCopy = BlMmAllocateHeap(ListSize);
- if (!ListCopy)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Copy them in there */
- RtlCopyMemory(ListCopy, ListData, ListSize);
- }
- }
-
-#ifdef _SECURE_BOOT_
- /* Filter out SecureBoot Options */
- AppIdentifier = BlGetApplicationIdentifier();
- if (BlpBootOptionCallbacks)
- {
- DeviceCallback = BlpBootOptionCallbacks->Device;
- if (DeviceCallback)
- {
- Status = DeviceCallback(BlpBootOptionCallbackCookie,
- Status,
- 0,
- AppIdentifier,
- Type,
- &SecureDescriptor,
- PtrOptionData);
- }
- }
-#else
- /* No secure boot, so the secure descriptors are the standard ones */
- SecureDescriptor = DeviceDescriptor;
- SecureListData = ListCopy;
-#endif
-
- /* Check if the data was read correctly */
- if (NT_SUCCESS(Status))
- {
- /* Check if we had a new descriptor after filtering */
- if (SecureDescriptor != DeviceDescriptor)
- {
- /* Yep -- if we had an old one, free it */
- if (DeviceDescriptor)
- {
- BlMmFreeHeap(DeviceDescriptor);
- }
- }
-
- /* Check if we had a new list after filtering */
- if (SecureListData != ListCopy)
- {
- /* Yep -- if we had an old list, free it */
- if (ListCopy)
- {
- BlMmFreeHeap(ListCopy);
- }
- }
-
- /* Finally, check if the caller wanted extra options */
- if (ExtraOptions)
- {
- /* Yep -- so pass the caller our copy */
- *ExtraOptions = ListCopy;
- ListCopy = NULL;
- }
-
- /* Caller always wants data back, so pass them our copy */
- *Value = DeviceDescriptor;
- DeviceDescriptor = NULL;
- }
-
-Quickie:
- /* On the failure path, if these buffers are active, we should free them */
- if (ListCopy)
- {
- BlMmFreeHeap(ListCopy);
- }
- if (DeviceDescriptor)
- {
- BlMmFreeHeap(DeviceDescriptor);
- }
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-BlGetBootOptionInteger (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PULONGLONG Value
- )
-{
- NTSTATUS Status;
- PBL_BCD_OPTION Option;
- //PGUID AppIdentifier;
- BcdElementType ElementType;
-
- /* Make sure this is a BCD_TYPE_INTEGER */
- ElementType.PackedValue = Type;
- if (ElementType.Format != BCD_TYPE_INTEGER)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Return the data */
- Option = MiscGetBootOption(List, Type);
- if (Option)
- {
- *Value = *(PULONGLONG)((ULONG_PTR)Option + Option->DataOffset);
- }
-
-#ifdef _SECURE_BOOT_
- /* Filter out SecureBoot Options */
- AppIdentifier = BlGetApplicationIdentifier();
- Status = BlpBootOptionCallbackULongLong(AppIdentifier, Type, Value);
-#else
- /* Option found */
- Status = Option ? STATUS_SUCCESS : STATUS_NOT_FOUND;
-#endif
- return Status;
-}
-
-NTSTATUS
-BlGetBootOptionBoolean (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PBOOLEAN Value
- )
-{
- NTSTATUS Status;
- PBL_BCD_OPTION Option;
- //PGUID AppIdentifier;
- BcdElementType ElementType;
-
- /* Make sure this is a BCD_TYPE_BOOLEAN */
- ElementType.PackedValue = Type;
- if (ElementType.Format != BCD_TYPE_BOOLEAN)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Return the data */
- Option = MiscGetBootOption(List, Type);
- if (Option)
- {
- *Value = *(PBOOLEAN)((ULONG_PTR)Option + Option->DataOffset);
- }
-
-#ifdef _SECURE_BOOT_
- /* Filter out SecureBoot Options */
- AppIdentifier = BlGetApplicationIdentifier();
- Status = BlpBootOptionCallbackBoolean(AppIdentifier, Type, Value);
-#else
- /* Option found */
- Status = Option ? STATUS_SUCCESS : STATUS_NOT_FOUND;
-#endif
- return Status;
-}
-
-NTSTATUS
-BlpGetBootOptionIntegerList (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type,
- _Out_ PULONGLONG* Value,
- _Out_ PULONGLONG Count,
- _In_ BOOLEAN NoCopy
- )
-{
- PBL_BCD_OPTION Option;
- BcdElementType ElementType;
- PULONGLONG ValueCopy;
-
- /* Make sure this is a BCD_TYPE_INTEGER_LIST */
- ElementType.PackedValue = Type;
- if (ElementType.Format != BCD_TYPE_INTEGER_LIST)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Return the data */
- Option = MiscGetBootOption(List, Type);
- if (!Option)
- {
- return STATUS_NOT_FOUND;
- }
-
- /* Check if a copy should be made of it */
- if (NoCopy)
- {
- /* Nope, return the raw value */
- *Value = (PULONGLONG)((ULONG_PTR)Option + Option->DataOffset);
- }
- else
- {
- /* Allocate a buffer for the copy */
- ValueCopy = BlMmAllocateHeap(Option->DataSize);
- if (!ValueCopy)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Copy the data in */
- RtlCopyMemory(ValueCopy,
- (PVOID)((ULONG_PTR)Option + Option->DataOffset),
- Option->DataSize);
-
- /* Return our copy */
- *Value = ValueCopy;
- }
-
- /* Return count and success */
- *Count = Option->DataSize / sizeof(ULONGLONG);
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlCopyBootOptions (
- _In_ PBL_BCD_OPTION OptionList,
- _Out_ PBL_BCD_OPTION *CopiedOptions
- )
-{
- NTSTATUS Status;
- ULONG OptionSize;
- PBL_BCD_OPTION Options;
-
- /* Assume no options */
- Status = STATUS_SUCCESS;
- *CopiedOptions = NULL;
-
- /* Get the size of the list and allocate a copy for it */
- OptionSize = BlGetBootOptionListSize(OptionList);
- Options = BlMmAllocateHeap(OptionSize);
- if (!Options)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Make the copy and return it to the caller */
- RtlCopyMemory(Options, OptionList, OptionSize);
- *CopiedOptions = Options;
- return Status;
-}
-
-NTSTATUS
-BlAppendBootOptionBoolean (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ ULONG OptionId,
- _In_ BOOLEAN Value
- )
-{
- NTSTATUS Status;
- PBL_BCD_OPTION Option;
-
- /* Allocate space for the entry -- remember BOOLEANs are USHORTs in BCD */
- Option = BlMmAllocateHeap(sizeof(*Option) + sizeof(USHORT));
- if (!Option)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Initialize it and set the boolean to TRUE */
- RtlZeroMemory(Option, sizeof(*Option) + sizeof(USHORT));
- Option->DataSize = sizeof(USHORT);
- Option->Type = OptionId;
- Option->DataOffset = sizeof(*Option);
- *(PBOOLEAN)(Option + 1) = Value;
-
- /* Append it */
- Status = BlAppendBootOptions(AppEntry, Option);
-
- /* We're all done, free our initial option */
- BlMmFreeHeap(Option);
- return Status;
-}
-
-NTSTATUS
-BlAppendBootOptionInteger (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ ULONG OptionId,
- _In_ ULONGLONG Value
- )
-{
- NTSTATUS Status;
- PBL_BCD_OPTION Option;
-
- /* Allocate space for the entry */
- Option = BlMmAllocateHeap(sizeof(*Option) + sizeof(Value));
- if (!Option)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Initialize it and set the integer to the given value */
- RtlZeroMemory(Option, sizeof(*Option) + sizeof(Value));
- Option->DataSize = sizeof(Value);
- Option->Type = OptionId;
- Option->DataOffset = sizeof(*Option);
- *(PULONGLONG)(Option + 1) = Value;
-
- /* Append it */
- Status = BlAppendBootOptions(AppEntry, Option);
-
- /* We're all done, free our initial option */
- BlMmFreeHeap(Option);
- return Status;
-}
-
-NTSTATUS
-BlAppendBootOptionString (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ ULONG OptionId,
- _In_ PWCHAR OptionString
- )
-{
- NTSTATUS Status;
- ULONG StringSize;
- PBL_BCD_OPTION Option;
-
- /* Get the length in bytes */
- Status = RtlULongLongToULong(wcslen(OptionString) * sizeof(WCHAR),
- &StringSize);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Add a NULL-terminator */
- Status = RtlULongAdd(StringSize, sizeof(UNICODE_NULL), &StringSize);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Allocate space for the entry */
- Option = BlMmAllocateHeap(sizeof(*Option) + StringSize);
- if (!Option)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Initialize it and copy the string value */
- RtlZeroMemory(Option, sizeof(*Option) + StringSize);
- Option->DataSize = StringSize;
- Option->Type = OptionId;
- Option->DataOffset = sizeof(*Option);
- wcsncpy((PWCHAR)Option + 1, OptionString, StringSize / sizeof(WCHAR));
-
- /* Append it */
- Status = BlAppendBootOptions(AppEntry, Option);
-
- /* We're all done, free our initial option */
- BlMmFreeHeap(Option);
- return Status;
-}
-
-NTSTATUS
-BlAppendBootOptions (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ PBL_BCD_OPTION Options
- )
-{
- ULONG OptionsSize, CurrentSize;
- PBL_BCD_OPTION NewOptions, CurrentOptions, NextOption;
- NTSTATUS Status;
- ULONG CurrentOffset;
-
- /* Get the current options */
- CurrentOptions = AppEntry->BcdData;
-
- /* Calculate the size of the current, and the appended options */
- CurrentSize = BlGetBootOptionListSize(CurrentOptions);
- OptionsSize = BlGetBootOptionListSize(Options);
-
- /* Allocate a buffer for the concatenated (new) options */
- NewOptions = BlMmAllocateHeap(CurrentSize + OptionsSize);
- if (!NewOptions)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Copy the old options, and the ones to be added */
- RtlCopyMemory(NewOptions, CurrentOptions, CurrentSize);
- RtlCopyMemory((PVOID)((ULONG_PTR)NewOptions + CurrentSize),
- Options,
- OptionsSize);
-
- /* We made it! */
- Status = STATUS_SUCCESS;
-
- /* Scan through to the last option in the list */
- CurrentOffset = 0;
- do
- {
- NextOption = (PBL_BCD_OPTION)((ULONG_PTR)NewOptions + CurrentOffset);
- CurrentOffset = NextOption->NextEntryOffset;
- } while (CurrentOffset);
-
- /* Every other option now has to have its offset adjusted */
- do
- {
- NextOption->NextEntryOffset += CurrentSize;
- NextOption = (PBL_BCD_OPTION)((ULONG_PTR)NewOptions + NextOption->NextEntryOffset);
- } while (NextOption->NextEntryOffset);
-
- /* If we already had internal options, free them */
- if (AppEntry->Flags & BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL)
- {
- BlMmFreeHeap(AppEntry->BcdData);
- }
-
- /* Write the new pointer */
- AppEntry->BcdData = NewOptions;
-
- /* Options are now internal, not external */
- AppEntry->Flags &= ~BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL;
- AppEntry->Flags |= BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL;
- return Status;
-}
-
-VOID
-BlRemoveBootOption (
- _In_ PBL_BCD_OPTION List,
- _In_ ULONG Type
- )
-{
- PBL_BCD_OPTION Option;
-
- /* Keep going until the option is gone */
- while (1)
- {
- /* Get the BCD option */
- Option = MiscGetBootOption(List, Type);
- if (!Option)
- {
- break;
- }
-
- /* Pretend it's empty */
- Option->Empty = TRUE;
- }
-}
-
-NTSTATUS
-BlReplaceBootOptions (
- _In_ PBL_LOADED_APPLICATION_ENTRY AppEntry,
- _In_ PBL_BCD_OPTION OldOptions
- )
-{
- NTSTATUS Status;
- ULONG OptionSize;
- PBL_BCD_OPTION NewOptions;
-
- /* Make sure there's something to replace with */
- if (!OldOptions)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Check if we already had allocated internal options */
- if (AppEntry->Flags & BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL)
- {
- /* Free them */
- BlMmFreeHeap(AppEntry->BcdData);
- }
-
- /* Reset option flags */
- AppEntry->Flags &= ~(BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL |
- BL_APPLICATION_ENTRY_BCD_OPTIONS_EXTERNAL);
-
- /* Reset the options and set success for now */
- Status = STATUS_SUCCESS;
- AppEntry->BcdData = NULL;
-
- /* Get the size of the new list of options */
- OptionSize = BlGetBootOptionListSize(OldOptions);
-
- /* Allocate a copy of the new list */
- NewOptions = BlMmAllocateHeap(OptionSize);
- if (!NewOptions)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Copy it in */
- RtlCopyMemory(NewOptions, OldOptions, OptionSize);
-
- /* Set it as the new set of options and return */
- AppEntry->Flags |= BL_APPLICATION_ENTRY_BCD_OPTIONS_INTERNAL;
- AppEntry->BcdData = NewOptions;
- return Status;
-}
-
diff --git a/boot/environ/lib/misc/bootreg.c b/boot/environ/lib/misc/bootreg.c
deleted file mode 100644
index fa709678e11..00000000000
--- a/boot/environ/lib/misc/bootreg.c
+++ /dev/null
@@ -1,953 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/misc/bootreg.c
- * PURPOSE: Boot Library Boot Registry Wrapper for CMLIB
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-#include
-
-/* DEFINITIONS ***************************************************************/
-
-#define BI_FLUSH_HIVE 0x01
-#define BI_HIVE_WRITEABLE 0x02
-
-/* DATA STRUCTURES ***********************************************************/
-
-typedef struct _BI_KEY_HIVE
-{
- PHBASE_BLOCK BaseBlock;
- ULONG HiveSize;
- PBL_FILE_PATH_DESCRIPTOR FilePath;
- CMHIVE Hive;
- LONG ReferenceCount;
- ULONG Flags;
- PCM_KEY_NODE RootNode;
-} BI_KEY_HIVE, *PBI_KEY_HIVE;
-
-typedef struct _BI_KEY_OBJECT
-{
- PBI_KEY_HIVE KeyHive;
- PCM_KEY_NODE KeyNode;
- HCELL_INDEX KeyCell;
- PWCHAR KeyName;
-} BI_KEY_OBJECT, *PBI_KEY_OBJECT;
-
-/* GLOBALS *******************************************************************/
-
-BOOLEAN BiHiveHashLibraryInitialized;
-ULONGLONG HvSymcryptSeed;
-
-/* FUNCTIONS *****************************************************************/
-
-BOOLEAN
-HvIsInPlaceBaseBlockValid (
- _In_ PHBASE_BLOCK BaseBlock
- )
-{
- ULONG HiveLength, HeaderSum;
- BOOLEAN Valid;
-
- /* Assume failure */
- Valid = FALSE;
-
- /* Check for incorrect signature, type, version, or format */
- if ((BaseBlock->Signature == 'fger') &&
- (BaseBlock->Type == 0) &&
- (BaseBlock->Major <= 1) &&
- (BaseBlock->Minor <= 5) &&
- (BaseBlock->Minor >= 3) &&
- (BaseBlock->Format == 1))
- {
- /* Check for invalid hive size */
- HiveLength = BaseBlock->Length;
- if (HiveLength)
- {
- /* Check for misaligned or too large hive size */
- if (!(HiveLength & 0xFFF) && HiveLength <= 0x7FFFE000)
- {
- /* Check for invalid header checksum */
- HeaderSum = HvpHiveHeaderChecksum(BaseBlock);
- if (HeaderSum == BaseBlock->CheckSum)
- {
- /* All good */
- Valid = TRUE;
- }
- }
- }
- }
-
- /* Return validity */
- return Valid;
-}
-
-PVOID
-NTAPI
-CmpAllocate (
- _In_ SIZE_T Size,
- _In_ BOOLEAN Paged,
- _In_ ULONG Tag
- )
-{
- UNREFERENCED_PARAMETER(Paged);
- UNREFERENCED_PARAMETER(Tag);
-
- /* Call the heap allocator */
- return BlMmAllocateHeap(Size);
-}
-
-VOID
-NTAPI
-CmpFree (
- _In_ PVOID Ptr,
- _In_ ULONG Quota
- )
-{
- UNREFERENCED_PARAMETER(Quota);
-
- /* Call the heap allocator */
- BlMmFreeHeap(Ptr);
-}
-
-VOID
-BiDereferenceHive (
- _In_ HANDLE KeyHandle
- )
-{
- PBI_KEY_OBJECT KeyObject;
-
- /* Get the key object */
- KeyObject = (PBI_KEY_OBJECT)KeyHandle;
-
- /* Drop a reference on the parent hive */
- --KeyObject->KeyHive->ReferenceCount;
-}
-
-VOID
-BiFlushHive (
- _In_ HANDLE KeyHandle
- )
-{
- /* Not yet implemented */
- EfiPrintf(L"NO reg flush\r\n");
- return;
-}
-
-VOID
-BiCloseKey (
- _In_ HANDLE KeyHandle
- )
-{
- PBI_KEY_HIVE KeyHive;
- PBI_KEY_OBJECT KeyObject;
-
- /* Get the key object and hive */
- KeyObject = (PBI_KEY_OBJECT)KeyHandle;
- KeyHive = KeyObject->KeyHive;
-
- /* Check if we have a hive, or name, or key node */
- if ((KeyHive) || (KeyObject->KeyNode) || (KeyObject->KeyName))
- {
- /* Drop a reference, see if it's the last one */
- BiDereferenceHive(KeyHandle);
- if (!KeyHive->ReferenceCount)
- {
- /* Check if we should flush it */
- if (KeyHive->Flags & BI_FLUSH_HIVE)
- {
- BiFlushHive(KeyHandle);
- }
-
- /* Unmap the hive */
- MmPapFreePages(KeyHive->BaseBlock, BL_MM_INCLUDE_MAPPED_ALLOCATED);
-
- /* Free the hive and hive path */
- BlMmFreeHeap(KeyHive->FilePath);
- BlMmFreeHeap(KeyHive);
- }
-
- /* Check if a key name is present */
- if (KeyObject->KeyName)
- {
- /* Free it */
- BlMmFreeHeap(KeyObject->KeyName);
- }
- }
-
- /* Free the object */
- BlMmFreeHeap(KeyObject);
-}
-
-NTSTATUS
-BiOpenKey(
- _In_ HANDLE ParentHandle,
- _In_ PWCHAR KeyName,
- _Out_ PHANDLE Handle
- )
-{
- PBI_KEY_OBJECT ParentKey, NewKey;
- PBI_KEY_HIVE ParentHive;
- NTSTATUS Status;
- SIZE_T NameLength, SubNameLength, NameBytes;
- PWCHAR NameStart, NameBuffer;
- UNICODE_STRING KeyString;
- HCELL_INDEX KeyCell;
- PHHIVE Hive;
- PCM_KEY_NODE ParentNode;
-
- /* Convert from a handle to our key object */
- ParentKey = (PBI_KEY_OBJECT)ParentHandle;
-
- /* Extract the hive and node information */
- ParentHive = ParentKey->KeyHive;
- ParentNode = ParentKey->KeyNode;
- Hive = &ParentKey->KeyHive->Hive.Hive;
-
- /* Initialize variables */
- KeyCell = HCELL_NIL;
- Status = STATUS_SUCCESS;
- NameBuffer = NULL;
-
- /* Loop as long as there's still portions of the key name in play */
- NameLength = wcslen(KeyName);
- while (NameLength)
- {
- /* Find the first path separator */
- NameStart = wcschr(KeyName, OBJ_NAME_PATH_SEPARATOR);
- if (NameStart)
- {
- /* Look only at the key before the separator */
- SubNameLength = NameStart - KeyName;
- ++NameStart;
- }
- else
- {
- /* No path separator, this is the final leaf key */
- SubNameLength = NameLength;
- }
-
- /* Free the name buffer from the previous pass if needed */
- if (NameBuffer)
- {
- BlMmFreeHeap(NameBuffer);
- }
-
- /* Allocate a buffer to hold the name of this specific subkey only */
- NameBytes = SubNameLength * sizeof(WCHAR);
- NameBuffer = BlMmAllocateHeap(NameBytes + sizeof(UNICODE_NULL));
- if (!NameBuffer)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Copy and null-terminate the name of the subkey */
- RtlCopyMemory(NameBuffer, KeyName, NameBytes);
- NameBuffer[SubNameLength] = UNICODE_NULL;
-
- /* Convert it into a UNICODE_STRING and try to find it */
- RtlInitUnicodeString(&KeyString, NameBuffer);
- KeyCell = CmpFindSubKeyByName(Hive, ParentNode, &KeyString);
- if (KeyCell == HCELL_NIL)
- {
- Status = STATUS_OBJECT_NAME_NOT_FOUND;
- goto Quickie;
- }
-
- /* We found it -- get the key node out of it */
- ParentNode = (PCM_KEY_NODE)HvGetCell(Hive, KeyCell);
- if (!ParentNode)
- {
- Status = STATUS_REGISTRY_CORRUPT;
- goto Quickie;
- }
-
- /* Update the key name to the next remaining path element */
- KeyName = NameStart;
- if (NameStart)
- {
- /* Update the length to the remainder of the path */
- NameLength += -1 - SubNameLength;
- }
- else
- {
- /* There's nothing left, this was the leaf key */
- NameLength = 0;
- }
- }
-
- /* Allocate a key object */
- NewKey = BlMmAllocateHeap(sizeof(*NewKey));
- if (!NewKey)
- {
- /* Bail out if we had no memory for it */
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Fill out the key object data */
- NewKey->KeyNode = ParentNode;
- NewKey->KeyHive = ParentHive;
- NewKey->KeyName = NameBuffer;
- NewKey->KeyCell = KeyCell;
-
- /* Add a reference to the hive */
- ++ParentHive->ReferenceCount;
-
- /* Return the object back to the caller */
- *Handle = NewKey;
-
-Quickie:
- /* If we had a name buffer, free it */
- if (NameBuffer)
- {
- BlMmFreeHeap(NameBuffer);
- }
-
- /* Return status of the open operation */
- return Status;
-}
-
-NTSTATUS
-BiInitializeAndValidateHive (
- _In_ PBI_KEY_HIVE Hive
- )
-{
- ULONG HiveSize;
- CM_CHECK_REGISTRY_STATUS CmStatusCode;
- NTSTATUS Status;
-
- /* Make sure the hive is at least the size of a base block */
- if (Hive->HiveSize < sizeof(HBASE_BLOCK))
- {
- return STATUS_REGISTRY_CORRUPT;
- }
-
- /* Make sure that the base block accurately describes the size of the hive */
- HiveSize = Hive->BaseBlock->Length + sizeof(HBASE_BLOCK);
- if ((HiveSize < sizeof(HBASE_BLOCK)) || (HiveSize > Hive->HiveSize))
- {
- return STATUS_REGISTRY_CORRUPT;
- }
-
- /* Initialize a flat memory hive */
- RtlZeroMemory(&Hive->Hive, sizeof(Hive->Hive));
- Status = HvInitialize(&Hive->Hive.Hive,
- HINIT_FLAT,
- 0,
- 0,
- Hive->BaseBlock,
- CmpAllocate,
- CmpFree,
- NULL,
- NULL,
- NULL,
- NULL,
- 0,
- NULL);
- if (NT_SUCCESS(Status))
- {
- /* Cleanup volatile/old data */
- CmStatusCode = CmCheckRegistry(Hive->Hive, CM_CHECK_REGISTRY_BOOTLOADER_PURGE_VOLATILES | CM_CHECK_REGISTRY_VALIDATE_HIVE);
- if (!CM_CHECK_REGISTRY_SUCCESS(CmStatusCode))
- {
- return STATUS_REGISTRY_CORRUPT;
- }
-
- Status = STATUS_SUCCESS;
- }
-
- /* Return the final status */
- return Status;
-}
-
-NTSTATUS
-BiLoadHive (
- _In_ PBL_FILE_PATH_DESCRIPTOR FilePath,
- _Out_ PHANDLE HiveHandle
- )
-{
- ULONG DeviceId;
- PHBASE_BLOCK BaseBlock, NewBaseBlock;
- PBI_KEY_OBJECT KeyObject;
- PBI_KEY_HIVE BcdHive;
- PBL_DEVICE_DESCRIPTOR BcdDevice;
- ULONG PathLength, DeviceLength, HiveSize, HiveLength, NewHiveSize;
- PWCHAR HiveName, LogName;
- BOOLEAN HaveWriteAccess;
- NTSTATUS Status;
- PVOID LogData;
- PHHIVE Hive;
- UNICODE_STRING KeyString;
- PCM_KEY_NODE RootNode;
- HCELL_INDEX CellIndex;
-
- /* Initialize variables */
- DeviceId = -1;
- BaseBlock = NULL;
- BcdHive = NULL;
- KeyObject = NULL;
- LogData = NULL;
- LogName = NULL;
-
- /* Initialize the crypto seed */
- if (!BiHiveHashLibraryInitialized)
- {
- HvSymcryptSeed = 0x82EF4D887A4E55C5;
- BiHiveHashLibraryInitialized = TRUE;
- }
-
- /* Extract and validate the input path */
- BcdDevice = (PBL_DEVICE_DESCRIPTOR)&FilePath->Path;
- PathLength = FilePath->Length;
- DeviceLength = BcdDevice->Size;
- HiveName = (PWCHAR)((ULONG_PTR)BcdDevice + BcdDevice->Size);
- if (PathLength <= DeviceLength)
- {
- /* Doesn't make sense, bail out */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Attempt to open the underlying device for RW access */
- HaveWriteAccess = TRUE;
- Status = BlpDeviceOpen(BcdDevice,
- BL_DEVICE_READ_ACCESS | BL_DEVICE_WRITE_ACCESS,
- 0,
- &DeviceId);
- if (!NT_SUCCESS(Status))
- {
- /* Try for RO access instead */
- HaveWriteAccess = FALSE;
- Status = BlpDeviceOpen(BcdDevice, BL_DEVICE_READ_ACCESS, 0, &DeviceId);
- if (!NT_SUCCESS(Status))
- {
- /* No access at all -- bail out */
- goto Quickie;
- }
- }
-
- /* Now try to load the hive on disk */
- Status = BlImgLoadImageWithProgress2(DeviceId,
- BlLoaderRegistry,
- HiveName,
- (PVOID*)&BaseBlock,
- &HiveSize,
- 0,
- FALSE,
- NULL,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Hive read failure: % lx\r\n", Status);
- goto Quickie;
- }
-
- /* Allocate a hive structure */
- BcdHive = BlMmAllocateHeap(sizeof(*BcdHive));
- if (!BcdHive)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Initialize it */
- RtlZeroMemory(BcdHive, sizeof(*BcdHive));
- BcdHive->BaseBlock = BaseBlock;
- BcdHive->HiveSize = HiveSize;
- if (HaveWriteAccess)
- {
- BcdHive->Flags |= BI_HIVE_WRITEABLE;
- }
-
- /* Make sure the hive was at least one bin long */
- if (HiveSize < sizeof(*BaseBlock))
- {
- Status = STATUS_REGISTRY_CORRUPT;
- goto Quickie;
- }
-
- /* Make sure the hive contents are at least one bin long */
- HiveLength = BaseBlock->Length;
- if (BaseBlock->Length < sizeof(*BaseBlock))
- {
- Status = STATUS_REGISTRY_CORRUPT;
- goto Quickie;
- }
-
- /* Validate the initial bin (the base block) */
- if (!HvIsInPlaceBaseBlockValid(BaseBlock))
- {
- EfiPrintf(L"Recovery not implemented\r\n");
- Status = STATUS_REGISTRY_CORRUPT;
- goto Quickie;
- }
-
- /* Check if there's log recovery that needs to happen */
- if (BaseBlock->Sequence1 != BaseBlock->Sequence2)
- {
- EfiPrintf(L"Log fix not implemented: %lx %lx\r\n");
- Status = STATUS_REGISTRY_CORRUPT;
- goto Quickie;
- }
-
- /*
- * Check if the whole hive doesn't fit in the buffer.
- * Note: HiveLength does not include the size of the baseblock itself
- */
- if (HiveSize < (HiveLength + sizeof(*BaseBlock)))
- {
- EfiPrintf(L"Need bigger hive buffer path\r\n");
-
- /* Allocate a slightly bigger buffer */
- NewHiveSize = HiveLength + sizeof(*BaseBlock);
- Status = MmPapAllocatePagesInRange((PVOID*)&NewBaseBlock,
- BlLoaderRegistry,
- NewHiveSize >> PAGE_SHIFT,
- 0,
- 0,
- NULL,
- 0);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Copy the current data in there */
- RtlCopyMemory(NewBaseBlock, BaseBlock, HiveSize);
-
- /* Free the old data */
- MmPapFreePages(BaseBlock, BL_MM_INCLUDE_MAPPED_ALLOCATED);
-
- /* Update our pointers */
- BaseBlock = NewBaseBlock;
- HiveSize = NewHiveSize;
- BcdHive->BaseBlock = BaseBlock;
- BcdHive->HiveSize = HiveSize;
- }
-
- /* Check if any log stuff needs to happen */
- if (LogData)
- {
- EfiPrintf(L"Log fix not implemented: %lx %lx\r\n");
- Status = STATUS_REGISTRY_CORRUPT;
- goto Quickie;
- }
-
- /* Call Hv to setup the hive library */
- Status = BiInitializeAndValidateHive(BcdHive);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Now get the root node */
- Hive = &BcdHive->Hive.Hive;
- RootNode = (PCM_KEY_NODE)HvGetCell(Hive, Hive->BaseBlock->RootCell);
- if (!RootNode)
- {
- Status = STATUS_OBJECT_NAME_NOT_FOUND;
- goto Quickie;
- }
-
- /* Find the Objects subkey under it to see if it's a real BCD hive */
- RtlInitUnicodeString(&KeyString, L"Objects");
- CellIndex = CmpFindSubKeyByName(Hive, RootNode, &KeyString);
- if (CellIndex == HCELL_NIL)
- {
- EfiPrintf(L"No OBJECTS subkey found!\r\n");
- Status = STATUS_OBJECT_NAME_NOT_FOUND;
- goto Quickie;
- }
-
- /* This is a valid BCD hive, store its root node here */
- BcdHive->RootNode = RootNode;
-
- /* Allocate a copy of the file path */
- BcdHive->FilePath = BlMmAllocateHeap(FilePath->Length);
- if (!BcdHive->FilePath)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Make a copy of it */
- RtlCopyMemory(BcdHive->FilePath, FilePath, FilePath->Length);
-
- /* Create a key object to describe the rot */
- KeyObject = BlMmAllocateHeap(sizeof(*KeyObject));
- if (!KeyObject)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Fill out the details */
- KeyObject->KeyNode = RootNode;
- KeyObject->KeyHive = BcdHive;
- KeyObject->KeyName = NULL;
- KeyObject->KeyCell = Hive->BaseBlock->RootCell;
-
- /* One reference for the key object, plus one lifetime reference */
- BcdHive->ReferenceCount = 2;
-
- /* This is the hive handle */
- *HiveHandle = KeyObject;
-
- /* We're all good */
- Status = STATUS_SUCCESS;
-
-Quickie:
- /* If we had a log name, free it */
- if (LogName)
- {
- BlMmFreeHeap(LogName);
- }
-
- /* If we had logging data, free it */
- if (LogData)
- {
- MmPapFreePages(LogData, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
-
- /* Check if this is the failure path */
- if (!NT_SUCCESS(Status))
- {
- /* If we mapped the hive, free it */
- if (BaseBlock)
- {
- MmPapFreePages(BaseBlock, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
-
- /* If we opened the device, close it */
- if (DeviceId != -1)
- {
- BlDeviceClose(DeviceId);
- }
-
- /* Did we create a hive object? */
- if (BcdHive)
- {
- /* Free the file path if we made a copy of it */
- if (BcdHive->FilePath)
- {
- BlMmFreeHeap(BcdHive->FilePath);
- }
-
- /* Free the hive itself */
- BlMmFreeHeap(BcdHive);
- }
-
- /* Finally, free the root key object if we created one */
- if (KeyObject)
- {
- BlMmFreeHeap(KeyObject);
- }
- }
-
- /* Return the final status */
- return Status;
-}
-
-NTSTATUS
-BiGetRegistryValue (
- _In_ HANDLE KeyHandle,
- _In_ PWCHAR ValueName,
- _In_ ULONG Type,
- _Out_ PVOID* Buffer,
- _Out_ PULONG ValueLength
- )
-{
- PCM_KEY_NODE KeyNode;
- PHHIVE KeyHive;
- UNICODE_STRING ValueString;
- PBI_KEY_OBJECT KeyObject;
- PCM_KEY_VALUE KeyValue;
- PVOID ValueCopy;
- ULONG Size;
- HCELL_INDEX CellIndex;
- PCELL_DATA ValueData;
-
- /* Get the key object, node,and hive */
- KeyObject = (PBI_KEY_OBJECT)KeyHandle;
- KeyNode = KeyObject->KeyNode;
- KeyHive = &KeyObject->KeyHive->Hive.Hive;
-
- /* Find the value cell index in the list of values */
- RtlInitUnicodeString(&ValueString, ValueName);
- CmpFindNameInList(KeyHive,
- &KeyNode->ValueList,
- &ValueString,
- NULL,
- &CellIndex);
- if (CellIndex == HCELL_NIL)
- {
- return STATUS_OBJECT_NAME_NOT_FOUND;
- }
-
- /* Get the cell data for it */
- KeyValue = (PCM_KEY_VALUE)HvGetCell(KeyHive, CellIndex);
- if (!KeyValue)
- {
- return STATUS_REGISTRY_CORRUPT;
- }
-
- /* Make sure the type matches */
- if (KeyValue->Type != Type)
- {
- return STATUS_OBJECT_TYPE_MISMATCH;
- }
-
- /* Now get the data cell */
- ValueData = CmpValueToData(KeyHive, KeyValue, &Size);
-
- /* Make a copy of it */
- ValueCopy = BlMmAllocateHeap(Size);
- if (!ValueCopy)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Copy it in the buffer, and return it and its size */
- RtlCopyMemory(ValueCopy, ValueData, Size);
- *Buffer = ValueCopy;
- *ValueLength = Size;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BiEnumerateSubKeys (
- _In_ HANDLE KeyHandle,
- _Out_ PWCHAR** SubKeyList,
- _Out_ PULONG SubKeyCount
- )
-{
- PCM_KEY_NODE KeyNode, Node;
- PBI_KEY_OBJECT KeyObject;
- ULONG KeyCount;
- ULONG NameLength, NewTotalNameLength, FinalLength, TotalNameLength;
- PHHIVE Hive;
- PWCHAR KeyName, NameEnd;
- HCELL_INDEX CellIndex;
- PWCHAR* SubKeys;
- NTSTATUS Status;
- ULONG i;
-
- /* Get the key object, node, and hive */
- KeyObject = (PBI_KEY_OBJECT)KeyHandle;
- KeyNode = KeyObject->KeyNode;
- Hive = &KeyObject->KeyHive->Hive.Hive;
-
- /* Assume it's empty */
- *SubKeyList = 0;
- *SubKeyCount = 0;
-
- /* Initialize locals */
- KeyCount = 0;
- SubKeys = 0;
- TotalNameLength = 0;
-
- /* Find the first subkey cell index */
- CellIndex = CmpFindSubKeyByNumber(Hive, KeyNode, KeyCount);
- while (CellIndex != HCELL_NIL)
- {
- /* Move to the next one */
- KeyCount++;
-
- /* Get the cell data for it */
- Node = (PCM_KEY_NODE)HvGetCell(Hive, CellIndex);
- if (!Node)
- {
- return STATUS_REGISTRY_CORRUPT;
- }
-
- /* Check if the value is compressed */
- if (Node->Flags & KEY_COMP_NAME)
- {
- /* Get the compressed name size */
- NameLength = CmpCompressedNameSize(Node->Name, Node->NameLength);
- }
- else
- {
- /* Get the real size */
- NameLength = Node->NameLength;
- }
-
- /* Add up the new length, protecting against overflow */
- NewTotalNameLength = TotalNameLength + NameLength + sizeof(UNICODE_NULL);
- if (NewTotalNameLength < TotalNameLength)
- {
- Status = STATUS_NAME_TOO_LONG;
- goto Quickie;
- }
-
- /* We're good, use the new length */
- TotalNameLength = NewTotalNameLength;
-
- /* Find the next subkey cell index */
- CellIndex = CmpFindSubKeyByNumber(Hive, KeyNode, KeyCount);
- }
-
- /* Were there no keys? We're done, if so */
- if (!KeyCount)
- {
- return STATUS_SUCCESS;
- }
-
- /* Safely compute the size of the array needed */
- Status = RtlULongLongToULong(sizeof(PWCHAR) * KeyCount, &FinalLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Safely add that to the name length */
- Status = RtlULongAdd(TotalNameLength, FinalLength, &FinalLength);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Allocate an array big enough for the names and pointers */
- SubKeys = BlMmAllocateHeap(FinalLength);
- if (!SubKeys)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Go over each key again */
- NameEnd = (PWCHAR)&SubKeys[KeyCount];
- for (i = 0; i < KeyCount; i++)
- {
- /* Get the cell index for this subkey */
- CellIndex = CmpFindSubKeyByNumber(Hive, KeyNode, i);
- if (CellIndex == HCELL_NIL)
- {
- break;
- }
-
- /* Get the cell data for it */
- Node = (PCM_KEY_NODE)HvGetCell(Hive, CellIndex);
- if (!Node)
- {
- Status = STATUS_REGISTRY_CORRUPT;
- goto Quickie;
- }
-
- /* Check if the value is compressed */
- KeyName = Node->Name;
- if (Node->Flags & KEY_COMP_NAME)
- {
- /* Get the compressed name size */
- NameLength = CmpCompressedNameSize(KeyName, Node->NameLength);
- CmpCopyCompressedName(NameEnd, NameLength, KeyName, Node->NameLength);
- }
- else
- {
- /* Get the real size */
- NameLength = Node->NameLength;
- RtlCopyMemory(NameEnd, KeyName, NameLength);
- }
-
- /* Move the name buffer to the next spot, and NULL-terminate */
- SubKeys[i] = NameEnd;
- NameEnd += (NameLength / sizeof(WCHAR));
- *NameEnd = UNICODE_NULL;
-
- /* Keep going */
- NameEnd++;
- }
-
- /* Check if the subkeys were empty */
- if (i == 0)
- {
- /* They disappeared in the middle of enumeration */
- Status = STATUS_OBJECT_NAME_NOT_FOUND;
- goto Quickie;
- }
-
- /* Return the count and the array of names */
- *SubKeyList = SubKeys;
- *SubKeyCount = i;
- SubKeys = NULL;
- Status = STATUS_SUCCESS;
-
-Quickie:
- /* On the failure path, free the subkeys if any exist */
- if (SubKeys)
- {
- BlMmFreeHeap(SubKeys);
- }
-
- /* All done, return the result */
- return Status;
-}
-
-NTSTATUS
-BiDeleteKey (
- _In_ HANDLE KeyHandle
- )
-{
- NTSTATUS Status;
- PBI_KEY_OBJECT KeyObject;
- PHHIVE Hive;
- ULONG SubKeyCount, i;
- PWCHAR* SubKeyList;
- HANDLE SubKeyHandle;
-
- /* Get the key object and hive */
- KeyObject = (PBI_KEY_OBJECT)KeyHandle;
- Hive = &KeyObject->KeyHive->Hive.Hive;
-
- /* Make sure the hive is writeable */
- if (!(KeyObject->KeyHive->Flags & BI_HIVE_WRITEABLE))
- {
- return STATUS_MEDIA_WRITE_PROTECTED;
- }
-
- /* Enumerate all of the subkeys */
- Status = BiEnumerateSubKeys(KeyHandle, &SubKeyList, &SubKeyCount);
- if ((NT_SUCCESS(Status)) && (SubKeyCount > 0))
- {
- /* Loop through each one */
- for (i = 0; i < SubKeyCount; i++)
- {
- /* Open a handle to it */
- Status = BiOpenKey(KeyHandle, SubKeyList[i], &SubKeyHandle);
- if (NT_SUCCESS(Status))
- {
- /* Recursively call us to delete it */
- Status = BiDeleteKey(SubKeyHandle);
- if (Status != STATUS_SUCCESS)
- {
- /* Close the key on failure */
- BiCloseKey(SubKeyHandle);
- }
- }
- }
- }
-
- /* Check if we had a list of subkeys */
- if (SubKeyList)
- {
- /* Free it */
- BlMmFreeHeap(SubKeyList);
- }
-
- /* Delete this key cell */
- Status = CmpFreeKeyByCell(Hive, KeyObject->KeyCell, TRUE);
- if (NT_SUCCESS(Status))
- {
- /* Mark the hive as requiring a flush */
- KeyObject->KeyHive->Flags |= BI_FLUSH_HIVE;
- BiCloseKey(KeyHandle);
- }
-
- /* All done */
- return Status;
-}
diff --git a/boot/environ/lib/misc/debug.c b/boot/environ/lib/misc/debug.c
deleted file mode 100644
index 799d90be8dd..00000000000
--- a/boot/environ/lib/misc/debug.c
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/misc/debug.c
- * PURPOSE: Boot Library Debug Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-CHAR AnsiBuffer[1024];
-BOOLEAN BdDebuggerNotPresent;
-BOOLEAN BdSubsystemInitialized;
-BOOLEAN BdArchBlockDebuggerOperation;
-BOOLEAN BlpStatusErrorInProgress;
-PBL_STATUS_ERROR_HANDLER BlpStatusErrorHandler;
-
-/* FUNCTIONS *****************************************************************/
-
-BOOLEAN
-BdDebuggerInitialized (
- VOID
- )
-{
- /* Check if BD was initialized, and is currently usable */
- return BdSubsystemInitialized && !BdArchBlockDebuggerOperation;
-}
-
-NTSTATUS
-BlBdPullRemoteFile (
- _In_ PWCHAR FilePath,
- _Out_ PVOID BaseAddress,
- _Out_ PULONGLONG FileSize
- )
-{
- /* Is the boot debugger enabled? */
- if (!BlBdDebuggerEnabled())
- {
- /* Nothing to pull */
- return STATUS_DEBUGGER_INACTIVE;
- }
-
- /* TODO */
- EfiPrintf(L"Todo\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-BOOLEAN
-BlBdDebuggerEnabled (
- VOID
- )
-{
- BOOLEAN Initialized, Enabled;
-
- /* Check if the debugger is initialized */
- Initialized = BdDebuggerInitialized();
-
- /* Check if it's currently active */
- Enabled = FALSE;
- if ((Initialized) && !(BdDebuggerNotPresent))
- {
- /* Yep! */
- Enabled = TRUE;
- }
-
- /* Return enabled state */
- return Enabled;
-}
-
-VOID
-BlStatusPrint (
- _In_ PCWCH Format,
- ...
- )
-{
- ANSI_STRING AnsiString;
- UNICODE_STRING UnicodeString;
- va_list va;
- NTSTATUS Status;
-
- va_start(va, Format);
-
- /* Check if the boot debugger is enabled */
- if (BlBdDebuggerEnabled()
-#if DBG
- || TRUE
-#endif
- )
- {
- /* Print the string out into a buffer */
- if (vswprintf(BlScratchBuffer, Format, va) > 0)
- {
-#if DBG
- EfiPrintf(BlScratchBuffer);
- EfiPrintf(L"\r\n");
-#endif
- /* Make it a UNICODE_STRING */
- RtlInitUnicodeString(&UnicodeString, BlScratchBuffer);
-
- /* Then convert it into an ANSI_STRING */
- AnsiString.Length = 0;
- AnsiString.MaximumLength = sizeof(AnsiBuffer);
- AnsiString.Buffer = AnsiBuffer;
- Status = RtlUnicodeStringToAnsiString(&AnsiString, &UnicodeString, FALSE);
- if (NT_SUCCESS(Status))
- {
- /* Print it out to the debugger if that worked */
- DbgPrint(AnsiString.Buffer);
- }
- }
- }
-
- va_end(va);
-}
-
-VOID
-BlStatusError (
- _In_ ULONG ErrorCode,
- _In_ ULONG Parameter1,
- _In_ ULONG_PTR Parameter2,
- _In_ ULONG_PTR Parameter3,
- _In_ ULONG_PTR Parameter4
- )
-{
- NTSTATUS Status;
-
- /* Is this a non-boot error? */
- if (ErrorCode != 1)
- {
- /* Is one already ongoing? */
- if (!BlpStatusErrorInProgress)
- {
- /* Do we have a custom error handler registered? */
- if (BlpStatusErrorHandler)
- {
- /* Call it, making sure to avoid recursion */
- BlpStatusErrorInProgress = TRUE;
- Status = BlpStatusErrorHandler(ErrorCode,
- Parameter1,
- Parameter2,
- Parameter3,
- Parameter4);
- BlpStatusErrorInProgress = FALSE;
-
- /* If the error handler consumed the error, we're done */
- if (NT_SUCCESS(Status))
- {
- return;
- }
- }
- }
- }
-
- /* Check if the boot debugger is enabled */
- if (BlBdDebuggerEnabled())
- {
- /* Print out the fatal error */
- BlStatusPrint(L"\n"
- L"*** Fatal Error 0x%08x :\n"
- L" (0x%p, 0x%p, 0x%p, 0x%p)\n"
- L"\n",
- ErrorCode,
- Parameter1,
- Parameter2,
- Parameter3,
- Parameter4);
-
- /* Issue a breakpoint */
- __debugbreak();
- }
-}
-
diff --git a/boot/environ/lib/misc/font.c b/boot/environ/lib/misc/font.c
deleted file mode 100644
index 4af6cc52974..00000000000
--- a/boot/environ/lib/misc/font.c
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/misc/font.c
- * PURPOSE: Boot Library Font Functions
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-LIST_ENTRY BfiDeferredListHead;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-BfiLoadFontFile (
- _In_ PBL_DEVICE_DESCRIPTOR FontDevice,
- _In_ PWCHAR FontPath
- )
-{
- EfiPrintf(L"Cannot load font %s, no font loader exists\r\n", FontPath);
- return STATUS_NOT_IMPLEMENTED;
-}
-
-VOID
-BfiFreeDeferredFontFile (
- _In_ PBL_DEFERRED_FONT_FILE DeferredFontFile
- )
-{
- /* Free the device copy if there was one */
- if (DeferredFontFile->Device)
- {
- BlMmFreeHeap(DeferredFontFile->Device);
- }
-
- /* Free the path copy if there was one */
- if (DeferredFontFile->FontPath)
- {
- BlMmFreeHeap(DeferredFontFile->FontPath);
- }
-
- /* Free the whole thing */
- BlMmFreeHeap(DeferredFontFile);
-}
-
-NTSTATUS
-BfLoadFontFile (
- _In_ PBL_DEVICE_DESCRIPTOR Device,
- _In_ PWCHAR FontPath
- )
-{
- PBL_DEFERRED_FONT_FILE DeferredFont;
- SIZE_T FontPathSize;
-
- /* Allocate the deferred font structure */
- DeferredFont = (PBL_DEFERRED_FONT_FILE)BlMmAllocateHeap(sizeof(*DeferredFont));
- if (!DeferredFont)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Zero it out */
- RtlZeroMemory(DeferredFont, sizeof(*DeferredFont));
-
- /* Allocate a copy for the file path */
- FontPathSize = sizeof(WCHAR) * wcslen(FontPath) + sizeof(UNICODE_NULL);
- DeferredFont->FontPath = (PWCHAR)BlMmAllocateHeap(FontPathSize);
- if (!DeferredFont->FontPath)
- {
- BfiFreeDeferredFontFile(DeferredFont);
- return STATUS_NO_MEMORY;
- }
-
- /* Allocate a copy for the device */
- DeferredFont->Device = BlMmAllocateHeap(Device->Size);
- if (!DeferredFont->Device)
- {
- BfiFreeDeferredFontFile(DeferredFont);
- return STATUS_NO_MEMORY;
- }
-
- /* Copy the path and device */
- RtlCopyMemory(DeferredFont->FontPath, FontPath, FontPathSize);
- RtlCopyMemory(DeferredFont->Device,Device, Device->Size);
-
- /* Set pending flag? */
- DeferredFont->Flags = 1;
-
- /* Insert it into the list */
- InsertTailList(&BfiDeferredListHead, &DeferredFont->ListEntry);
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BfLoadDeferredFontFiles (
- VOID
- )
-{
- PLIST_ENTRY NextEntry;
- PBL_DEFERRED_FONT_FILE DeferredFont;
- NTSTATUS Status, LoadStatus;
-
- /* Assume empty list */
- Status = STATUS_SUCCESS;
-
- /* Parse the list */
- NextEntry = BfiDeferredListHead.Flink;
- while (NextEntry != &BfiDeferredListHead)
- {
- /* Get the font */
- DeferredFont = CONTAINING_RECORD(NextEntry, BL_DEFERRED_FONT_FILE, ListEntry);
-
- /* Move to the next entry and remove this one */
- NextEntry = NextEntry->Flink;
- RemoveEntryList(&DeferredFont->ListEntry);
-
- /* Load the font */
- LoadStatus = BfiLoadFontFile(DeferredFont->Device,
- DeferredFont->FontPath);
- if (!NT_SUCCESS(LoadStatus))
- {
- /* Remember the load failure if there was one */
- Status = LoadStatus;
- }
-
- /* Free the deferred font */
- BfiFreeDeferredFontFile(DeferredFont);
- }
-
- /* Return load status */
- return Status;
-}
-
-NTSTATUS
-BfiFlipCursorCharacter (
- _In_ PBL_GRAPHICS_CONSOLE Console,
- _In_ BOOLEAN Visible
- )
-{
- /* not implemented */
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BfClearToEndOfLine (
- _In_ PBL_GRAPHICS_CONSOLE Console
- )
-{
- /* not implemented */
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BfClearScreen (
- _In_ PBL_GRAPHICS_CONSOLE Console
- )
-{
- NTSTATUS Status;
-
- /* Reset the cursor position */
- Console->TextConsole.State.XPos = 0;
- Console->TextConsole.State.YPos = 0;
-
- /* Fill the screen with the background color */
- Status = ConsoleGraphicalClearPixels(Console,
- Console->TextConsole.State.BgColor);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Check if the cursor should be visible */
- if (Console->TextConsole.State.CursorVisible)
- {
- /* Load any fonts at this time */
- if (!IsListEmpty(&BfiDeferredListHead))
- {
- BfLoadDeferredFontFiles();
- }
-
- /* Switch the cursor to visible */
- Status = BfiFlipCursorCharacter(Console, TRUE);
- }
- else
- {
- /* Nothing left to do */
- Status = STATUS_SUCCESS;
- }
-
- /* Return cursor flip result, if any */
- return Status;
-}
diff --git a/boot/environ/lib/misc/image.c b/boot/environ/lib/misc/image.c
deleted file mode 100644
index 7abb40baf14..00000000000
--- a/boot/environ/lib/misc/image.c
+++ /dev/null
@@ -1,2074 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/misc/image.c
- * PURPOSE: Boot Library Image Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-#include
-
-/* DATA VARIABLES ************************************************************/
-
-ULONG IapAllocatedTableEntries;
-ULONG IapTableEntries;
-PVOID* IapImageTable;
-
-#ifndef _M_ARM
-KDESCRIPTOR GdtRegister;
-KDESCRIPTOR IdtRegister;
-KDESCRIPTOR BootAppGdtRegister;
-KDESCRIPTOR BootAppIdtRegister;
-PVOID BootApp32EntryRoutine;
-PBOOT_APPLICATION_PARAMETER_BLOCK BootApp32Parameters;
-PVOID BootApp32Stack;
-#endif
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-ImgpGetFileSize (
- _In_ PBL_IMG_FILE File,
- _Out_ PULONG FileSize
- )
-{
- NTSTATUS Status;
- ULONG Size;
- BL_FILE_INFORMATION FileInformation;
-
- /* Check if the file was memory mapped */
- if (File->Flags & BL_IMG_MEMORY_FILE)
- {
- /* Just read the size of the mapping */
- Size = File->FileSize;
- }
- else
- {
- /* Do file I/O to get the file size */
- Status = BlFileGetInformation(File->FileId,
- &FileInformation);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* We only support files less than 4GB in the Image Mapped */
- Size = FileInformation.Size;
- if (FileInformation.Size > ULONG_MAX)
- {
- return STATUS_NOT_SUPPORTED;
- }
- }
-
- /* Return the size and success */
- *FileSize = Size;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-ImgpReadAtFileOffset (
- _In_ PBL_IMG_FILE File,
- _In_ ULONG Size,
- _In_ ULONGLONG ByteOffset,
- _In_ PVOID Buffer,
- _Out_ PULONG BytesReturned
- )
-{
- NTSTATUS Status;
-
- /* Check what if this is a mapped file or not */
- if (File->Flags & BL_IMG_MEMORY_FILE)
- {
- /* Check if the boundaries are within the file size */
- if ((ByteOffset + Size) <= File->FileSize)
- {
- /* Yep, copy into the caller-supplied buffer */
- RtlCopyMemory(Buffer,
- (PVOID)((ULONG_PTR)File->BaseAddress + (ULONG_PTR)ByteOffset),
- Size);
-
- /* If caller wanted to know, return the size copied */
- if (BytesReturned)
- {
- *BytesReturned = Size;
- }
-
- /* All good */
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* Doesn't fit */
- Status = STATUS_INVALID_PARAMETER;
- }
- }
- else
- {
- /* Issue the file I/O instead */
- Status = BlFileReadAtOffsetEx(File->FileId,
- Size,
- ByteOffset,
- Buffer,
- BytesReturned,
- 0);
- }
-
- /* Return the final status */
- return Status;
-}
-
-NTSTATUS
-ImgpOpenFile (
- _In_ ULONG DeviceId,
- _In_ PWCHAR FileName,
- _In_ ULONG Flags,
- _Out_ PBL_IMG_FILE NewFile
- )
-{
- NTSTATUS Status;
- ULONG FileSize;
- ULONGLONG RemoteFileSize;
- PVOID RemoteFileAddress;
- ULONG FileId;
-
- /* First, try to see if BD has this file remotely */
- Status = BlBdPullRemoteFile(FileName,
- &RemoteFileAddress,
- &RemoteFileSize);
- if (NT_SUCCESS(Status))
- {
- /* Yep, get the file size and make sure it's < 4GB */
- FileSize = RemoteFileSize;
- if (RemoteFileSize <= ULONG_MAX)
- {
- /* Remember this is a memory mapped remote file */
- NewFile->Flags |= (BL_IMG_MEMORY_FILE | BL_IMG_REMOTE_FILE);
- NewFile->FileSize = FileSize;
- NewFile->BaseAddress = RemoteFileAddress;
- goto Quickie;
- }
- }
-
- /* Use File I/O instead */
- Status = BlFileOpen(DeviceId,
- FileName,
- BL_FILE_READ_ACCESS,
- &FileId);
- if (!NT_SUCCESS(Status))
- {
- /* Bail out on failure */
- return Status;
- }
-
- /* Make sure nobody thinks this is a memory file */
- NewFile->Flags &= ~BL_IMG_MEMORY_FILE;
- NewFile->FileId = FileId;
-
-Quickie:
- /* Set common data for both memory and I/O based file */
- NewFile->Flags |= BL_IMG_VALID_FILE;
- NewFile->FileName = FileName;
- return Status;
-}
-
-NTSTATUS
-ImgpCloseFile (
- _In_ PBL_IMG_FILE File
- )
-{
- NTSTATUS Status;
-
- /* Make sure this is a valid file, otherwise no-op */
- Status = STATUS_SUCCESS;
- if (File->Flags & BL_IMG_VALID_FILE)
- {
- /* Is this a memory mapped file? */
- if (!(File->Flags & BL_IMG_MEMORY_FILE))
- {
- /* Nope, close the file handle */
- return BlFileClose(File->FileId);
- }
-
- /* Is this a remote file? */
- if (File->Flags & BL_IMG_REMOTE_FILE)
- {
- /* Then only free the memory in that scenario */
- return MmPapFreePages(File->BaseAddress, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
- }
-
- /* Return the final status */
- return Status;
-}
-
-NTSTATUS
-BlImgUnallocateImageBuffer (
- _In_ PVOID ImageBase,
- _In_ ULONG ImageSize,
- _In_ ULONG ImageFlags
- )
-{
- PHYSICAL_ADDRESS PhysicalAddress;
- NTSTATUS Status;
-
- /* Make sure required parameters are present */
- if (!(ImageBase) || !(ImageSize))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Check if this was a physical allocation */
- if (!(ImageFlags & BL_LOAD_IMG_VIRTUAL_BUFFER))
- {
- return MmPapFreePages(ImageBase, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
-
- /* It's virtual, so translate it first */
- if (!BlMmTranslateVirtualAddress(ImageBase, &PhysicalAddress))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Unmap the virtual mapping */
- Status = BlMmUnmapVirtualAddressEx(ImageBase, ROUND_TO_PAGES(ImageSize));
- if (NT_SUCCESS(Status))
- {
- /* Now free the physical pages */
- Status = BlMmFreePhysicalPages(PhysicalAddress);
- }
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-BlImgAllocateImageBuffer (
- _Inout_ PVOID* ImageBuffer,
- _In_ ULONG MemoryType,
- _In_ ULONGLONG ImageSize,
- _In_ ULONG Flags
- )
-{
- ULONG Attributes;
- ULONGLONG Pages, Size;
- PVOID MappedBase, CurrentBuffer;
- NTSTATUS Status;
- PHYSICAL_ADDRESS PhysicalAddress;
-
- /* Read and reset the current buffer address */
- CurrentBuffer = *ImageBuffer;
- *ImageBuffer = NULL;
-
- /* Align the image size to page */
- Size = ROUND_TO_PAGES(ImageSize);
-
- /* Not sure what this attribute does yet */
- Attributes = 0;
- if (Flags & BL_LOAD_IMG_UNKNOWN_BUFFER_FLAG)
- {
- Attributes = 0x10000;
- }
-
- /* Check if the caller wants a virtual buffer */
- if (Flags & BL_LOAD_IMG_VIRTUAL_BUFFER)
- {
- /* Set the physical address to the current buffer */
- PhysicalAddress.QuadPart = (ULONG_PTR)CurrentBuffer;
- Pages = Size >> PAGE_SHIFT;
-
- /* Allocate the physical pages */
- Status = BlMmAllocatePhysicalPages(&PhysicalAddress,
- Pages,
- MemoryType,
- Attributes,
- 0);
- if (!NT_SUCCESS(Status))
- {
- /* If that failed, remove allocation attributes */
- PhysicalAddress.QuadPart = 0;
- Attributes &= ~BlMemoryValidAllocationAttributeMask,
- Status = BlMmAllocatePhysicalPages(&PhysicalAddress,
- Pages,
- MemoryType,
- Attributes,
- 0);
- }
-
- /* Check if either attempts succeeded */
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Now map the physical buffer at the address requested */
- MappedBase = PhysicalAddressToPtr(PhysicalAddress);
- Status = BlMmMapPhysicalAddressEx(&MappedBase,
- BlMemoryFixed,
- Size,
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- /* Free on failure if needed */
- BlMmFreePhysicalPages(PhysicalAddress);
- return Status;
- }
- }
- else
- {
- /* Otherwise, allocate raw physical pages */
- MappedBase = CurrentBuffer;
- Pages = Size >> PAGE_SHIFT;
- Status = MmPapAllocatePagesInRange(&MappedBase,
- MemoryType,
- Pages,
- Attributes,
- 0,
- NULL,
- 0);
- if (!NT_SUCCESS(Status))
- {
- /* If that failed, try without allocation attributes */
- MappedBase = NULL;
- Attributes &= ~BlMemoryValidAllocationAttributeMask,
- Status = MmPapAllocatePagesInRange(&MappedBase,
- MemoryType,
- Pages,
- Attributes,
- 0,
- NULL,
- 0);
- }
-
- /* Check if either attempts succeeded */
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- }
-
- /* Success path, returned allocated address */
- *ImageBuffer = MappedBase;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlImgLoadImageWithProgress2 (
- _In_ ULONG DeviceId,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ PWCHAR FileName,
- _Inout_ PVOID* MappedBase,
- _Inout_ PULONG MappedSize,
- _In_ ULONG ImageFlags,
- _In_ BOOLEAN ShowProgress,
- _Out_opt_ PUCHAR* HashBuffer,
- _Out_opt_ PULONG HashSize
- )
-{
- NTSTATUS Status;
- PVOID BaseAddress, Buffer;
- ULONG RemainingLength, CurrentSize, ImageSize, ReadSize;
- BOOLEAN ComputeSignature, ComputeHash, Completed;
- BL_IMG_FILE FileHandle;
- ULONGLONG ByteOffset;
- PHYSICAL_ADDRESS PhysicalAddress;
-
- /* Initialize variables */
- BaseAddress = 0;
- ImageSize = 0;
- Completed = FALSE;
- RtlZeroMemory(&FileHandle, sizeof(FileHandle));
-
- /* Check for missing parameters */
- if (!MappedBase)
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
- if (!FileName)
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
- if (!MappedSize)
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Check if the image buffer is being provided */
- if (ImageFlags & BL_LOAD_IMG_EXISTING_BUFFER)
- {
- /* An existing base must already exist */
- if (!(*MappedBase))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
- }
-
- /* Check of a hash is being requested */
- if (ImageFlags & BL_LOAD_IMG_COMPUTE_HASH)
- {
- /* Make sure we can return the hash */
- if (!HashBuffer)
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
- if (!HashSize)
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
- }
-
- /* Check for invalid combination of parameters */
- if ((ImageFlags & BL_LOAD_IMG_COMPUTE_HASH) && (ImageFlags & 0x270))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Initialize hash if requested by caller */
- if (HashBuffer)
- {
- *HashBuffer = 0;
- }
-
- /* Do the same for the hash size */
- if (HashSize)
- {
- *HashSize = 0;
- }
-
- /* Open the image file */
- Status = ImgpOpenFile(DeviceId, FileName, DeviceId, &FileHandle);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Error opening file: %lx\r\n", Status);
- goto Quickie;
- }
-
- /* Get the size of the image */
- Status = ImgpGetFileSize(&FileHandle, &ImageSize);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Error getting file size: %lx\r\n", Status);
- goto Quickie;
- }
-
- /* Read the current base address */
- BaseAddress = *MappedBase;
- if (ImageFlags & BL_LOAD_IMG_EXISTING_BUFFER)
- {
- /* Check if the current buffer is too small */
- if (*MappedSize < ImageSize)
- {
- /* Return the required size of the buffer */
- *MappedSize = ImageSize;
- Status = STATUS_BUFFER_TOO_SMALL;
- }
- }
- else
- {
- /* A buffer was not provided, allocate one ourselves */
- Status = BlImgAllocateImageBuffer(&BaseAddress,
- MemoryType,
- ImageSize,
- ImageFlags);
- }
-
- /* Bail out if allocation failed */
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Set the initial byte offset and length to read */
- RemainingLength = ImageSize;
- ByteOffset = 0;
- Buffer = BaseAddress;
-
- /* Update the initial progress */
- Completed = FALSE;
- if (ShowProgress)
- {
- BlUtlUpdateProgress(0, &Completed);
- ShowProgress &= (Completed != 0) - 1;
- }
-
- /* Set the chunk size for each read */
- ReadSize = 0x100000;
- if (ReadSize > ImageSize)
- {
- ReadSize = ImageSize;
- }
-
- /* Check if we should compute hash and/or signatures */
- ComputeSignature = ImageFlags & BL_LOAD_IMG_COMPUTE_SIGNATURE;
- ComputeHash = FALSE;
- if ((ComputeSignature) || (ImageFlags & BL_LOAD_IMG_COMPUTE_HASH))
- {
- ComputeHash = TRUE;
- // todo: crypto is hard
- }
-
- /* Begin the read loop */
- while (RemainingLength)
- {
- /* Check if we've got more than a chunk left to read */
- if (RemainingLength > ReadSize)
- {
- /* Read a chunk*/
- CurrentSize = ReadSize;
- }
- else
- {
- /* Read only what's left */
- CurrentSize = RemainingLength;
- }
-
- /* Read the chunk */
- Status = ImgpReadAtFileOffset(&FileHandle,
- CurrentSize,
- ByteOffset,
- Buffer,
- 0);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Check if we need to compute the hash of this chunk */
- if (ComputeHash)
- {
- // todo: crypto is hard
- }
-
- /* Update our position and read information */
- Buffer = (PVOID)((ULONG_PTR)Buffer + CurrentSize);
- RemainingLength -= CurrentSize;
- ByteOffset += CurrentSize;
-
- /* Check if we should update the progress bar */
- if (ShowProgress)
- {
- /* Compute new percentage completed, check if we're done */
- BlUtlUpdateProgress(100 - 100 * RemainingLength / ImageSize,
- &Completed);
- ShowProgress &= (Completed != 0) - 1;
- }
- }
-
- /* Is the read fully complete? We need to finalize the hash if requested */
- if (ComputeHash)
- {
- // todo: CRYPTO IS HARD
- }
-
- /* Success path, return back the buffer and the size of the image */
- *MappedBase = BaseAddress;
- *MappedSize = ImageSize;
-
-Quickie:
- /* Close the file handle */
- ImgpCloseFile(&FileHandle);
-
- /* Check if we failed and had allocated a buffer */
- if (!(NT_SUCCESS(Status)) &&
- (BaseAddress) &&
- !(ImageFlags & BL_LOAD_IMG_EXISTING_BUFFER))
- {
- /* Check what kind of buffer we had allocated */
- if (ImageFlags & BL_LOAD_IMG_VIRTUAL_BUFFER)
- {
- /* Unmap and free the virtual buffer */
- PhysicalAddress.QuadPart = (ULONG_PTR)BaseAddress;
- BlMmUnmapVirtualAddressEx(BaseAddress, ImageSize);
- BlMmFreePhysicalPages(PhysicalAddress);
- }
- else
- {
- /* Free the physical buffer */
- MmPapFreePages(BaseAddress, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
- }
-
- /* If we hadn't gotten to 100% yet, do it now */
- if (ShowProgress)
- {
- BlUtlUpdateProgress(100, &Completed);
- }
-
- /* Return the final status */
- return Status;
-}
-
-PIMAGE_SECTION_HEADER
-BlImgFindSection (
- _In_ PVOID ImageBase,
- _In_ ULONG ImageSize
- )
-{
- PIMAGE_SECTION_HEADER FoundSection;
- ULONG i;
- PIMAGE_SECTION_HEADER SectionHeader;
- PIMAGE_NT_HEADERS NtHeader;
- NTSTATUS Status;
-
- /* Assume failure */
- FoundSection = NULL;
-
- /* Make sure the image is valid */
- Status = RtlImageNtHeaderEx(0, ImageBase, ImageSize, &NtHeader);
- if (NT_SUCCESS(Status))
- {
- /* Get the first section and loop through them all */
- SectionHeader = IMAGE_FIRST_SECTION(NtHeader);
- for (i = 0; i < NtHeader->FileHeader.NumberOfSections; i++)
- {
- /* Check if this is the resource section */
- if (!_stricmp((PCCH)SectionHeader->Name, ".rsrc"))
- {
- /* Yep, we're done */
- FoundSection = SectionHeader;
- break;
- }
-
- /* Nope, keep going */
- SectionHeader++;
- }
- }
-
- /* Return the matching section */
- return FoundSection;
-}
-
-VOID
-BlImgQueryCodeIntegrityBootOptions (
- _In_ PBL_LOADED_APPLICATION_ENTRY ApplicationEntry,
- _Out_ PBOOLEAN IntegrityChecksDisabled,
- _Out_ PBOOLEAN TestSigning
- )
-{
-
- NTSTATUS Status;
- BOOLEAN Value;
-
- /* Check if /DISABLEINTEGRITYCHECKS is on */
- Status = BlGetBootOptionBoolean(ApplicationEntry->BcdData,
- BcdLibraryBoolean_DisableIntegrityChecks,
- &Value);
- *IntegrityChecksDisabled = NT_SUCCESS(Status) && (Value);
-
- /* Check if /TESTSIGNING is on */
- Status = BlGetBootOptionBoolean(ApplicationEntry->BcdData,
- BcdLibraryBoolean_AllowPrereleaseSignatures,
- &Value);
- *TestSigning = NT_SUCCESS(Status) && (Value);
-}
-
-NTSTATUS
-BlImgUnLoadImage (
- _In_ PVOID ImageBase,
- _In_ ULONG ImageSize,
- _In_ ULONG ImageFlags
- )
-{
- /* Check for missing parameters */
- if (!(ImageSize) || !(ImageBase))
- {
- /* Bail out */
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Unallocate the image buffer */
- return BlImgUnallocateImageBuffer(ImageBase, ImageSize, ImageFlags);
-}
-
-NTSTATUS
-ImgpLoadPEImage (
- _In_ PBL_IMG_FILE ImageFile,
- _In_ BL_MEMORY_TYPE MemoryType,
- _Inout_ PVOID* ImageBase,
- _Out_opt_ PULONG ImageSize,
- _Inout_opt_ PVOID Hash,
- _In_ ULONG Flags
- )
-{
- NTSTATUS Status;
- ULONG FileSize, HeaderSize;
- BL_IMG_FILE LocalFileBuffer;
- PBL_IMG_FILE LocalFile;
- PVOID VirtualAddress, PreferredBase, ImageBuffer, CertBuffer, HashBuffer;
- ULONGLONG VirtualSize;
- PIMAGE_DATA_DIRECTORY CertDirectory;
- PHYSICAL_ADDRESS PhysicalAddress;
- PIMAGE_NT_HEADERS NtHeaders;
- USHORT SectionCount, CheckSum, PartialSum, FinalSum;
- PIMAGE_SECTION_HEADER Section;
- ULONG_PTR EndOfHeaders, SectionStart, Slack, SectionEnd;
- ULONG i, SectionSize, RawSize, BytesRead, RemainingLength, Offset, AlignSize;
- BOOLEAN First, ImageHashValid;
- UCHAR LocalBuffer[1024];
- UCHAR TrustedBootInformation[52];
- ULONG WorkaroundForBinutils;
-
- /* Initialize locals */
- WorkaroundForBinutils = 0;
- LocalFile = NULL;
- ImageBuffer = NULL;
- FileSize = 0;
- First = FALSE;
- VirtualAddress = NULL;
- CertBuffer = NULL;
- CertDirectory = NULL;
- HashBuffer = NULL;
- Offset = 0;
- VirtualSize = 0;
- ImageHashValid = FALSE;
- RtlZeroMemory(&TrustedBootInformation, sizeof(TrustedBootInformation));
-
- /* Get the size of the image */
- Status = ImgpGetFileSize(ImageFile, &FileSize);
- if (!NT_SUCCESS(Status))
- {
- return STATUS_FILE_INVALID;
- }
-
- /* Allocate a flat buffer for it */
- Status = BlImgAllocateImageBuffer(&ImageBuffer, BlLoaderData, FileSize, 0);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Read the whole file flat for now */
- Status = ImgpReadAtFileOffset(ImageFile, FileSize, 0, ImageBuffer, NULL);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Build a local file handle */
- LocalFile = &LocalFileBuffer;
- LocalFileBuffer.FileName = ImageFile->FileName;
- LocalFileBuffer.Flags = BL_IMG_MEMORY_FILE | BL_IMG_VALID_FILE;
- LocalFileBuffer.BaseAddress = ImageBuffer;
- LocalFileBuffer.FileSize = FileSize;
-
- /* Get the NT headers of the file */
- Status = RtlImageNtHeaderEx(0, ImageBuffer, FileSize, &NtHeaders);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Check if we should validate the machine type */
- if (Flags & BL_LOAD_PE_IMG_CHECK_MACHINE)
- {
- /* Is it different than our current machine type? */
-#if _M_AMD64
- if (NtHeaders->FileHeader.Machine != IMAGE_FILE_MACHINE_AMD64)
-#else
- if (NtHeaders->FileHeader.Machine != IMAGE_FILE_MACHINE_I386)
-#endif
- {
- /* Is it x86 (implying we are x64) ? */
- if (NtHeaders->FileHeader.Machine == IMAGE_FILE_MACHINE_I386)
- {
- /* Return special error code */
- Status = STATUS_INVALID_IMAGE_WIN_32;
- }
- else if (NtHeaders->FileHeader.Machine == IMAGE_FILE_MACHINE_AMD64)
- {
- /* Otherwise, it's x64 but we are x86 */
- Status = STATUS_INVALID_IMAGE_WIN_64;
- }
- else
- {
- /* Or it's ARM or something... */
- Status = STATUS_INVALID_IMAGE_FORMAT;
- }
-
- /* Return with the distinguished error code */
- goto Quickie;
- }
- }
-
- /* Check if we should validate the subsystem */
- if (Flags & BL_LOAD_PE_IMG_CHECK_SUBSYSTEM)
- {
- /* It must be a Windows boot Application */
- if (NtHeaders->OptionalHeader.Subsystem !=
- IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION)
- {
- Status = STATUS_INVALID_IMAGE_FORMAT;
- goto Quickie;
- }
- }
-
- /* Check if we should validate the /INTEGRITYCHECK flag */
- if (Flags & BL_LOAD_PE_IMG_CHECK_FORCED_INTEGRITY)
- {
- /* Check if it's there */
- if (!(NtHeaders->OptionalHeader.DllCharacteristics &
- IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY))
- {
- /* Nope, fail otherwise */
- Status = STATUS_INVALID_IMAGE_FORMAT;
- goto Quickie;
- }
- }
-
- /* Check if we should compute the image hash */
- if ((Flags & BL_LOAD_PE_IMG_COMPUTE_HASH) || (Hash))
- {
- EfiPrintf(L"No hash support\r\n");
- }
-
- /* Read the current base address, if any */
- VirtualAddress = *ImageBase;
-
- /* Get the virtual size of the image */
- VirtualSize = NtHeaders->OptionalHeader.SizeOfImage;
-
- /* Safely align the virtual size to a page */
- Status = RtlULongLongAdd(VirtualSize,
- PAGE_SIZE - 1,
- &VirtualSize);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
- VirtualSize = ALIGN_DOWN_BY(VirtualSize, PAGE_SIZE);
-
- /* Make sure the image isn't larger than 4GB */
- if (VirtualSize > ULONG_MAX)
- {
- Status = STATUS_INVALID_IMAGE_FORMAT;
- goto Quickie;
- }
-
- /* Check if we have a buffer already */
- if (Flags & BL_LOAD_IMG_EXISTING_BUFFER)
- {
- /* Check if it's too small */
- if (*ImageSize < VirtualSize)
- {
- /* Fail, letting the caller know how big to make it */
- *ImageSize = VirtualSize;
- Status = STATUS_BUFFER_TOO_SMALL;
- }
- }
- else
- {
- /* Allocate the buffer with the flags and type the caller wants */
- Status = BlImgAllocateImageBuffer(&VirtualAddress,
- MemoryType,
- VirtualSize,
- Flags);
- }
-
- /* Bail out if allocation failed, or existing buffer is too small */
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Read the size of the headers */
- HeaderSize = NtHeaders->OptionalHeader.SizeOfHeaders;
- if (VirtualSize < HeaderSize)
- {
- /* Bail out if they're bigger than the image! */
- Status = STATUS_INVALID_IMAGE_FORMAT;
- goto Quickie;
- }
-
- /* Now read the header into the buffer */
- Status = ImgpReadAtFileOffset(LocalFile, HeaderSize, 0, VirtualAddress, NULL);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Get the NT headers of the file */
- Status = RtlImageNtHeaderEx(0, VirtualAddress, HeaderSize, &NtHeaders);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- First = FALSE;
-
- /* Record how many sections we have */
- SectionCount = NtHeaders->FileHeader.NumberOfSections;
-
- /* Capture the current checksum and reset it */
- CheckSum = NtHeaders->OptionalHeader.CheckSum;
- NtHeaders->OptionalHeader.CheckSum = 0;
-
- /* Calculate the checksum of the header, and restore the original one */
- PartialSum = BlUtlCheckSum(0,
- VirtualAddress,
- HeaderSize,
- BL_UTL_CHECKSUM_COMPLEMENT |
- BL_UTL_CHECKSUM_USHORT_BUFFER);
- NtHeaders->OptionalHeader.CheckSum = CheckSum;
-
- /* Record our current position (right after the headers) */
- EndOfHeaders = (ULONG_PTR)VirtualAddress + HeaderSize;
-
- /* Get the first section and iterate through each one */
- Section = IMAGE_FIRST_SECTION(NtHeaders);
- for (i = 0; i < SectionCount; i++)
- {
- /* Compute where this section starts */
- SectionStart = (ULONG_PTR)VirtualAddress + Section->VirtualAddress;
-
- /* Make sure that the section fits within the image */
- if ((VirtualSize < Section->VirtualAddress) ||
- ((PVOID)SectionStart < VirtualAddress))
- {
- EfiPrintf(L"fail 1\r\n");
- Status = STATUS_INVALID_IMAGE_FORMAT;
- goto Quickie;
- }
-
- /* Check if there's slack space between header end and the section */
- if (!(First) && (EndOfHeaders < SectionStart))
- {
- /* Zero it out */
- Slack = SectionStart - EndOfHeaders;
- RtlZeroMemory((PVOID)EndOfHeaders, Slack);
- }
-
- /* Get the section virtual size and the raw size */
- SectionSize = Section->Misc.VirtualSize;
- RawSize = Section->SizeOfRawData;
-
- /* Safely align the raw size by 2 */
- Status = RtlULongAdd(RawSize, 1, &AlignSize);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
- AlignSize = ALIGN_DOWN_BY(AlignSize, 2);
-
- /* IF we don't have a virtual size, use the raw size */
- if (!SectionSize)
- {
- SectionSize = RawSize;
- }
-
- /* If we don't have raw data, ignore the raw size */
- if (!Section->PointerToRawData)
- {
- RawSize = 0;
- }
- else if (SectionSize < RawSize)
- {
- /* And if the virtual size is smaller, use it as the final size */
- RawSize = SectionSize;
- }
-
- /* Make sure that the section doesn't overflow in memory */
- Status = RtlULongPtrAdd(Section->VirtualAddress,
- SectionSize,
- &SectionEnd);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"fail 21\r\n");
- Status = STATUS_INVALID_IMAGE_FORMAT;
- goto Quickie;
- }
-
- /* Make sure that it fits within the image */
- if (VirtualSize < SectionEnd)
- {
- Status = STATUS_INVALID_IMAGE_FORMAT;
- goto Quickie;
- }
-
- /* Make sure it doesn't overflow on disk */
- Status = RtlULongPtrAdd(Section->VirtualAddress,
- AlignSize,
- &SectionEnd);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"fail 31\r\n");
- Status = STATUS_INVALID_IMAGE_FORMAT;
- goto Quickie;
- }
-
- /* Make sure that it fits within the disk image as well */
- if (VirtualSize < SectionEnd)
- {
- Status = STATUS_INVALID_IMAGE_FORMAT;
- goto Quickie;
- }
-
- /* So does this section have a valid size after all? */
- if (RawSize)
- {
- /* Are we in the first iteration? */
- if (!First)
- {
- /* FUCK YOU BINUTILS */
- if (NtHeaders->OptionalHeader.MajorLinkerVersion < 7)
- {
- if ((*(PULONG)&Section->Name == 'ler.') && (RawSize < AlignSize))
- {
- /* Piece of shit won't build relocations when you tell it to,
- * either by using --emit-relocs or --dynamicbase. People online
- * have found out that by using -pie-executable you can get this
- * to happen, but then it turns out that the .reloc section is
- * incorrectly sized, and results in a corrupt PE. However, they
- * still compute the checksum using the correct value. What idiots.
- */
- WorkaroundForBinutils = AlignSize - RawSize;
- AlignSize -= WorkaroundForBinutils;
- }
- }
-
- /* Yes, read the section data */
- Status = ImgpReadAtFileOffset(LocalFile,
- AlignSize,
- Section->PointerToRawData,
- (PVOID)SectionStart,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Update our current offset */
- Offset = AlignSize + Section->PointerToRawData;
-
- /* Update the checksum to include this section */
- PartialSum = BlUtlCheckSum(PartialSum,
- (PUCHAR)SectionStart,
- AlignSize,
- BL_UTL_CHECKSUM_COMPLEMENT |
- BL_UTL_CHECKSUM_USHORT_BUFFER);
- AlignSize += WorkaroundForBinutils;
- }
- }
-
- /* Are we in the first iteration? */
- if (!First)
- {
- /* Is there space at the end of the section? */
- if (RawSize < SectionSize)
- {
- /* Zero out the slack space that's there */
- Slack = SectionSize - RawSize;
- RtlZeroMemory((PVOID)(SectionStart + RawSize), Slack);
- }
-
- /* Update our tail offset */
- EndOfHeaders = SectionStart + SectionSize;
- }
-
- /* Move to the next section */
- Section++;
- }
-
- /* Are we in the first iteration? */
- if (!First)
- {
- /* Go to the end of the file */
- SectionStart = (ULONG_PTR)VirtualAddress + VirtualSize;
-
- /* Is there still some slack space left? */
- if (EndOfHeaders < SectionStart)
- {
- /* Zero it out */
- Slack = SectionStart - EndOfHeaders;
- RtlZeroMemory((PVOID)EndOfHeaders, Slack);
- }
- }
-
- /* Did the first iteration complete OK? */
- if ((NT_SUCCESS(Status)) && !(First))
- {
- /* Check how many non-image bytes are left in the file */
- RemainingLength = FileSize - Offset;
- while (RemainingLength)
- {
- /* See if the read will fit into our local buffer */
- if (RemainingLength >= sizeof(LocalBuffer))
- {
- /* Nope, cap it */
- BytesRead = sizeof(LocalBuffer);
- }
- else
- {
- /* Yes, but there's less to read */
- BytesRead = RemainingLength;
- }
-
- /* Read 1024 bytes into the local buffer */
- Status = ImgpReadAtFileOffset(LocalFile,
- BytesRead,
- Offset,
- LocalBuffer,
- &BytesRead);
- if (!(NT_SUCCESS(Status)) || !(BytesRead))
- {
- Status = STATUS_FILE_INVALID;
- goto Quickie;
- }
-
- /* Advance the offset and reduce the length */
- RemainingLength -= BytesRead;
- Offset += BytesRead;
-
- /* Compute the checksum of this leftover space */
- PartialSum = BlUtlCheckSum(PartialSum,
- LocalBuffer,
- BytesRead,
- BL_UTL_CHECKSUM_COMPLEMENT |
- BL_UTL_CHECKSUM_USHORT_BUFFER);
- }
-
- /* Finally, calculate the final checksum and compare it */
- FinalSum = FileSize + PartialSum + WorkaroundForBinutils;
- if ((FinalSum != CheckSum) && (PartialSum == 0xFFFF))
- {
- /* It hit overflow, so set it to the file size */
- FinalSum = FileSize;
- }
-
- /* If the checksum doesn't match, and caller is enforcing, bail out */
- if ((FinalSum != CheckSum) &&
- !(Flags & BL_LOAD_PE_IMG_IGNORE_CHECKSUM_MISMATCH))
- {
- Status = STATUS_IMAGE_CHECKSUM_MISMATCH;
- goto Quickie;
- }
- }
-
- /* Check if the .rsrc section should be checked with the filename */
- if (Flags & BL_LOAD_PE_IMG_VALIDATE_ORIGINAL_FILENAME)
- {
- EfiPrintf(L"Not yet supported\r\n");
- Status = 0xC0430007; // STATUS_SECUREBOOT_FILE_REPLACED
- goto Quickie;
- }
-
- /* Check if we should relocate */
- if (!(Flags & BL_LOAD_PE_IMG_SKIP_RELOCATIONS))
- {
- /* Check if we loaded at a different address */
- PreferredBase = (PVOID)NtHeaders->OptionalHeader.ImageBase;
- if (VirtualAddress != PreferredBase)
- {
- /* Yep -- do relocations */
- Status = LdrRelocateImage(VirtualAddress,
- "Boot Environment Library",
- STATUS_SUCCESS,
- STATUS_UNSUCCESSFUL,
- STATUS_INVALID_IMAGE_FORMAT);
- if (!NT_SUCCESS(Status))
- {
- /* That's bad */
- goto Quickie;
- }
- }
- }
-
-#if BL_TPM_SUPPORT
- /* Check if the image hash was valid */
- if (!ImageHashValid)
- {
- /* Send a TPM/SI notification without a context */
- BlEnNotifyEvent(0x10000002, NULL);
- }
-
- /* Now send a TPM/SI notification with the hash of the loaded image */
- BlMmTranslateVirtualAddress(VirtualAddress, &Context.ImageBase);
- Context.HashAlgorithm = HashAlgorithm;
- Context.HashSize = HashSize;
- Context.FileName = ImageFile->FileName;
- Context.ImageSize = VirtualSize;
- Context.HashValid = ImageHashValid;
- Context.Hash = Hash;
- BlEnNotifyEvent(0x10000002, &Context);
-#endif
-
- /* Return the loaded address to the caller */
- *ImageBase = VirtualAddress;
-
- /* If the caller wanted the image size, return it too */
- if (ImageSize)
- {
- *ImageSize = VirtualSize;
- }
-
-Quickie:
- /* Check if we computed the image hash OK */
- if (ImageHashValid)
- {
- /* Then free the information that ImgpValidateImageHash set up */
- EfiPrintf(L"leadking trusted boot\r\n");
- //ImgpDestroyTrustedBootInformation(&TrustedBootInformation);
- }
-
- /* Check if we had a hash buffer */
- if (HashBuffer)
- {
- /* Free it */
- MmPapFreePages(HashBuffer, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
-
- /* Check if we have a certificate directory */
- if ((CertBuffer) && (CertDirectory))
- {
- /* Free it */
- BlImgUnallocateImageBuffer(CertBuffer, CertDirectory->Size, 0);
- }
-
- /* Check if we had an image buffer allocated */
- if ((ImageBuffer) && (FileSize))
- {
- /* Free it */
- BlImgUnallocateImageBuffer(ImageBuffer, FileSize, 0);
- }
-
- /* Check if we had a local file handle */
- if (LocalFile)
- {
- /* Close it */
- ImgpCloseFile(LocalFile);
- }
-
- /* Check if this is the failure path */
- if (!NT_SUCCESS(Status))
- {
- /* Check if we had started mapping in the image already */
- if ((VirtualAddress) && !(Flags & BL_LOAD_PE_IMG_EXISTING_BUFFER))
- {
- /* Into a virtual buffer? */
- if (Flags & BL_LOAD_PE_IMG_VIRTUAL_BUFFER)
- {
- /* Unmap and free it */
- BlMmUnmapVirtualAddressEx(VirtualAddress, VirtualSize);
- PhysicalAddress.QuadPart = (ULONG_PTR)VirtualAddress;
- BlMmFreePhysicalPages(PhysicalAddress);
- }
- else
- {
- /* Into a physical buffer -- free it */
- MmPapFreePages(VirtualAddress, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
- }
- }
-
- /* Return back to caller */
- return Status;
-}
-
-NTSTATUS
-BlImgLoadPEImageEx (
- _In_ ULONG DeviceId,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ PWCHAR Path,
- _Out_ PVOID* ImageBase,
- _Out_ PULONG ImageSize,
- _Out_ PVOID Hash,
- _In_ ULONG Flags
- )
-{
- BL_IMG_FILE ImageFile;
- NTSTATUS Status;
-
- /* Initialize the image file structure */
- ImageFile.Flags = 0;
- ImageFile.FileName = NULL;
-
- /* Check if the required parameter are missing */
- if (!(ImageBase) || !(Path))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* If we are loading a pre-allocated image, make sure we have it */
- if ((Flags & BL_LOAD_IMG_EXISTING_BUFFER) && (!(*ImageBase) || !(ImageSize)))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Load the file from disk */
- Status = ImgpOpenFile(DeviceId, Path, 0, &ImageFile);
- if (NT_SUCCESS(Status))
- {
- /* If that worked, do the PE parsing */
- Status = ImgpLoadPEImage(&ImageFile,
- MemoryType,
- ImageBase,
- ImageSize,
- Hash,
- Flags);
- }
-
- /* Close the image file and return back to caller */
- ImgpCloseFile(&ImageFile);
- return Status;
-}
-
-NTSTATUS
-BlImgLoadBootApplication (
- _In_ PBL_LOADED_APPLICATION_ENTRY BootEntry,
- _Out_ PULONG AppHandle
- )
-{
- NTSTATUS Status;
- PULONGLONG AllowedList;
- ULONGLONG AllowedCount;
- ULONG i, DeviceId, ImageSize, Flags, ListSize;
- LARGE_INTEGER Frequency;
- PVOID UnlockCode, ImageBase;
- PBL_DEVICE_DESCRIPTOR Device, BitLockerDevice;
- PWCHAR Path;
- PBL_APPLICATION_ENTRY AppEntry;
- PBL_IMG_FILE ImageFile;
- BOOLEAN DisableIntegrity, TestSigning;
- UCHAR Hash[64];
- PBL_IMAGE_APPLICATION_ENTRY ImageAppEntry;
-
- /* Initialize all locals */
- BitLockerDevice = NULL;
- UnlockCode = NULL;
- ImageFile = NULL;
- DeviceId = -1;
- Device = NULL;
- ImageAppEntry = NULL;
- AppEntry = NULL;
- Path = NULL;
- ImageSize = 0;
- ImageBase = NULL;
-
- /* Check for "allowed in-memory settings" */
- Status = BlpGetBootOptionIntegerList(BootEntry->BcdData,
- BcdLibraryIntegerList_AllowedInMemorySettings,
- &AllowedList,
- &AllowedCount,
- TRUE);
- if (Status == STATUS_SUCCESS)
- {
- /* Loop through the list of allowed setting */
- for (i = 0; i < AllowedCount; i++)
- {
- /* Find the super undocumented one */
- if (AllowedList[i] == BcdLibraryInteger_UndocumentedMagic)
- {
- /* If it's present, append the current perf frequence to it */
- BlTimeQueryPerformanceCounter(&Frequency);
- BlAppendBootOptionInteger(BootEntry,
- BcdLibraryInteger_UndocumentedMagic,
- Frequency.QuadPart);
- }
- }
- }
-
-#if BL_BITLOCKER_SUPPORT
- /* Do bitlocker stuff */
- Status = BlFveSecureBootUnlockBootDevice(BootEntry, &BitLockerDevice, &UnlockCode);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-#endif
-
- /* Get the device on which this application is on*/
- Status = BlGetBootOptionDevice(BootEntry->BcdData,
- BcdLibraryDevice_ApplicationDevice,
- &Device,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Get the path of the application */
- Status = BlGetBootOptionString(BootEntry->BcdData,
- BcdLibraryString_ApplicationPath,
- &Path);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Open the device */
- Status = BlpDeviceOpen(Device,
- BL_DEVICE_READ_ACCESS,
- 0,
- &DeviceId);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Check for integrity BCD options */
- BlImgQueryCodeIntegrityBootOptions(BootEntry,
- &DisableIntegrity,
- &TestSigning);
-
-#if BL_TPM_SUPPORT
- RtlZeroMemory(&Context, sizeof(Context);
- Context.BootEntry = BootEntry;
- BlEnNotifyEvent(0x10000003, &Context);
-#endif
-
- /* Enable signing and hashing checks if integrity is enabled */
- Flags = 0;
- if (!DisableIntegrity)
- {
- Flags = 0x8070;
- }
-
- /* Now call the PE loader to load the image */
- Status = BlImgLoadPEImageEx(DeviceId,
- BlLoaderMemory,
- Path,
- &ImageBase,
- &ImageSize,
- Hash,
- Flags);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
-#if BL_KD_SUPPORT
- /* Check if we should notify the debugger of load */
- if (BdDebugTransitions)
- {
- /* Initialize it */
- BdForceDebug = 1;
- Status = BlBdInitialize();
- if (NT_SUCCESS(Status))
- {
- /* Check if it's enabled */
- if (BlBdDebuggerEnabled())
- {
- /* Send it an image load notification */
- BdDebuggerNotPresent = FALSE;
- RtlInitUnicodeString(&PathString, Path);
- BlBdLoadImageSymbols(&PathString, ImageBase);
- }
- }
- }
-#endif
-
-#if BL_BITLOCKER_SUPPORT
- /* Do bitlocker stuff */
- Status = BlSecureBootCheckPolicyOnFveDevice(BitLockerDevice);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-#endif
-
-#if BL_BITLOCKER_SUPPORT
- /* Do bitlocker stuff */
- Status = BlFveSecureBootCheckpointBootApp(BootEntry, BitLockerDevice, Hash, UnlockCode);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-#endif
-
- /* Get the BCD option size */
- ListSize = BlGetBootOptionListSize(BootEntry->BcdData);
-
- /* Allocate an entry with all the BCD options */
- AppEntry = BlMmAllocateHeap(ListSize + sizeof(*AppEntry));
- if (!AppEntry)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Zero it out */
- RtlZeroMemory(AppEntry, sizeof(*AppEntry));
-
- /* Initialize it */
- strcpy(AppEntry->Signature, "BTAPENT");
- AppEntry->Guid = BootEntry->Guid;
- AppEntry->Flags = BootEntry->Flags;
-
- /* Copy the BCD options */
- RtlCopyMemory(&AppEntry->BcdData, BootEntry->BcdData, ListSize);
-
- /* Allocate the image entry */
- ImageAppEntry = BlMmAllocateHeap(sizeof(*ImageAppEntry));
- if (!ImageAppEntry)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Initialize it */
- ImageAppEntry->ImageBase = ImageBase;
- ImageAppEntry->ImageSize = ImageSize;
- ImageAppEntry->AppEntry = AppEntry;
-
- /* Check if this is the first entry */
- if (!IapTableEntries)
- {
- /* Allocate two entries */
- IapAllocatedTableEntries = 0;
- IapTableEntries = 2;
- IapImageTable = BlMmAllocateHeap(IapTableEntries * sizeof(PVOID));
- if (!IapImageTable)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Zero out the entries for now */
- RtlZeroMemory(IapImageTable, IapTableEntries * sizeof(PVOID));
- }
-
- /* Set this entry into the table */
- Status = BlTblSetEntry(&IapImageTable,
- &IapTableEntries,
- ImageAppEntry,
- AppHandle,
- TblDoNotPurgeEntry);
-
-Quickie:
- /* Is the device open? Close it if so */
- if (DeviceId != 1)
- {
- BlDeviceClose(DeviceId);
- }
-
- /* Is there an allocated device? Free it */
- if (Device)
- {
- BlMmFreeHeap(Device);
- }
-
- /* Is there an allocated path? Free it */
- if (Path)
- {
- BlMmFreeHeap(Path);
- }
-
- /* Is there a bitlocker device? Free it */
- if (BitLockerDevice)
- {
- BlMmFreeHeap(BitLockerDevice);
- }
-
- /* Is there a bitlocker unlock code? Free it */
- if (UnlockCode)
- {
- BlMmFreeHeap(UnlockCode);
- }
-
- /* Did we succeed in creating an entry? */
- if (NT_SUCCESS(Status))
- {
- /* Remember there's one more in the table */
- IapAllocatedTableEntries++;
-
- /* Return success */
- return Status;
- }
-
- /* Did we load an image after all? */
- if (ImageBase)
- {
- /* Unload it */
- BlImgUnLoadImage(ImageBase, ImageSize, 0);
- }
-
- /* Did we allocate an app entry? Free it */
- if (AppEntry)
- {
- BlMmFreeHeap(AppEntry);
- }
-
- /* Do we have an image file entry? Free it */
- if (ImageFile)
- {
- BlMmFreeHeap(ImageFile);
- }
-
- /* Do we no longer have a single entry in the table? */
- if (!(IapAllocatedTableEntries) && (IapImageTable))
- {
- /* Free and destroy the table */
- BlMmFreeHeap(IapImageTable);
- IapTableEntries = 0;
- IapImageTable = NULL;
- }
-
- /* Return the failure code */
- return Status;
-}
-
-NTSTATUS
-BlpPdParseReturnArguments (
- _In_ PBL_RETURN_ARGUMENTS ReturnArguments
- )
-{
- /* Check if any custom data was returned */
- if (ReturnArguments->DataPage == 0)
- {
- /* Nope, nothing to do */
- return STATUS_SUCCESS;
- }
-
- /* Yes, we have to parse it */
- EfiPrintf(L"Return arguments not supported\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-ImgpCopyApplicationBootDevice (
- __in PBL_DEVICE_DESCRIPTOR DestinationDevice,
- __in PBL_DEVICE_DESCRIPTOR SourceDevice
- )
-{
- /* Is this a partition device? */
- if (SourceDevice->DeviceType != PartitionDevice)
- {
- /* It's not -- a simple copy will do */
- RtlCopyMemory(DestinationDevice, SourceDevice, SourceDevice->Size);
- return STATUS_SUCCESS;
- }
-
- /* TODO */
- EfiPrintf(L"Partition copy not supported\r\n");
- return STATUS_NOT_IMPLEMENTED;
-
-}
-
-NTSTATUS
-ImgpInitializeBootApplicationParameters (
- _In_ PBL_BUFFER_DESCRIPTOR ImageParameters,
- _In_ PBL_APPLICATION_ENTRY AppEntry,
- _In_ PVOID ImageBase,
- _In_ ULONG ImageSize
- )
-{
- NTSTATUS Status;
- PIMAGE_NT_HEADERS NtHeaders;
- BL_BUFFER_DESCRIPTOR MemoryParameters;
- LIST_ENTRY MemoryList;
- PBL_FIRMWARE_DESCRIPTOR FirmwareParameters;
- PBL_DEVICE_DESCRIPTOR BootDevice;
- PBL_MEMORY_DATA MemoryData;
- PBL_APPLICATION_ENTRY BootAppEntry;
- PBL_RETURN_ARGUMENTS ReturnArguments;
- PBOOT_APPLICATION_PARAMETER_BLOCK ParameterBlock;
- ULONG EntrySize, BufferSize;
-
- /* Get the image headers and validate it */
- Status = RtlImageNtHeaderEx(0, ImageBase, ImageSize, &NtHeaders);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Get the size of the entire non-firmware, allocated, memory map */
- MemoryParameters.BufferSize = 0;
- Status = BlMmGetMemoryMap(&MemoryList,
- &MemoryParameters,
- BL_MM_INCLUDE_PERSISTENT_MEMORY |
- BL_MM_INCLUDE_MAPPED_ALLOCATED |
- BL_MM_INCLUDE_MAPPED_UNALLOCATED |
- BL_MM_INCLUDE_UNMAPPED_ALLOCATED |
- BL_MM_INCLUDE_RESERVED_ALLOCATED,
- 0);
- if ((Status != STATUS_BUFFER_TOO_SMALL) && (Status != STATUS_SUCCESS))
- {
- /* We failed due to an unknown reason -- bail out */
- return Status;
- }
-
- /* Compute the list of the BCD plus the application entry */
- EntrySize = BlGetBootOptionListSize(&AppEntry->BcdData) +
- FIELD_OFFSET(BL_APPLICATION_ENTRY, BcdData);
-
- /* Compute the total size required for the entire structure */
- BufferSize = EntrySize +
- BlpBootDevice->Size +
- MemoryParameters.BufferSize +
- sizeof(*ReturnArguments) +
- sizeof(*MemoryData) +
- sizeof(*FirmwareParameters) +
- sizeof(*ParameterBlock);
-
- /* Check if this gives us enough space */
- if (ImageParameters->BufferSize < BufferSize)
- {
- /* It does not -- free the existing buffer */
- if (ImageParameters->BufferSize)
- {
- BlMmFreeHeap(ImageParameters->Buffer);
- }
-
- /* Allocate a new buffer of sufficient size */
- ImageParameters->BufferSize = BufferSize;
- ImageParameters->Buffer = BlMmAllocateHeap(BufferSize);
- if (!ImageParameters->Buffer)
- {
- /* Bail out if we couldn't allocate it */
- return STATUS_NO_MEMORY;
- }
- }
-
- /* Zero out the parameter block */
- ParameterBlock = (PBOOT_APPLICATION_PARAMETER_BLOCK)ImageParameters->Buffer;
- RtlZeroMemory(ParameterBlock, BufferSize);
-
- /* Initialize it */
- ParameterBlock->Version = BOOT_APPLICATION_VERSION;
- ParameterBlock->Size = BufferSize;
- ParameterBlock->Signature[0] = BOOT_APPLICATION_SIGNATURE_1;
- ParameterBlock->Signature[1] = BOOT_APPLICATION_SIGNATURE_2;
- ParameterBlock->MemoryTranslationType = MmTranslationType;
- ParameterBlock->ImageType = IMAGE_FILE_MACHINE_I386;
- ParameterBlock->ImageBase = (ULONG_PTR)ImageBase;
- ParameterBlock->ImageSize = NtHeaders->OptionalHeader.SizeOfImage;
-
- /* Get the offset to the memory data */
- ParameterBlock->MemoryDataOffset = sizeof(*ParameterBlock);
-
- /* Fill it out */
- MemoryData = (PBL_MEMORY_DATA)((ULONG_PTR)ParameterBlock +
- ParameterBlock->MemoryDataOffset);
- MemoryData->Version = BL_MEMORY_DATA_VERSION;
- MemoryData->MdListOffset = sizeof(*MemoryData);
- MemoryData->DescriptorSize = sizeof(BL_MEMORY_DESCRIPTOR);
- MemoryData->DescriptorOffset = FIELD_OFFSET(BL_MEMORY_DESCRIPTOR, BasePage);
-
- /* And populate the memory map */
- MemoryParameters.Buffer = MemoryData + 1;
- Status = BlMmGetMemoryMap(&MemoryList,
- &MemoryParameters,
- BL_MM_INCLUDE_PERSISTENT_MEMORY |
- BL_MM_INCLUDE_MAPPED_ALLOCATED |
- BL_MM_INCLUDE_MAPPED_UNALLOCATED |
- BL_MM_INCLUDE_UNMAPPED_ALLOCATED |
- BL_MM_INCLUDE_RESERVED_ALLOCATED,
- 0);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Now that we have the map, indicate the number of descriptors */
- MemoryData->DescriptorCount = MemoryParameters.ActualSize /
- MemoryData->DescriptorSize;
-
- /* Get the offset to the application entry */
- ParameterBlock->AppEntryOffset = ParameterBlock->MemoryDataOffset +
- MemoryData->MdListOffset +
- MemoryParameters.BufferSize;
-
- /* Fill it out */
- BootAppEntry = (PBL_APPLICATION_ENTRY)((ULONG_PTR)ParameterBlock +
- ParameterBlock->AppEntryOffset);
- RtlCopyMemory(BootAppEntry, AppEntry, EntrySize);
-
- /* Get the offset to the boot device */
- ParameterBlock->BootDeviceOffset = ParameterBlock->AppEntryOffset +
- EntrySize;
-
- /* Fill it out */
- BootDevice = (PBL_DEVICE_DESCRIPTOR)((ULONG_PTR)ParameterBlock +
- ParameterBlock->BootDeviceOffset);
- Status = ImgpCopyApplicationBootDevice(BootDevice, BlpBootDevice);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Get the offset to the firmware data */
- ParameterBlock->FirmwareParametersOffset = ParameterBlock->BootDeviceOffset +
- BootDevice->Size;
-
- /* Fill it out */
- FirmwareParameters = (PBL_FIRMWARE_DESCRIPTOR)((ULONG_PTR)ParameterBlock +
- ParameterBlock->
- FirmwareParametersOffset);
- Status = BlFwGetParameters(FirmwareParameters);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Get the offset to the return arguments */
- ParameterBlock->ReturnArgumentsOffset = ParameterBlock->FirmwareParametersOffset +
- sizeof(BL_FIRMWARE_DESCRIPTOR);
-
- /* Fill them out */
- ReturnArguments = (PBL_RETURN_ARGUMENTS)((ULONG_PTR)ParameterBlock +
- ParameterBlock->
- ReturnArgumentsOffset);
- ReturnArguments->Version = BL_RETURN_ARGUMENTS_VERSION;
- ReturnArguments->DataPage = 0;
- ReturnArguments->DataSize = 0;
-
- /* Structure complete */
- ImageParameters->ActualSize = ParameterBlock->ReturnArgumentsOffset +
- sizeof(*ReturnArguments);
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-ImgArchEfiStartBootApplication (
- _In_ PBL_APPLICATION_ENTRY AppEntry,
- _In_ PVOID ImageBase,
- _In_ ULONG ImageSize,
- _In_ PBL_RETURN_ARGUMENTS ReturnArguments
- )
-{
-#ifndef _M_ARM
- KDESCRIPTOR Gdt, Idt;
- ULONG BootSizeNeeded;
- NTSTATUS Status;
- PVOID BootData;
- PIMAGE_NT_HEADERS NtHeaders;
- PVOID NewStack, NewGdt, NewIdt;
- BL_BUFFER_DESCRIPTOR Parameters;
-
- /* Read the current IDT and GDT */
- _sgdt(&Gdt.Limit);
- __sidt(&Idt.Limit);
-
- /* Allocate space for the IDT, GDT, and 24 pages of stack */
- BootSizeNeeded = (ULONG_PTR)PAGE_ALIGN(Idt.Limit + Gdt.Limit + 1 + 25 * PAGE_SIZE);
- Status = MmPapAllocatePagesInRange(&BootData,
- BlLoaderArchData,
- BootSizeNeeded >> PAGE_SHIFT,
- 0,
- 0,
- NULL,
- 0);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Zero the boot data */
- RtlZeroMemory(BootData, BootSizeNeeded);
-
- /* Set the new stack, GDT and IDT */
- NewStack = (PVOID)((ULONG_PTR)BootData + (24 * PAGE_SIZE) - 8);
- NewGdt = (PVOID)((ULONG_PTR)BootData + (24 * PAGE_SIZE));
- NewIdt = (PVOID)((ULONG_PTR)BootData + (24 * PAGE_SIZE) + Gdt.Limit + 1);
-
- /* Copy the current (firmware) GDT and IDT */
- RtlCopyMemory(NewGdt, (PVOID)Gdt.Base, Gdt.Limit + 1);
- RtlCopyMemory(NewIdt, (PVOID)Idt.Base, Idt.Limit + 1);
-
- /* Read the NT headers so that we can get the entrypoint later on */
- RtlImageNtHeaderEx(0, ImageBase, ImageSize, &NtHeaders);
-
- /* Prepare the application parameters */
- RtlZeroMemory(&Parameters, sizeof(Parameters));
- Status = ImgpInitializeBootApplicationParameters(&Parameters,
- AppEntry,
- ImageBase,
- ImageSize);
- if (NT_SUCCESS(Status))
- {
- /* Set the firmware GDT/IDT as the one the application will use */
- BootAppGdtRegister = Gdt;
- BootAppIdtRegister = Idt;
-
- /* Set the entrypoint, parameters, and stack */
- BootApp32EntryRoutine = (PVOID)((ULONG_PTR)ImageBase +
- NtHeaders->OptionalHeader.
- AddressOfEntryPoint);
- BootApp32Parameters = Parameters.Buffer;
- BootApp32Stack = NewStack;
-
-#if BL_KD_SUPPORT
- /* Disable the kernel debugger */
- BlBdStop();
-#endif
- /* Make it so */
- Archx86TransferTo32BitApplicationAsm();
-
- /* Not yet implemented. This is the last step! */
- EfiPrintf(L"EFI APPLICATION RETURNED!!!\r\n");
- EfiStall(100000000);
-
-#if BL_KD_SUPPORT
- /* Re-enable the kernel debugger */
- BlBdStart();
-#endif
- }
-
-Quickie:
- /* Check if we had boot data allocated */
- if (BootData)
- {
- /* Free it */
- MmPapFreePages(BootData, BL_MM_INCLUDE_MAPPED_ALLOCATED);
- }
-#else
- EfiPrintf(L"ImgArchEfiStartBootApplication not implemented for this platform.\r\n");
-#endif
-
- /* All done */
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlImgStartBootApplication (
- _In_ ULONG AppHandle,
- _Inout_opt_ PBL_RETURN_ARGUMENTS ReturnArguments
- )
-{
- PBL_IMAGE_APPLICATION_ENTRY ImageAppEntry;
- BL_RETURN_ARGUMENTS LocalReturnArgs;
- PBL_FILE_SYSTEM_ENTRY FileSystem;
- PLIST_ENTRY NextEntry, ListHead;
- NTSTATUS Status;
-
- /* Check if we don't have an argument structure */
- if (!ReturnArguments)
- {
- /* Initialize a local copy and use it instead */
- LocalReturnArgs.Version = BL_RETURN_ARGUMENTS_VERSION;
- LocalReturnArgs.Status = STATUS_SUCCESS;
- LocalReturnArgs.Flags = 0;
- LocalReturnArgs.DataPage = 0;
- LocalReturnArgs.DataSize = 0;
- ReturnArguments = &LocalReturnArgs;
- }
-
- /* Make sure the handle index is valid */
- if (IapTableEntries <= AppHandle)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Get the entry for this handle, making sure it exists */
- ImageAppEntry = IapImageTable[AppHandle];
- if (!ImageAppEntry)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Loop the registered file systems */
- ListHead = &RegisteredFileSystems;
- NextEntry = RegisteredFileSystems.Flink;
- while (NextEntry != ListHead)
- {
- /* Get the filesystem entry */
- FileSystem = CONTAINING_RECORD(NextEntry,
- BL_FILE_SYSTEM_ENTRY,
- ListEntry);
-
- /* See if it has a purge callback */
- if (FileSystem->PurgeCallback)
- {
- /* Call it */
- FileSystem->PurgeCallback();
- }
-
- /* Move to the next entry */
- NextEntry = NextEntry->Flink;
- }
-
- /* TODO -- flush the block I/O cache too */
- //BlockIoPurgeCache();
-
- /* Call into EFI land to start the boot application */
- Status = ImgArchEfiStartBootApplication(ImageAppEntry->AppEntry,
- ImageAppEntry->ImageBase,
- ImageAppEntry->ImageSize,
- ReturnArguments);
-
- /* Parse any arguments we got on the way back */
- BlpPdParseReturnArguments(ReturnArguments);
-
-#if BL_BITLOCKER_SUPPORT
- /* Bitlocker stuff */
- FvebpCheckAllPartitions(TRUE);
-#endif
-
-#if BL_TPM_SUPPORT
- /* Notify a TPM/SI event */
- BlEnNotifyEvent(0x10000005, NULL);
-#endif
-
- /* Reset the display */
- BlpDisplayReinitialize();
-
- /* TODO -- reset ETW */
- //BlpLogInitialize();
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-BlImgUnloadBootApplication (
- _In_ ULONG AppHandle
- )
-{
- PBL_IMAGE_APPLICATION_ENTRY ImageAppEntry;
- NTSTATUS Status;
-
- /* Make sure the handle index is valid */
- if (IapTableEntries <= AppHandle)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Get the entry for this handle, making sure it exists */
- ImageAppEntry = IapImageTable[AppHandle];
- if (!ImageAppEntry)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Unload the image */
- Status = BlImgUnLoadImage(ImageAppEntry->ImageBase,
- ImageAppEntry->ImageSize,
- 0);
- if (NT_SUCCESS(Status))
- {
- /* Normalize the success code */
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* Normalize the failure code */
- Status = STATUS_MEMORY_NOT_ALLOCATED;
- }
-
- /* Free the entry and the image entry as well */
- BlMmFreeHeap(ImageAppEntry->AppEntry);
- BlMmFreeHeap(ImageAppEntry);
-
- /* Clear the handle */
- IapImageTable[AppHandle] = NULL;
-
- /* Free one entry */
- if (!(--IapAllocatedTableEntries))
- {
- /* There are no more, so get rid of the table itself */
- BlMmFreeHeap(IapImageTable);
- IapImageTable = NULL;
- IapTableEntries = 0;
- }
-
- /* All good */
- return Status;
-}
diff --git a/boot/environ/lib/misc/resource.c b/boot/environ/lib/misc/resource.c
deleted file mode 100644
index 5b3adc33f42..00000000000
--- a/boot/environ/lib/misc/resource.c
+++ /dev/null
@@ -1,550 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/misc/resource.c
- * PURPOSE: Boot Library Resource Functions
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-PVOID ResPeImageBase;
-PVOID ResPeImageEnd;
-PVOID ResRootDirectory;
-
-PVOID ResPeImageBasePrimary;
-PVOID ResPeImageEndPrimary;
-PVOID ResRootDirectoryPrimary;
-ULONG_PTR ResRootDirectoryPrimaryOffset;
-ULONG_PTR ResRootDirectoryOffset;
-ULONG_PTR ResRootDirectoryFallbackOffset;
-PVOID ResPeImageBaseFallback;
-PVOID ResPeImageEndFallback;
-PVOID ResRootDirectoryFallback;
-
-BOOLEAN ResLoadedFontFiles;
-PVOID ResMuiImageBase;
-ULONG_PTR ResMuiImageSize;
-
-PWCHAR ResLocale;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-ResSelectLocale (
- _In_ BOOLEAN Primary
- )
-{
- NTSTATUS Status;
-
- /* Check if we're using the primary (MUI) or fallback resources */
- if (Primary)
- {
- /* Use the primary ones */
- ResRootDirectory = ResRootDirectoryPrimary;
- ResRootDirectoryOffset = ResRootDirectoryPrimaryOffset;
- ResPeImageBase = ResPeImageBasePrimary;
- ResPeImageEnd = ResPeImageEndPrimary;
-
- /* Register the locale with the display */
- Status = BlpDisplayRegisterLocale(ResLocale);
- }
-
- /* Check if that failed, or if we're using fallback */
- if (!(Primary) || !(NT_SUCCESS(Status)))
- {
- /* Set the fallback pointers */
- ResRootDirectory = ResRootDirectoryFallback;
- ResRootDirectoryOffset = ResRootDirectoryFallbackOffset;
- ResPeImageBase = ResPeImageBaseFallback;
- ResPeImageEnd = ResPeImageEndFallback;
-
- /* Register the fallback (America baby!) locale */
- Status = BlpDisplayRegisterLocale(L"en-US");
- if (!NT_SUCCESS(Status))
- {
- /* Fallback to text mode (yes, this is the API...) */
- return BlDisplaySetScreenResolution();
- }
- }
-
- /* No fonts loaded -- return failure code */
- ResLoadedFontFiles = FALSE;
- return Status;
-}
-
-PIMAGE_RESOURCE_DIRECTORY_ENTRY
-ResFindDirectoryEntry (
- _In_ PIMAGE_RESOURCE_DIRECTORY Directory,
- _In_opt_ PUSHORT Id,
- _In_opt_ PWCHAR Name,
- _In_ ULONG_PTR SectionStart
- )
-{
- PIMAGE_RESOURCE_DIRECTORY_ENTRY EntryTable, IdEntryTable;
- ULONG i;
- SIZE_T NameLength;
- PIMAGE_RESOURCE_DIRECTORY_STRING NameString;
-
- /* Are we looking by ID or name? */
- if (Id)
- {
- /* By ID, so were we passed a name? */
- if (Name)
- {
- /* That doesn't make sense */
- return NULL;
- }
- }
- else if (!Name)
- {
- /* By name, but we weren't given one. Also bad. */
- return NULL;
- }
-
- /* Get the table of names */
- EntryTable = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(Directory + 1);
-
- /* Check if we are doing ID lookup instead */
- if (Id)
- {
- /* The IDs come after the names */
- IdEntryTable = &EntryTable[Directory->NumberOfNamedEntries];
-
- /* Parse them */
- for (i = 0; i < Directory->NumberOfIdEntries; i++)
- {
- /* Check if the ID matches, or if the wildcard is being used*/
- if ((IdEntryTable[i].Id == *Id) || (*Id == 0xFFFF))
- {
- /* Return a pointer to the data */
- return (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(SectionStart + IdEntryTable[i].OffsetToDirectory);
- }
- }
-
- /* ID was not found */
- return NULL;
- }
-
- /* Searching by name, so parse them */
- for (i = 0; i < Directory->NumberOfNamedEntries; i++)
- {
- /* Get the name itself and count its length */
- NameString = (PIMAGE_RESOURCE_DIRECTORY_STRING)(SectionStart + EntryTable[i].NameOffset);
- NameLength = wcslen(Name);
-
- /* If the length matches, compare the bytes */
- if ((NameLength == NameString->Length) &&
- (RtlCompareMemory(NameString->NameString, Name, NameLength) == NameLength))
- {
- /* They both match, so this is our entry. Return it */
- return (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(SectionStart + EntryTable[i].OffsetToDirectory);
- }
- }
-
- /* Name was not found */
- return NULL;
-}
-
-NTSTATUS
-ResFindDataEntryFromImage (
- _In_opt_ PVOID ImageBase,
- _In_opt_ ULONG ImageSize,
- _In_ USHORT DirectoryId,
- _In_ PUSHORT EntryId,
- _In_ PWCHAR Name,
- _Out_ PIMAGE_RESOURCE_DATA_ENTRY *DataEntryOut,
- _Out_ PVOID* ResourceOut
- )
-{
- NTSTATUS Status;
- PIMAGE_SECTION_HEADER ResourceSection;
- PIMAGE_RESOURCE_DIRECTORY ResourceDir, RootDir;
- PIMAGE_RESOURCE_DIRECTORY_ENTRY DirEntry;
- PIMAGE_RESOURCE_DATA_ENTRY DataEntry;
- PVOID Data, DataEnd, ImageEnd;
- BOOLEAN UseFallbackDirectory;
-
- /* Assume nothing found */
- UseFallbackDirectory = TRUE;
- Status = STATUS_NOT_FOUND;
-
- /* Are we looking at a particular image? */
- if (ImageBase)
- {
- /* Then make sure we know its size */
- if (!ImageSize)
- {
- return Status;
- }
-
- /* Find the resource section for it */
- ResourceSection = BlImgFindSection(ImageBase, ImageSize);
- if (!ResourceSection)
- {
- return STATUS_INVALID_IMAGE_FORMAT;
- }
-
- /* Remember how big the image is, and find the resource directory */
- ImageEnd = (PVOID)((ULONG_PTR)ImageBase + ImageSize);
- RootDir = (PIMAGE_RESOURCE_DIRECTORY)((ULONG_PTR)ImageBase +
- ResourceSection->VirtualAddress);
- if ((PVOID)RootDir < ImageBase)
- {
- /* It's out of bounds, so bail out */
- return STATUS_INVALID_PARAMETER;
- }
-
- /* We have a valid directory, don't use fallback for now */
- UseFallbackDirectory = FALSE;
- }
- else
- {
- /* We are using the current library settings instead */
- ImageBase = ResPeImageBase;
- RootDir = ResRootDirectory;
- ImageEnd = ResPeImageEnd;
- }
-
- /* If we don't have a resource directory, there's nothing to find */
- if (!RootDir)
- {
- return Status;
- }
-
- /* Try two loops, once for primary, once for fallback */
- while (1)
- {
- /* Find the directory first */
- ResourceDir = (PIMAGE_RESOURCE_DIRECTORY)ResFindDirectoryEntry(RootDir,
- &DirectoryId,
- NULL,
- (ULONG_PTR)RootDir);
- if (ResourceDir)
- {
- break;
- }
-
- /* We didn't find it -- is it time to use the fallback? */
- if (UseFallbackDirectory)
- {
- /* Were were not using the fallback already? */
- if (RootDir != ResRootDirectoryFallback)
- {
- /* Then attempt with the fallback instead*/
- RootDir = ResRootDirectoryFallback;
- ImageBase = ResPeImageBaseFallback;
- ImageEnd = ResPeImageEndFallback;
-
- /* Making sure we have one... */
- if (RootDir)
- {
- continue;
- }
- }
- }
-
- /* Otherwise, return failure here */
- return Status;
- }
-
- /* Now that we are in the right directory, lookup the resource */
- ResourceDir = (PIMAGE_RESOURCE_DIRECTORY)ResFindDirectoryEntry(ResourceDir,
- EntryId,
- Name,
- (ULONG_PTR)RootDir);
- if (!ResourceDir)
- {
- return Status;
- }
-
- /* The entry is right after */
- DirEntry = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(ResourceDir + 1);
- if ((PVOID)DirEntry < (PVOID)ResourceDir)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Get the data entry for it */
- DataEntry = (PIMAGE_RESOURCE_DATA_ENTRY)((ULONG_PTR)RootDir +
- DirEntry->OffsetToData);
-
- /* Check if the data entry is out of bounds */
- if (((PVOID)DataEntry < ImageBase) || ((PVOID)DataEntry > ImageEnd))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Finally read the data offset */
- Data = (PVOID)((ULONG_PTR)ImageBase + DataEntry->OffsetToData);
-
- /* Check if the data is out of bounds */
- if (((PVOID)Data < ImageBase) || ((PVOID)Data > ImageEnd))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Make sure the data end isn't out of bounds either */
- DataEnd = (PVOID)((ULONG_PTR)Data + DataEntry->Size);
- if (((PVOID)DataEnd < ImageBase) || ((PVOID)DataEnd > ImageEnd))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* We finally made it. Return the entry and the raw data */
- *DataEntryOut = DataEntry;
- *ResourceOut = Data;
- return STATUS_SUCCESS;
-}
-
-PWCHAR
-BlResourceFindHtml (
- VOID
- )
-{
- NTSTATUS Status;
- PIMAGE_RESOURCE_DATA_ENTRY HtmlDataEntry;
- PWCHAR Stylesheet;
-
- /* Assume failure */
- Stylesheet = NULL;
-
- /* Look for an RT_HTML resource called BOOTMGR.XSL */
- Status = ResFindDataEntryFromImage(NULL,
- 0,
- 23,
- NULL,
- L"BOOTMGR.XSL",
- &HtmlDataEntry,
- (PVOID*)&Stylesheet);
- if (!NT_SUCCESS(Status))
- {
- return Stylesheet;
- }
-
- /* Check for Unicode BOM */
- if (*Stylesheet == 0xFEFF)
- {
- /* Overwrite it, and NULL-terminate */
- RtlMoveMemory(Stylesheet,
- Stylesheet + 1,
- HtmlDataEntry->Size - sizeof(WCHAR));
- Stylesheet[(HtmlDataEntry->Size / sizeof(WCHAR)) - 1] = UNICODE_NULL;
- }
- else if (Stylesheet[(HtmlDataEntry->Size / sizeof(WCHAR)) - 1] != UNICODE_NULL)
- {
- /* If it's not NULL-terminated, fail */
- Stylesheet = NULL;
- }
-
- /* Return it back */
- return Stylesheet;
-}
-
-PWCHAR
-BlResourceFindMessage (
- _In_ ULONG MsgId
- )
-{
- PWCHAR Message;
- PIMAGE_RESOURCE_DIRECTORY ResourceDir;
- PIMAGE_RESOURCE_DATA_ENTRY DataEntry;
- PMESSAGE_RESOURCE_DATA MsgData;
- PMESSAGE_RESOURCE_ENTRY MsgEntry;
- ULONG i, j;
- USHORT Id;
- PVOID MsgEnd;
- NTSTATUS Status;
-
- /* Bail out if there's no resource directory */
- Message = NULL;
- if (!ResRootDirectory)
- {
- return Message;
- }
-
- /* Check if we've loaded fonts already */
- if (!ResLoadedFontFiles)
- {
- /* Nope, load them now */
- Status = BfLoadDeferredFontFiles();
- if (!NT_SUCCESS(Status))
- {
- /* We failed to load fonts, fallback to fallback locale */
- Status = ResSelectLocale(FALSE);
- if (NT_SUCCESS(Status))
- {
- /* Try fonts now */
- Status = BfLoadDeferredFontFiles();
- if (!NT_SUCCESS(Status))
- {
- /* Still didn't work -- fallback to text mode */
- EfiPrintf(L"Font loading failed, falling back to text mode\r\n");
- Status = BlDisplaySetScreenResolution();
- if (!NT_SUCCESS(Status))
- {
- /* That didn't work either. F*ck it. */
- return Message;
- }
- }
- }
- }
-
- /* Now we have a resource directory, and fonts are loaded */
- NT_ASSERT(ResRootDirectory != NULL);
- ResLoadedFontFiles = TRUE;
- }
-
- /* Go look for RT_MESSAGETABLE */
- Id = 11;
- ResourceDir = (PIMAGE_RESOURCE_DIRECTORY)ResFindDirectoryEntry(ResRootDirectory,
- &Id,
- NULL,
- (ULONG_PTR)ResRootDirectory);
- if (!ResourceDir)
- {
- return Message;
- }
-
- /* Go look for the first directory in the table */
- Id = 1;
- ResourceDir = (PIMAGE_RESOURCE_DIRECTORY)ResFindDirectoryEntry(ResourceDir,
- &Id,
- NULL,
- (ULONG_PTR)ResRootDirectory);
- if (!ResourceDir)
- {
- return Message;
- }
-
- /* Go look for any language entry in the table */
- Id = -1;
- DataEntry = (PIMAGE_RESOURCE_DATA_ENTRY)ResFindDirectoryEntry(ResourceDir,
- &Id,
- NULL,
- (ULONG_PTR)ResRootDirectory);
- if (!DataEntry)
- {
- return Message;
- }
-
- /* Get the message data*/
- MsgData = (PMESSAGE_RESOURCE_DATA)((ULONG_PTR)ResRootDirectory +
- DataEntry->OffsetToData -
- ResRootDirectoryOffset);
-
- /* Loop through the message blocks */
- for (j = 0; j < MsgData->NumberOfBlocks; j++)
- {
- /* Check if the ID is within this range */
- if ((MsgId >= MsgData->Blocks[j].LowId) &&
- (MsgId <= MsgData->Blocks[j].HighId))
- {
- /* Get the first entry */
- MsgEntry = (PMESSAGE_RESOURCE_ENTRY)((ULONG_PTR)MsgData +
- MsgData->Blocks[j].OffsetToEntries);
-
- /* Loop till we find the right one */
- for (i = MsgId - MsgData->Blocks[j].LowId; i; --i)
- {
- MsgEntry = (PMESSAGE_RESOURCE_ENTRY)((ULONG_PTR)MsgEntry +
- MsgEntry->Length);
- }
-
- /* Find where this message ends */
- MsgEnd = (PVOID)((ULONG_PTR)MsgEntry + MsgEntry->Length);
-
- /* Now make sure that the message is within bounds */
- if ((MsgEnd >= (PVOID)MsgEntry) &&
- ((PVOID)MsgEntry >= ResPeImageBase) &&
- (MsgEnd <= ResPeImageEnd))
- {
- /* If so, read the text associated with it */
- Message = (PWCHAR)MsgEntry->Text;
- break;
- }
- }
- }
-
- /* Return the text, if one was found */
- return Message;
-}
-
-NTSTATUS
-BlpResourceInitialize (
- VOID
- )
-{
- NTSTATUS Status;
- PIMAGE_SECTION_HEADER ResourceSection;
- PVOID ImageBase;
- ULONG ImageSize, VRes, HRes;
- BOOLEAN UsePrimary;
-
- /* Default to using fallback */
- UsePrimary = FALSE;
-
- /* Initialize all globals */
- ResMuiImageBase = 0;
- ResMuiImageSize = 0;
- ResRootDirectoryPrimary = 0;
- ResRootDirectoryPrimaryOffset = 0;
- ResPeImageBasePrimary = 0;
- ResPeImageEndPrimary = 0;
- ResRootDirectoryFallback = 0;
- ResRootDirectoryFallbackOffset = 0;
- ResPeImageBaseFallback = 0;
- ResPeImageEndFallback = 0;
- ResRootDirectory = 0;
- ResRootDirectoryOffset = 0;
- ResPeImageBase = 0;
- ResPeImageEnd = 0;
- ResLoadedFontFiles = 0;
-
- /* Check if we had allocated a locale already */
- if (ResLocale)
- {
- /* Free it and reset */
- BlMmFreeHeap(ResLocale);
- ResLocale = 0;
- }
-
- /* Get our base address and size*/
- Status = BlGetApplicationBaseAndSize(&ImageBase, &ImageSize);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Find our resource section */
- ResourceSection = BlImgFindSection(ImageBase, ImageSize);
- if (ResourceSection)
- {
- /* The resource section will be our fallback. Save down its details */
- ResRootDirectoryFallbackOffset = ResourceSection->VirtualAddress;
- ResPeImageBaseFallback = ImageBase;
- ResPeImageEndFallback = (PVOID)((ULONG_PTR)ImageBase + ImageSize);
- ResRootDirectoryFallback = (PIMAGE_RESOURCE_DIRECTORY)((ULONG_PTR)ImageBase +
- ResRootDirectoryFallbackOffset);
- }
-
- /* Get the current screen resolution and check if we're in graphics mode */
- Status = BlDisplayGetScreenResolution(&HRes, &VRes);
- if ((NT_SUCCESS(Status)) && ((HRes != 640) || (VRes != 200)))
- {
- /* We are... we should load MUI data */
- Status = STATUS_NOT_IMPLEMENTED;//ResInitializeMuiResources();
- if (NT_SUCCESS(Status))
- {
- /* And not rely on the fallback */
- UsePrimary = TRUE;
- }
- }
-
- /* Load the locale resources */
- return ResSelectLocale(UsePrimary);
-}
diff --git a/boot/environ/lib/misc/rtlcompat.c b/boot/environ/lib/misc/rtlcompat.c
deleted file mode 100644
index cdb516b4a89..00000000000
--- a/boot/environ/lib/misc/rtlcompat.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-* COPYRIGHT: See COPYING.ARM in the top level directory
-* PROJECT: ReactOS UEFI Boot Manager
-* FILE: boot/environ/lib/misc/rtlcompat.c
-* PURPOSE: RTL Library Compatibility Routines
-* PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
-*/
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* FUNCTIONS *****************************************************************/
-
-#if DBG
-VOID FASTCALL
-CHECK_PAGED_CODE_RTL (
- char *file,
- int line
- )
-{
- // boot-code is always ok
-}
-#endif
-
-#ifdef _WIN64
-PVOID MmHighestUserAddress = (PVOID)0xFFFFFFFFULL; // CHECKME
-#else
-PVOID MmHighestUserAddress = (PVOID)0xFFFFFFFF;
-#endif
-
-PVOID
-NTAPI
-RtlpAllocateMemory (
- _In_ ULONG Bytes,
- _In_ ULONG Tag
- )
-{
- UNREFERENCED_PARAMETER(Tag);
- return BlMmAllocateHeap(Bytes);
-}
-
-VOID
-NTAPI
-RtlpFreeMemory (
- _In_ PVOID Mem,
- _In_ ULONG Tag
- )
-{
- UNREFERENCED_PARAMETER(Tag);
- BlMmFreeHeap(Mem);
-}
-
-NTSTATUS
-NTAPI
-RtlpSafeCopyMemory (
- _Out_writes_bytes_all_(Length) VOID UNALIGNED *Destination,
- _In_reads_bytes_(Length) CONST VOID UNALIGNED *Source,
- _In_ SIZE_T Length
- )
-{
- RtlCopyMemory(Destination, Source, Length);
- return STATUS_SUCCESS;
-}
-
-VOID
-NTAPI
-RtlAssert (
- IN PVOID FailedAssertion,
- IN PVOID FileName,
- IN ULONG LineNumber,
- IN PCHAR Message OPTIONAL
- )
-{
- if (Message != NULL)
- {
- EfiPrintf(L"*** ASSERTION \'%S\' FAILED AT line %lu in %S (%S) ***\r\n",
- (PCHAR)FailedAssertion,
- LineNumber,
- (PCHAR)FileName,
- Message);
- }
- else
- {
- EfiPrintf(L"*** ASSERTION \'%S\' FAILED AT line %lu in %S ***\r\n",
- (PCHAR)FailedAssertion,
- LineNumber,
- (PCHAR)FileName);
- }
-
- /* Issue a breakpoint */
- __debugbreak();
-}
-
-ULONG
-DbgPrint (
- const char *Format,
- ...
- )
-{
- EfiPrintf(L"%S\r\n", Format);
- return 0;
-}
-
-// FIXME: DECLSPEC_NORETURN
-VOID
-NTAPI
-KeBugCheckEx(
- _In_ ULONG BugCheckCode,
- _In_ ULONG_PTR BugCheckParameter1,
- _In_ ULONG_PTR BugCheckParameter2,
- _In_ ULONG_PTR BugCheckParameter3,
- _In_ ULONG_PTR BugCheckParameter4)
-{
- __assume(0);
-}
diff --git a/boot/environ/lib/misc/util.c b/boot/environ/lib/misc/util.c
deleted file mode 100644
index da0cae92792..00000000000
--- a/boot/environ/lib/misc/util.c
+++ /dev/null
@@ -1,983 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/misc/util.c
- * PURPOSE: Boot Library Utility Functions
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-PRSDT UtlRsdt;
-PXSDT UtlXsdt;
-
-PVOID UtlMcContext;
-PVOID UtlMcDisplayMessageRoutine;
-PVOID UtlMcUpdateMessageRoutine;
-
-PVOID UtlProgressRoutine;
-PVOID UtlProgressContext;
-PVOID UtlProgressInfoRoutine;
-ULONG UtlProgressGranularity;
-ULONG UtlCurrentPercentComplete;
-ULONG UtlNextUpdatePercentage;
-BOOLEAN UtlProgressNeedsInfoUpdate;
-PVOID UtlProgressInfo;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-BlUtlGetAcpiTable (
- _Out_ PVOID* TableAddress,
- _In_ ULONG Signature
- )
-{
- ULONG i, TableCount, HeaderLength;
- NTSTATUS Status;
- PRSDT Rsdt;
- PXSDT Xsdt;
- PHYSICAL_ADDRESS PhysicalAddress;
- PDESCRIPTION_HEADER Header;
-
- Header = 0;
-
- /* Make sure there's an output parameter */
- if (!TableAddress)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Get the currently known RSDT and XSDT */
- Rsdt = (PRSDT)UtlRsdt;
- Xsdt = (PXSDT)UtlXsdt;
-
- /* Is there an RSDT? */
- if (!Rsdt)
- {
- /* No -- is there an XSDT? */
- if (!Xsdt)
- {
- /* No. Look up the RSDT */
- Status = EfipGetRsdt(&PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"no rsdp found\r\n");
- return Status;
- }
-
- /* Map the header */
- Status = BlMmMapPhysicalAddressEx((PVOID)&Header,
- 0,
- sizeof(*Header),
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Unmap the header */
- BlMmUnmapVirtualAddressEx(Header, sizeof(*Header));
-
- /* Map the whole table */
- Status = BlMmMapPhysicalAddressEx((PVOID)&Header,
- 0,
- Header->Length,
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Check if its an XSDT or an RSDT */
- if (Header->Signature == XSDT_SIGNATURE)
- {
- /* It's an XSDT */
- Xsdt = (PXSDT)Header;
- UtlXsdt = Xsdt;
- }
- else
- {
- /* It's an RSDT */
- Rsdt = (PRSDT)Header;
- UtlRsdt = Rsdt;
- }
- }
- }
-
- /* OK, so do we have an XSDT after all? */
- if (Xsdt)
- {
- /* Yes... how big is it? */
- HeaderLength = Xsdt->Header.Length;
- if (HeaderLength >= sizeof(*Header))
- {
- HeaderLength = sizeof(*Header);
- }
-
- /* Based on that, how many tables are there? */
- TableCount = (Xsdt->Header.Length - HeaderLength) / sizeof(PHYSICAL_ADDRESS);
- }
- else
- {
- /* Nope, we have an RSDT. How big is it? */
- HeaderLength = Rsdt->Header.Length;
- if (HeaderLength >= sizeof(*Header))
- {
- HeaderLength = sizeof(*Header);
- }
-
- /* Based on that, how many tables are there? */
- TableCount = (Rsdt->Header.Length - HeaderLength) / sizeof(ULONG);
- }
-
- /* Loop through the ACPI tables */
- for (i = 0; i < TableCount; i++)
- {
- /* For an XSDT, read the 64-bit address directly */
- if (Xsdt)
- {
- PhysicalAddress = Xsdt->Tables[i];
- }
- else
- {
- /* For RSDT, cast it */
- PhysicalAddress.QuadPart = Rsdt->Tables[i];
- }
-
- /* Map the header */
- Status = BlMmMapPhysicalAddressEx((PVOID)&Header,
- 0,
- sizeof(*Header),
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Is it the right one? */
- if (Header->Signature == Signature)
- {
- /* Unmap the header */
- BlMmUnmapVirtualAddressEx(Header, sizeof(*Header));
-
- /* Map the whole table */
- return BlMmMapPhysicalAddressEx(TableAddress,
- 0,
- Header->Length,
- PhysicalAddress);
- }
- }
-
- /* Requested table does not exist */
- return STATUS_NOT_FOUND;
-}
-
-
-VOID
-BlUtlUpdateProgress (
- _In_ ULONG Percentage,
- _Out_opt_ PBOOLEAN Completed
- )
-{
- if (UtlProgressRoutine)
- {
- EfiPrintf(L"Unimplemented\r\n");
- }
- else if (*Completed)
- {
- *Completed = TRUE;
- }
-}
-
-NTSTATUS
-BlUtlInitialize (
- VOID
- )
-{
- UtlRsdt = 0;
- UtlXsdt = 0;
-
- UtlMcContext = 0;
- UtlMcDisplayMessageRoutine = 0;
- UtlMcUpdateMessageRoutine = 0;
-
- UtlProgressRoutine = 0;
- UtlProgressContext = 0;
- UtlProgressInfoRoutine = 0;
- UtlProgressGranularity = 0;
- UtlCurrentPercentComplete = 0;
- UtlNextUpdatePercentage = 0;
- UtlProgressNeedsInfoUpdate = 0;
- UtlProgressInfo = 0;
-
- return STATUS_SUCCESS;
-}
-
-VOID
-BmUpdateProgressInfo (
- _In_ PVOID Unknown,
- _In_ PWCHAR ProgressInfo
- )
-{
- EfiPrintf(L"Progress Info: %s\r\n", ProgressInfo);
-}
-
-VOID
-BmUpdateProgress (
- _In_ PVOID Unknown,
- _In_ ULONG Percent,
- _Out_ PBOOLEAN Completed
- )
-{
- EfiPrintf(L"Progress: %d\r\n", Percent);
- if (Completed)
- {
- *Completed = TRUE;
- }
-}
-
-NTSTATUS
-BlUtlRegisterProgressRoutine (
- VOID
- )
-{
- /* One shouldn't already exist */
- if (UtlProgressRoutine)
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Set the routine, and no context */
- UtlProgressRoutine = BmUpdateProgress;
- UtlProgressContext = NULL;
-
- /* Progress increases by one */
- UtlProgressGranularity = 1;
-
- /* Set progress to zero for now */
- UtlCurrentPercentComplete = 0;
- UtlNextUpdatePercentage = 0;
-
- /* Set the info routine if there is one */
- UtlProgressInfoRoutine = BmUpdateProgressInfo;
-
- /* All good */
- return STATUS_SUCCESS;
-}
-
-PVOID
-BlTblFindEntry (
- _In_ PVOID *Table,
- _In_ ULONG Count,
- _Out_ PULONG EntryIndex,
- _In_ PBL_TBL_LOOKUP_ROUTINE Callback,
- _In_ PVOID Argument1,
- _In_ PVOID Argument2,
- _In_ PVOID Argument3,
- _In_ PVOID Argument4
- )
-{
- PVOID Entry = NULL;
- ULONG Index;
- BOOLEAN Result;
-
- /* Check for invalid parameters */
- if (!(Table) || !(EntryIndex))
- {
- return Entry;
- }
-
- /* Loop each entry in the table */
- for (Index = 0; Index < Count; Index++)
- {
- /* Check if this entry is filled out */
- if (Table[Index])
- {
- /* Call the comparison function */
- Result = Callback(Table[Index],
- Argument1,
- Argument2,
- Argument3,
- Argument4);
- if (Result)
- {
- /* Entry found return it */
- *EntryIndex = Index;
- Entry = Table[Index];
- break;
- }
- }
- }
-
- /* Return the entry that was (or wasn't) found */
- return Entry;
-}
-
-NTSTATUS
-BlTblSetEntry (
- _Inout_ PVOID** Table,
- _Inout_ PULONG Count,
- _In_ PVOID Entry,
- _Out_ PULONG EntryIndex,
- _In_ PBL_TBL_SET_ROUTINE Callback
- )
-{
- ULONG NewCount;
- NTSTATUS Status = STATUS_SUCCESS;
- ULONG Index = 0;
- PVOID* NewTable;
-
- /* Make sure all the parameters were specified */
- if (!(Table) || !(*Table) || !(Count) || !(Callback))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Read the current table */
- NewTable = *Table;
- NewCount = *Count;
-
- /* Iterate over it */
- while (Index < NewCount)
- {
- /* Look for a free index */
- if (!NewTable[Index])
- {
- goto SetIndex;
- }
-
- /* No free index yet, keep going */
- ++Index;
- }
-
- /* No free index was found, try to purge some entries */
- Index = 0;
- while (Index < NewCount)
- {
- /* Call each purge callback, trying to make space */
- Status = Callback(NewTable[Index]);
- if (NT_SUCCESS(Status))
- {
- /* We should have this slot available now */
- goto SetIndex;
- }
-
- /* Keep trying to purge more */
- ++Index;
- }
-
- /* Double the table */
- NewTable = BlMmAllocateHeap(2 * sizeof(PVOID) * NewCount);
- if (!NewTable)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Clear the new table, and copy the old entries */
- RtlZeroMemory(&NewTable[NewCount], sizeof(PVOID) * NewCount);
- RtlCopyMemory(NewTable, *Table, sizeof(PVOID) * NewCount);
-
- /* Free the old table */
- BlMmFreeHeap(*Table);
-
- /* Return the new table and count */
- *Count = 2 * NewCount;
- *Table = NewTable;
-
-SetIndex:
- /* Set the index and return */
- NewTable[Index] = Entry;
- *EntryIndex = Index;
- return Status;
-}
-
-NTSTATUS
-BlTblMap (
- _In_ PVOID *Table,
- _In_ ULONG Count,
- _In_ PBL_TBL_MAP_ROUTINE MapCallback
- )
-{
- NTSTATUS Status, LocalStatus;
- PVOID Entry;
- ULONG Index;
-
- /* Bail out if there's no table */
- if (!Table)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Assume success and loop each index */
- Status = STATUS_SUCCESS;
- for (Index = 0; Index < Count; Index++)
- {
- /* See if an entry exists at this index */
- Entry = Table[Index];
- if (Entry)
- {
- /* Call the map routine for this entry */
- LocalStatus = MapCallback(Entry, Index);
- if (!NT_SUCCESS(LocalStatus))
- {
- /* Propagate failure only */
- Status = LocalStatus;
- }
- }
- }
-
- /* Return status to caller */
- return Status;
-}
-
-ULONG HtTableSize;
-PBL_HASH_TABLE* HtTableArray;
-ULONG HtTableEntries;
-
-ULONG
-DefaultHashFunction (
- _In_ PBL_HASH_ENTRY Entry,
- _In_ ULONG TableSize
- )
-{
- PUCHAR Value;
- ULONG KeyHash, i;
-
- /* Check if the value is a pointer, or embedded inline */
- Value = (Entry->Flags & BL_HT_VALUE_IS_INLINE) ? Entry->Value : (PUCHAR)&Entry->Value;
-
- /* Iterate over each byte, and sum it */
- for (i = 0, KeyHash = 0; i < Entry->Size; i++)
- {
- KeyHash += Value[i++];
- }
-
- /* Modulo the number of buckets */
- return KeyHash % TableSize;
-}
-
-BOOLEAN
-HtpCompareKeys (
- _In_ PBL_HASH_ENTRY Entry1,
- _In_ PBL_HASH_ENTRY Entry2
- )
-{
- ULONG Flags;
- BOOLEAN ValueMatch;
-
- /* Check if the flags or sizes are not matching */
- Flags = Entry1->Flags;
- if ((Entry1->Size != Entry2->Size) || (Flags != Entry2->Flags))
- {
- ValueMatch = FALSE;
- }
- else if (Flags & BL_HT_VALUE_IS_INLINE)
- {
- /* Check if this is an in-line value, compare it */
- ValueMatch = Entry1->Value == Entry2->Value;
- }
- else
- {
- /* This is a pointer value, compare it */
- ValueMatch = (RtlCompareMemory(Entry1->Value, Entry2->Value, Entry1->Size) ==
- Entry1->Size);
- }
-
- /* Return if it matched */
- return ValueMatch;
-}
-
-NTSTATUS
-TblDoNotPurgeEntry (
- _In_ PVOID Entry
- )
-{
- /* Never purge this entry */
- return STATUS_UNSUCCESSFUL;
-}
-
-NTSTATUS
-BlHtCreate (
- _In_ ULONG Size,
- _In_ PBL_HASH_TABLE_HASH_FUNCTION HashFunction,
- _In_ PBL_HASH_TABLE_COMPARE_FUNCTION CompareFunction,
- _Out_ PULONG Id
- )
-{
- NTSTATUS Status;
- PBL_HASH_TABLE HashTable;
- ULONG i;
-
- /* Assume failure */
- HashTable = NULL;
-
- /* Can't create a table with no ID */
- if (!Id)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Check if we don't already have a hash table table */
- if (!HtTableSize)
- {
- /* Allocate it and zero it out */
- HtTableSize = 4;
- HtTableArray = BlMmAllocateHeap(HtTableSize * sizeof(PVOID));
- if (!HtTableArray)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
- RtlZeroMemory(HtTableArray, HtTableSize * sizeof(PVOID));
- HtTableEntries = 0;
- }
-
- /* Allocate the hash table */
- HashTable = BlMmAllocateHeap(sizeof(*HashTable));
- if (!HashTable)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Fill it out */
- HashTable->HashFunction = HashFunction ? HashFunction : DefaultHashFunction;
- HashTable->CompareFunction = CompareFunction ? CompareFunction : HtpCompareKeys;
- HashTable->Size = Size ? Size : 13;
-
- /* Allocate the hash links, one for each bucket */
- HashTable->HashLinks = BlMmAllocateHeap(sizeof(LIST_ENTRY) * HashTable->Size);
- if (!HashTable->HashLinks)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Initialize the hash links */
- for (i = 0; i < HashTable->Size; i++)
- {
- InitializeListHead(&HashTable->HashLinks[i]);
- }
-
- /* Save us in the table of hash tables */
- Status = BlTblSetEntry((PVOID**)&HtTableArray,
- &Size,
- HashTable,
- Id,
- TblDoNotPurgeEntry);
- if (NT_SUCCESS(Status))
- {
- /* One more -- we're done */
- ++HtTableEntries;
- return Status;
- }
-
-Quickie:
- /* Check if we just allocated the table array now */
- if (!(HtTableEntries) && (HtTableArray))
- {
- /* Free it */
- BlMmFreeHeap(HtTableArray);
- HtTableArray = NULL;
- HtTableSize = 0;
- }
-
- /* Check if we allocated a hash table*/
- if (HashTable)
- {
- /* With links? */
- if (HashTable->HashLinks)
- {
- /* Free them */
- BlMmFreeHeap(HashTable->HashLinks);
- }
-
- /* Free the table*/
- BlMmFreeHeap(HashTable);
- }
-
- /* We're done */
- return Status;
-}
-
-NTSTATUS
-BlHtLookup (
- _In_ ULONG TableId,
- _In_ PBL_HASH_ENTRY Entry,
- _Out_opt_ PBL_HASH_VALUE *Value
- )
-{
- PBL_HASH_TABLE HashTable;
- ULONG HashValue;
- NTSTATUS Status;
- PLIST_ENTRY HashLinkHead, HashLink;
- PBL_HASH_NODE HashNode;
-
- /* Check if the table ID is invalid, or we have no entry, or it's malformed */
- if ((HtTableSize <= TableId) ||
- !(Entry) ||
- ((Entry->Flags & BL_HT_VALUE_IS_INLINE) && (Entry->Size != sizeof(ULONG))))
- {
- /* Fail */
- Status = STATUS_INVALID_PARAMETER;
- }
- else
- {
- /* Otherwise, get the hash table for this index */
- HashTable = HtTableArray[TableId];
-
- /* Get the hash bucket */
- HashValue = HashTable->HashFunction(Entry, HashTable->Size);
-
- /* Start iterating each entry in the bucket, assuming failure */
- Status = STATUS_NOT_FOUND;
- HashLinkHead = &HashTable->HashLinks[HashValue];
- HashLink = HashLinkHead->Flink;
- while (HashLink != HashLinkHead)
- {
- /* Get a node in this bucket, and compare the value */
- HashNode = CONTAINING_RECORD(HashLink, BL_HASH_NODE, ListEntry);
- if (HashTable->CompareFunction(&HashNode->Entry, Entry))
- {
- /* Does the caller want the value? */
- if (Value)
- {
- /* Return it */
- *Value = &HashNode->Value;
- }
-
- /* Return success and stop scanning */
- Status = STATUS_SUCCESS;
- break;
- }
-
- /* Try the next node */
- HashLink = HashLink->Flink;
- }
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-NTSTATUS
-BlHtStore (
- _In_ ULONG TableId,
- _In_ PBL_HASH_ENTRY Entry,
- _In_ PVOID Data,
- _In_ ULONG DataSize
- )
-{
- PBL_HASH_NODE HashNode;
- NTSTATUS Status;
- PLIST_ENTRY HashLinkHead;
- PBL_HASH_TABLE HashTable;
-
- /* Check for invalid table ID, missing arguments, or malformed entry */
- if ((HtTableSize <= TableId) ||
- !(Entry) ||
- !(Data) ||
- !(Entry->Size) ||
- !(Entry->Value) ||
- !(DataSize) ||
- ((Entry->Flags & BL_HT_VALUE_IS_INLINE) && (Entry->Size != sizeof(ULONG))))
- {
- /* Fail the call */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Get the hash table for this ID */
- HashTable = HtTableArray[TableId];
-
- /* Allocate a hash node */
- HashNode = BlMmAllocateHeap(sizeof(*HashNode));
- if (!HashNode)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Capture all the data*/
- HashNode->Entry.Size = Entry->Size;
- HashNode->Entry.Flags = Entry->Flags;
- HashNode->Entry.Value = Entry->Value;
- HashNode->Value.DataSize = DataSize;
- HashNode->Value.Data = Data;
-
- /* Insert it into the bucket list and return success */
- HashLinkHead = &HashTable->HashLinks[HashTable->HashFunction(Entry, HashTable->Size)];
- InsertTailList(HashLinkHead, &HashNode->ListEntry);
- Status = STATUS_SUCCESS;
-
-Quickie:
- return Status;
-}
-
-NTSTATUS
-BlHtDelete (
- _In_ ULONG TableId,
- _In_ PBL_HASH_ENTRY Entry
- )
-{
- PBL_HASH_TABLE HashTable;
- ULONG HashValue;
- NTSTATUS Status;
- PLIST_ENTRY HashLinkHead, HashLink;
- PBL_HASH_NODE HashNode;
-
- /* Check if the table ID is invalid, or we have no entry, or it's malformed */
- if ((HtTableSize <= TableId) ||
- !(Entry) ||
- !(Entry->Size) ||
- !(Entry->Value) ||
- ((Entry->Flags & BL_HT_VALUE_IS_INLINE) && (Entry->Size != sizeof(ULONG))))
- {
- /* Fail */
- Status = STATUS_INVALID_PARAMETER;
- }
- else
- {
- /* Otherwise, get the hash table for this index */
- HashTable = HtTableArray[TableId];
-
- /* Get the hash bucket */
- HashValue = HashTable->HashFunction(Entry, HashTable->Size);
-
- /* Start iterating each entry in the bucket, assuming failure */
- Status = STATUS_NOT_FOUND;
- HashLinkHead = &HashTable->HashLinks[HashValue];
- HashLink = HashLinkHead->Flink;
- while (HashLink != HashLinkHead)
- {
- /* Get a node in this bucket, and compare the value */
- HashNode = CONTAINING_RECORD(HashLink, BL_HASH_NODE, ListEntry);
- if (HashTable->CompareFunction(&HashNode->Entry, Entry))
- {
- /* Remove it from the list and free it */
- RemoveEntryList(&HashNode->ListEntry);
- BlMmFreeHeap(HashNode);
- return STATUS_SUCCESS;
- }
-
- /* Try the next node */
- HashLink = HashLink->Flink;
- }
- }
-
- /* Return back to the caller */
- return Status;
-}
-
-ULONG
-BlUtlCheckSum (
- _In_ ULONG PartialSum,
- _In_ PUCHAR Buffer,
- _In_ ULONG Length,
- _In_ ULONG Flags
- )
-{
- ULONG i;
-
- if (Flags & BL_UTL_CHECKSUM_UCHAR_BUFFER)
- {
- EfiPrintf(L"Not supported\r\n");
- return 0;
- }
- else if (Flags & BL_UTL_CHECKSUM_USHORT_BUFFER)
- {
- PartialSum = (unsigned __int16)PartialSum;
- Length &= ~1;
-
- for (i = 0; i < Length; i += 2)
- {
- PartialSum += *(unsigned __int16 *)&Buffer[i];
- if (Flags & BL_UTL_CHECKSUM_COMPLEMENT)
- {
- PartialSum = (unsigned __int16)((PartialSum >> 16) + PartialSum);
- }
- }
-
- if (i != Length)
- {
- PartialSum += (unsigned __int8)Buffer[Length];
- if (Flags & BL_UTL_CHECKSUM_COMPLEMENT)
- {
- PartialSum = (unsigned __int16)((PartialSum >> 16) + PartialSum);
- }
- }
-
- if (Flags & BL_UTL_CHECKSUM_NEGATE)
- {
- return ~PartialSum;
- }
-
- PartialSum = (unsigned __int16)PartialSum;
- }
- else
- {
- /* Invalid mode */
- return 0;
- }
-
- if (Flags & BL_UTL_CHECKSUM_NEGATE)
- {
- return ~PartialSum;
- }
-
- return PartialSum;
-}
-
-#if defined(_M_IX86) || defined(_M_X64)
-BOOLEAN
-Archx86IsCpuidSupported (
- VOID
- )
-{
- ULONG CallerFlags, Flags;
-
- /* Read the original flags, and add the CPUID bit */
- CallerFlags = __readeflags() ^ 0x200000;
- __writeeflags(CallerFlags);
-
- /* Read our flags now */
- Flags = __readeflags();
-
- /* Check if the bit stuck */
- return (((CallerFlags ^ Flags) >> 21) & 1) ^ 1;
-}
-#endif
-
-BOOLEAN
-BlArchIsCpuIdFunctionSupported (
- _In_ ULONG Function
- )
-{
-#if defined(_M_IX86) || defined(_M_X64)
- BOOLEAN Supported;
- INT CpuInfo[4];
-
- /* Check if the CPU supports this instruction */
- Supported = Archx86IsCpuidSupported();
- if (!Supported)
- {
- return FALSE;
- }
-
- /* Check if it's the extended function */
- if (Function >= 0x80000000)
- {
- /* Check if extended functions are supported */
- __cpuid(CpuInfo, 0x80000000);
- if ((CpuInfo[0] & 0xFFFFFF00) != 0x80000000)
- {
- /* Nope */
- return FALSE;
- }
- }
- else
- {
- /* It's a regular function, get the maximum one supported */
- __cpuid(CpuInfo, 0);
- }
-
- /* Check if our function is within bounds */
- if (Function <= CpuInfo[0])
- {
- return TRUE;
- }
-#else
- EfiPrintf(L"BlArchIsCpuIdFunctionSupported not implemented for this platform.\r\n");
-#endif
-
- /* Nope */
- return FALSE;
-}
-
-ULONGLONG
-BlArchGetPerformanceCounter (
- VOID
- )
-{
-#if defined(_M_IX86) || defined(_M_X64)
- CPU_INFO CpuInfo;
-
- /* Serialize with CPUID, if it exists */
- if (Archx86IsCpuidSupported())
- {
- BlArchCpuId(0, 0, &CpuInfo);
- }
-
- /* Read the TSC */
- return __rdtsc();
-#else
- EfiPrintf(L"BlArchGetPerformanceCounter not implemented for this platform.\r\n");
- return 0;
-#endif
-}
-
-VOID
-BlArchCpuId (
- _In_ ULONG Function,
- _In_ ULONG SubFunction,
- _Out_ PCPU_INFO Result
- )
-{
-#if defined(_M_IX86) || defined(_M_X64)
- /* Use the intrinsic */
- __cpuidex((INT*)Result->AsUINT32, Function, SubFunction);
-#endif
-}
-
-CPU_VENDORS
-BlArchGetCpuVendor (
- VOID
- )
-{
- CPU_INFO CpuInfo;
- INT Temp;
-
- /* Get the CPU Vendor */
- BlArchCpuId(0, 0, &CpuInfo);
-#if defined(_M_IX86) || defined(_M_X64)
- Temp = CpuInfo.Ecx;
- CpuInfo.Ecx = CpuInfo.Edx;
- CpuInfo.Edx = Temp;
-
- /* Check against supported values */
- if (!strncmp((PCHAR)&CpuInfo.Ebx, "GenuineIntel", 12))
- {
- return CPU_INTEL;
- }
- if (!strncmp((PCHAR)&CpuInfo.Ebx, "AuthenticAMD", 12))
- {
- return CPU_AMD;
- }
- if (!strncmp((PCHAR)&CpuInfo.Ebx, "CentaurHauls", 12))
- {
- return CPU_VIA;
- }
-#ifdef _M_IX86
- if (!strncmp((PCHAR)&CpuInfo.Ebx, "CyrixInstead", 12))
- {
- return CPU_CYRIX;
- }
- if (!strncmp((PCHAR)&CpuInfo.Ebx, "GenuineTMx86", 12))
- {
- return CPU_TRANSMETA;
- }
- if (!strncmp((PCHAR)&CpuInfo.Ebx, "RiseRiseRise", 12))
- {
- return CPU_RISE;
- }
-#endif // _M_IX86
-#else // defined(_M_IX86) || defined(_M_X64)
- EfiPrintf(L"BlArchGetCpuVendor not implemented for this platform.\r\n");
-#endif
- /* Other */
- return CPU_UNKNOWN;
-}
diff --git a/boot/environ/lib/mm/blkalloc.c b/boot/environ/lib/mm/blkalloc.c
deleted file mode 100644
index 53dae681dd1..00000000000
--- a/boot/environ/lib/mm/blkalloc.c
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/mm/blkalloc.c
- * PURPOSE: Boot Library Memory Manager Block Allocator
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
-*/
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-PVOID* MmBlockAllocatorTable;
-ULONG MmBlockAllocatorTableEntries;
-BOOLEAN MmBlockAllocatorInitialized;
-
-typedef struct _BL_BLOCK_DESCRIPTOR
-{
- LIST_ENTRY ListHead;
- ULONG Unknown;
- BL_MEMORY_TYPE Type;
- ULONG Attributes;
- ULONG Unknown2;
- ULONG Count;
- ULONG Count2;
- ULONG Size;
- ULONG BlockId;
- ULONG ReferenceCount;
-} BL_BLOCK_DESCRIPTOR, *PBL_BLOCK_DESCRIPTOR;
-
-typedef struct _BL_BLOCK_ENTRY
-{
- LIST_ENTRY ListEntry;
- ULONG Todo;
-} BL_BLOCK_ENTRY, *PBL_BLOCK_ENTRY;
-
-/* FUNCTIONS *****************************************************************/
-
-BOOLEAN
-MmBapCompareBlockAllocatorTableEntry (
- _In_ PVOID Entry,
- _In_ PVOID Argument1,
- _In_ PVOID Argument2,
- _In_ PVOID Argument3,
- _In_ PVOID Argument4
- )
-{
- PBL_BLOCK_DESCRIPTOR BlockInfo = (PBL_BLOCK_DESCRIPTOR)Entry;
- ULONG BlockId = PtrToUlong(Argument1);
-
- /* Check if the block ID matches */
- return BlockInfo->BlockId == BlockId;
-}
-
-PBL_BLOCK_DESCRIPTOR
-MmBapFindBlockInformation (
- ULONG BlockId
- )
-{
- ULONG EntryId;
-
- /* Find the block that matches */
- EntryId = BlockId;
- return BlTblFindEntry(MmBlockAllocatorTable,
- MmBlockAllocatorTableEntries,
- &EntryId,
- MmBapCompareBlockAllocatorTableEntry,
- UlongToPtr(EntryId),
- NULL,
- NULL,
- NULL);
-}
-
-NTSTATUS
-MmBapFreeBlockAllocatorDescriptor (
- _In_ PBL_BLOCK_DESCRIPTOR BlockInfo,
- _In_ PBL_BLOCK_ENTRY BlockEntry
- )
-{
- /* @TODO FIXME: Later */
- EfiPrintf(L"Block free not yet implemented\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-BlpMmDeleteBlockAllocator (
- _In_ ULONG BlockId
- )
-{
- NTSTATUS Status, LocalStatus;
- PBL_BLOCK_DESCRIPTOR BlockInfo;
- PLIST_ENTRY ListHead, NextEntry;
- PBL_BLOCK_ENTRY BlockEntry;
-
- /* Nothing to delete if we're not initialized */
- if (!MmBlockAllocatorInitialized)
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Find the block descriptor */
- BlockInfo = MmBapFindBlockInformation(BlockId);
- if (BlockInfo)
- {
- /* Assume success for now */
- Status = STATUS_SUCCESS;
-
- /* Do we have at least one reference? */
- if (BlockInfo->ReferenceCount)
- {
- /* Iterate over the allocated blocks */
- ListHead = &BlockInfo->ListHead;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Free each one */
- BlockEntry = CONTAINING_RECORD(NextEntry,
- BL_BLOCK_ENTRY,
- ListEntry);
- LocalStatus = MmBapFreeBlockAllocatorDescriptor(BlockInfo,
- BlockEntry);
- if (!NT_SUCCESS(LocalStatus))
- {
- /* Remember status on failure only */
- Status = LocalStatus;
- }
- }
-
- /* Drop a reference */
- BlockInfo->ReferenceCount--;
- }
- else
- {
- /* There aren't any references, so why are we being called? */
- Status = STATUS_INVALID_PARAMETER;
- }
- }
- else
- {
- /* No block exists with this ID */
- Status = STATUS_UNSUCCESSFUL;
- }
-
- /* Return back */
- return Status;
-}
-
-NTSTATUS
-MmBapFreeBlockAllocatorTableEntry (
- _In_ PVOID Entry,
- _In_ ULONG Index
- )
-{
- PBL_BLOCK_DESCRIPTOR BlockInfo = (PBL_BLOCK_DESCRIPTOR)Entry;
- NTSTATUS Status, LocalStatus;
-
- /* Assume success */
- Status = STATUS_SUCCESS;
-
- /* Check if there was at least one reference */
- if (BlockInfo->ReferenceCount > 1)
- {
- /* Try to delete the allocator */
- LocalStatus = BlpMmDeleteBlockAllocator(BlockInfo->BlockId);
- if (!NT_SUCCESS(LocalStatus))
- {
- /* Remember status on failure only */
- Status = LocalStatus;
- }
- }
-
- /* Now destroy the allocator's descriptor */
- LocalStatus = BlMmFreeHeap(BlockInfo);
- if (!NT_SUCCESS(LocalStatus))
- {
- /* Remember status on failure only */
- Status = LocalStatus;
- }
-
- /* Free the entry, and return failure, if any */
- MmBlockAllocatorTable[Index] = NULL;
- return Status;
-}
-
-NTSTATUS
-MmBapPurgeBlockAllocatorTableEntry (
- _In_ PVOID Entry
- )
-{
- PBL_BLOCK_DESCRIPTOR BlockInfo = (PBL_BLOCK_DESCRIPTOR)Entry;
- NTSTATUS Status;
-
- /* Check if there's a reference on the block descriptor */
- if (BlockInfo->ReferenceCount)
- {
- /* Don't allow purging */
- Status = STATUS_UNSUCCESSFUL;
- }
- else
- {
- /* Free the entry */
- Status = MmBapFreeBlockAllocatorTableEntry(BlockInfo,
- BlockInfo->BlockId);
- }
-
- /* Return purge status */
- return Status;
-}
-
-NTSTATUS
-BlpMmCreateBlockAllocator (
- VOID
- )
-{
- PBL_BLOCK_DESCRIPTOR BlockInfo;
- ULONG BlockId;
- NTSTATUS Status;
-
- /* If the block allocator isn't initialized, bail out */
- BlockId = -1;
- if (!MmBlockAllocatorInitialized)
- {
- goto Quickie;
- }
-
- /* Allocate a block descriptor and zero it out */
- BlockInfo = BlMmAllocateHeap(sizeof(*BlockInfo));
- if (!BlockInfo)
- {
- goto Quickie;
- }
- RtlZeroMemory(BlockInfo, sizeof(*BlockInfo));
-
- /* Setup the block descriptor */
- BlockInfo->Attributes = 0;
- BlockInfo->Type = BlLoaderBlockMemory;
- BlockInfo->Unknown = 1;
- BlockInfo->Unknown2 = 1;
- BlockInfo->Size = PAGE_SIZE;
- BlockInfo->Count = 128;
- BlockInfo->Count2 = 128;
- InitializeListHead(&BlockInfo->ListHead);
-
- /* Add it to the list of block descriptors */
- Status = BlTblSetEntry(&MmBlockAllocatorTable,
- &MmBlockAllocatorTableEntries,
- BlockInfo,
- &BlockId,
- MmBapPurgeBlockAllocatorTableEntry);
- if (NT_SUCCESS(Status))
- {
- /* Add the initial reference and store the block ID */
- BlockInfo->ReferenceCount = 1;
- BlockInfo->BlockId = BlockId;
- }
-
-Quickie:
- /* On failure, free the block descriptor */
- if (BlockId == -1)
- {
- BlMmFreeHeap(BlockInfo);
- }
-
- /* Return the block descriptor ID, or -1 on failure */
- return BlockId;
-}
-
-NTSTATUS
-MmBaInitialize (
- VOID
- )
-{
- NTSTATUS Status;
- ULONG Size;
-
- /* Allocate 8 table entries */
- MmBlockAllocatorTableEntries = 8;
- Size = sizeof(BL_BLOCK_DESCRIPTOR) * MmBlockAllocatorTableEntries;
- MmBlockAllocatorTable = BlMmAllocateHeap(Size);
- if (MmBlockAllocatorTable)
- {
- /* Zero them out -- we're all done */
- Status = STATUS_SUCCESS;
- RtlZeroMemory(MmBlockAllocatorTable, Size);
- MmBlockAllocatorInitialized = 1;
- }
- else
- {
- /* Bail out since we're out of memory */
- Status = STATUS_NO_MEMORY;
- MmBlockAllocatorInitialized = 0;
- }
-
- /* Return initialization status */
- return Status;
-}
diff --git a/boot/environ/lib/mm/descriptor.c b/boot/environ/lib/mm/descriptor.c
deleted file mode 100644
index 6c212ed7efe..00000000000
--- a/boot/environ/lib/mm/descriptor.c
+++ /dev/null
@@ -1,1406 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/mm/descriptor.c
- * PURPOSE: Boot Library Memory Manager Descriptor Manager
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
-*/
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-BL_MEMORY_DESCRIPTOR MmStaticMemoryDescriptors[512];
-ULONG MmGlobalMemoryDescriptorCount;
-PBL_MEMORY_DESCRIPTOR MmGlobalMemoryDescriptors;
-ULONG MmGlobalMemoryDescriptorsUsed;
-PBL_MEMORY_DESCRIPTOR MmDynamicMemoryDescriptors;
-ULONG MmDynamicMemoryDescriptorCount;
-
-BL_MEMORY_TYPE MmPlatformMemoryTypePrecedence[] =
-{
- BlReservedMemory,
- BlUnusableMemory,
- BlDeviceIoMemory,
- BlDevicePortMemory,
- BlPalMemory,
- BlEfiRuntimeCodeMemory,
- BlEfiRuntimeDataMemory,
- BlAcpiNvsMemory,
- BlAcpiReclaimMemory,
- BlEfiBootMemory,
- BlConventionalMemory,
- BlConventionalZeroedMemory
-};
-
-/* FUNCTIONS *****************************************************************/
-
-LONG
-MmMdpLookupTypePrecedenceIndex (
- _In_ BL_MEMORY_TYPE Type
- )
-{
- ULONG i;
-
- /* Check the precedence array */
- for (i = 0; i < RTL_NUMBER_OF(MmPlatformMemoryTypePrecedence); i++)
- {
- /* Check for a match */
- if (MmPlatformMemoryTypePrecedence[i] == Type)
- {
- /* Return the index */
- return i;
- }
- }
-
- /* Invalid index type */
- return -1;
-}
-
-/* The order is Conventional > Other > System > Loader > Application */
-BOOLEAN
-MmMdpHasPrecedence (
- _In_ BL_MEMORY_TYPE Type1,
- _In_ BL_MEMORY_TYPE Type2
- )
-{
- BL_MEMORY_CLASS Class1, Class2;
- ULONG i, j;
-
- /* It isn't free RAM, but the comparator is -- it succeeds it */
- if (Type2 == BlConventionalMemory)
- {
- return TRUE;
- }
-
- /* Descriptor is free RAM -- it precedes */
- if (Type1 == BlConventionalMemory)
- {
- return FALSE;
- }
-
- /* Descriptor is not system, application, or loader class -- it precedes */
- Class1 = Type1 >> BL_MEMORY_CLASS_SHIFT;
- if ((Class1 != BlSystemClass) &&
- (Class1 != BlApplicationClass) &&
- (Class1 != BlLoaderClass))
- {
- return TRUE;
- }
-
- /* It isn't one of those classes, but the comparator it -- it succeeds it */
- Class2 = Type2 >> BL_MEMORY_CLASS_SHIFT;
- if ((Class2 != BlSystemClass) &&
- (Class2 != BlApplicationClass) &&
- (Class2 != BlLoaderClass))
- {
- return FALSE;
- }
-
- /* Descriptor is system class */
- if (Class1 == BlSystemClass)
- {
- /* If the other guy isn't, system wins */
- if (Class2 != BlSystemClass)
- {
- return TRUE;
- }
-
- /* Scan for the descriptor's system precedence index */
- i = MmMdpLookupTypePrecedenceIndex(Type1);
- j = MmMdpLookupTypePrecedenceIndex(Type2);
-
- /* Does the current have a valid index? */
- if (i == 0xFFFFFFFF)
- {
- return TRUE;
- }
-
- /* Yes, what about the comparator? */
- if (j == 0xFFFFFFFF)
- {
- return FALSE;
- }
-
- /* Let the indexes fight! */
- return i <= j;
- }
-
- /* Descriptor is not system class, but comparator is -- it succeeds it */
- if (Class2 == BlSystemClass)
- {
- return FALSE;
- }
-
- /* Descriptor is loader class -- it preceedes */
- if (Class1 == BlLoaderClass)
- {
- return TRUE;
- }
-
- /* It isn't loader class -- if the other guy is, succeed it */
- return Class2 != BlLoaderClass;
-}
-
-VOID
-MmMdpSwitchToDynamicDescriptors (
- _In_ ULONG Count
- )
-{
- EfiPrintf(L"Dynamic switch NOT SUPPORTED!!!\r\n");
- EfiStall(10000000);
-}
-
-NTSTATUS
-MmMdFreeDescriptor (
- _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor
- )
-{
- NTSTATUS Status;
-
- /* Check if this is a valid static descriptor */
- if (((MmDynamicMemoryDescriptors) &&
- (MemoryDescriptor >= MmDynamicMemoryDescriptors) &&
- (MemoryDescriptor < &MmDynamicMemoryDescriptors[MmDynamicMemoryDescriptorCount])) ||
- ((MemoryDescriptor >= MmStaticMemoryDescriptors) &&
- (MemoryDescriptor < &MmStaticMemoryDescriptors[RTL_NUMBER_OF(MmStaticMemoryDescriptors)])))
- {
- /* It's a global/static descriptor, so just zero it */
- RtlZeroMemory(MemoryDescriptor, sizeof(BL_MEMORY_DESCRIPTOR));
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* It's a dynamic descriptor, so free it */
- Status = BlMmFreeHeap(MemoryDescriptor);
- }
-
- /* Done */
- return Status;
-}
-
-VOID
-MmMdpSaveCurrentListPointer (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ PLIST_ENTRY Current
- )
-{
- PBL_MEMORY_DESCRIPTOR FirstEntry, LastEntry;
-
- /* Make sure that this is not a global descriptor and not the first one */
- FirstEntry = &MmGlobalMemoryDescriptors[0];
- LastEntry = &MmGlobalMemoryDescriptors[MmGlobalMemoryDescriptorCount];
- if ((((ULONG_PTR)Current < (ULONG_PTR)FirstEntry) ||
- ((ULONG_PTR)Current >= (ULONG_PTR)LastEntry)) &&
- (Current != MdList->First))
- {
- /* Save this as the current pointer */
- MdList->This = Current;
- }
-}
-
-ULONG
-MmMdCountList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
- )
-{
- PLIST_ENTRY First, NextEntry;
- ULONG Count;
-
- /* Iterate the list */
- for (Count = 0, First = MdList->First, NextEntry = First->Flink;
- NextEntry != First;
- NextEntry = NextEntry->Flink, Count++);
-
- /* Return the count */
- return Count;
-}
-
-VOID
-MmMdInitializeList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ ULONG Type,
- _In_ PLIST_ENTRY ListHead
- )
-{
- /* Check if a list was specified */
- if (ListHead)
- {
- /* Use it */
- MdList->First = ListHead;
- }
- else
- {
- /* Otherwise, use the internal, built-in list */
- InitializeListHead(&MdList->ListHead);
- MdList->First = &MdList->ListHead;
- }
-
- /* Set the type */
- MdList->Type = Type;
-
- /* Initialize current iterator to nothing */
- MdList->This = NULL;
-}
-
-NTSTATUS
-MmMdCopyList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST DestinationList,
- _In_ PBL_MEMORY_DESCRIPTOR_LIST SourceList,
- _In_opt_ PBL_MEMORY_DESCRIPTOR ListDescriptor,
- _Out_ PULONG ActualCount,
- _In_ ULONG Count,
- _In_ ULONG Flags
- )
-{
- NTSTATUS Status;
- PULONG Used;
- PLIST_ENTRY First, NextEntry;
- PBL_MEMORY_DESCRIPTOR Descriptor;
-
- /* Both parameters must be present */
- if (!(DestinationList) || !(SourceList))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Assume success */
- Status = STATUS_SUCCESS;
-
- /* Check if a descriptor is being used to store the list */
- if (ListDescriptor)
- {
- /* See how big it is */
- Flags |= BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG;
- Used = ActualCount;
- }
- else
- {
- /* We are using our internal descriptors instead */
- Used = &MmGlobalMemoryDescriptorsUsed;
- ++MmDescriptorCallTreeCount;
-
- /* Use as many as are available */
- Count = MmGlobalMemoryDescriptorCount;
- ListDescriptor = MmGlobalMemoryDescriptors;
- }
-
- /* Never truncate descriptors during a list copy */
- Flags |= BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG;
-
- /* Iterate through the list */
- First = SourceList->First;
- NextEntry = First->Flink;
- while ((NextEntry != First) && (NT_SUCCESS(Status)))
- {
- /* Make sure there's still space */
- if (Count <= *Used)
- {
- Status = STATUS_NO_MEMORY;
- break;
- }
-
- /* Get the current descriptor */
- Descriptor = CONTAINING_RECORD(NextEntry,
- BL_MEMORY_DESCRIPTOR,
- ListEntry);
-
- /* Copy it into one of the descriptors we have */
- RtlCopyMemory(&ListDescriptor[*Used],
- Descriptor,
- sizeof(*Descriptor));
-
- /* Add it to the list we have */
- Status = MmMdAddDescriptorToList(DestinationList,
- &ListDescriptor[*Used],
- Flags);
- ++*Used;
-
- /* Move to the next entry */
- NextEntry = NextEntry->Flink;
- }
-
- /* Check if the global descriptors were used */
- if (ListDescriptor == MmGlobalMemoryDescriptors)
- {
- /* Unwind our usage */
- MmMdFreeGlobalDescriptors();
- --MmDescriptorCallTreeCount;
- }
-
- /* Return back to caller */
- return Status;
-}
-
-VOID
-MmMdRemoveDescriptorFromList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ PBL_MEMORY_DESCRIPTOR Entry
- )
-{
- /* Remove the entry */
- RemoveEntryList(&Entry->ListEntry);
-
- /* Check if this was the current link */
- if (MdList->This == &Entry->ListEntry)
- {
- /* Remove the current link and set the next one */
- MdList->This = NULL;
- MmMdpSaveCurrentListPointer(MdList, Entry->ListEntry.Blink);
- }
-}
-
-VOID
-MmMdFreeList(
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList
- )
-{
- PLIST_ENTRY FirstEntry, NextEntry;
- PBL_MEMORY_DESCRIPTOR Entry;
-
- /* Go over every descriptor from the top */
- FirstEntry = MdList->First;
- NextEntry = FirstEntry->Flink;
- while (NextEntry != FirstEntry)
- {
- /* Remove and free each one */
- Entry = CONTAINING_RECORD(NextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
- NextEntry = NextEntry->Flink;
- MmMdRemoveDescriptorFromList(MdList, Entry);
- MmMdFreeDescriptor(Entry);
- }
-}
-
-PBL_MEMORY_DESCRIPTOR
-MmMdInitByteGranularDescriptor (
- _In_ ULONG Flags,
- _In_ BL_MEMORY_TYPE Type,
- _In_ ULONGLONG BasePage,
- _In_ ULONGLONG VirtualPage,
- _In_ ULONGLONG PageCount
- )
-{
- PBL_MEMORY_DESCRIPTOR MemoryDescriptor;
-
- /* If we're out of descriptors, bail out */
- if (MmGlobalMemoryDescriptorsUsed >= MmGlobalMemoryDescriptorCount)
- {
- EfiPrintf(L"Out of descriptors!\r\n");
- EfiStall(1000000);
- return NULL;
- }
-
- /* Take one of the available descriptors and fill it out */
- MemoryDescriptor = &MmGlobalMemoryDescriptors[MmGlobalMemoryDescriptorsUsed];
- MemoryDescriptor->BasePage = BasePage;
- MemoryDescriptor->VirtualPage = VirtualPage;
- MemoryDescriptor->PageCount = PageCount;
- MemoryDescriptor->Flags = Flags;
- MemoryDescriptor->Type = Type;
- InitializeListHead(&MemoryDescriptor->ListEntry);
-
- /* Increment the count and return the descriptor */
- MmGlobalMemoryDescriptorsUsed++;
- return MemoryDescriptor;
-}
-
-NTSTATUS
-MmMdTruncateDescriptors (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList,
- _In_ ULONGLONG BasePage
- )
-{
- PLIST_ENTRY ListHead, NextEntry;
- PBL_MEMORY_DESCRIPTOR Descriptor, NewDescriptor;
- ULONGLONG FoundEndPage;
-
- /* Search the descriptor list */
- ListHead = MdList->First;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Get the current descriptor */
- Descriptor = CONTAINING_RECORD(NextEntry,
- BL_MEMORY_DESCRIPTOR,
- ListEntry);
-
- /* Go to the next entry in case we have to remove */
- NextEntry = NextEntry->Flink;
-
- /* Don't touch anything else but free RAM */
- if (((Descriptor->Type >> BL_MEMORY_CLASS_SHIFT) == BlSystemClass) &&
- (Descriptor->Type != BlConventionalMemory))
- {
- continue;
- }
-
- /* Check if this page is within the descriptor's region */
- FoundEndPage = Descriptor->BasePage + Descriptor->PageCount;
- if (BasePage > Descriptor->BasePage)
- {
- /* Check if it doesn't go beyond the descriptor */
- if (BasePage < FoundEndPage)
- {
- /* Create a new descriptor to describe this region */
- EfiPrintf(L"Truncating descriptor type %lx base: %llx end: %llx\r\n",
- Descriptor->Type, Descriptor->BasePage, FoundEndPage);
- NewDescriptor = MmMdInitByteGranularDescriptor(Descriptor->Flags,
- Descriptor->Type,
- BasePage,
- 0,
- FoundEndPage - BasePage);
- if (!NewDescriptor)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Cut off this descriptor to make it shorter */
- Descriptor->PageCount = BasePage - Descriptor->BasePage;
-
- /* Add the region to the new list */
- MmMdAddDescriptorToList(NewList,
- NewDescriptor,
- BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG);
- }
- }
- else
- {
- /* This whole descriptor covers the truncated area */
- EfiPrintf(L"Truncating descriptor type %lx base: %llx end: %llx\r\n",
- Descriptor->Type, Descriptor->BasePage, FoundEndPage);
- MmMdRemoveDescriptorFromList(MdList, Descriptor);
- MmMdAddDescriptorToList(NewList,
- Descriptor,
- BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG);
- }
- }
-
- /* All good if we got here */
- return STATUS_SUCCESS;
-}
-
-BOOLEAN
-MmMdpTruncateDescriptor (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor,
- _In_ ULONG Flags
- )
-{
- PBL_MEMORY_DESCRIPTOR NextDescriptor, PreviousDescriptor;
- PLIST_ENTRY NextEntry, PreviousEntry;
- ULONGLONG EndPage, PreviousEndPage;// , NextEndPage;
-
- /* Get the next descriptor */
- NextEntry = MemoryDescriptor->ListEntry.Flink;
- NextDescriptor = CONTAINING_RECORD(NextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- /* Get the previous descriptor */
- PreviousEntry = MemoryDescriptor->ListEntry.Blink;
- PreviousDescriptor = CONTAINING_RECORD(PreviousEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- /* Calculate end pages */
- EndPage = MemoryDescriptor->BasePage + MemoryDescriptor->PageCount;
- //NextEndPage = NextDescriptor->BasePage + NextDescriptor->PageCount;
- PreviousEndPage = PreviousDescriptor->BasePage + PreviousDescriptor->PageCount;
-
- /* Check for backward overlap */
- if ((PreviousEntry != MdList->First) && (MemoryDescriptor->BasePage < PreviousEndPage))
- {
- EfiPrintf(L"Overlap detected -- this is unexpected on x86/x64 platforms\r\n");
- EfiStall(1000000);
- }
-
- /* Check for forward overlap */
- if ((NextEntry != MdList->First) && (NextDescriptor->BasePage < EndPage))
- {
- EfiPrintf(L"Overlap detected -- this is unexpected on x86/x64 platforms\r\n");
- EfiStall(1000000);
- }
-
- /* Nothing to do */
- return FALSE;
-}
-
-BOOLEAN
-MmMdpCoalesceDescriptor (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor,
- _In_ ULONG Flags
- )
-{
- PBL_MEMORY_DESCRIPTOR NextDescriptor, PreviousDescriptor;
- PLIST_ENTRY NextEntry, PreviousEntry;
- ULONGLONG EndPage, PreviousEndPage, PreviousMappedEndPage, MappedEndPage;
-
- /* Get the next descriptor */
- NextEntry = MemoryDescriptor->ListEntry.Flink;
- NextDescriptor = CONTAINING_RECORD(NextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- /* Get the previous descriptor */
- PreviousEntry = MemoryDescriptor->ListEntry.Blink;
- PreviousDescriptor = CONTAINING_RECORD(PreviousEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- /* Calculate end pages */
- EndPage = MemoryDescriptor->BasePage + MemoryDescriptor->PageCount;
- MappedEndPage = MemoryDescriptor->BasePage + MemoryDescriptor->PageCount;
- PreviousMappedEndPage = PreviousDescriptor->VirtualPage + PreviousDescriptor->PageCount;
- PreviousEndPage = PreviousDescriptor->BasePage + PreviousDescriptor->PageCount;
- PreviousMappedEndPage = PreviousDescriptor->VirtualPage + PreviousDescriptor->PageCount;
-
- /* Check if the previous entry touches the current entry, and is compatible */
- if ((PreviousEntry != MdList->First) &&
- (PreviousDescriptor->Type == MemoryDescriptor->Type) &&
- ((PreviousDescriptor->Flags ^ MemoryDescriptor->Flags) & 0x1B19FFFF) &&
- (PreviousEndPage == MemoryDescriptor->BasePage) &&
- ((!(MemoryDescriptor->VirtualPage) && !(PreviousDescriptor->VirtualPage)) ||
- ((MemoryDescriptor->VirtualPage) && (PreviousDescriptor->VirtualPage) &&
- (PreviousMappedEndPage == MemoryDescriptor->VirtualPage))))
- {
- EfiPrintf(L"Previous descriptor coalescable!\r\n");
- }
-
- /* CHeck if the current entry touches the next entry, and is compatible */
- if ((NextEntry != MdList->First) &&
- (NextDescriptor->Type == MemoryDescriptor->Type) &&
- ((NextDescriptor->Flags ^ MemoryDescriptor->Flags) & 0x1B19FFFF) &&
- (EndPage == NextDescriptor->BasePage) &&
- ((!(MemoryDescriptor->VirtualPage) && !(NextDescriptor->VirtualPage)) ||
- ((MemoryDescriptor->VirtualPage) && (NextDescriptor->VirtualPage) &&
- (MappedEndPage == NextDescriptor->VirtualPage))))
- {
- EfiPrintf(L"Next descriptor coalescable!\r\n");
- }
-
- /* Nothing to do */
- return FALSE;
-}
-
-NTSTATUS
-MmMdAddDescriptorToList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ PBL_MEMORY_DESCRIPTOR MemoryDescriptor,
- _In_ ULONG Flags
- )
-{
- PLIST_ENTRY ThisEntry, FirstEntry;
- PBL_MEMORY_DESCRIPTOR ThisDescriptor;
-
- /* Arguments must be present */
- if (!(MdList) || !(MemoryDescriptor))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Check if coalescing is forcefully disabled */
- if (Flags & BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG)
- {
- /* Then we won't be coalescing */
- Flags &= ~BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG;
- }
- else if (MemoryDescriptor->Flags & BlMemoryCoalesced)
- {
- /* Coalesce if the descriptor requires it */
- Flags |= BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG;
- }
-
- /* Check if truncation is forcefully disabled */
- if (Flags & BL_MM_ADD_DESCRIPTOR_NEVER_TRUNCATE_FLAG)
- {
- Flags &= ~BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG;
- }
-
- /* Update the current list pointer if the descriptor requires it */
- if (MemoryDescriptor->Flags & BlMemoryUpdate)
- {
- Flags |= BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG;
- }
-
- /* Get the current descriptor */
- ThisEntry = MdList->This;
- ThisDescriptor = CONTAINING_RECORD(ThisEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- /* Also get the first descriptor */
- FirstEntry = MdList->First;
-
- /* Check if there's no current pointer, or if it's higher than the new one */
- if (!(ThisEntry) ||
- (MemoryDescriptor->BasePage <= ThisDescriptor->BasePage))
- {
- /* Start at the first descriptor instead, since current is past us */
- ThisEntry = FirstEntry->Flink;
- }
-
- /* Loop until we find the right location to insert */
- while (ThisEntry != FirstEntry)
- {
- /* Get the descriptor part of this entry */
- ThisDescriptor = CONTAINING_RECORD(ThisEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- /* Is the address smaller, or equal but more important? */
- if ((MemoryDescriptor->BasePage < ThisDescriptor->BasePage) ||
- ((MemoryDescriptor->BasePage == ThisDescriptor->BasePage) &&
- (MmMdpHasPrecedence(MemoryDescriptor->Type, ThisDescriptor->Type))))
- {
- /* Then insert right here */
- InsertTailList(ThisEntry, &MemoryDescriptor->ListEntry);
- goto Quickie;
- }
-
- /* Try the next entry */
- ThisEntry = ThisEntry->Flink;
- }
-
- /* Then we didn't find a good match, so insert it right here */
- InsertTailList(FirstEntry, &MemoryDescriptor->ListEntry);
-
-Quickie:
- /* Do we have to truncate? */
- if (Flags & BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG)
- {
- /* Do it and then exit */
- if (MmMdpTruncateDescriptor(MdList, MemoryDescriptor, Flags))
- {
- return STATUS_SUCCESS;
- }
- }
-
- /* Do we have to coalesce? */
- if (Flags & BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG)
- {
- /* Do it and then exit */
- if (MmMdpCoalesceDescriptor(MdList, MemoryDescriptor, Flags))
- {
- return STATUS_SUCCESS;
- }
- }
-
- /* Do we have to update the current pointer? */
- if (Flags & BL_MM_ADD_DESCRIPTOR_UPDATE_LIST_POINTER_FLAG)
- {
- /* Do it */
- MmMdpSaveCurrentListPointer(MdList, &MemoryDescriptor->ListEntry);
- }
-
- /* We're done */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-MmMdRemoveRegionFromMdlEx (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ ULONG Flags,
- _In_ ULONGLONG BasePage,
- _In_ ULONGLONG PageCount,
- _Out_opt_ PBL_MEMORY_DESCRIPTOR_LIST NewMdList
- )
-{
- BOOLEAN HaveNewList, UseVirtualPage;
- NTSTATUS Status;
- PLIST_ENTRY ListHead, NextEntry;
- PBL_MEMORY_DESCRIPTOR Descriptor, NewDescriptor, ListDescriptor;
- BL_MEMORY_DESCRIPTOR OldDescriptor;
- ULONGLONG RegionSize;
- ULONGLONG FoundBasePage, FoundEndPage, FoundPageCount, EndPage, VirtualPage;
-
- /* Set initial status */
- Status = STATUS_SUCCESS;
- ListDescriptor = NULL;
- NewDescriptor = NULL;
- HaveNewList = FALSE;
-
- /* Check if removed descriptors should go into a new list */
- if (NewMdList != NULL)
- {
- /* Initialize it */
- MmMdInitializeList(NewMdList, MdList->Type, NULL);
-
- /* Remember for later */
- HaveNewList = TRUE;
- }
-
- /* Is the region being removed physical? */
- UseVirtualPage = FALSE;
- if (!(Flags & BL_MM_REMOVE_VIRTUAL_REGION_FLAG))
- {
- /* Is this a list of virtual descriptors? */
- if (MdList->Type == BlMdVirtual)
- {
- /* Request is nonsensical, fail */
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
- }
- else
- {
- /* Is this a list of physical descriptors? */
- if (MdList->Type == BlMdPhysical)
- {
- /* We'll have to use the virtual page instead */
- UseVirtualPage = TRUE;
- }
- }
-
- /* Loop the list*/
- ListHead = MdList->First;
- NextEntry = ListHead->Flink;
- while (NextEntry != ListHead)
- {
- /* Get the descriptor */
- Descriptor = CONTAINING_RECORD(NextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- /* Extract range details */
- FoundBasePage = UseVirtualPage ? Descriptor->VirtualPage : Descriptor->BasePage;
- FoundPageCount = Descriptor->PageCount;
- FoundEndPage = FoundBasePage + FoundPageCount;
- EndPage = PageCount + BasePage;
-
- /* Make a copy of the original descriptor */
- OldDescriptor = *Descriptor;
-
- /* Check if the region to be removed starts after the found region starts */
- if ((BasePage > FoundBasePage) || (FoundBasePage >= EndPage))
- {
- /* Check if the region ends after the found region */
- if ((BasePage >= FoundEndPage) || (FoundEndPage > EndPage))
- {
- /* Check if the found region starts after the region or ends before the region */
- if ((FoundBasePage >= BasePage) || (EndPage >= FoundEndPage))
- {
- /* This is a fully-mapped descriptor -- change nothing */
- OldDescriptor.PageCount = 0;
- }
- else
- {
- /* This descriptor fully covers the entire allocation */
- FoundBasePage = Descriptor->BasePage;
- VirtualPage = Descriptor->VirtualPage;
- FoundPageCount = BasePage - FoundBasePage;
-
- /* This is how many pages we will eat away from the descriptor */
- RegionSize = FoundPageCount + PageCount;
-
- /* Update the descriptor to account for the consumed pages */
- Descriptor->BasePage += RegionSize;
- Descriptor->PageCount -= RegionSize;
- if (VirtualPage)
- {
- Descriptor->VirtualPage += RegionSize;
- }
-
- /* Initialize a descriptor for the start of the region */
- NewDescriptor = MmMdInitByteGranularDescriptor(Descriptor->Flags,
- Descriptor->Type,
- FoundBasePage,
- VirtualPage,
- FoundPageCount);
- if (!NewDescriptor)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Add it into the list */
- Status = MmMdAddDescriptorToList(MdList, NewDescriptor, Flags);
- if (!NT_SUCCESS(Status))
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Don't free it on exit path */
- NewDescriptor = NULL;
-
- /* Adjust the leftover descriptor */
- OldDescriptor.BasePage += FoundPageCount;
- OldDescriptor.PageCount = PageCount;
- if (OldDescriptor.VirtualPage)
- {
- OldDescriptor.VirtualPage += FoundPageCount;
- }
- }
- }
- else
- {
- /* This descriptor contains the entire allocation */
- RegionSize = FoundEndPage - BasePage;
- Descriptor->PageCount -= RegionSize;
-
- /* Adjust the leftover descriptor */
- OldDescriptor.BasePage += Descriptor->PageCount;
- OldDescriptor.PageCount = RegionSize;
- if (OldDescriptor.VirtualPage)
- {
- OldDescriptor.VirtualPage += FoundPageCount;
- }
- }
-
- /* Go to the next entry */
- NextEntry = NextEntry->Flink;
- }
- else
- {
- /*
- * This descriptor contains the end of the allocation. It may:
- *
- * - Contain the full allocation (i.e.: the start is aligned)
- * - Contain parts of the end of the allocation (i.e.: the end is beyond)
- * - Contain the entire tail end of the allocation (i..e:the end is within)
- *
- * So first, figure out if we cover the entire end or not
- */
- if (EndPage < FoundEndPage)
- {
- /* The allocation goes past the end of this descriptor */
- FoundEndPage = EndPage;
- }
-
- /* This is how many pages we will eat away from the descriptor */
- FoundPageCount = FoundEndPage - FoundBasePage;
-
- /* Update the descriptor to account for the consumed pages */
- Descriptor->BasePage += FoundPageCount;
- Descriptor->PageCount -= FoundPageCount;
- if (Descriptor->VirtualPage)
- {
- Descriptor->VirtualPage += FoundPageCount;
- }
-
- /* Go to the next entry */
- NextEntry = NextEntry->Flink;
-
- /* Check if the descriptor is now empty */
- if (!Descriptor->PageCount)
- {
- /* Remove it */
- MmMdRemoveDescriptorFromList(MdList, Descriptor);
-
- /* Check if we're supposed to insert it into a new list */
- if (HaveNewList)
- {
- /* This is the one to add */
- ListDescriptor = Descriptor;
- }
- else
- {
- /* Nope -- just get rid of it */
- MmMdFreeDescriptor(Descriptor);
- }
- }
- }
-
- /* Is there a remainder descriptor, and do we have a list for it */
- if ((OldDescriptor.PageCount) && (HaveNewList))
- {
- /* Did we already chop off the descriptor? */
- if (ListDescriptor)
- {
- /* Use what we previously chopped */
- *ListDescriptor = OldDescriptor;
- }
- else
- {
- /* First time, so build a descriptor to describe the leftover */
- ListDescriptor = MmMdInitByteGranularDescriptor(OldDescriptor.Flags,
- OldDescriptor.Type,
- OldDescriptor.BasePage,
- OldDescriptor.VirtualPage,
- OldDescriptor.PageCount);
- if (!ListDescriptor)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Add it into the list */
- Status = MmMdAddDescriptorToList(NewMdList, ListDescriptor, 0);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Don't free on exit path */
- ListDescriptor = NULL;
- }
- }
- }
-
-Quickie:
- /* Check for failure cleanup */
- if (!NT_SUCCESS(Status))
- {
- /* Did we have to build a new list? */
- if (HaveNewList)
- {
- /* Free and re-initialize it */
- MmMdFreeList(NewMdList);
- MmMdInitializeList(NewMdList, MdList->Type, NULL);
- }
-
- /* Check if we had a list descriptor, and free it */
- if (ListDescriptor)
- {
- MmMdFreeDescriptor(ListDescriptor);
- }
-
- /* Check if we had a new descriptor, and free it */
- if (NewDescriptor)
- {
- MmMdFreeDescriptor(NewDescriptor);
- }
- }
-
- /* All done */
- return Status;
-}
-
-PBL_MEMORY_DESCRIPTOR
-MmMdFindDescriptorFromMdl (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST MdList,
- _In_ ULONG Flags,
- _In_ ULONGLONG Page
- )
-{
- BOOLEAN IsVirtual;
- PLIST_ENTRY NextEntry, ListHead;
- PBL_MEMORY_DESCRIPTOR Current;
- ULONGLONG BasePage;
-
- /* Assume physical */
- IsVirtual = FALSE;
-
- /* Check if the caller wants physical memory */
- if (!(Flags & BL_MM_REMOVE_VIRTUAL_REGION_FLAG))
- {
- /* Check if this is a virtual memory list */
- if (MdList->Type == BlMdVirtual)
- {
- /* We won't find anything */
- return NULL;
- }
- }
- else if (MdList->Type == BlMdPhysical)
- {
- /* Otherwise, caller wants virtual, but this is a physical list */
- IsVirtual = TRUE;
- NextEntry = MdList->First->Flink;
- }
-
- /* Check if this is a physical search */
- if (!IsVirtual)
- {
- /* Check if we can use the current pointer */
- NextEntry = MdList->This;
- if (!NextEntry)
- {
- /* We can't -- start at the beginning */
- NextEntry = MdList->First->Flink;
- }
- else
- {
- /* If the page is below the current pointer, restart */
- Current = CONTAINING_RECORD(NextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
- if (Page < Current->BasePage)
- {
- NextEntry = MdList->First->Flink;
- }
- }
- }
-
- /* Loop the list of descriptors */
- ListHead = MdList->First;
- while (NextEntry != ListHead)
- {
- /* Get the current one */
- Current = CONTAINING_RECORD(NextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- /* Check if we are looking for virtual memory */
- if (IsVirtual)
- {
- /* Use the base address */
- BasePage = Current->VirtualPage;
- }
- else
- {
- /* Use the page */
- BasePage = Current->BasePage;
- }
-
- /* If this is a virtual descriptor, make sure it has a base address */
- if ((!(IsVirtual) || (BasePage)) &&
- (BasePage <= Page) &&
- (Page < (BasePage + Current->PageCount)))
- {
- /* The descriptor fits the page being requested */
- return Current;
- }
-
- /* Try the next one */
- NextEntry = NextEntry->Flink;
- }
-
- /* Nothing found if we're here */
- return NULL;
-}
-
-PBL_MEMORY_DESCRIPTOR
-MmMdFindDescriptor (
- _In_ ULONG WhichList,
- _In_ ULONG Flags,
- _In_ ULONGLONG Page
- )
-{
- PBL_MEMORY_DESCRIPTOR FoundDescriptor;
-
- /* Check if the caller is looking for mapped, allocated memory */
- if (WhichList & BL_MM_INCLUDE_MAPPED_ALLOCATED)
- {
- /* Find a descriptor in that list */
- FoundDescriptor = MmMdFindDescriptorFromMdl(&MmMdlMappedAllocated, Flags, Page);
- if (FoundDescriptor)
- {
- /* Got it */
- return FoundDescriptor;
- }
- }
-
- /* Check if the caller is looking for mapped, unallocated memory */
- if (WhichList & BL_MM_INCLUDE_MAPPED_UNALLOCATED)
- {
- /* Find a descriptor in that list */
- FoundDescriptor = MmMdFindDescriptorFromMdl(&MmMdlMappedUnallocated, Flags, Page);
- if (FoundDescriptor)
- {
- /* Got it */
- return FoundDescriptor;
- }
- }
-
- /* Check if the caller is looking for unmapped, allocated memory */
- if (WhichList & BL_MM_INCLUDE_UNMAPPED_ALLOCATED)
- {
- /* Find a descriptor in that list */
- FoundDescriptor = MmMdFindDescriptorFromMdl(&MmMdlUnmappedAllocated, Flags, Page);
- if (FoundDescriptor)
- {
- /* Got it */
- return FoundDescriptor;
- }
- }
-
- /* Check if the caller is looking for unmapped, unallocated memory */
- if (WhichList & BL_MM_INCLUDE_UNMAPPED_UNALLOCATED)
- {
- /* Find a descriptor in that list */
- FoundDescriptor = MmMdFindDescriptorFromMdl(&MmMdlUnmappedUnallocated, Flags, Page);
- if (FoundDescriptor)
- {
- /* Got it */
- return FoundDescriptor;
- }
- }
-
- /* Check if the caller is looking for reserved, allocated memory */
- if (WhichList & BL_MM_INCLUDE_RESERVED_ALLOCATED)
- {
- /* Find a descriptor in that list */
- FoundDescriptor = MmMdFindDescriptorFromMdl(&MmMdlReservedAllocated, Flags, Page);
- if (FoundDescriptor)
- {
- /* Got it */
- return FoundDescriptor;
- }
- }
-
- /* Check if the caller is looking for bad memory */
- if (WhichList & BL_MM_INCLUDE_BAD_MEMORY)
- {
- /* Find a descriptor in that list */
- FoundDescriptor = MmMdFindDescriptorFromMdl(&MmMdlBadMemory, Flags, Page);
- if (FoundDescriptor)
- {
- /* Got it */
- return FoundDescriptor;
- }
- }
-
- /* Check if the caller is looking for truncated memory */
- if (WhichList & BL_MM_INCLUDE_TRUNCATED_MEMORY)
- {
- /* Find a descriptor in that list */
- FoundDescriptor = MmMdFindDescriptorFromMdl(&MmMdlTruncatedMemory, Flags, Page);
- if (FoundDescriptor)
- {
- /* Got it */
- return FoundDescriptor;
- }
- }
-
- /* Check if the caller is looking for persistent memory */
- if (WhichList & BL_MM_INCLUDE_PERSISTENT_MEMORY)
- {
- /* Find a descriptor in that list */
- FoundDescriptor = MmMdFindDescriptorFromMdl(&MmMdlPersistentMemory, Flags, Page);
- if (FoundDescriptor)
- {
- /* Got it */
- return FoundDescriptor;
- }
- }
-
- /* Nothing if we got here */
- return NULL;
-}
-
-BOOLEAN
-MmMdFindSatisfyingRegion (
- _In_ PBL_MEMORY_DESCRIPTOR Descriptor,
- _Out_ PBL_MEMORY_DESCRIPTOR NewDescriptor,
- _In_ ULONGLONG Pages,
- _In_ PBL_ADDRESS_RANGE BaseRange,
- _In_ PBL_ADDRESS_RANGE VirtualRange,
- _In_ BOOLEAN TopDown,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ ULONG Flags,
- _In_ ULONG Alignment
- )
-{
- ULONGLONG BaseMin, BaseMax, AlignedMin;
- ULONGLONG VirtualPage, BasePage;
- ULONGLONG BaseDelta, AlignedBase;
- ULONGLONG VirtualMin, VirtualMax;
-
- /* Extract the minimum and maximum range */
- BaseMin = BaseRange->Minimum;
- BaseMax = BaseRange->Maximum;
-
- /* Don't go below where the descriptor starts */
- if (BaseMin < Descriptor->BasePage)
- {
- BaseMin = Descriptor->BasePage;
- }
-
- /* Don't go beyond where the descriptor ends */
- if (BaseMax > (Descriptor->BasePage + Descriptor->PageCount - 1))
- {
- BaseMax = (Descriptor->BasePage + Descriptor->PageCount - 1);
- }
-
- /* Check for start overflow */
- if (BaseMin > BaseMax)
- {
- return FALSE;
- }
-
- /* Align the base as required */
- if (Alignment != 1)
- {
- AlignedMin = ALIGN_UP_BY(BaseMin, Alignment);
- }
- else
- {
- AlignedMin = BaseMin;
- }
-
- /* Check for range overflow */
- if (((AlignedMin + Pages - 1) < AlignedMin) || ((AlignedMin + Pages - 1) > BaseMax))
- {
- return FALSE;
- }
-
- /* Check if this was a top-down request */
- if (TopDown)
- {
- /* Then get the highest page possible */
- BasePage = BaseMax - Pages + 1;
- if (Alignment != 1)
- {
- /* Align it as needed */
- AlignedBase = ALIGN_DOWN_BY(BasePage, Alignment);
- }
- else
- {
- AlignedBase = BasePage;
- }
-
- /* Calculate the delta between max address and our aligned base */
- BaseDelta = BasePage - AlignedBase;
- BasePage -= BaseDelta;
- }
- else
- {
- /* Otherwise, get the lowest page possible */
- BasePage = AlignedMin;
- BaseDelta = 0;
- }
-
- /* If a virtual address range was passed in, this must be a virtual descriptor */
- if (((VirtualRange->Minimum) || (VirtualRange->Maximum)) &&
- !(Descriptor->VirtualPage))
- {
- return FALSE;
- }
-
- /* Any mapped page already? */
- if (Descriptor->VirtualPage)
- {
- /* Get virtual min/max */
- VirtualMin = VirtualRange->Minimum;
- VirtualMax = VirtualRange->Maximum;
-
- /* Don't go below where the descriptor maps */
- if (VirtualMin <= Descriptor->VirtualPage)
- {
- VirtualMin = Descriptor->VirtualPage;
- }
-
- /* Don't go above where the descriptor maps */
- if (VirtualMax >= (Descriptor->VirtualPage + Descriptor->PageCount - 1))
- {
- VirtualMax = Descriptor->VirtualPage + Descriptor->PageCount - 1;
- }
-
- /* Don't let the base overflow */
- if (VirtualMin > VirtualMax)
- {
- return FALSE;
- }
-
- /* Adjust the base by the alignment delta */
- VirtualMin += AlignedMin - BaseMin;
-
- /* Check that the bounds don't overflow or underflow */
- if (((VirtualMin + Pages - 1) < VirtualMin) ||
- ((VirtualMin + Pages - 1) > VirtualMax))
- {
- return FALSE;
- }
-
- /* Finally, pick the correct address based on direction */
- if (TopDown)
- {
- /* Highest possible base address, aligned */
- VirtualPage = VirtualMax - Pages + 1 - BaseDelta;
- }
- else
- {
- /* Lowest possible base address, aligned */
- VirtualPage = VirtualMin;
- }
- }
- else
- {
- /* Nothing to worry about */
- VirtualPage = 0;
- }
-
- /* Bail out if the memory type attributes don't match */
- if ((((Flags & 0xFF) & (Descriptor->Flags & 0xFF)) != (Flags & 0xFF)) ||
- (((Flags & 0xFF00) & (Descriptor->Flags & 0xFF00)) != (Flags & 0xFF00)))
- {
- //EfiPrintf(L"Incorrect memory attributes\r\n");
- return FALSE;
- }
-
- /* Bail out if the allocation flags don't match */
- if (((Flags ^ Descriptor->Flags) & (BlMemoryRuntime | BlMemoryBelow1MB | BlMemoryLargePages)))
- {
- //EfiPrintf(L"Incorrect memory allocation flags\r\n");
- return FALSE;
- }
-
- /* Bail out if the type doesn't match */
- if (Descriptor->Type != MemoryType)
- {
- //EfiPrintf(L"Incorrect descriptor type: %lx %lx\r\n", Descriptor->Type, MemoryType);
- return FALSE;
- }
-
- /* We have a matching region, fill out the descriptor for it */
- NewDescriptor->BasePage = BasePage;
- NewDescriptor->PageCount = Pages;
- NewDescriptor->Type = Descriptor->Type;
- NewDescriptor->VirtualPage = VirtualPage;
- NewDescriptor->Flags = Descriptor->Flags;
- //EfiPrintf(L"Found a matching descriptor: %08I64X with %08I64X pages\r\n", BasePage, Pages);
- return TRUE;
-}
-
-VOID
-MmMdFreeGlobalDescriptors (
- VOID
- )
-{
- PBL_MEMORY_DESCRIPTOR Descriptor, OldDescriptor;
- ULONG Index = 0;
- PLIST_ENTRY OldFlink, OldBlink;
-
- /* Make sure we're not int middle of a call using a descriptor */
- if (MmDescriptorCallTreeCount != 1)
- {
- return;
- }
-
- /* Loop every current global descriptor */
- while (Index < MmGlobalMemoryDescriptorsUsed)
- {
- /* Does it have any valid pages? */
- OldDescriptor = &MmGlobalMemoryDescriptors[Index];
- if (OldDescriptor->PageCount)
- {
- /* Allocate a copy of it */
- Descriptor = BlMmAllocateHeap(sizeof(*Descriptor));
- if (!Descriptor)
- {
- return;
- }
-
- /* Save the links */
- OldBlink = OldDescriptor->ListEntry.Blink;
- OldFlink = OldDescriptor->ListEntry.Flink;
-
- /* Make the copy */
- *Descriptor = *OldDescriptor;
-
- /* Fix the links */
- OldBlink->Flink = &Descriptor->ListEntry;
- OldFlink->Blink = &Descriptor->ListEntry;
-
- /* Zero the descriptor */
- RtlZeroMemory(OldDescriptor, sizeof(*OldDescriptor));
- }
-
- /* Keep going */
- Index++;
- }
-
- /* All global descriptors freed */
- MmGlobalMemoryDescriptorsUsed = 0;
-}
-
-VOID
-MmMdInitialize (
- _In_ ULONG Phase,
- _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
- )
-{
- /* Are we in phase 1? */
- if (Phase != 0)
- {
- /* Switch to dynamic descriptors if we have too many */
- if (LibraryParameters->DescriptorCount > RTL_NUMBER_OF(MmStaticMemoryDescriptors))
- {
- MmMdpSwitchToDynamicDescriptors(LibraryParameters->DescriptorCount);
- }
- }
- else
- {
- /* In phase 0, start with a pool of 512 static descriptors */
- MmGlobalMemoryDescriptorCount = RTL_NUMBER_OF(MmStaticMemoryDescriptors);
- MmGlobalMemoryDescriptors = MmStaticMemoryDescriptors;
- RtlZeroMemory(MmStaticMemoryDescriptors, sizeof(MmStaticMemoryDescriptors));
- MmGlobalMemoryDescriptorsUsed = 0;
- }
-}
diff --git a/boot/environ/lib/mm/heapalloc.c b/boot/environ/lib/mm/heapalloc.c
deleted file mode 100644
index 973417fc539..00000000000
--- a/boot/environ/lib/mm/heapalloc.c
+++ /dev/null
@@ -1,716 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/mm/heapalloc.c
- * PURPOSE: Boot Library Memory Manager Heap Allocator
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-#define BL_HEAP_POINTER_FLAG_BITS 3
-
-typedef struct _BL_HEAP_POINTER
-{
- union
- {
- struct
- {
- ULONG_PTR BufferFree : 1;
- ULONG_PTR BufferOnHeap : 1;
- ULONG_PTR NotUsed : 1;
- ULONG_PTR BufferPointer : ((8 * sizeof(ULONG_PTR)) - BL_HEAP_POINTER_FLAG_BITS);
- };
- PVOID P;
- };
-} BL_HEAP_POINTER, *PBL_HEAP_POINTER;
-
-typedef struct _BL_FREE_HEAP_ENTRY
-{
- BL_HEAP_POINTER BufferNext;
- BL_HEAP_POINTER BufferPrevious;
- BL_HEAP_POINTER FreeNext;
- BL_HEAP_POINTER FreePrevious;
-} BL_FREE_HEAP_ENTRY, *PBL_FREE_HEAP_ENTRY;
-
-typedef struct _BL_BUSY_HEAP_ENTRY
-{
- BL_HEAP_POINTER BufferNext;
- BL_HEAP_POINTER BufferPrevious;
- UCHAR Buffer[ANYSIZE_ARRAY];
-} BL_BUSY_HEAP_ENTRY, *PBL_BUSY_HEAP_ENTRY;
-
-typedef struct _BL_HEAP_BOUNDARIES
-{
- LIST_ENTRY ListEntry;
- ULONG_PTR HeapEnd;
- ULONG_PTR HeapLimit;
- ULONG_PTR HeapBase;
- PBL_BUSY_HEAP_ENTRY HeapStart;
-} BL_HEAP_BOUNDARIES, *PBL_HEAP_BOUNDARIES;
-
-ULONG HapInitializationStatus;
-LIST_ENTRY MmHeapBoundaries;
-ULONG HapMinimumHeapSize;
-ULONG HapAllocationAttributes;
-PBL_FREE_HEAP_ENTRY* MmFreeList;
-
-/* INLINES *******************************************************************/
-
-FORCEINLINE
-PBL_FREE_HEAP_ENTRY
-MmHapDecodeLink (
- _In_ BL_HEAP_POINTER Link
- )
-{
- /* Decode the buffer pointer by ignoring the flags */
- return (PBL_FREE_HEAP_ENTRY)(Link.BufferPointer << BL_HEAP_POINTER_FLAG_BITS);
-}
-
-FORCEINLINE
-ULONG
-MmHapBufferSize (
- _In_ PVOID FreeEntry
- )
-{
- PBL_FREE_HEAP_ENTRY Entry = FreeEntry;
-
- /* The space between the next buffer header and this one is the size */
- return (ULONG_PTR)MmHapDecodeLink(Entry->BufferNext) - (ULONG_PTR)Entry;
-}
-
-FORCEINLINE
-ULONG
-MmHapUserBufferSize (
- _In_ PVOID FreeEntry
- )
-{
- PBL_FREE_HEAP_ENTRY Entry = FreeEntry;
-
- /* Get the size of the buffer as the user sees it */
- return MmHapBufferSize(Entry) - FIELD_OFFSET(BL_BUSY_HEAP_ENTRY, Buffer);
-}
-
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-MmHapHeapAllocatorExtend (
- _In_ ULONG ExtendSize
- )
-{
- ULONG HeapSize, AlignedSize, HeapLimit;
- PBL_HEAP_BOUNDARIES Heap, NewHeap;
- NTSTATUS Status;
- PBL_BUSY_HEAP_ENTRY HeapBase = NULL;
-
- /* Compute a new heap, and add 2 more pages for the free list */
- HeapSize = ExtendSize + (2 * PAGE_SIZE);
- if (HeapSize < ExtendSize)
- {
- return STATUS_INTEGER_OVERFLOW;
- }
-
- /* Make sure the new heap is at least the minimum configured size */
- if (HapMinimumHeapSize > HeapSize)
- {
- HeapSize = HapMinimumHeapSize;
- }
-
- /* Align it on a page boundary */
- AlignedSize = ALIGN_UP_BY(HeapSize, PAGE_SIZE);
- if (!AlignedSize)
- {
- return STATUS_INTEGER_OVERFLOW;
- }
-
- /* Check if we already have a heap */
- if (!IsListEmpty(&MmHeapBoundaries))
- {
- /* Find the first heap*/
- Heap = CONTAINING_RECORD(MmHeapBoundaries.Flink,
- BL_HEAP_BOUNDARIES,
- ListEntry);
-
- /* Check if we have a page free above the heap */
- HeapLimit = Heap->HeapLimit + PAGE_SIZE;
- if (HeapLimit <= Heap->HeapEnd)
- {
- EfiPrintf(L"Heap extension TODO\r\n");
- return STATUS_INSUFFICIENT_RESOURCES;
- }
- }
-
- /* We do not -- allocate one */
- Status = MmPapAllocatePagesInRange((PVOID*)&HeapBase,
- BlLoaderHeap,
- AlignedSize >> PAGE_SHIFT,
- HapAllocationAttributes,
- 0,
- NULL,
- 0);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"HEAP ALLOCATION FAILED\r\n");
- EfiStall(1000000);
- return Status;
- }
-
- /* Set the heap bottom, limit, and top */
- NewHeap = (PBL_HEAP_BOUNDARIES)HeapBase->Buffer;
- NewHeap->HeapBase = (ULONG_PTR)HeapBase;
- NewHeap->HeapLimit = (ULONG_PTR)HeapBase + AlignedSize;
- NewHeap->HeapStart = (PBL_BUSY_HEAP_ENTRY)(NewHeap + 1);
-
- /* Set the buffer links */
- HeapBase->BufferPrevious.P = NULL;
- HeapBase->BufferNext.P = NewHeap->HeapStart;
-
- /* Set the buffer at the top of the heap and mark it as being free */
- NewHeap->HeapStart->BufferPrevious.P = HeapBase;
- NewHeap->HeapStart->BufferNext.P = NewHeap->HeapStart;
- NewHeap->HeapStart->BufferNext.BufferFree = 1;
- NewHeap->HeapStart->BufferNext.BufferOnHeap = 1;
-
- /* Is this the first heap ever? */
- if (IsListEmpty(&MmHeapBoundaries))
- {
- /* We will host the free list at the top of the heap */
- MmFreeList = (PBL_FREE_HEAP_ENTRY*)((ULONG_PTR)NewHeap->HeapLimit - 8 * sizeof(PBL_FREE_HEAP_ENTRY));
- NewHeap->HeapLimit = (ULONG_PTR)MmFreeList;
- RtlZeroMemory(MmFreeList, 8 * sizeof(PBL_FREE_HEAP_ENTRY));
- }
-
- /* Remove a page on top */
- HeapLimit = NewHeap->HeapLimit;
- NewHeap->HeapEnd = NewHeap->HeapLimit;
- NewHeap->HeapLimit -= PAGE_SIZE;
-
- /* Add us into the heap list */
- InsertTailList(&MmHeapBoundaries, &NewHeap->ListEntry);
- return STATUS_SUCCESS;
-}
-
-ULONG
-MmHapGetBucketId (
- _In_ ULONG Size
- )
-{
- ULONG BucketIndex = 0;
-
- /* Use the last bucket if this is a large allocation */
- if (Size >= PAGE_SIZE)
- {
- return 7;
- }
-
- /* Otherwise, use a higher index for each new power of two */
- while (Size >> BucketIndex)
- {
- BucketIndex++;
- }
-
- /* Allocations are at least 16 bytes (2^4 = 5th index) */
- return BucketIndex - 5;
-}
-
-VOID
-MmHapReportHeapCorruption (
- _In_ PBL_FREE_HEAP_ENTRY BufferEntry
- )
-{
-#if 0
- BOOLEAN DebuggerEnabled;
-
- BlStatusPrint(L"Heap corruption in the links surrounding %p!\r\n", BufferEntry);
-
- DebuggerEnabled = BlBdDebuggerEnabled();
- if (DebuggerEnabled)
- {
- BlStatusPrint(L"\n*** Fatal Error 0x%08x :\n (0x%p, 0x%p, 0x%p, 0x%p)\n\r\n", 2, BufferEntry, NULL, NULL, NULL);
- __debugbreak();
- }
-#else
- EfiPrintf(L"Heap corruption in the links surrounding %p!\r\n", BufferEntry);
-#endif
-}
-
-PVOID
-MmHapCheckFreeLinks (
- _In_ PVOID BufferEntry
- )
-{
- PBL_FREE_HEAP_ENTRY Prev, Next;
- PBL_FREE_HEAP_ENTRY Entry = BufferEntry;
-
- /* Get the previous and next free pointers */
- Prev = MmHapDecodeLink(Entry->FreePrevious);
- Next = MmHapDecodeLink(Entry->FreeNext);
-
- /* Make sure that both the previous and next entries point to this one */
- if (((Next) && (MmHapDecodeLink(Next->FreePrevious)) != Entry) ||
- ((Prev) && (MmHapDecodeLink(Prev->FreeNext)) != Entry))
- {
- /* They don't, so the free headers are corrupted */
- MmHapReportHeapCorruption(Entry);
- return NULL;
- }
-
- /* They do, return the free entry as valid */
- return Entry;
-}
-
-PVOID
-MmHapCheckBufferLinks (
- _In_ PVOID BufferEntry
- )
-{
- PBL_FREE_HEAP_ENTRY Prev, Next;
- PBL_FREE_HEAP_ENTRY Entry = BufferEntry;
-
- /* Get the previous and next buffer pointers */
- Prev = MmHapDecodeLink(Entry->BufferPrevious);
- Next = MmHapDecodeLink(Entry->BufferNext);
-
- /* Make sure that both the previous and next entries point to this one */
- if (((Next) && (MmHapDecodeLink(Next->BufferPrevious)) != Entry) ||
- ((Prev) && (MmHapDecodeLink(Prev->BufferNext)) != Entry))
- {
- /* They don't, so the heap headers are corrupted */
- MmHapReportHeapCorruption(Entry);
- return NULL;
- }
-
- /* They, do the entry is valid */
- return Entry;
-}
-
-PBL_FREE_HEAP_ENTRY
-MmHapRemoveBufferFromFreeList (
- _In_ PBL_FREE_HEAP_ENTRY FreeEntry
- )
-{
- PBL_FREE_HEAP_ENTRY Prev, Next;
-
- /* Firest, make sure the free entry is valid */
- FreeEntry = MmHapCheckFreeLinks(FreeEntry);
- if (!FreeEntry)
- {
- return FreeEntry;
- }
-
- /* Get the previous and next entry */
- Prev = MmHapDecodeLink(FreeEntry->FreePrevious);
- Next = MmHapDecodeLink(FreeEntry->FreeNext);
-
- /* Update the next entry to point to our previous entry */
- if (Next)
- {
- Next->FreePrevious.P = Prev;
- }
-
- /* Are we at the head? */
- if (Prev)
- {
- /* Nope, so update our previous entry to point to our next entry */
- Prev->FreeNext.P = Next;
- }
- else
- {
- /* Yep, so update the appropriate bucket listhead */
- MmFreeList[MmHapGetBucketId(MmHapBufferSize(FreeEntry))] = Prev;
- }
-
- /* Return the (now removed) entry */
- return FreeEntry;
-}
-
-PBL_FREE_HEAP_ENTRY
-MmHapCoalesceFreeBuffer (
- _In_ PBL_FREE_HEAP_ENTRY FreeEntry
- )
-{
- PBL_FREE_HEAP_ENTRY Prev, Next;
-
- /* First make sure that this is a valid buffer entry */
- if (!MmHapCheckBufferLinks(FreeEntry))
- {
- return NULL;
- }
-
- /* Get the next entry and check if it's free */
- Next = MmHapDecodeLink(FreeEntry->BufferNext);
- if (!(Next->BufferNext.BufferOnHeap) && (Next->BufferNext.BufferFree))
- {
- /* Remove the next buffer from the free list since we're coalescing */
- Next = MmHapRemoveBufferFromFreeList(Next);
- if (!Next)
- {
- return NULL;
- }
-
- /* The forward link of the *new* free buffer should now point to us */
- MmHapDecodeLink(Next->BufferNext)->BufferPrevious.P = FreeEntry;
-
- /* Our forward link should point to the *new* free buffer as well */
- FreeEntry->BufferNext.P = MmHapDecodeLink(Next->BufferNext);
-
- /* Mark our buffer as free */
- FreeEntry->BufferNext.BufferFree = 1;
- }
-
- /* Get the previous entry and check if it's free */
- Prev = MmHapDecodeLink(FreeEntry->BufferPrevious);
- if (!(Prev) || !(Prev->BufferNext.BufferFree))
- {
- return FreeEntry;
- }
-
- /* It's free, so remove it */
- Prev = MmHapRemoveBufferFromFreeList(Prev);
- if (!Prev)
- {
- return NULL;
- }
-
- /* The previous link of our next buffer should now point to our *previous* */
- MmHapDecodeLink(FreeEntry->BufferNext)->BufferPrevious.P = Prev;
-
- /* Our previous link should point the next free buffer now */
- Prev->BufferNext.P = MmHapDecodeLink(FreeEntry->BufferNext);
-
- /* Set the new freed buffer as the previous buffer, and mark it free */
- FreeEntry = Prev;
- FreeEntry->BufferNext.BufferFree = 1;
- return FreeEntry;
-}
-
-PBL_FREE_HEAP_ENTRY
-MmHapAddToFreeList (
- _In_ PBL_BUSY_HEAP_ENTRY Entry,
- _In_ ULONG Flags
- )
-{
- PBL_FREE_HEAP_ENTRY FreeEntry, Head;
- ULONG BucketId;
- BL_LIBRARY_PARAMETERS LocalParameters;
-
- /* First, check if the entry is valid */
- Entry = MmHapCheckBufferLinks(Entry);
- if (!Entry)
- {
- return NULL;
- }
-
- /* Check if we should zero the entry */
- LocalParameters = BlpLibraryParameters;
- if ((LocalParameters.LibraryFlags & BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE) &&
- !(Flags))
- {
- /* Yep, zero it out */
- RtlZeroMemory(Entry->Buffer, MmHapUserBufferSize(Entry));
- }
-
- /* Now mark the entry as free */
- Entry->BufferNext.BufferFree = 1;
-
- /* Now that this buffer is free, try to coalesce it */
- FreeEntry = MmHapCoalesceFreeBuffer((PBL_FREE_HEAP_ENTRY)Entry);
- if (!FreeEntry)
- {
- return FreeEntry;
- }
-
- /* Compute the bucket ID for the free list */
- BucketId = MmHapGetBucketId(MmHapBufferSize(Entry));
-
- /* Get the current head for this bucket, if one exists */
- Head = MmFreeList ? MmFreeList[BucketId] : NULL;
-
- /* Update the head's backlink to point to this newly freed entry */
- if (Head)
- {
- Head->FreePrevious.P = FreeEntry;
- }
-
- /* Nobody behind us, the old head in front of us */
- FreeEntry->FreePrevious.P = NULL;
- FreeEntry->FreeNext.P = Head;
-
- /* Put us at the head of list now, and return the entry */
- MmFreeList[BucketId] = FreeEntry;
- return FreeEntry;
-}
-
-PBL_BUSY_HEAP_ENTRY
-MmHapFindBufferInFreeList (
- _In_ ULONG Size
- )
-{
- PBL_FREE_HEAP_ENTRY FreeEntry = NULL;
- PBL_BUSY_HEAP_ENTRY NextEntry;
- ULONG BucketId;
-
- /* Get the appropriate bucket for our size */
- BucketId = MmHapGetBucketId(Size);
- if (BucketId >= 8)
- {
- return NULL;
- }
-
- /* Keep going as long as we don't have a free entry */
- while (!FreeEntry)
- {
- /* Fet the first free entry in this list */
- FreeEntry = MmFreeList ? MmFreeList[BucketId] : NULL;
-
- /* Loop as long as there's entries in the list */
- while (FreeEntry)
- {
- /* Can this free entry satisfy our needs? */
- if (MmHapBufferSize(FreeEntry) >= Size)
- {
- /* All good */
- break;
- }
-
- /* It cannot, keep going to the next one */
- FreeEntry = MmHapDecodeLink(FreeEntry->FreeNext);
- }
-
- /* Try the next list -- have we exhausted all the lists? */
- if (++BucketId >= 8)
- {
- /* Have we not found an entry yet? Fail if so... */
- if (!FreeEntry)
- {
- return NULL;
- }
- }
- }
-
- /* We should have an entry if we're here. Remove it from the free list */
- NT_ASSERT(FreeEntry != NULL);
- FreeEntry = MmHapRemoveBufferFromFreeList(FreeEntry);
- if (!FreeEntry)
- {
- return NULL;
- }
-
- /* Make sure it's not corrupted */
- FreeEntry = MmHapCheckBufferLinks(FreeEntry);
- if (!FreeEntry)
- {
- return NULL;
- }
-
- /* Do we have space for at least another buffer? */
- if ((MmHapBufferSize(FreeEntry) - Size) >= sizeof(BL_FREE_HEAP_ENTRY))
- {
- /* Go to where the new next buffer will start */
- NextEntry = (PBL_BUSY_HEAP_ENTRY)((ULONG_PTR)FreeEntry + Size);
-
- /* Make the new next buffer point to the next buffer */
- NextEntry->BufferNext.P = MmHapDecodeLink(FreeEntry->BufferNext);
-
- /* Make the old next buffer point back to the new one */
- MmHapDecodeLink(FreeEntry->BufferNext)->BufferPrevious.P = NextEntry;
-
- /* Point the new next buffer point back to us */
- NextEntry->BufferPrevious.P = FreeEntry;
-
- /* Point us to the new next buffer */
- FreeEntry->BufferNext.P = NextEntry;
-
- /* And insert the new next buffer into the free list */
- MmHapAddToFreeList(NextEntry, 1);
- }
-
- /* Return the entry, which is now allocated */
- return (PBL_BUSY_HEAP_ENTRY)FreeEntry;
-}
-
-NTSTATUS
-MmHaInitialize (
- _In_ ULONG HeapSize,
- _In_ ULONG HeapAttributes
- )
-{
- NTSTATUS Status;
-
- /* No free list to begin with */
- MmFreeList = NULL;
-
- /* Configure the minimum heap size and allocation attributes */
- HapMinimumHeapSize = ALIGN_UP_BY(HeapSize, PAGE_SIZE);
- HapAllocationAttributes = HeapAttributes & 0x20000;
-
- /* Initialize the heap boundary list */
- InitializeListHead(&MmHeapBoundaries);
-
- /* Initialize a heap big enough to handle a one pointer long allocation */
- Status = MmHapHeapAllocatorExtend(sizeof(PVOID));
- if (NT_SUCCESS(Status))
- {
- /* The heap is ready! */
- HapInitializationStatus = 1;
- Status = STATUS_SUCCESS;
- }
-
- /* Return initialization status */
- return Status;
-}
-
-PVOID
-BlMmAllocateHeap (
- _In_ SIZE_T Size
- )
-{
- ULONG BufferSize;
- PBL_HEAP_BOUNDARIES Heap;
- PBL_BUSY_HEAP_ENTRY BusyEntry, FreeEntry, NextEntry;
-
- /* Ignore heap allocation if the heap allocator isn't ready yet */
- if (HapInitializationStatus != 1)
- {
- return NULL;
- }
-
- /* Align the buffer size to the minimum size required */
- BufferSize = ALIGN_UP_BY(Size + FIELD_OFFSET(BL_BUSY_HEAP_ENTRY, Buffer),
- FIELD_OFFSET(BL_BUSY_HEAP_ENTRY, Buffer));
-
- /* Watch out for overflow */
- if (BufferSize <= Size)
- {
- return NULL;
- }
-
- /* Make sure it's at least big enough to hold a free entry later on */
- if (BufferSize < sizeof(BL_FREE_HEAP_ENTRY))
- {
- BufferSize = sizeof(BL_FREE_HEAP_ENTRY);
- }
-
- /* Loop while we try to allocate memory */
- while (1)
- {
- /* Find a free buffer for this allocation */
- BusyEntry = MmHapFindBufferInFreeList(BufferSize);
- if (BusyEntry)
- {
- break;
- }
-
- /* We couldn't find a free buffer. Do we have any heaps? */
- if (!IsListEmpty(&MmHeapBoundaries))
- {
- /* Get the current heap */
- Heap = CONTAINING_RECORD(MmHeapBoundaries.Flink,
- BL_HEAP_BOUNDARIES,
- ListEntry);
-
- /* Check if we have space in the heap page for this allocation? */
- FreeEntry = Heap->HeapStart;
- NextEntry = (PBL_BUSY_HEAP_ENTRY)((ULONG_PTR)FreeEntry + BufferSize);
-
- if ((NextEntry >= FreeEntry) &&
- ((ULONG_PTR)NextEntry <=
- Heap->HeapLimit - FIELD_OFFSET(BL_BUSY_HEAP_ENTRY, Buffer)))
- {
- /* Update the heap top pointer past this allocation */
- Heap->HeapStart = NextEntry;
-
- /* Make this allocation point to the slot */
- FreeEntry->BufferNext.P = Heap->HeapStart;
-
- /* And make the free heap entry point back to us */
- Heap->HeapStart->BufferPrevious.P = FreeEntry;
-
- /* Mark the heap entry as being free and on the heap */
- Heap->HeapStart->BufferNext.BufferFree = 1;
- Heap->HeapStart->BufferNext.BufferOnHeap = 1;
-
- /* The previously freed entry on the heap page is now ours */
- BusyEntry = FreeEntry;
- break;
- }
- }
-
- /* We have no heaps or space on any heap -- extend the heap and retry */
- if (!NT_SUCCESS(MmHapHeapAllocatorExtend(BufferSize)))
- {
- EfiPrintf(L"Heap extension failed!\r\n");
- return NULL;
- }
-
- EfiPrintf(L"Heap extended -- trying again\r\n");
- }
-
- /* Clear all the bits, marking this entry as allocated */
- BusyEntry->BufferNext.P = MmHapDecodeLink(BusyEntry->BufferNext);
-
- /* Return the entry's data buffer */
- //EfiPrintf(L"Returning buffer at 0x%p\r\n", &BusyEntry->Buffer);
- return &BusyEntry->Buffer;
-}
-
-NTSTATUS
-BlMmFreeHeap (
- _In_ PVOID Buffer
- )
-{
- PBL_BUSY_HEAP_ENTRY BusyEntry;
- PBL_HEAP_BOUNDARIES Heap;
- PLIST_ENTRY NextEntry;
-
- /* If the heap is not initialized, fail */
- if (HapInitializationStatus != 1)
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Get the heap header */
- //EfiPrintf(L"Freeing entry at: %p\r\n", Buffer);
- if (Buffer)
- {
- /* Don't free heap until we discover the corruption */
- return STATUS_SUCCESS;
- }
-
- BusyEntry = CONTAINING_RECORD(Buffer, BL_BUSY_HEAP_ENTRY, Buffer);
-
- /* Loop all the heaps */
- NextEntry = MmHeapBoundaries.Flink;
- while (NextEntry != &MmHeapBoundaries)
- {
- /* Get the current heap in the list */
- Heap = CONTAINING_RECORD(NextEntry, BL_HEAP_BOUNDARIES, ListEntry);
-
- /* Is this entry part of this heap? */
- if (((ULONG_PTR)Heap->HeapBase <= (ULONG_PTR)BusyEntry) &&
- ((ULONG_PTR)BusyEntry < (ULONG_PTR)Heap->HeapStart))
- {
- /* Ignore double-free */
- if (BusyEntry->BufferNext.BufferFree)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* It is -- add it to the free list */
- MmHapAddToFreeList(BusyEntry, 0);
- return STATUS_SUCCESS;
- }
-
- /* It isn't, move to the next heap */
- NextEntry = NextEntry->Flink;
- }
-
- /* The entry is not on any valid heap */
- return STATUS_INVALID_PARAMETER;
-}
-
diff --git a/boot/environ/lib/mm/i386/mmx86.c b/boot/environ/lib/mm/i386/mmx86.c
deleted file mode 100644
index a0cb15e01d8..00000000000
--- a/boot/environ/lib/mm/i386/mmx86.c
+++ /dev/null
@@ -1,1151 +0,0 @@
-/*
-* COPYRIGHT: See COPYING.ARM in the top level directory
-* PROJECT: ReactOS UEFI Boot Library
-* FILE: boot/environ/lib/mm/i386/mmx86.c
-* PURPOSE: Boot Library Memory Manager x86-Specific Code
-* PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
-*/
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-#include "bcd.h"
-
-#define PTE_BASE 0xC0000000
-
-//
-// Specific PDE/PTE macros to be used inside the boot library environment
-//
-#define MiAddressToPte(x) ((PMMPTE)(((((ULONG)(x)) >> 12) << 2) + (ULONG_PTR)MmPteBase))
-#define MiAddressToPde(x) ((PMMPDE)(((((ULONG)(x)) >> 22) << 2) + (ULONG_PTR)MmPdeBase))
-#define MiAddressToPteOffset(x) ((((ULONG)(x)) << 10) >> 22)
-#define MiAddressToPdeOffset(x) (((ULONG)(x)) / (1024 * PAGE_SIZE))
-
-/* DATA VARIABLES ************************************************************/
-
-ULONG_PTR MmArchKsegBase;
-ULONG_PTR MmArchKsegBias;
-ULONG MmArchLargePageSize;
-BL_ADDRESS_RANGE MmArchKsegAddressRange;
-ULONG_PTR MmArchTopOfApplicationAddressSpace;
-PHYSICAL_ADDRESS Mmx86SelfMapBase;
-ULONG MmDeferredMappingCount;
-PMMPTE MmPdpt;
-PULONG MmArchReferencePage;
-PVOID MmPteBase;
-PVOID MmPdeBase;
-ULONG MmArchReferencePageSize;
-
-PBL_MM_TRANSLATE_VIRTUAL_ADDRESS Mmx86TranslateVirtualAddress;
-PBL_MM_MAP_PHYSICAL_ADDRESS Mmx86MapPhysicalAddress;
-PBL_MM_REMAP_VIRTUAL_ADDRESS Mmx86RemapVirtualAddress;
-PBL_MM_UNMAP_VIRTUAL_ADDRESS Mmx86UnmapVirtualAddress;
-PBL_MM_FLUSH_TLB Mmx86FlushTlb;
-PBL_MM_FLUSH_TLB_ENTRY Mmx86FlushTlbEntry;
-PBL_MM_DESTROY_SELF_MAP Mmx86DestroySelfMap;
-
-PBL_MM_RELOCATE_SELF_MAP BlMmRelocateSelfMap;
-PBL_MM_FLUSH_TLB BlMmFlushTlb;
-PBL_MM_MOVE_VIRTUAL_ADDRESS_RANGE BlMmMoveVirtualAddressRange;
-PBL_MM_ZERO_VIRTUAL_ADDRESS_RANGE BlMmZeroVirtualAddressRange;
-
-PBL_MM_FLUSH_TLB Mmx86FlushTlb;
-
-/* FUNCTIONS *****************************************************************/
-
-BOOLEAN
-BlMmIsTranslationEnabled (
- VOID
- )
-{
- /* Return if paging is on */
- return ((CurrentExecutionContext) &&
- (CurrentExecutionContext->ContextFlags & BL_CONTEXT_PAGING_ON));
-}
-
-VOID
-MmArchNullFunction (
- VOID
- )
-{
- /* Nothing to do */
- return;
-}
-
-VOID
-MmDefRelocateSelfMap (
- VOID
- )
-{
- if (MmPteBase != (PVOID)PTE_BASE)
- {
- EfiPrintf(L"Supposed to relocate CR3\r\n");
- }
-}
-
-NTSTATUS
-MmDefMoveVirtualAddressRange (
- _In_ PVOID DestinationAddress,
- _In_ PVOID SourceAddress,
- _In_ ULONGLONG Size
- )
-{
- EfiPrintf(L"Supposed to move shit\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-MmDefZeroVirtualAddressRange (
- _In_ PVOID DestinationAddress,
- _In_ ULONGLONG Size
- )
-{
- EfiPrintf(L"Supposed to zero shit\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-BOOLEAN
-MmArchTranslateVirtualAddress (
- _In_ PVOID VirtualAddress,
- _Out_opt_ PPHYSICAL_ADDRESS PhysicalAddress,
- _Out_opt_ PULONG CachingFlags
- )
-{
- PBL_MEMORY_DESCRIPTOR Descriptor;
-
- /* Check if paging is on */
- if ((CurrentExecutionContext) &&
- (CurrentExecutionContext->ContextFlags & BL_CONTEXT_PAGING_ON))
- {
- /* Yes -- we have to translate this from virtual */
- return Mmx86TranslateVirtualAddress(VirtualAddress,
- PhysicalAddress,
- CachingFlags);
- }
-
- /* Look in all descriptors except truncated and firmware ones */
- Descriptor = MmMdFindDescriptor(BL_MM_INCLUDE_NO_FIRMWARE_MEMORY &
- ~BL_MM_INCLUDE_TRUNCATED_MEMORY,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- (ULONG_PTR)VirtualAddress >> PAGE_SHIFT);
-
- /* Return the virtual address as the physical address */
- if (PhysicalAddress)
- {
- PhysicalAddress->HighPart = 0;
- PhysicalAddress->LowPart = (ULONG_PTR)VirtualAddress;
- }
-
- /* There's no caching on physical memory */
- if (CachingFlags)
- {
- *CachingFlags = 0;
- }
-
- /* Success is if we found a descriptor */
- return Descriptor != NULL;
-}
-
-VOID
-MmDefpDestroySelfMap (
- VOID
- )
-{
- EfiPrintf(L"No destroy\r\n");
-}
-
-VOID
-MmDefpFlushTlbEntry (
- _In_ PVOID VirtualAddress
- )
-{
- /* Flush the TLB */
- __invlpg(VirtualAddress);
-}
-
-VOID
-MmDefpFlushTlb (
- VOID
- )
-{
- /* Flush the TLB */
- __writecr3(__readcr3());
-}
-
-NTSTATUS
-MmDefpUnmapVirtualAddress (
- _In_ PVOID VirtualAddress,
- _In_ ULONG Size
- )
-{
- EfiPrintf(L"No unmap\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-MmDefpRemapVirtualAddress (
- _In_ PPHYSICAL_ADDRESS PhysicalAddress,
- _Out_ PVOID VirtualAddress,
- _In_ ULONG Size,
- _In_ ULONG CacheAttributes
- )
-{
- EfiPrintf(L"No remap\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-MmDefpMapPhysicalAddress (
- _In_ PHYSICAL_ADDRESS PhysicalAddress,
- _In_ PVOID VirtualAddress,
- _In_ ULONG Size,
- _In_ ULONG CacheAttributes
- )
-{
- BOOLEAN Enabled;
- ULONG i, PageCount, PdeOffset;
- ULONGLONG CurrentAddress;
- PMMPDE Pde;
- PMMPTE Pte;
- PMMPTE PageTable;
- PHYSICAL_ADDRESS PageTableAddress;
- NTSTATUS Status;
-
- /* Check if paging is on yet */
- Enabled = BlMmIsTranslationEnabled();
-
- /* Get the physical address aligned */
- CurrentAddress = (PhysicalAddress.QuadPart >> PAGE_SHIFT) << PAGE_SHIFT;
-
- /* Get the number of pages and loop through each one */
- PageCount = Size >> PAGE_SHIFT;
- for (i = 0; i < PageCount; i++)
- {
- /* Check if translation already exists for this page */
- if (Mmx86TranslateVirtualAddress(VirtualAddress, NULL, NULL))
- {
- /* Ignore it and move to the next one */
- VirtualAddress = (PVOID)((ULONG_PTR)VirtualAddress + PAGE_SIZE);
- CurrentAddress += PAGE_SIZE;
- continue;
- }
-
- /* Get the PDE offset */
- PdeOffset = MiAddressToPdeOffset(VirtualAddress);
-
- /* Check if paging is actually turned on */
- if (Enabled)
- {
- /* Get the PDE entry using the self-map */
- Pde = MiAddressToPde(VirtualAddress);
- }
- else
- {
- /* Get it using our physical mappings */
- Pde = &MmPdpt[PdeOffset];
- PageTable = (PMMPDE)(Pde->u.Hard.PageFrameNumber << PAGE_SHIFT);
- }
-
- /* Check if we don't yet have a PDE */
- if (!Pde->u.Hard.Valid)
- {
- /* Allocate a page table */
- Status = MmPapAllocatePhysicalPagesInRange(&PageTableAddress,
- BlLoaderPageDirectory,
- 1,
- 0,
- 0,
- &MmMdlUnmappedAllocated,
- 0,
- 0);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"PDE alloc failed!\r\n");
- EfiStall(1000000);
- return STATUS_NO_MEMORY;
- }
-
- /* This is our page table */
- PageTable = (PVOID)(ULONG_PTR)PageTableAddress.QuadPart;
-
- /* Build the PDE for it */
- Pde->u.Hard.PageFrameNumber = PageTableAddress.QuadPart >> PAGE_SHIFT;
- Pde->u.Hard.Write = 1;
- Pde->u.Hard.CacheDisable = 1;
- Pde->u.Hard.WriteThrough = 1;
- Pde->u.Hard.Valid = 1;
-
- /* Check if paging is enabled */
- if (Enabled)
- {
- /* Then actually, get the page table's virtual address */
- PageTable = (PVOID)PAGE_ROUND_DOWN(MiAddressToPte(VirtualAddress));
-
- /* Flush the TLB */
- Mmx86FlushTlb();
- }
-
- /* Zero out the page table */
- RtlZeroMemory(PageTable, PAGE_SIZE);
-
- /* Reset caching attributes now */
- Pde->u.Hard.CacheDisable = 0;
- Pde->u.Hard.WriteThrough = 0;
-
- /* Check for paging again */
- if (Enabled)
- {
- /* Flush the TLB entry for the page table only */
- Mmx86FlushTlbEntry(PageTable);
- }
- }
-
- /* Add a reference to this page table */
- MmArchReferencePage[PdeOffset]++;
-
- /* Check if a physical address was given */
- if (PhysicalAddress.QuadPart != -1)
- {
- /* Check if paging is turned on */
- if (Enabled)
- {
- /* Get the PTE using the self-map */
- Pte = MiAddressToPte(VirtualAddress);
- }
- else
- {
- /* Get the PTE using physical addressing */
- Pte = &PageTable[MiAddressToPteOffset(VirtualAddress)];
- }
-
- /* Build a valid PTE for it */
- Pte->u.Hard.PageFrameNumber = CurrentAddress >> PAGE_SHIFT;
- Pte->u.Hard.Write = 1;
- Pte->u.Hard.Valid = 1;
-
- /* Check if this is uncached */
- if (CacheAttributes == BlMemoryUncached)
- {
- /* Set the flags */
- Pte->u.Hard.CacheDisable = 1;
- Pte->u.Hard.WriteThrough = 1;
- }
- else if (CacheAttributes == BlMemoryWriteThrough)
- {
- /* It's write-through, set the flag */
- Pte->u.Hard.WriteThrough = 1;
- }
- }
-
- /* Move to the next physical/virtual address */
- VirtualAddress = (PVOID)((ULONG_PTR)VirtualAddress + PAGE_SIZE);
- CurrentAddress += PAGE_SIZE;
- }
-
- /* All done! */
- return STATUS_SUCCESS;
-}
-
-BOOLEAN
-MmDefpTranslateVirtualAddress (
- _In_ PVOID VirtualAddress,
- _Out_ PPHYSICAL_ADDRESS PhysicalAddress,
- _Out_opt_ PULONG CacheAttributes
- )
-{
- PMMPDE Pde;
- PMMPTE Pte;
- PMMPTE PageTable;
- BOOLEAN Enabled;
-
- /* Is there no page directory yet? */
- if (!MmPdpt)
- {
- return FALSE;
- }
-
- /* Is paging enabled? */
- Enabled = BlMmIsTranslationEnabled();
-
- /* Check if paging is actually turned on */
- if (Enabled)
- {
- /* Get the PDE entry using the self-map */
- Pde = MiAddressToPde(VirtualAddress);
- }
- else
- {
- /* Get it using our physical mappings */
- Pde = &MmPdpt[MiAddressToPdeOffset(VirtualAddress)];
- }
-
- /* Is the PDE valid? */
- if (!Pde->u.Hard.Valid)
- {
- return FALSE;
- }
-
- /* Check if paging is turned on */
- if (Enabled)
- {
- /* Get the PTE using the self-map */
- Pte = MiAddressToPte(VirtualAddress);
- }
- else
- {
- /* Get the PTE using physical addressing */
- PageTable = (PMMPTE)(Pde->u.Hard.PageFrameNumber << PAGE_SHIFT);
- Pte = &PageTable[MiAddressToPteOffset(VirtualAddress)];
- }
-
- /* Is the PTE valid? */
- if (!Pte->u.Hard.Valid)
- {
- return FALSE;
- }
-
- /* Does caller want the physical address? */
- if (PhysicalAddress)
- {
- /* Return it */
- PhysicalAddress->QuadPart = (Pte->u.Hard.PageFrameNumber << PAGE_SHIFT) +
- BYTE_OFFSET(VirtualAddress);
- }
-
- /* Does caller want cache attributes? */
- if (CacheAttributes)
- {
- /* Not yet -- lie and say it's cached */
- EfiPrintf(L"Cache checking not yet enabled\r\n");
- *CacheAttributes = BlMemoryWriteBack;
- }
-
- /* It exists! */
- return TRUE;
-}
-
-NTSTATUS
-MmMapPhysicalAddress (
- _Inout_ PPHYSICAL_ADDRESS PhysicalAddressPtr,
- _Inout_ PVOID* VirtualAddressPtr,
- _Inout_ PULONGLONG SizePtr,
- _In_ ULONG CacheAttributes
- )
-{
- ULONGLONG Size;
- ULONGLONG PhysicalAddress;
- PVOID VirtualAddress;
- PHYSICAL_ADDRESS TranslatedAddress;
- ULONG_PTR CurrentAddress, VirtualAddressEnd;
- NTSTATUS Status;
-
- /* Fail if any parameters are missing */
- if (!(PhysicalAddressPtr) || !(VirtualAddressPtr) || !(SizePtr))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Fail if the size is over 32-bits */
- Size = *SizePtr;
- if (Size > 0xFFFFFFFF)
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Nothing to do if we're in physical mode */
- if (MmTranslationType == BlNone)
- {
- return STATUS_SUCCESS;
- }
-
- /* Can't use virtual memory in real mode */
- if (CurrentExecutionContext->Mode == BlRealMode)
- {
- return STATUS_UNSUCCESSFUL;
- }
-
- /* Capture the current virtual and physical addresses */
- VirtualAddress = *VirtualAddressPtr;
- PhysicalAddress = PhysicalAddressPtr->QuadPart;
-
- /* Check if a physical address was requested */
- if (PhysicalAddress != 0xFFFFFFFF)
- {
- /* Round down the base addresses */
- PhysicalAddress = PAGE_ROUND_DOWN(PhysicalAddress);
- VirtualAddress = (PVOID)PAGE_ROUND_DOWN(VirtualAddress);
-
- /* Round up the size */
- Size = ROUND_TO_PAGES(PhysicalAddressPtr->QuadPart -
- PhysicalAddress +
- Size);
-
- /* Loop every virtual page */
- CurrentAddress = (ULONG_PTR)VirtualAddress;
- VirtualAddressEnd = CurrentAddress + Size - 1;
- while (CurrentAddress < VirtualAddressEnd)
- {
- /* Get the physical page of this virtual page */
- if (MmArchTranslateVirtualAddress((PVOID)CurrentAddress,
- &TranslatedAddress,
- &CacheAttributes))
- {
- /* Make sure the physical page of the virtual page, matches our page */
- if (TranslatedAddress.QuadPart !=
- (PhysicalAddress +
- (CurrentAddress - (ULONG_PTR)VirtualAddress)))
- {
- /* There is an existing virtual mapping for a different address */
- EfiPrintf(L"Existing mapping exists: %lx vs %lx\r\n",
- TranslatedAddress.QuadPart,
- PhysicalAddress + (CurrentAddress - (ULONG_PTR)VirtualAddress));
- EfiStall(10000000);
- return STATUS_INVALID_PARAMETER;
- }
- }
-
- /* Try the next one */
- CurrentAddress += PAGE_SIZE;
- }
- }
-
- /* Aactually do the mapping */
- TranslatedAddress.QuadPart = PhysicalAddress;
- Status = Mmx86MapPhysicalAddress(TranslatedAddress,
- VirtualAddress,
- Size,
- CacheAttributes);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to map!: %lx\r\n", Status);
- EfiStall(1000000);
- return Status;
- }
-
- /* Return aligned/fixed up output parameters */
- PhysicalAddressPtr->QuadPart = PhysicalAddress;
- *VirtualAddressPtr = VirtualAddress;
- *SizePtr = Size;
-
- /* Flush the TLB if paging is enabled */
- if (BlMmIsTranslationEnabled())
- {
- Mmx86FlushTlb();
- }
-
- /* All good! */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-Mmx86MapInitStructure (
- _In_ PVOID VirtualAddress,
- _In_ ULONGLONG Size,
- _In_ PHYSICAL_ADDRESS PhysicalAddress
- )
-{
- NTSTATUS Status;
-
- /* Make a virtual mapping for this physical address */
- Status = MmMapPhysicalAddress(&PhysicalAddress, &VirtualAddress, &Size, 0);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Nothing else to do if we're not in paging mode */
- if (MmTranslationType == BlNone)
- {
- return STATUS_SUCCESS;
- }
-
- /* Otherwise, remove this region from the list of free virtual ranges */
- Status = MmMdRemoveRegionFromMdlEx(&MmMdlFreeVirtual,
- BL_MM_REMOVE_VIRTUAL_REGION_FLAG,
- (ULONG_PTR)VirtualAddress >> PAGE_SHIFT,
- Size >> PAGE_SHIFT,
- 0);
- if (!NT_SUCCESS(Status))
- {
- /* Unmap the address if that failed */
- MmUnmapVirtualAddress(&VirtualAddress, &Size);
- }
-
- /* Return back to caller */
- return Status;
-}
-
-VOID
-MmMdDbgDumpList (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST DescriptorList,
- _In_opt_ ULONG MaxCount
- )
-{
- ULONGLONG EndPage, VirtualEndPage;
- PBL_MEMORY_DESCRIPTOR MemoryDescriptor;
- PLIST_ENTRY NextEntry;
-
- /* If no maximum was provided, use essentially infinite */
- if (MaxCount == 0)
- {
- MaxCount = 0xFFFFFFFF;
- }
-
- /* Loop the list as long as there's entries and max isn't reached */
- NextEntry = DescriptorList->First->Flink;
- while ((NextEntry != DescriptorList->First) && (MaxCount--))
- {
- /* Get the descriptor */
- MemoryDescriptor = CONTAINING_RECORD(NextEntry,
- BL_MEMORY_DESCRIPTOR,
- ListEntry);
-
- /* Get the descriptor end page, and see if it was virtually mapepd */
- EndPage = MemoryDescriptor->BasePage + MemoryDescriptor->PageCount;
- if (MemoryDescriptor->VirtualPage)
- {
- /* Get the virtual end page too, then */
- VirtualEndPage = MemoryDescriptor->VirtualPage +
- MemoryDescriptor->PageCount;
- }
- else
- {
- VirtualEndPage = 0;
- }
-
- /* Print out the descriptor, physical range, virtual range, and type */
- EfiPrintf(L"%p - [%08llx-%08llx @ %08llx-%08llx]:%x\r\n",
- MemoryDescriptor,
- MemoryDescriptor->BasePage << PAGE_SHIFT,
- (EndPage << PAGE_SHIFT) - 1,
- MemoryDescriptor->VirtualPage << PAGE_SHIFT,
- VirtualEndPage ? (VirtualEndPage << PAGE_SHIFT) - 1 : 0,
- (ULONG)MemoryDescriptor->Type);
-
- /* Next entry */
- NextEntry = NextEntry->Flink;
- }
-}
-
-NTSTATUS
-Mmx86pMapMemoryRegions (
- _In_ ULONG Phase,
- _In_ PBL_MEMORY_DATA MemoryData
- )
-{
- BOOLEAN DoDeferred;
- ULONG DescriptorCount;
- PBL_MEMORY_DESCRIPTOR Descriptor;
- ULONG FinalOffset;
- PHYSICAL_ADDRESS PhysicalAddress;
- ULONGLONG Size;
- NTSTATUS Status;
- PVOID VirtualAddress;
- BL_MEMORY_DESCRIPTOR_LIST FirmwareMdl;
- PLIST_ENTRY Head, NextEntry;
-
- /* Check which phase this is */
- if (Phase == 1)
- {
- /* In phase 1 we don't initialize deferred mappings */
- DoDeferred = FALSE;
- }
- else
- {
- /* Don't do anything if there's nothing to initialize */
- if (!MmDeferredMappingCount)
- {
- return STATUS_SUCCESS;
- }
-
- /* We'll do deferred descriptors in phase 2 */
- DoDeferred = TRUE;
- }
-
- /*
- * Because BL supports cross x86-x64 application launches and a LIST_ENTRY
- * is of variable size, care must be taken here to ensure that we see a
- * consistent view of descriptors. BL uses some offset magic to figure out
- * where the data actually starts, since everything is ULONGLONG past the
- * LIST_ENTRY itself
- */
- FinalOffset = MemoryData->MdListOffset + MemoryData->DescriptorOffset;
- Descriptor = (PBL_MEMORY_DESCRIPTOR)((ULONG_PTR)MemoryData + FinalOffset -
- FIELD_OFFSET(BL_MEMORY_DESCRIPTOR, BasePage));
-
- /* Scan all of them */
- DescriptorCount = MemoryData->DescriptorCount;
- while (DescriptorCount != 0)
- {
- /* Ignore application data */
- if (Descriptor->Type != BlApplicationData)
- {
- /* If this is a ramdisk, do it in phase 2 */
- if ((Descriptor->Type == BlLoaderRamDisk) == DoDeferred)
- {
- /* Get the current physical address and size */
- PhysicalAddress.QuadPart = Descriptor->BasePage << PAGE_SHIFT;
- Size = Descriptor->PageCount << PAGE_SHIFT;
-
- /* Check if it was already mapped */
- if (Descriptor->VirtualPage)
- {
- /* Use the existing address */
- VirtualAddress = (PVOID)(ULONG_PTR)(Descriptor->VirtualPage << PAGE_SHIFT);
- }
- else
- {
- /* Use the physical address */
- VirtualAddress = (PVOID)(ULONG_PTR)PhysicalAddress.QuadPart;
- }
-
- /* Crete the mapping */
- Status = Mmx86MapInitStructure(VirtualAddress,
- Size,
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- }
-
- /* Check if we're in phase 1 and deferring RAM disk */
- if ((Phase == 1) && (Descriptor->Type == BlLoaderRamDisk))
- {
- MmDeferredMappingCount++;
- }
- }
-
- /* Move on to the next descriptor */
- DescriptorCount--;
- Descriptor = (PBL_MEMORY_DESCRIPTOR)((ULONG_PTR)Descriptor + MemoryData->DescriptorSize);
- }
-
- /* In phase 1, also do UEFI mappings */
- if (Phase != 2)
- {
- /* Get the memory map */
- MmMdInitializeListHead(&FirmwareMdl);
- Status = MmFwGetMemoryMap(&FirmwareMdl, BL_MM_FLAG_REQUEST_COALESCING);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Iterate over it */
- Head = FirmwareMdl.First;
- NextEntry = Head->Flink;
- while (NextEntry != Head)
- {
- /* Check if this is a UEFI-related descriptor, unless it's the self-map page */
- Descriptor = CONTAINING_RECORD(NextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
- if (((Descriptor->Type == BlEfiBootMemory) ||
- (Descriptor->Type == BlEfiRuntimeCodeMemory) ||
- (Descriptor->Type == BlEfiRuntimeDataMemory) || // WINBUG?
- (Descriptor->Type == BlLoaderMemory)) &&
- ((Descriptor->BasePage << PAGE_SHIFT) != Mmx86SelfMapBase.QuadPart))
- {
- /* Identity-map it */
- PhysicalAddress.QuadPart = Descriptor->BasePage << PAGE_SHIFT;
- Status = Mmx86MapInitStructure((PVOID)((ULONG_PTR)Descriptor->BasePage << PAGE_SHIFT),
- Descriptor->PageCount << PAGE_SHIFT,
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- }
-
- /* Move to the next descriptor */
- NextEntry = NextEntry->Flink;
- }
-
- /* Reset */
- NextEntry = Head->Flink;
- while (NextEntry != Head)
- {
- /* Get the descriptor */
- Descriptor = CONTAINING_RECORD(NextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- /* Skip to the next entry before we free */
- NextEntry = NextEntry->Flink;
-
- /* Remove and free it */
- MmMdRemoveDescriptorFromList(&FirmwareMdl, Descriptor);
- MmMdFreeDescriptor(Descriptor);
- }
- }
-
- /* All library mappings identity mapped now */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-Mmx86InitializeMemoryMap (
- _In_ ULONG Phase,
- _In_ PBL_MEMORY_DATA MemoryData
- )
-{
- ULONG ImageSize;
- PVOID ImageBase;
- KDESCRIPTOR Gdt, Idt;
- NTSTATUS Status;
- PHYSICAL_ADDRESS PhysicalAddress;
-
- /* If this is phase 2, map the memory regions */
- if (Phase != 1)
- {
- return Mmx86pMapMemoryRegions(Phase, MemoryData);
- }
-
- /* Get the application image base/size */
- Status = BlGetApplicationBaseAndSize(&ImageBase, &ImageSize);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Map the image back at the same place */
- PhysicalAddress.QuadPart = (ULONG_PTR)ImageBase;
- Status = Mmx86MapInitStructure(ImageBase, ImageSize, PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Map the first 4MB of memory */
- PhysicalAddress.QuadPart = 0;
- Status = Mmx86MapInitStructure(NULL, 4 * 1024 * 1024, PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Map the GDT */
- _sgdt(&Gdt.Limit);
- PhysicalAddress.QuadPart = Gdt.Base;
- Status = Mmx86MapInitStructure((PVOID)Gdt.Base, Gdt.Limit + 1, PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Map the IDT */
- __sidt(&Idt.Limit);
- PhysicalAddress.QuadPart = Idt.Base;
- Status = Mmx86MapInitStructure((PVOID)Idt.Base, Idt.Limit + 1, PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Map the reference page */
- PhysicalAddress.QuadPart = (ULONG_PTR)MmArchReferencePage;
- Status = Mmx86MapInitStructure(MmArchReferencePage,
- MmArchReferencePageSize,
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* More to do */
- return Mmx86pMapMemoryRegions(Phase, MemoryData);
-}
-
-NTSTATUS
-MmDefInitializeTranslation (
- _In_ PBL_MEMORY_DATA MemoryData,
- _In_ BL_TRANSLATION_TYPE TranslationType
- )
-{
- NTSTATUS Status;
- PHYSICAL_ADDRESS PhysicalAddress;
- ULONG PdeIndex;
-
- /* Set the global function pointers for memory translation */
- Mmx86TranslateVirtualAddress = MmDefpTranslateVirtualAddress;
- Mmx86MapPhysicalAddress = MmDefpMapPhysicalAddress;
- Mmx86UnmapVirtualAddress = MmDefpUnmapVirtualAddress;
- Mmx86RemapVirtualAddress = MmDefpRemapVirtualAddress;
- Mmx86FlushTlb = MmDefpFlushTlb;
- Mmx86FlushTlbEntry = MmDefpFlushTlbEntry;
- Mmx86DestroySelfMap = MmDefpDestroySelfMap;
-
- /* Check what mode we're currently in */
- if (TranslationType == BlVirtual)
- {
- EfiPrintf(L"Virtual->Virtual not yet supported\r\n");
- return STATUS_NOT_IMPLEMENTED;
- }
- else if (TranslationType != BlNone)
- {
- /* Not even Windows supports PAE->Virtual downgrade */
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* The None->Virtual case */
- MmPdpt = NULL;
- Mmx86SelfMapBase.QuadPart = 0;
- MmArchReferencePage = NULL;
-
- /* Truncate all memory above 4GB so that we don't use it */
- Status = MmPaTruncateMemory(0x100000);
- if (!NT_SUCCESS(Status))
- {
- goto Failure;
- }
-
- /* Allocate a page directory */
- Status = MmPapAllocatePhysicalPagesInRange(&PhysicalAddress,
- BlLoaderPageDirectory,
- 1,
- 0,
- 0,
- &MmMdlUnmappedAllocated,
- 0,
- 0);
- if (!NT_SUCCESS(Status))
- {
- goto Failure;
- }
-
- /* Zero out the page directory */
- MmPdpt = (PVOID)PhysicalAddress.LowPart;
- RtlZeroMemory(MmPdpt, PAGE_SIZE);
-
- /* Set the page size */
- MmArchReferencePageSize = PAGE_SIZE;
-
- /* Allocate the self-map page */
- Status = MmPapAllocatePhysicalPagesInRange(&PhysicalAddress,
- BlLoaderReferencePage,
- 1,
- 0,
- 0,
- &MmMdlUnmappedAllocated,
- 0,
- 0);
- if (!NT_SUCCESS(Status))
- {
- goto Failure;
- }
-
- /* Set the reference page */
- MmArchReferencePage = (PVOID)PhysicalAddress.LowPart;
-
- /* Zero it out */
- RtlZeroMemory(MmArchReferencePage, MmArchReferencePageSize);
-
- /* Allocate 4MB worth of self-map pages */
- Status = MmPaReserveSelfMapPages(&Mmx86SelfMapBase,
- (4 * 1024 * 1024) >> PAGE_SHIFT,
- (4 * 1024 * 1024) >> PAGE_SHIFT);
- if (!NT_SUCCESS(Status))
- {
- goto Failure;
- }
-
- /* Zero them out */
- RtlZeroMemory((PVOID)Mmx86SelfMapBase.LowPart, 4 * 1024 * 1024);
- EfiPrintf(L"PDPT at 0x%p Reference Page at 0x%p Self-map at 0x%p\r\n",
- MmPdpt, MmArchReferencePage, Mmx86SelfMapBase.LowPart);
-
- /* Align PTE base to 4MB region */
- MmPteBase = (PVOID)(Mmx86SelfMapBase.LowPart & ~0x3FFFFF);
-
- /* The PDE is the PTE of the PTE base */
- MmPdeBase = MiAddressToPte(MmPteBase);
- PdeIndex = MiAddressToPdeOffset(MmPdeBase);
- MmPdpt[PdeIndex].u.Hard.Valid = 1;
- MmPdpt[PdeIndex].u.Hard.Write = 1;
- MmPdpt[PdeIndex].u.Hard.PageFrameNumber = (ULONG_PTR)MmPdpt >> PAGE_SHIFT;
- MmArchReferencePage[PdeIndex]++;
-
- /* Remove PTE_BASE from free virtual memory */
- Status = MmMdRemoveRegionFromMdlEx(&MmMdlFreeVirtual,
- BL_MM_REMOVE_VIRTUAL_REGION_FLAG,
- PTE_BASE >> PAGE_SHIFT,
- (4 * 1024 * 1024) >> PAGE_SHIFT,
- 0);
- if (!NT_SUCCESS(Status))
- {
- goto Failure;
- }
-
- /* Remove HAL_HEAP from free virtual memory */
- Status = MmMdRemoveRegionFromMdlEx(&MmMdlFreeVirtual,
- BL_MM_REMOVE_VIRTUAL_REGION_FLAG,
- MM_HAL_VA_START >> PAGE_SHIFT,
- (4 * 1024 * 1024) >> PAGE_SHIFT,
- 0);
- if (!NT_SUCCESS(Status))
- {
- goto Failure;
- }
-
- /* Initialize the virtual->physical memory mappings */
- Status = Mmx86InitializeMemoryMap(1, MemoryData);
- if (!NT_SUCCESS(Status))
- {
- goto Failure;
- }
-
- /* Turn on paging with the new CR3 */
- __writecr3((ULONG_PTR)MmPdpt);
- BlpArchEnableTranslation();
- EfiPrintf(L"Paging... %d\r\n", BlMmIsTranslationEnabled());
-
- /* Return success */
- return Status;
-
-Failure:
- /* Free reference page if we allocated it */
- if (MmArchReferencePage)
- {
- PhysicalAddress.QuadPart = (ULONG_PTR)MmArchReferencePage;
- BlMmFreePhysicalPages(PhysicalAddress);
- }
-
- /* Free page directory if we allocated it */
- if (MmPdpt)
- {
- PhysicalAddress.QuadPart = (ULONG_PTR)MmPdpt;
- BlMmFreePhysicalPages(PhysicalAddress);
- }
-
- /* Free the self map if we allocated it */
- if (Mmx86SelfMapBase.QuadPart)
- {
- MmPaReleaseSelfMapPages(Mmx86SelfMapBase);
- }
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-MmArchInitialize (
- _In_ ULONG Phase,
- _In_ PBL_MEMORY_DATA MemoryData,
- _In_ BL_TRANSLATION_TYPE TranslationType,
- _In_ BL_TRANSLATION_TYPE RequestedTranslationType
- )
-{
- NTSTATUS Status;
- ULONGLONG IncreaseUserVa, PerfCounter, CpuRandom;
- CPU_INFO CpuInfo;
-
- /* For phase 2, just map deferred regions */
- if (Phase != 1)
- {
- return Mmx86pMapMemoryRegions(2, MemoryData);
- }
-
- /* What translation type are we switching to? */
- switch (RequestedTranslationType)
- {
- /* Physical memory */
- case BlNone:
-
- /* Initialize everything to default/null values */
- MmArchLargePageSize = 1;
- MmArchKsegBase = 0;
- MmArchKsegBias = 0;
- MmArchKsegAddressRange.Minimum = 0;
- MmArchKsegAddressRange.Maximum = (ULONGLONG)~0;
- MmArchTopOfApplicationAddressSpace = 0;
- Mmx86SelfMapBase.QuadPart = 0;
-
- /* Set stub functions */
- BlMmRelocateSelfMap = MmArchNullFunction;
- BlMmFlushTlb = MmArchNullFunction;
-
- /* Set success */
- Status = STATUS_SUCCESS;
- break;
-
- case BlVirtual:
-
- /* Set the large page size to 1024 pages (4MB) */
- MmArchLargePageSize = (4 * 1024 * 1024) / PAGE_SIZE;
-
- /* Check if /USERVA option was used */
- Status = BlGetBootOptionInteger(BlpApplicationEntry.BcdData,
- BcdOSLoaderInteger_IncreaseUserVa,
- &IncreaseUserVa);
- if (NT_SUCCESS(Status) && (IncreaseUserVa))
- {
- /* Yes -- load the kernel at 0xE0000000 instead */
- MmArchKsegBase = 0xE0000000;
- }
- else
- {
- /* Nope, load at the standard 2GB split */
- MmArchKsegBase = 0x80000000;
- }
-
- /* Check if CPUID 01h is supported */
- CpuRandom = 0;
- if (BlArchIsCpuIdFunctionSupported(1))
- {
- /* Call it */
- BlArchCpuId(1, 0, &CpuInfo);
-
- /* Check if RDRAND is supported */
- if (CpuInfo.Ecx & 0x40000000)
- {
- EfiPrintf(L"Your CPU can do RDRAND! Good for you!\r\n");
- CpuRandom = 0;
- }
- }
-
- /* Read the TSC */
- PerfCounter = BlArchGetPerformanceCounter();
- PerfCounter >>= 4;
- _rotl16(PerfCounter, 5);
-
- /* Set the address range */
- MmArchKsegAddressRange.Minimum = 0;
- MmArchKsegAddressRange.Maximum = (ULONGLONG)~0;
-
- /* Set the KASLR bias */
- MmArchKsegBias = ((PerfCounter ^ CpuRandom) & 0xFFF) << 12;
- MmArchKsegBias = 0;
- MmArchKsegBase += MmArchKsegBias;
-
- /* Set the kernel range */
- MmArchKsegAddressRange.Minimum = MmArchKsegBase;
- MmArchKsegAddressRange.Maximum = (ULONGLONG)~0;
-
- /* Set the boot application top maximum */
- MmArchTopOfApplicationAddressSpace = 0x70000000 - 1; // Windows bug
-
- /* Initialize virtual address space translation */
- Status = MmDefInitializeTranslation(MemoryData, TranslationType);
- if (NT_SUCCESS(Status))
- {
- /* Set stub functions */
- BlMmRelocateSelfMap = MmDefRelocateSelfMap;
- BlMmFlushTlb = Mmx86FlushTlb;
- BlMmMoveVirtualAddressRange = MmDefMoveVirtualAddressRange;
- BlMmZeroVirtualAddressRange = MmDefZeroVirtualAddressRange;
- }
- break;
-
- case BlPae:
-
- /* We don't support PAE */
- Status = STATUS_NOT_SUPPORTED;
- break;
-
- default:
-
- /* Invalid architecture type*/
- Status = STATUS_INVALID_PARAMETER;
- break;
- }
-
- /* Back to caller */
- return Status;
-}
diff --git a/boot/environ/lib/mm/mm.c b/boot/environ/lib/mm/mm.c
deleted file mode 100644
index e2ea911e0cf..00000000000
--- a/boot/environ/lib/mm/mm.c
+++ /dev/null
@@ -1,657 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/mm/mm.c
- * PURPOSE: Boot Library Memory Manager Core
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
-*/
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-#include "bcd.h"
-
-/* DATA VARIABLES ************************************************************/
-
-/* This is a bug in Windows, but is required for MmTrInitialize to load */
-BL_TRANSLATION_TYPE MmTranslationType = BlMax;
-BL_TRANSLATION_TYPE MmOriginalTranslationType;
-ULONG MmDescriptorCallTreeCount;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-TrpGenerateMappingTracker (
- _In_ PVOID VirtualAddress,
- _In_ ULONG Flags,
- _In_ LARGE_INTEGER PhysicalAddress,
- _In_ ULONGLONG Size
- )
-{
- PBL_MEMORY_DESCRIPTOR Descriptor, NextDescriptor;
- PLIST_ENTRY ListHead, NextEntry;
-
- /* Increment descriptor call count */
- MmDescriptorCallTreeCount++;
-
- /* Initialize a descriptor for this allocation */
- Descriptor = MmMdInitByteGranularDescriptor(Flags,
- 0,
- PhysicalAddress.QuadPart,
- (ULONG_PTR)VirtualAddress,
- Size);
-
- /* Loop the current tracker list */
- ListHead = MmMdlMappingTrackers.First;
- NextEntry = ListHead->Flink;
- if (IsListEmpty(ListHead))
- {
- /* If it's empty, just add the descriptor at the end */
- InsertTailList(ListHead, &Descriptor->ListEntry);
- goto Quickie;
- }
-
- /* Otherwise, go to the last descriptor */
- NextDescriptor = CONTAINING_RECORD(NextEntry,
- BL_MEMORY_DESCRIPTOR,
- ListEntry);
- while (NextDescriptor->VirtualPage < Descriptor->VirtualPage)
- {
- /* Keep going... */
- NextEntry = NextEntry->Flink;
- NextDescriptor = CONTAINING_RECORD(NextEntry,
- BL_MEMORY_DESCRIPTOR,
- ListEntry);
-
- /* If we hit the end of the list, just add it at the end */
- if (NextEntry == ListHead)
- {
- goto Quickie;
- }
-
- /* Otherwise, add it right after this descriptor */
- InsertTailList(&NextDescriptor->ListEntry, &Descriptor->ListEntry);
- }
-
-Quickie:
- /* Release any global descriptors allocated */
- MmMdFreeGlobalDescriptors();
- --MmDescriptorCallTreeCount;
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-MmTrInitialize (
- VOID
- )
-{
- PBL_MEMORY_DESCRIPTOR Descriptor;
- NTSTATUS Status;
- PLIST_ENTRY NextEntry;
-
- /* Nothing to track if we're using physical memory */
- if (MmTranslationType == BlNone)
- {
- return STATUS_SUCCESS;
- }
-
- /* Initialize all the virtual lists */
- MmMdInitializeListHead(&MmMdlMappingTrackers);
- MmMdlMappingTrackers.Type = BlMdTracker;
- MmMdInitializeListHead(&MmMdlFreeVirtual);
- MmMdlFreeVirtual.Type = BlMdVirtual;
-
- /* Initialize a 4GB free descriptor */
- Descriptor = MmMdInitByteGranularDescriptor(0,
- BlConventionalMemory,
- 0,
- 0,
- ((ULONGLONG)4 * 1024 * 1024 * 1024) >>
- PAGE_SHIFT);
- if (!Descriptor)
- {
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* Add this 4GB region to the free virtual address space list */
- Status = MmMdAddDescriptorToList(&MmMdlFreeVirtual,
- Descriptor,
- BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG);
- if (!NT_SUCCESS(Status))
- {
- RtlZeroMemory(Descriptor, sizeof(*Descriptor));
- goto Quickie;
- }
-
- /* Remove any reserved regions of virtual address space */
- NextEntry = MmMdlReservedAllocated.First->Flink;
- while (NextEntry != MmMdlReservedAllocated.First)
- {
- /* Grab the descriptor and see if it's mapped */
- Descriptor = CONTAINING_RECORD(NextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
- if (Descriptor->VirtualPage)
- {
- EfiPrintf(L"Need to handle reserved allocation: %llx %llx\r\n",
- Descriptor->VirtualPage, Descriptor->PageCount);
- EfiStall(100000);
- Status = STATUS_NOT_IMPLEMENTED;
- goto Quickie;
- }
-
- /* Next entry */
- NextEntry = NextEntry->Flink;
- }
-
- /* Set success if we made it */
- Status = STATUS_SUCCESS;
-
-Quickie:
- /* Return back to caller */
- return Status;
-}
-
-NTSTATUS
-BlMmRemoveBadMemory (
- VOID
- )
-{
- BOOLEAN AllowBad;
- NTSTATUS Status;
- PULONGLONG BadPages;
- ULONGLONG BadPageCount;
-
- /* First check if bad memory access is allowed */
- AllowBad = FALSE;
- Status = BlGetBootOptionBoolean(BlpApplicationEntry.BcdData,
- BcdLibraryBoolean_AllowBadMemoryAccess,
- &AllowBad);
- if ((NT_SUCCESS(Status)) && (AllowBad))
- {
- /* No point checking the list if it is */
- return STATUS_SUCCESS;
- }
-
- /* Otherwise, check if there's a persisted bad page list */
- Status = BlpGetBootOptionIntegerList(BlpApplicationEntry.BcdData,
- BcdLibraryIntegerList_BadMemoryList,
- &BadPages,
- &BadPageCount,
- TRUE);
- if (NT_SUCCESS(Status))
- {
- EfiPrintf(L"Persistent bad page list not supported\r\n");
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* All done here */
- return STATUS_SUCCESS;
-}
-
-NTSTATUS
-BlMmMapPhysicalAddressEx (
- _In_ PVOID* VirtualAddress,
- _In_ ULONG Flags,
- _In_ ULONGLONG Size,
- _In_ PHYSICAL_ADDRESS PhysicalAddress
- )
-{
- NTSTATUS Status;
- PVOID MappingAddress;
- PHYSICAL_ADDRESS MappedAddress;
- PVOID MappedBase;
- ULONGLONG MapSize;
- UCHAR CacheAttributes;
- ULONGLONG BasePage, EndPage, MappedPage, FoundBasePage;
- ULONGLONG PageOffset, FoundPageCount;
- PBL_MEMORY_DESCRIPTOR Descriptor, NewDescriptor;
- PBL_MEMORY_DESCRIPTOR_LIST List;
- ULONG AddPages;
-
- /* Increase call depth */
- ++MmDescriptorCallTreeCount;
-
- /* Check if any parameters are missing */
- if (!(VirtualAddress) || !(Size))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Check for fixed allocation without an actual address */
- if ((Flags & BlMemoryFixed) &&
- (PhysicalAddress.QuadPart == -1) &&
- !(*VirtualAddress))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Check for invalid requirement flag, if one is present */
- if (((Flags & BlMemoryValidAllocationAttributes) != BlMemoryFixed) &&
- ((Flags & BlMemoryValidAllocationAttributes) != BlMemoryKernelRange) &&
- (Flags & BlMemoryValidAllocationAttributes))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Check for invalid cache attribute flags */
- if (((Flags & BlMemoryValidCacheAttributeMask) - 1) &
- (Flags & BlMemoryValidCacheAttributeMask))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Select an address to map this at */
- Status = MmSelectMappingAddress(&MappingAddress,
- *VirtualAddress,
- Size,
- Flags & BlMemoryValidAllocationAttributes,
- Flags,
- PhysicalAddress);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Map the selected address, using the appropriate caching attributes */
- MappedAddress = PhysicalAddress;
- MapSize = Size;
- CacheAttributes = ((Flags & BlMemoryValidCacheAttributeMask) != 0x20) ?
- (Flags & BlMemoryValidCacheAttributeMask) : 0;
- Status = MmMapPhysicalAddress(&MappedAddress,
- &MappingAddress,
- &MapSize,
- CacheAttributes);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Compute the final address where the mapping was made */
- MappedBase = (PVOID)(ULONG_PTR)((ULONG_PTR)MappingAddress +
- PhysicalAddress.QuadPart -
- MappedAddress.QuadPart);
- MappedAddress.QuadPart = (ULONG_PTR)MappedBase;
-
- /* Check if we're in physical or virtual mode */
- if (MmTranslationType == BlNone)
- {
- /* We are in physical mode -- just return this address directly */
- Status = STATUS_SUCCESS;
- *VirtualAddress = MappedBase;
- goto Quickie;
- }
-
- /* Remove the mapping address from the list of free virtual memory */
- Status = MmMdRemoveRegionFromMdlEx(&MmMdlFreeVirtual,
- BL_MM_REMOVE_VIRTUAL_REGION_FLAG,
- (ULONG_PTR)MappingAddress >> PAGE_SHIFT,
- MapSize >> PAGE_SHIFT,
- NULL);
- if (NT_SUCCESS(Status))
- {
- /* And then add an entry for the fact we mapped it */
- Status = TrpGenerateMappingTracker(MappedBase,
- CacheAttributes,
- PhysicalAddress,
- MapSize);
- }
-
- /* Abandon if we didn't update the memory map successfully */
- if (!NT_SUCCESS(Status))
- {
- /* Unmap the virtual address so it can be used later */
- MmUnmapVirtualAddress(MappingAddress, &MapSize);
- goto Quickie;
- }
-
- /* Check if no real mapping into RAM was made */
- if (PhysicalAddress.QuadPart == -1)
- {
- /* Then we're done here */
- Status = STATUS_SUCCESS;
- *VirtualAddress = MappedBase;
- goto Quickie;
- }
-
-
- /* Loop over the entire allocation */
- BasePage = MappedAddress.QuadPart >> PAGE_SHIFT;
- EndPage = (MappedAddress.QuadPart + MapSize) >> PAGE_SHIFT;
- MappedPage = (ULONG_PTR)MappingAddress >> PAGE_SHIFT;
- do
- {
- /* Start with the unmapped allocated list */
- List = &MmMdlUnmappedAllocated;
- Descriptor = MmMdFindDescriptor(BL_MM_INCLUDE_UNMAPPED_ALLOCATED,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- BasePage);
- if (!Descriptor)
- {
- /* Try persistent next */
- List = &MmMdlPersistentMemory;
- Descriptor = MmMdFindDescriptor(BL_MM_INCLUDE_PERSISTENT_MEMORY,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- BasePage);
- }
- if (!Descriptor)
- {
- /* Try unmapped, unallocated, next */
- List = &MmMdlUnmappedUnallocated;
- Descriptor = MmMdFindDescriptor(BL_MM_INCLUDE_UNMAPPED_UNALLOCATED,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- BasePage);
- }
- if (!Descriptor)
- {
- /* Try reserved next */
- List = &MmMdlReservedAllocated;
- Descriptor = MmMdFindDescriptor(BL_MM_INCLUDE_RESERVED_ALLOCATED,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- BasePage);
- }
-
- /* Check if we have a descriptor */
- if (Descriptor)
- {
- /* Remove it from its list */
- MmMdRemoveDescriptorFromList(List, Descriptor);
-
- /* Check if it starts before our allocation */
- FoundBasePage = Descriptor->BasePage;
- if (FoundBasePage < BasePage)
- {
- /* Create a new descriptor to cover the gap before our allocation */
- PageOffset = BasePage - FoundBasePage;
- NewDescriptor = MmMdInitByteGranularDescriptor(Descriptor->Flags,
- Descriptor->Type,
- FoundBasePage,
- 0,
- PageOffset);
-
- /* Insert it */
- MmMdAddDescriptorToList(List, NewDescriptor, 0);
-
- /* Adjust ours to ignore that piece */
- Descriptor->PageCount -= PageOffset;
- Descriptor->BasePage = BasePage;
- }
-
- /* Check if it goes beyond our allocation */
- FoundPageCount = Descriptor->PageCount;
- if (EndPage < (FoundPageCount + Descriptor->BasePage))
- {
- /* Create a new descriptor to cover the range after our allocation */
- PageOffset = EndPage - BasePage;
- NewDescriptor = MmMdInitByteGranularDescriptor(Descriptor->Flags,
- Descriptor->Type,
- EndPage,
- 0,
- FoundPageCount -
- PageOffset);
-
- /* Insert it */
- MmMdAddDescriptorToList(List, NewDescriptor, 0);
-
- /* Adjust ours to ignore that piece */
- Descriptor->PageCount = PageOffset;
- }
-
- /* Update the descriptor to be mapepd at this virtual page */
- Descriptor->VirtualPage = MappedPage;
-
- /* Check if this was one of the regular lists */
- if ((List != &MmMdlReservedAllocated) &&
- (List != &MmMdlPersistentMemory))
- {
- /* Was it allocated, or unallocated? */
- if (List != &MmMdlUnmappedAllocated)
- {
- /* In which case use the unallocated mapped list */
- List = &MmMdlMappedUnallocated;
- }
- else
- {
- /* Insert it into the mapped list */
- List = &MmMdlMappedAllocated;
- }
- }
-
- /* Add the descriptor that was removed, into the right list */
- MmMdAddDescriptorToList(List, Descriptor, 0);
-
- /* Add the pages this descriptor had */
- AddPages = Descriptor->PageCount;
- }
- else
- {
- /* Nope, so just add one page */
- AddPages = 1;
- }
-
- /* Increment the number of pages the descriptor had */
- MappedPage += AddPages;
- BasePage += AddPages;
- }
- while (BasePage < EndPage);
-
- /* We're done -- returned the address */
- Status = STATUS_SUCCESS;
- *VirtualAddress = MappedBase;
-
-Quickie:
- /* Cleanup descriptors and reduce depth */
- MmMdFreeGlobalDescriptors();
- --MmDescriptorCallTreeCount;
- return Status;
-}
-
-NTSTATUS
-MmUnmapVirtualAddress (
- _Inout_ PVOID* VirtualAddress,
- _Inout_ PULONGLONG Size
- )
-{
- NTSTATUS Status;
-
- /* Make sure parameters were passed in and are valid */
- if ((VirtualAddress) && (Size) && (*Size <= 0xFFFFFFFF))
- {
- /* Nothing to do if translation isn't active */
- if (MmTranslationType == BlNone)
- {
- Status = STATUS_SUCCESS;
- }
- else
- {
- /* We don't support virtual memory yet @TODO */
- EfiPrintf(L"unmap not yet implemented in %S\r\n", __FUNCTION__);
- EfiStall(1000000);
- Status = STATUS_NOT_IMPLEMENTED;
- }
- }
- else
- {
- /* Fail */
- Status = STATUS_INVALID_PARAMETER;
- }
-
- /* All done */
- return Status;
-}
-
-NTSTATUS
-BlMmUnmapVirtualAddressEx (
- _In_ PVOID VirtualAddress,
- _In_ ULONGLONG Size
- )
-{
- NTSTATUS Status;
-
- /* Increment call depth */
- ++MmDescriptorCallTreeCount;
-
- /* Make sure all parameters are there */
- if ((VirtualAddress) && (Size))
- {
- /* Unmap the virtual address */
- Status = MmUnmapVirtualAddress(&VirtualAddress, &Size);
-
- /* Check if we actually had a virtual mapping active */
- if ((NT_SUCCESS(Status)) && (MmTranslationType != BlNone))
- {
- /* We don't support virtual memory yet @TODO */
- EfiPrintf(L"not yet implemented in %S\r\n", __FUNCTION__);
- EfiStall(1000000);
- Status = STATUS_NOT_IMPLEMENTED;
- }
- }
- else
- {
- /* Fail */
- Status = STATUS_INVALID_PARAMETER;
- }
-
- /* Cleanup descriptors and reduce depth */
- MmMdFreeGlobalDescriptors();
- --MmDescriptorCallTreeCount;
- return Status;
-}
-
-BOOLEAN
-BlMmTranslateVirtualAddress (
- _In_ PVOID VirtualAddress,
- _Out_ PPHYSICAL_ADDRESS PhysicalAddress
- )
-{
- /* Make sure arguments are present */
- if (!(VirtualAddress) || !(PhysicalAddress))
- {
- return FALSE;
- }
-
- /* Do the architecture-specific translation */
- return MmArchTranslateVirtualAddress(VirtualAddress, PhysicalAddress, NULL);
-}
-
-NTSTATUS
-BlpMmInitialize (
- _In_ PBL_MEMORY_DATA MemoryData,
- _In_ BL_TRANSLATION_TYPE TranslationType,
- _In_ PBL_LIBRARY_PARAMETERS LibraryParameters
- )
-{
- NTSTATUS Status;
-
- /* Take a reference */
- MmDescriptorCallTreeCount = 1;
-
- /* Only support valid translation types */
- if ((TranslationType > BlPae) || (LibraryParameters->TranslationType > BlPae))
- {
- /* Bail out */
- EfiPrintf(L"Invalid translation types present\r\n");
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Initialize memory descriptors */
- MmMdInitialize(0, LibraryParameters);
-
- /* Remember the page type we came in with */
- MmOriginalTranslationType = TranslationType;
-
- /* Initialize the physical page allocator */
- Status = MmPaInitialize(MemoryData,
- LibraryParameters->MinimumAllocationCount);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Initialize the memory tracker */
- Status = MmTrInitialize();
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"TR Mm init failed: %lx\r\n", Status);
- //MmArchDestroy();
- //MmPaDestroy(1);
- goto Quickie;
- }
-
- /* Initialize paging, large pages, self-mapping, PAE, if needed */
- Status = MmArchInitialize(1,
- MemoryData,
- TranslationType,
- LibraryParameters->TranslationType);
- if (NT_SUCCESS(Status))
- {
- /* Save the newly active transation type */
- MmTranslationType = LibraryParameters->TranslationType;
-
- /* Initialize the heap allocator now */
- Status = MmHaInitialize(LibraryParameters->MinimumHeapSize,
- LibraryParameters->HeapAllocationAttributes);
- }
-
- /* If Phase 1 init failed, bail out */
- if (!NT_SUCCESS(Status))
- {
- /* Kill everything set setup so far */
- EfiPrintf(L"Phase 1 Mm init failed: %lx\r\n", Status);
- //MmPaDestroy(0);
- //MmTrDestroy();
- //MmArchDestroy();
- //MmPaDestroy(1);
- goto Quickie;
- }
-
- /* Do we have too many descriptors? */
- if (LibraryParameters->DescriptorCount > 512)
- {
- /* Switch to using a dynamic buffer instead */
- EfiPrintf(L"Warning: too many descriptors\r\n");
- Status = STATUS_NOT_IMPLEMENTED;
- goto Quickie;
- //MmMdpSwitchToDynamicDescriptors(LibraryParameters->DescriptorCount);
- }
-
- /* Remove memory that the BCD says is bad */
- BlMmRemoveBadMemory();
-
- /* Now map all the memory regions as needed */
- Status = MmArchInitialize(2,
- MemoryData,
- TranslationType,
- LibraryParameters->TranslationType);
- if (NT_SUCCESS(Status))
- {
- /* Initialize the block allocator */
- Status = MmBaInitialize();
- }
-
- /* Check if anything in phase 2 failed */
- if (!NT_SUCCESS(Status))
- {
- /* Go back to static descriptors and kill the heap */
- EfiPrintf(L"Phase 2 Mm init failed: %lx\r\n", Status);
- //MmMdpSwitchToStaticDescriptors();
- //HapInitializationStatus = 0;
- //++MmDescriptorCallTreeCount;
-
- /* Destroy the Phase 1 initialization */
- //MmPaDestroy(0);
- //MmTrDestroy();
- //MmArchDestroy();
- //MmPaDestroy(1);
- }
-
-Quickie:
- /* Free the memory descriptors and return the initialization state */
- MmMdFreeGlobalDescriptors();
- --MmDescriptorCallTreeCount;
- return Status;
-}
diff --git a/boot/environ/lib/mm/pagealloc.c b/boot/environ/lib/mm/pagealloc.c
deleted file mode 100644
index e77106b6a57..00000000000
--- a/boot/environ/lib/mm/pagealloc.c
+++ /dev/null
@@ -1,1702 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/mm/pagealloc.c
- * PURPOSE: Boot Library Memory Manager Page Allocator
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
-*/
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-#include "bcd.h"
-
-typedef struct _BL_PA_REQUEST
-{
- BL_ADDRESS_RANGE BaseRange;
- BL_ADDRESS_RANGE VirtualRange;
- ULONG Type;
- ULONGLONG Pages;
- ULONG MemoryType;
- ULONG Alignment;
- ULONG Flags;
-} BL_PA_REQUEST, *PBL_PA_REQUEST;
-
-/* DATA VARIABLES ************************************************************/
-
-extern ULONG MmArchLargePageSize;
-
-ULONGLONG PapMaximumPhysicalPage, PapMinimumPhysicalPage;
-
-ULONG PapMinimumAllocationCount;
-
-BOOLEAN PapInitializationStatus;
-
-BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedAllocated;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlMappedUnallocated;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlFwAllocationTracker;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedAllocated;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlUnmappedUnallocated;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlReservedAllocated;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlBadMemory;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlTruncatedMemory;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlPersistentMemory;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlCompleteBadMemory;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlFreeVirtual;
-BL_MEMORY_DESCRIPTOR_LIST MmMdlMappingTrackers;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-MmPaTruncateMemory (
- _In_ ULONGLONG BasePage
- )
-{
- NTSTATUS Status;
-
- /* Increase nesting depth */
- ++MmDescriptorCallTreeCount;
-
- /* Set the maximum page to the truncated request */
- if (BasePage < PapMaximumPhysicalPage)
- {
- PapMaximumPhysicalPage = BasePage;
- }
-
- /* Truncate mapped and allocated memory */
- Status = MmMdTruncateDescriptors(&MmMdlMappedAllocated,
- &MmMdlTruncatedMemory,
- BasePage);
- if (NT_SUCCESS(Status))
- {
- /* Truncate unmapped and allocated memory */
- Status = MmMdTruncateDescriptors(&MmMdlUnmappedAllocated,
- &MmMdlTruncatedMemory,
- BasePage);
- if (NT_SUCCESS(Status))
- {
- /* Truncate mapped and unallocated memory */
- Status = MmMdTruncateDescriptors(&MmMdlMappedUnallocated,
- &MmMdlTruncatedMemory,
- BasePage);
- if (NT_SUCCESS(Status))
- {
- /* Truncate unmapped and unallocated memory */
- Status = MmMdTruncateDescriptors(&MmMdlUnmappedUnallocated,
- &MmMdlTruncatedMemory,
- BasePage);
- if (NT_SUCCESS(Status))
- {
- /* Truncate reserved memory */
- Status = MmMdTruncateDescriptors(&MmMdlReservedAllocated,
- &MmMdlTruncatedMemory,
- BasePage);
- }
- }
- }
- }
-
- /* Restore the nesting depth */
- MmMdFreeGlobalDescriptors();
- --MmDescriptorCallTreeCount;
- return Status;
-}
-
-NTSTATUS
-BlpMmInitializeConstraints (
- VOID
- )
-{
- NTSTATUS Status, ReturnStatus;
- ULONGLONG LowestAddressValid, HighestAddressValid;
- ULONGLONG LowestPage, HighestPage;
-
- /* Assume success */
- ReturnStatus = STATUS_SUCCESS;
-
- /* Check for LOWMEM */
- Status = BlGetBootOptionInteger(BlpApplicationEntry.BcdData,
- BcdLibraryInteger_AvoidLowPhysicalMemory,
- &LowestAddressValid);
- if (NT_SUCCESS(Status))
- {
- /* Align the address */
- LowestAddressValid = (ULONG_PTR)PAGE_ALIGN(LowestAddressValid);
- LowestPage = LowestAddressValid >> PAGE_SHIFT;
-
- /* Make sure it's below 4GB */
- if (LowestPage <= 0x100000)
- {
- PapMinimumPhysicalPage = LowestPage;
- }
- }
-
- /* Check for MAXMEM */
- Status = BlGetBootOptionInteger(BlpApplicationEntry.BcdData,
- BcdLibraryInteger_TruncatePhysicalMemory,
- &HighestAddressValid);
- if (NT_SUCCESS(Status))
- {
- /* Get the page */
- HighestPage = HighestAddressValid >> PAGE_SHIFT;
-
- /* Truncate memory above this page */
- ReturnStatus = MmPaTruncateMemory(HighestPage);
- }
-
- /* Return back to the caller */
- return ReturnStatus;
-}
-
-PWCHAR
-MmMdListPointerToName (_In_ PBL_MEMORY_DESCRIPTOR_LIST MdList)
-{
- if (MdList == &MmMdlUnmappedAllocated)
- {
- return L"UnmapAlloc";
- }
- else if (MdList == &MmMdlUnmappedUnallocated)
- {
- return L"UnmapUnalloc";
- }
- else if (MdList == &MmMdlMappedAllocated)
- {
- return L"MapAlloc";
- }
- else if (MdList == &MmMdlMappedUnallocated)
- {
- return L"MapUnalloc";
- }
- else
- {
- return L"Other";
- }
-}
-
-NTSTATUS
-MmPapAllocateRegionFromMdl (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList,
- _Out_opt_ PBL_MEMORY_DESCRIPTOR Descriptor,
- _In_ PBL_MEMORY_DESCRIPTOR_LIST CurrentList,
- _In_ PBL_PA_REQUEST Request,
- _In_ BL_MEMORY_TYPE Type
- )
-{
- NTSTATUS Status;
- BL_MEMORY_DESCRIPTOR LocalDescriptor = {{0}};
- PBL_MEMORY_DESCRIPTOR FoundDescriptor, TempDescriptor;
- PLIST_ENTRY ListHead, NextEntry;
- BOOLEAN TopDown, GotFwPages;
- EFI_PHYSICAL_ADDRESS EfiAddress;
- ULONGLONG LocalEndPage, FoundEndPage, LocalVirtualEndPage;
-
- /* Check if any parameters were not passed in correctly */
- if (!(CurrentList) || !(Request) || (!(NewList) && !(Descriptor)))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Set failure by default */
- Status = STATUS_NO_MEMORY;
-
- /* Take the head and next entry in the list, as appropriate */
- ListHead = CurrentList->First;
- if (Request->Type & BL_MM_REQUEST_TOP_DOWN_TYPE)
- {
- NextEntry = ListHead->Blink;
- TopDown = TRUE;
- }
- else
- {
- NextEntry = ListHead->Flink;
- TopDown = FALSE;
- }
-
- /* Loop through the list */
- GotFwPages = FALSE;
- while (NextEntry != ListHead)
- {
- /* Grab a descriptor */
- FoundDescriptor = CONTAINING_RECORD(NextEntry,
- BL_MEMORY_DESCRIPTOR,
- ListEntry);
-
- /* See if it matches the request */
- if (MmMdFindSatisfyingRegion(FoundDescriptor,
- &LocalDescriptor,
- Request->Pages,
- &Request->BaseRange,
- &Request->VirtualRange,
- TopDown,
- Request->MemoryType,
- Request->Flags,
- Request->Alignment))
- {
- break;
- }
-
- /* It doesn't, move to the next appropriate entry */
- if (TopDown)
- {
- NextEntry = NextEntry->Blink;
- }
- else
- {
- NextEntry = NextEntry->Flink;
- }
- }
-
- /* Check if we exhausted the list */
- if (NextEntry == ListHead)
- {
- return Status;
- }
-
- /* Copy all the flags that are not request flag */
- LocalDescriptor.Flags = (Request->Flags & 0xFFFF0000) |
- (LocalDescriptor.Flags & 0x0000FFFF);
-
- /* Are we using the physical memory list, and are we OK with using firmware? */
- if ((CurrentList == &MmMdlUnmappedUnallocated) &&
- !((Request->Flags & BlMemoryNonFirmware) ||
- (LocalDescriptor.Flags & BlMemoryNonFirmware)))
- {
- /* Allocate the requested address from EFI */
- EfiAddress = LocalDescriptor.BasePage << PAGE_SHIFT;
- Status = EfiAllocatePages(AllocateAddress,
- (ULONG)LocalDescriptor.PageCount,
- &EfiAddress);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"EFI memory allocation failure\r\n");
- EfiStall(10000000);
- return Status;
- }
-
- /* Remember we got memory from EFI */
- GotFwPages = TRUE;
- }
-
- /* Remove the descriptor from the original list it was on */
- MmMdRemoveDescriptorFromList(CurrentList, FoundDescriptor);
-
- /* Get the end pages */
- LocalEndPage = LocalDescriptor.PageCount + LocalDescriptor.BasePage;
- FoundEndPage = FoundDescriptor->PageCount + FoundDescriptor->BasePage;
-
- /* Are we allocating from the virtual memory list? */
- if (CurrentList == &MmMdlMappedUnallocated)
- {
- /* Check if the region matches perfectly */
- if ((LocalDescriptor.BasePage == FoundDescriptor->BasePage) &&
- (LocalEndPage == FoundEndPage))
- {
- /* Check if the original descriptor had the flag set */
- if ((FoundDescriptor->Flags & 0x40000000) && (Descriptor))
- {
- /* Make our local one have it too, even if not needed */
- LocalDescriptor.Flags |= 0x40000000;
- }
- }
- else
- {
- /* Write the 'incomplete mapping' flag */
- FoundDescriptor->Flags |= 0x40000000;
- if (Descriptor)
- {
- /* Including on the local one if there's one passed in */
- LocalDescriptor.Flags |= 0x40000000;
- }
- }
- }
-
- /* Does the memory we received not exactly fall onto the beginning of its descriptor? */
- if (LocalDescriptor.BasePage != FoundDescriptor->BasePage)
- {
- TempDescriptor = MmMdInitByteGranularDescriptor(FoundDescriptor->Flags,
- FoundDescriptor->Type,
- FoundDescriptor->BasePage,
- FoundDescriptor->VirtualPage,
- LocalDescriptor.BasePage -
- FoundDescriptor->BasePage);
- Status = MmMdAddDescriptorToList(CurrentList, TempDescriptor, 0);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- }
-
- /* Does the memory we received not exactly fall onto the end of its descriptor? */
- LocalVirtualEndPage = LocalDescriptor.VirtualPage ?
- LocalDescriptor.VirtualPage + LocalDescriptor.PageCount : 0;
- if (LocalEndPage != FoundEndPage)
- {
- TempDescriptor = MmMdInitByteGranularDescriptor(FoundDescriptor->Flags,
- FoundDescriptor->Type,
- LocalEndPage,
- LocalVirtualEndPage,
- FoundEndPage - LocalEndPage);
- Status = MmMdAddDescriptorToList(CurrentList, TempDescriptor, 0);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- }
-
- /* We got the memory we needed */
- Status = STATUS_SUCCESS;
-
- /* Are we supposed to insert it into a new list? */
- if (NewList)
- {
- /* Copy the allocated region descriptor into the one we found */
- FoundDescriptor->BaseAddress = LocalDescriptor.BaseAddress;
- FoundDescriptor->VirtualPage = LocalDescriptor.VirtualPage;
- FoundDescriptor->PageCount = LocalDescriptor.PageCount;
- FoundDescriptor->Type = Type;
- FoundDescriptor->Flags = LocalDescriptor.Flags;
-
- /* Remember if it came from EFI */
- if (GotFwPages)
- {
- FoundDescriptor->Flags |= BlMemoryFirmware;
- }
-
- /* Add the descriptor to the requested list */
- Status = MmMdAddDescriptorToList(NewList, FoundDescriptor, 0);
- }
- else
- {
- /* Free the descriptor, nobody wants to know about it anymore */
- MmMdFreeDescriptor(FoundDescriptor);
- }
-
- /* Return the allocation region back */
- RtlCopyMemory(Descriptor, &LocalDescriptor, sizeof(LocalDescriptor));
- return Status;
-}
-
-NTSTATUS
-MmPaAllocatePages (
- _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList,
- _In_ PBL_MEMORY_DESCRIPTOR Descriptor,
- _In_ PBL_MEMORY_DESCRIPTOR_LIST CurrentList,
- _In_ PBL_PA_REQUEST Request,
- _In_ BL_MEMORY_TYPE MemoryType
- )
-{
- NTSTATUS Status;
-
- /* Heap and page directory/table pages have a special flag */
- if ((MemoryType >= BlLoaderHeap) && (MemoryType <= BlLoaderReferencePage))
- {
- Request->Flags |= BlMemorySpecial;
- }
-
- /* Try to find a free region of RAM matching this range and request */
- Request->MemoryType = BlConventionalMemory;
- Status = MmPapAllocateRegionFromMdl(NewList,
- Descriptor,
- CurrentList,
- Request,
- MemoryType);
- if (Status == STATUS_NOT_FOUND)
- {
- /* Need to re-synchronize the memory map and check other lists */
- EfiPrintf(L"No RAM found -- backup plan not yet implemented\r\n");
- }
-
- /* Did we get the region we wanted? */
- if (NT_SUCCESS(Status))
- {
- /* All good, return back */
- return Status;
- }
-
- /* Are we failing due to some attributes? */
- if (Request->Flags & BlMemoryValidAllocationAttributeMask)
- {
- if (Request->Flags & BlMemoryLargePages)
- {
- EfiPrintf(L"large alloc fail not yet implemented %lx\r\n", Status);
- EfiStall(1000000);
- return STATUS_NOT_IMPLEMENTED;
- }
- if (Request->Flags & BlMemoryFixed)
- {
- EfiPrintf(L"fixed alloc fail not yet implemented %lx\r\n", Status);
- EfiStall(1000000);
- return STATUS_NOT_IMPLEMENTED;
- }
- }
-
- /* Nope, just fail the entire call */
- return Status;
-}
-
-NTSTATUS
-MmPapAllocatePhysicalPagesInRange (
- _Inout_ PPHYSICAL_ADDRESS BaseAddress,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ ULONGLONG Pages,
- _In_ ULONG Attributes,
- _In_ ULONG Alignment,
- _In_ PBL_MEMORY_DESCRIPTOR_LIST NewList,
- _In_opt_ PBL_ADDRESS_RANGE Range,
- _In_ ULONG RangeType
- )
-{
- NTSTATUS Status;
- BL_PA_REQUEST Request;
- BL_MEMORY_DESCRIPTOR Descriptor;
-
- /* Increase nesting depth */
- ++MmDescriptorCallTreeCount;
-
- /* Bail out if no address was specified */
- if (!BaseAddress)
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Bail out if no page count was passed in, or a bad list was specified */
- if (!(Pages) ||
- ((NewList != &MmMdlUnmappedAllocated) &&
- (NewList != &MmMdlPersistentMemory)))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Bail out if the passed in range is invalid */
- if ((Range) && (Range->Minimum >= Range->Maximum))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Adjust alignment as needed */
- if (!Alignment)
- {
- Alignment = 1;
- }
-
- /* Clear the virtual range */
- Request.VirtualRange.Minimum = 0;
- Request.VirtualRange.Maximum = 0;
-
- /* Check if a fixed allocation was requested*/
- if (Attributes & BlMemoryFixed)
- {
- /* Force the only available range to be the passed in address */
- Request.BaseRange.Minimum = BaseAddress->QuadPart >> PAGE_SHIFT;
- Request.BaseRange.Maximum = Request.BaseRange.Minimum + Pages - 1;
- }
- else if (Range)
- {
- /* Otherwise, a manual range was specified, use it */
- Request.BaseRange.Minimum = Range->Minimum >> PAGE_SHIFT;
- Request.BaseRange.Maximum = Request.BaseRange.Minimum +
- (Range->Maximum >> PAGE_SHIFT) - 1;
- }
- else
- {
- /* Otherwise, use any possible range of pages */
- Request.BaseRange.Minimum = PapMinimumPhysicalPage;
- Request.BaseRange.Maximum = MAXULONG >> PAGE_SHIFT;
- }
-
- /* Check if no type was specified, or if it was invalid */
- if (!(RangeType) ||
- (RangeType & ~(BL_MM_REQUEST_TOP_DOWN_TYPE | BL_MM_REQUEST_DEFAULT_TYPE)))
- {
- /* Use default type */
- Request.Type = BL_MM_REQUEST_DEFAULT_TYPE;
- }
- else
- {
- /* Use the requested type */
- Request.Type = RangeType;
- }
-
- /* Capture the other request parameters */
- Request.Alignment = Alignment;
- Request.Pages = Pages;
- Request.Flags = Attributes;
- Status = MmPaAllocatePages(NewList,
- &Descriptor,
- &MmMdlUnmappedUnallocated,
- &Request,
- MemoryType);
- if (NT_SUCCESS(Status))
- {
- /* We got a descriptor back, return its address */
- BaseAddress->QuadPart = Descriptor.BasePage << PAGE_SHIFT;
- }
-
-Quickie:
- /* Restore the nesting depth */
- MmMdFreeGlobalDescriptors();
- --MmDescriptorCallTreeCount;
- return Status;
-}
-
-NTSTATUS
-MmPapPageAllocatorExtend (
- _In_ ULONG Attributes,
- _In_ ULONG Alignment,
- _In_ ULONGLONG PageCount,
- _In_ ULONGLONG VirtualPage,
- _In_opt_ PBL_ADDRESS_RANGE Range,
- _In_opt_ ULONG Type
- )
-{
- BL_PA_REQUEST Request;
- ULONGLONG PageRange;
- BL_MEMORY_DESCRIPTOR NewDescriptor;
- ULONG AllocationFlags, CacheAttributes, AddFlags;
- NTSTATUS Status;
- PBL_MEMORY_DESCRIPTOR_LIST MdList;
- PBL_MEMORY_DESCRIPTOR Descriptor;
- PVOID VirtualAddress;
- PHYSICAL_ADDRESS PhysicalAddress;
-
- /* Is the caller requesting less pages than allowed? */
- if (!(Attributes & BlMemoryFixed) &&
- !(Range) &&
- (PageCount < PapMinimumAllocationCount))
- {
- /* Unless this is a fixed request, then adjust the original requirements */
- PageCount = PapMinimumAllocationCount;
- Alignment = PapMinimumAllocationCount;
- }
-
- /* Extract only the allocation attributes */
- AllocationFlags = Attributes & BlMemoryValidAllocationAttributeMask;
-
- /* Check if the caller wants large pages */
- if ((AllocationFlags & BlMemoryLargePages) && (MmArchLargePageSize != 1))
- {
- EfiPrintf(L"Large pages not supported!\r\n");
- EfiStall(10000000);
- return STATUS_NOT_IMPLEMENTED;
- }
-
- /* Set an emty virtual range */
- Request.VirtualRange.Minimum = 0;
- Request.VirtualRange.Maximum = 0;
-
- /* Check if the caller requested a range */
- if (Range)
- {
- /* Calculate it size in pages, minus a page as this is a 0-based range */
- PageRange = ((Range->Maximum - Range->Minimum) >> PAGE_SHIFT) - 1;
-
- /* Set the minimum and maximum, in pages */
- Request.BaseRange.Minimum = Range->Minimum >> PAGE_SHIFT;
- Request.BaseRange.Maximum = Request.BaseRange.Minimum + PageRange;
- }
- else
- {
- /* Initialize a range from the smallest page to the biggest */
- Request.BaseRange.Minimum = PapMinimumPhysicalPage;
- Request.BaseRange.Maximum = 0xFFFFFFFF / PAGE_SIZE;
- }
-
- /* Get the cache attributes */
- CacheAttributes = Attributes & BlMemoryValidCacheAttributeMask;
-
- /* Check if the caller requested a valid allocation type */
- if ((Type) && !(Type & ~(BL_MM_REQUEST_DEFAULT_TYPE |
- BL_MM_REQUEST_TOP_DOWN_TYPE)))
- {
- /* Use what the caller wanted */
- Request.Type = Type;
- }
- else
- {
- /* Use the default bottom-up type */
- Request.Type = BL_MM_REQUEST_DEFAULT_TYPE;
- }
-
- /* Use the original protection and type, but ignore other attributes */
- Request.Flags = Attributes & ~(BlMemoryValidAllocationAttributeMask |
- BlMemoryValidCacheAttributeMask);
- Request.Alignment = Alignment;
- Request.Pages = PageCount;
-
- /* Allocate some free pages */
- Status = MmPaAllocatePages(NULL,
- &NewDescriptor,
- &MmMdlUnmappedUnallocated,
- &Request,
- BlConventionalMemory);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"Failed to get unmapped, unallocated memory!\r\n");
- EfiStall(10000000);
- return Status;
- }
-
- /* Initialize a descriptor for these pages, adding in the allocation flags */
- Descriptor = MmMdInitByteGranularDescriptor(AllocationFlags |
- NewDescriptor.Flags,
- BlConventionalMemory,
- NewDescriptor.BasePage,
- NewDescriptor.VirtualPage,
- NewDescriptor.PageCount);
-
- /* Now map a virtual address for these physical pages */
- VirtualAddress = (PVOID)((ULONG_PTR)VirtualPage << PAGE_SHIFT);
- PhysicalAddress.QuadPart = NewDescriptor.BasePage << PAGE_SHIFT;
- Status = BlMmMapPhysicalAddressEx(&VirtualAddress,
- AllocationFlags | CacheAttributes,
- NewDescriptor.PageCount << PAGE_SHIFT,
- PhysicalAddress);
- if (Status == STATUS_SUCCESS)
- {
- /* Add the cache attributes now that the mapping worked */
- Descriptor->Flags |= CacheAttributes;
-
- /* Update the virtual page now that we mapped it */
- Descriptor->VirtualPage = (ULONG_PTR)VirtualAddress >> PAGE_SHIFT;
-
- /* Add this as a mapped region */
- Status = MmMdAddDescriptorToList(&MmMdlMappedUnallocated,
- Descriptor,
- BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG);
-
- /* Make new descriptor that we'll add in firmware allocation tracker */
- MdList = &MmMdlFwAllocationTracker;
- Descriptor = MmMdInitByteGranularDescriptor(0,
- BlConventionalMemory,
- NewDescriptor.BasePage,
- 0,
- NewDescriptor.PageCount);
-
- /* Do not coalesce */
- AddFlags = 0;
- }
- else
- {
- /* We failed, free the physical pages */
- Status = MmFwFreePages(NewDescriptor.BasePage, NewDescriptor.PageCount);
- if (!NT_SUCCESS(Status))
- {
- /* We failed to free the pages, so this is still around */
- MdList = &MmMdlUnmappedAllocated;
- }
- else
- {
- /* This is now back to unmapped/unallocated memory */
- Descriptor->Flags = 0;
- MdList = &MmMdlUnmappedUnallocated;
- }
-
- /* Coalesce the free descriptor */
- AddFlags = BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG;
- }
-
- /* Either add to firmware list, or to unmapped list, then return result */
- MmMdAddDescriptorToList(MdList, Descriptor, AddFlags);
- return Status;
-}
-
-NTSTATUS
-MmPapAllocatePagesInRange (
- _Inout_ PVOID* PhysicalAddress,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ ULONGLONG Pages,
- _In_ ULONG Attributes,
- _In_ ULONG Alignment,
- _In_opt_ PBL_ADDRESS_RANGE Range,
- _In_ ULONG Type
- )
-{
- NTSTATUS Status;
- PHYSICAL_ADDRESS BaseAddress;
- BL_PA_REQUEST Request;
- PBL_MEMORY_DESCRIPTOR_LIST List;
- BL_MEMORY_DESCRIPTOR Descriptor;
-
- /* Increment nesting depth */
- ++MmDescriptorCallTreeCount;
-
- /* Default list */
- List = &MmMdlMappedAllocated;
-
- /* Check for missing parameters or invalid range */
- if (!(PhysicalAddress) ||
- !(Pages) ||
- ((Range) && (Range->Minimum >= Range->Maximum)))
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Exit;
- }
-
- /* What translation mode are we using? */
- if (MmTranslationType != BlNone)
- {
- /* Use 1 page alignment if none was requested */
- if (!Alignment)
- {
- Alignment = 1;
- }
-
- /* Check if we got a range */
- if (Range)
- {
- /* We don't support virtual memory yet @TODO */
- EfiPrintf(L"virt range not yet implemented in %S\r\n", __FUNCTION__);
- EfiStall(1000000);
- Status = STATUS_NOT_IMPLEMENTED;
- goto Exit;
- }
- else
- {
- /* Use the entire range that's possible */
- Request.BaseRange.Minimum = PapMinimumPhysicalPage;
- Request.BaseRange.Maximum = 0xFFFFFFFF >> PAGE_SHIFT;
- }
-
- /* Check if a fixed allocation was requested */
- if (Attributes & BlMemoryFixed)
- {
- /* We don't support virtual memory yet @TODO */
- EfiPrintf(L"fixed not yet implemented in %S\r\n", __FUNCTION__);
- EfiStall(1000000);
- Status = STATUS_NOT_IMPLEMENTED;
- goto Exit;
- }
- else
- {
- /* Check if kernel range was specifically requested */
- if (Attributes & BlMemoryKernelRange)
- {
- /* Use the kernel range */
- Request.VirtualRange.Minimum = MmArchKsegAddressRange.Minimum >> PAGE_SHIFT;
- Request.VirtualRange.Maximum = MmArchKsegAddressRange.Maximum >> PAGE_SHIFT;
- }
- else
- {
- /* Set the virtual address range */
- Request.VirtualRange.Minimum = 0;
- Request.VirtualRange.Maximum = 0xFFFFFFFF >> PAGE_SHIFT;
- }
- }
-
- /* Check what type of allocation was requested */
- if ((Type) && !(Type & ~(BL_MM_REQUEST_DEFAULT_TYPE |
- BL_MM_REQUEST_TOP_DOWN_TYPE)))
- {
- /* Save it if it was valid */
- Request.Type = Type;
- }
- else
- {
- /* Set the default */
- Request.Type = BL_MM_REQUEST_DEFAULT_TYPE;
- }
-
- /* Fill out the request of the request */
- Request.Flags = Attributes;
- Request.Alignment = Alignment;
- Request.Pages = Pages;
-
- /* Try to allocate the pages */
- Status = MmPaAllocatePages(List,
- &Descriptor,
- &MmMdlMappedUnallocated,
- &Request,
- MemoryType);
- if (!NT_SUCCESS(Status))
- {
- /* Extend the physical allocator */
- Status = MmPapPageAllocatorExtend(Attributes,
- Alignment,
- Pages,
- ((ULONG_PTR)*PhysicalAddress) >>
- PAGE_SHIFT,
- Range,
- Type);
- if (!NT_SUCCESS(Status))
- {
- /* Fail since we're out of memory */
- EfiPrintf(L"EXTEND OUT OF MEMORY: %lx\r\n", Status);
- Status = STATUS_NO_MEMORY;
- goto Exit;
- }
-
- /* Try the allocation again now */
- Status = MmPaAllocatePages(&MmMdlMappedAllocated,
- &Descriptor,
- &MmMdlMappedUnallocated,
- &Request,
- MemoryType);
- if (!NT_SUCCESS(Status))
- {
- /* Fail since we're out of memory */
- EfiPrintf(L"PALLOC OUT OF MEMORY: %lx\r\n", Status);
- goto Exit;
- }
- }
-
- /* Return the allocated address */
- *PhysicalAddress = (PVOID)((ULONG_PTR)Descriptor.VirtualPage << PAGE_SHIFT);
- }
- else
- {
- /* Check if this is a fixed allocation */
- BaseAddress.QuadPart = (Attributes & BlMemoryFixed) ?
- (ULONG_PTR)*PhysicalAddress : 0;
-
- /* Allocate the pages */
- Status = MmPapAllocatePhysicalPagesInRange(&BaseAddress,
- MemoryType,
- Pages,
- Attributes,
- Alignment,
- (&MmMdlMappedAllocated !=
- &MmMdlPersistentMemory) ?
- &MmMdlUnmappedAllocated :
- &MmMdlMappedAllocated,
- Range,
- Type);
-
- /* Return the allocated address */
- *PhysicalAddress = PhysicalAddressToPtr(BaseAddress);
- }
-
-Exit:
- /* Restore the nesting depth */
- MmMdFreeGlobalDescriptors();
- --MmDescriptorCallTreeCount;
- return Status;
-}
-
-NTSTATUS
-MmPaInitialize (
- __in PBL_MEMORY_DATA BootMemoryData,
- __in ULONG MinimumAllocationCount
- )
-{
- NTSTATUS Status;
- ULONG ExistingDescriptors, FinalOffset;
- PBL_MEMORY_DESCRIPTOR Descriptor, NewDescriptor;
-
- /* Initialize physical allocator variables */
- PapMaximumPhysicalPage = 0xFFFFFFFFFFFFF;
- PapMinimumAllocationCount = MinimumAllocationCount;
- PapMinimumPhysicalPage = 0;
-
- /* Initialize all the lists */
- MmMdInitializeListHead(&MmMdlMappedAllocated);
- MmMdInitializeListHead(&MmMdlMappedUnallocated);
- MmMdInitializeListHead(&MmMdlFwAllocationTracker);
- MmMdInitializeListHead(&MmMdlUnmappedAllocated);
- MmMdInitializeListHead(&MmMdlReservedAllocated);
- MmMdInitializeListHead(&MmMdlBadMemory);
- MmMdInitializeListHead(&MmMdlTruncatedMemory);
- MmMdInitializeListHead(&MmMdlPersistentMemory);
- MmMdInitializeListHead(&MmMdlUnmappedUnallocated);
- MmMdInitializeListHead(&MmMdlCompleteBadMemory);
-
- /* Get the BIOS memory map */
- Status = MmFwGetMemoryMap(&MmMdlUnmappedUnallocated,
- BL_MM_FLAG_USE_FIRMWARE_FOR_MEMORY_MAP_BUFFERS |
- BL_MM_FLAG_REQUEST_COALESCING);
- if (NT_SUCCESS(Status))
- {
-#if 0
- PLIST_ENTRY listHead, nextEntry;
-
- /* Loop the NT firmware memory list */
- EfiPrintf(L"NT MEMORY MAP\n\r\n");
- listHead = &MmMdlUnmappedUnallocated.ListHead;
- nextEntry = listHead->Flink;
- while (listHead != nextEntry)
- {
- Descriptor = CONTAINING_RECORD(nextEntry, BL_MEMORY_DESCRIPTOR, ListEntry);
-
- EfiPrintf(L"Type: %08lX Flags: %08lX Base: 0x%016I64X End: 0x%016I64X\r\n",
- Descriptor->Type,
- Descriptor->Flags,
- Descriptor->BasePage << PAGE_SHIFT,
- (Descriptor->BasePage + Descriptor->PageCount) << PAGE_SHIFT);
-
- nextEntry = nextEntry->Flink;
- }
-#endif
-
- /*
- * Because BL supports cross x86-x64 application launches and a LIST_ENTRY
- * is of variable size, care must be taken here to ensure that we see a
- * consistent view of descriptors. BL uses some offset magic to figure out
- * where the data actually starts, since everything is ULONGLONG past the
- * LIST_ENTRY itself
- */
- FinalOffset = BootMemoryData->MdListOffset + BootMemoryData->DescriptorOffset;
- Descriptor = (PBL_MEMORY_DESCRIPTOR)((ULONG_PTR)BootMemoryData + FinalOffset -
- FIELD_OFFSET(BL_MEMORY_DESCRIPTOR, BasePage));
-
- /* Scan all of them */
- ExistingDescriptors = BootMemoryData->DescriptorCount;
- while (ExistingDescriptors != 0)
- {
- /* Remove this region from our free memory MDL */
- //EfiPrintf(L"Handling existing descriptor: %llx %llx\r\n", Descriptor->BasePage, Descriptor->PageCount);
- Status = MmMdRemoveRegionFromMdlEx(&MmMdlUnmappedUnallocated,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- Descriptor->BasePage,
- Descriptor->PageCount,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Build a descriptor for it */
- NewDescriptor = MmMdInitByteGranularDescriptor(Descriptor->Flags,
- Descriptor->Type,
- Descriptor->BasePage,
- Descriptor->VirtualPage,
- Descriptor->PageCount);
- if (!NewDescriptor)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* And add this region to the reserved & allocated MDL */
- Status = MmMdAddDescriptorToList(&MmMdlReservedAllocated, NewDescriptor, 0);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Move on to the next descriptor */
- ExistingDescriptors--;
- Descriptor = (PBL_MEMORY_DESCRIPTOR)((ULONG_PTR)Descriptor + BootMemoryData->DescriptorSize);
- }
-
- /* We are done, so check for any RAM constraints which will make us truncate memory */
- Status = BlpMmInitializeConstraints();
- if (NT_SUCCESS(Status))
- {
- /* The Page Allocator has initialized */
- PapInitializationStatus = TRUE;
- Status = STATUS_SUCCESS;
- }
- }
-
- /* Return status */
- return Status;
-}
-
-NTSTATUS
-BlMmAllocatePhysicalPages(
- _In_ PPHYSICAL_ADDRESS Address,
- _In_ BL_MEMORY_TYPE MemoryType,
- _In_ ULONGLONG PageCount,
- _In_ ULONG Attributes,
- _In_ ULONG Alignment
- )
-{
- /* Call the physical allocator */
- return MmPapAllocatePhysicalPagesInRange(Address,
- MemoryType,
- PageCount,
- Attributes,
- Alignment,
- &MmMdlUnmappedAllocated,
- NULL,
- 0);
-}
-
-NTSTATUS
-MmPapFreePhysicalPages (
- _In_ ULONG WhichList,
- _In_ ULONGLONG PageCount,
- _In_ PHYSICAL_ADDRESS Address
- )
-{
- PBL_MEMORY_DESCRIPTOR Descriptor;
- ULONGLONG Page;
- ULONG DescriptorFlags, Flags;
- BOOLEAN DontFree, HasPageData;
- BL_LIBRARY_PARAMETERS LibraryParameters;
- NTSTATUS Status;
-
- /* Set some defaults */
- Flags = BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG;
- DontFree = FALSE;
- HasPageData = FALSE;
-
- /* Only page-aligned addresses are accepted */
- if (Address.QuadPart & (PAGE_SIZE - 1))
- {
- EfiPrintf(L"free mem fail 1\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Try to find the descriptor containing this address */
- Page = Address.QuadPart >> PAGE_SHIFT;
- Descriptor = MmMdFindDescriptor(WhichList,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- Page);
- if (!Descriptor)
- {
- EfiPrintf(L"free mem fail 2\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- /* If a page count was given, it must match, unless it's coalesced */
- DescriptorFlags = Descriptor->Flags;
- if (!(DescriptorFlags & BlMemoryCoalesced) &&
- (PageCount) && (PageCount != Descriptor->PageCount))
- {
- EfiPrintf(L"free mem fail 3\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Check if this is persistent memory in teardown status */
- if ((PapInitializationStatus == 2) &&
- (DescriptorFlags & BlMemoryPersistent))
- {
- /* Then we should keep it */
- DontFree = TRUE;
- }
- else
- {
- /* Mark it as non-persistent, since we're freeing it */
- Descriptor->Flags &= ~BlMemoryPersistent;
- }
-
- /* Check if this memory contains paging data */
- if ((Descriptor->Type == BlLoaderPageDirectory) ||
- (Descriptor->Type == BlLoaderReferencePage))
- {
- HasPageData = TRUE;
- }
-
- /* Check if a page count was given */
- if (PageCount)
- {
- /* The pages must fit within the descriptor */
- if ((PageCount + Page - Descriptor->BasePage) > Descriptor->PageCount)
- {
- EfiPrintf(L"free mem fail 4\r\n");
- return STATUS_INVALID_PARAMETER;
- }
- }
- else
- {
- /* No page count given, so the address must be at the beginning then */
- if (Descriptor->BasePage != Page)
- {
- EfiPrintf(L"free mem fail 5\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- /* And we'll use the page count in the descriptor */
- PageCount = Descriptor->PageCount;
- }
-
- /* Copy library parameters since we will read them */
- RtlCopyMemory(&LibraryParameters,
- &BlpLibraryParameters,
- sizeof(LibraryParameters));
-
- /* Check if this is teardown */
- if (PapInitializationStatus == 2)
- {
- EfiPrintf(L"Case 2 not yet handled!\r\n");
- return STATUS_NOT_SUPPORTED;
- }
- else if (!DontFree)
- {
- /* Caller wants memory to be freed -- should we zero it? */
- if (!(HasPageData) &&
- (LibraryParameters.LibraryFlags &
- BL_LIBRARY_FLAG_ZERO_HEAP_ALLOCATIONS_ON_FREE))
- {
- EfiPrintf(L"Freeing zero data not yet handled!\r\n");
- return STATUS_NOT_SUPPORTED;
- }
- }
-
- /* Now call into firmware to actually free the physical pages */
- Status = MmFwFreePages(Page, PageCount);
- if (!NT_SUCCESS(Status))
- {
- EfiPrintf(L"free mem fail 6\r\n");
- return Status;
- }
-
- /* Remove the firmware flags */
- Descriptor->Flags &= ~(BlMemoryNonFirmware |
- BlMemoryFirmware |
- BlMemoryPersistent);
-
- /* If we're not actually freeing, don't coalesce with anyone nearby */
- if (DontFree)
- {
- Flags |= BL_MM_ADD_DESCRIPTOR_NEVER_COALESCE_FLAG;
- }
-
- /* Check if the entire allocation is being freed */
- if (PageCount == Descriptor->PageCount)
- {
- /* Remove the descriptor from the allocated list */
- MmMdRemoveDescriptorFromList(&MmMdlUnmappedAllocated, Descriptor);
-
- /* Mark the entire descriptor as free */
- Descriptor->Type = BlConventionalMemory;
- }
- else
- {
- /* Init a descriptor for what we're actually freeing */
- Descriptor = MmMdInitByteGranularDescriptor(Descriptor->Flags,
- BlConventionalMemory,
- Page,
- 0,
- PageCount);
- if (!Descriptor)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Remove the region from the existing descriptor */
- Status = MmMdRemoveRegionFromMdlEx(&MmMdlUnmappedAllocated,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- Page,
- PageCount,
- NULL);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
- }
-
- /* Add the new descriptor into in the list (or the old, repurposed one) */
- Descriptor->Flags &= ~BlMemoryCoalesced;
- return MmMdAddDescriptorToList(&MmMdlUnmappedUnallocated, Descriptor, Flags);
-}
-
-NTSTATUS
-BlMmFreePhysicalPages (
- _In_ PHYSICAL_ADDRESS Address
- )
-{
- /* Call the physical allocator */
- return MmPapFreePhysicalPages(BL_MM_INCLUDE_UNMAPPED_ALLOCATED, 0, Address);
-}
-
-NTSTATUS
-MmPapFreePages (
- _In_ PVOID Address,
- _In_ ULONG WhichList
- )
-{
- PHYSICAL_ADDRESS PhysicalAddress;
-
- /* Handle virtual memory scenario */
- if (MmTranslationType != BlNone)
- {
- EfiPrintf(L"Unimplemented free virtual path: %p %lx\r\n", Address, WhichList);
- return STATUS_SUCCESS;
- }
-
- /* Physical memory should be in the unmapped allocated list */
- if (WhichList != BL_MM_INCLUDE_PERSISTENT_MEMORY)
- {
- WhichList = BL_MM_INCLUDE_UNMAPPED_ALLOCATED;
- }
-
- /* Free it from there */
- PhysicalAddress.QuadPart = (ULONG_PTR)Address;
- return MmPapFreePhysicalPages(WhichList, 0, PhysicalAddress);
-}
-
-NTSTATUS
-BlMmGetMemoryMap (
- _In_ PLIST_ENTRY MemoryMap,
- _In_ PBL_BUFFER_DESCRIPTOR MemoryParameters,
- _In_ ULONG WhichTypes,
- _In_ ULONG Flags
- )
-{
- BL_MEMORY_DESCRIPTOR_LIST FirmwareMdList, FullMdList;
- BOOLEAN DoFirmware, DoPersistent, DoTruncated, DoBad;
- BOOLEAN DoReserved, DoUnmapUnalloc, DoUnmapAlloc;
- BOOLEAN DoMapAlloc, DoMapUnalloc, DoFirmware2;
- ULONG LoopCount, MdListCount, MdListSize, Used;
- NTSTATUS Status;
-
- /* Initialize the firmware list if we use it */
- MmMdInitializeListHead(&FirmwareMdList);
-
- /* Make sure we got our input parameters */
- if (!(MemoryMap) || !(MemoryParameters))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Either ask for firmware memory, or don't. Not neither */
- if ((WhichTypes & ~BL_MM_INCLUDE_NO_FIRMWARE_MEMORY) &&
- (WhichTypes & ~BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Either ask for firmware memory, or don't. Not both */
- if ((WhichTypes & BL_MM_INCLUDE_NO_FIRMWARE_MEMORY) &&
- (WhichTypes & BL_MM_INCLUDE_ONLY_FIRMWARE_MEMORY))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Initialize the memory map list */
- InitializeListHead(MemoryMap);
-
- /* Check which types of memory to dump */
- DoFirmware = WhichTypes & BL_MM_INCLUDE_FIRMWARE_MEMORY;
- DoPersistent = WhichTypes & BL_MM_INCLUDE_PERSISTENT_MEMORY;
- DoTruncated = WhichTypes & BL_MM_INCLUDE_TRUNCATED_MEMORY;
- DoBad = WhichTypes & BL_MM_INCLUDE_BAD_MEMORY;
- DoReserved = WhichTypes & BL_MM_INCLUDE_RESERVED_ALLOCATED;
- DoUnmapUnalloc = WhichTypes & BL_MM_INCLUDE_UNMAPPED_UNALLOCATED;
- DoUnmapAlloc = WhichTypes & BL_MM_INCLUDE_UNMAPPED_ALLOCATED;
- DoMapAlloc = WhichTypes & BL_MM_INCLUDE_MAPPED_ALLOCATED;
- DoMapUnalloc = WhichTypes & BL_MM_INCLUDE_MAPPED_UNALLOCATED;
- DoFirmware2 = WhichTypes & BL_MM_INCLUDE_FIRMWARE_MEMORY_2;
-
- /* Begin the attempt loop */
- LoopCount = 0;
- while (TRUE)
- {
- /* Count how many entries we will need */
- MdListCount = 0;
- if (DoMapAlloc) MdListCount = MmMdCountList(&MmMdlMappedAllocated);
- if (DoMapUnalloc) MdListCount += MmMdCountList(&MmMdlMappedUnallocated);
- if (DoUnmapAlloc) MdListCount += MmMdCountList(&MmMdlUnmappedAllocated);
- if (DoUnmapUnalloc) MdListCount += MmMdCountList(&MmMdlUnmappedUnallocated);
- if (DoReserved) MdListCount += MmMdCountList(&MmMdlReservedAllocated);
- if (DoBad) MdListCount += MmMdCountList(&MmMdlBadMemory);
- if (DoTruncated) MdListCount += MmMdCountList(&MmMdlTruncatedMemory);
- if (DoPersistent) MdListCount += MmMdCountList(&MmMdlPersistentMemory);
-
- /* Plus firmware entries */
- if (DoFirmware)
- {
- /* Free the previous entries, if any */
- MmMdFreeList(&FirmwareMdList);
-
- /* Get the firmware map, coalesced */
- Status = MmFwGetMemoryMap(&FirmwareMdList,
- BL_MM_FLAG_REQUEST_COALESCING);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* We overwrite, since this type is exclusive */
- MdListCount = MmMdCountList(&FirmwareMdList);
- }
-
- /* Plus firmware entries-2 */
- if (DoFirmware2)
- {
- /* Free the previous entries, if any */
- MmMdFreeList(&FirmwareMdList);
-
- /* Get the firmware map, uncoalesced */
- Status = MmFwGetMemoryMap(&FirmwareMdList, 0);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* We overwrite, since this type is exclusive */
- MdListCount = MmMdCountList(&FirmwareMdList);
- }
-
- /* If there's no descriptors, we're done */
- if (!MdListCount)
- {
- Status = STATUS_SUCCESS;
- goto Quickie;
- }
-
- /* Check if the buffer we have is big enough */
- if (MemoryParameters->BufferSize >=
- (sizeof(BL_MEMORY_DESCRIPTOR) * MdListCount))
- {
- break;
- }
-
- /* It's not, allocate it, with a slack of 4 extra descriptors */
- MdListSize = sizeof(BL_MEMORY_DESCRIPTOR) * (MdListCount + 4);
-
- /* Except if we weren't asked to */
- if (!(Flags & BL_MM_ADD_DESCRIPTOR_ALLOCATE_FLAG))
- {
- MemoryParameters->BufferSize = MdListSize;
- Status = STATUS_BUFFER_TOO_SMALL;
- goto Quickie;
- }
-
- /* Has it been less than 4 times we've tried this? */
- if (++LoopCount <= 4)
- {
- /* Free the previous attempt, if any */
- if (MemoryParameters->BufferSize)
- {
- BlMmFreeHeap(MemoryParameters->Buffer);
- }
-
- /* Allocate a new buffer */
- MemoryParameters->BufferSize = MdListSize;
- MemoryParameters->Buffer = BlMmAllocateHeap(MdListSize);
- if (MemoryParameters->Buffer)
- {
- /* Try again */
- continue;
- }
- }
-
- /* If we got here, we're out of memory after 4 attempts */
- Status = STATUS_NO_MEMORY;
- goto Quickie;
- }
-
- /* We should have a buffer by now... */
- if (MemoryParameters->Buffer)
- {
- /* Zero it out */
- RtlZeroMemory(MemoryParameters->Buffer,
- MdListCount * sizeof(BL_MEMORY_DESCRIPTOR));
- }
-
- /* Initialize our list of descriptors */
- MmMdInitializeList(&FullMdList, 0, MemoryMap);
- Used = 0;
-
- /* Handle mapped, allocated */
- if (DoMapAlloc)
- {
- Status = MmMdCopyList(&FullMdList,
- &MmMdlMappedAllocated,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Handle mapped, unallocated */
- if (DoMapUnalloc)
- {
- Status = MmMdCopyList(&FullMdList,
- &MmMdlMappedUnallocated,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Handle unmapped, allocated */
- if (DoUnmapAlloc)
- {
- Status = MmMdCopyList(&FullMdList,
- &MmMdlUnmappedAllocated,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Handle unmapped, unallocated */
- if (DoUnmapUnalloc)
- {
- Status = MmMdCopyList(&FullMdList,
- &MmMdlUnmappedUnallocated,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Handle reserved, allocated */
- if (DoReserved)
- {
- Status = MmMdCopyList(&FullMdList,
- &MmMdlReservedAllocated,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Handle bad */
- if (DoBad)
- {
- Status = MmMdCopyList(&FullMdList,
- &MmMdlBadMemory,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Handle truncated */
- if (DoTruncated)
- {
- Status = MmMdCopyList(&FullMdList,
- &MmMdlTruncatedMemory,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Handle persistent */
- if (DoPersistent)
- {
- Status = MmMdCopyList(&FullMdList,
- &MmMdlPersistentMemory,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Handle firmware */
- if (DoFirmware)
- {
- Status = MmMdCopyList(&FullMdList,
- &FirmwareMdList,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Handle firmware2 */
- if (DoFirmware2)
- {
- Status = MmMdCopyList(&FullMdList,
- &FirmwareMdList,
- MemoryParameters->Buffer,
- &Used,
- MdListCount,
- Flags);
- }
-
- /* Add up the final size */
- Status = RtlULongLongToULong(Used * sizeof(BL_MEMORY_DESCRIPTOR),
- &MemoryParameters->ActualSize);
-
-Quickie:
- MmMdFreeList(&FirmwareMdList);
- return Status;
-}
-
-NTSTATUS
-MmPaReleaseSelfMapPages (
- _In_ PHYSICAL_ADDRESS Address
- )
-{
- PBL_MEMORY_DESCRIPTOR Descriptor;
- ULONGLONG BasePage;
- NTSTATUS Status;
-
- /* Only page-aligned addresses are accepted */
- if (Address.QuadPart & (PAGE_SIZE - 1))
- {
- EfiPrintf(L"free mem fail 1\r\n");
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Get the base page, and find a descriptor that matches */
- BasePage = Address.QuadPart >> PAGE_SHIFT;
- Descriptor = MmMdFindDescriptor(BL_MM_INCLUDE_UNMAPPED_UNALLOCATED,
- BL_MM_REMOVE_PHYSICAL_REGION_FLAG,
- BasePage);
- if (!(Descriptor) || (Descriptor->BasePage != BasePage))
- {
- return STATUS_INVALID_PARAMETER;
- }
-
- /* Free the physical pages */
- Status = MmFwFreePages(BasePage, Descriptor->PageCount);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Remove the firmware flags */
- Descriptor->Flags &= ~(BlMemoryNonFirmware |
- BlMemoryFirmware |
- BlMemoryPersistent);
-
- /* Set it as free memory */
- Descriptor->Type = BlConventionalMemory;
-
- /* Create a new descriptor that's free memory, covering the old range */
- Descriptor = MmMdInitByteGranularDescriptor(0,
- BlConventionalMemory,
- BasePage,
- 0,
- Descriptor->PageCount);
- if (!Descriptor)
- {
- return STATUS_NO_MEMORY;
- }
-
- /* Insert it into the virtual free list */
- return MmMdAddDescriptorToList(&MmMdlFreeVirtual,
- Descriptor,
- BL_MM_ADD_DESCRIPTOR_COALESCE_FLAG |
- BL_MM_ADD_DESCRIPTOR_TRUNCATE_FLAG);
-}
-
-NTSTATUS
-MmPaReserveSelfMapPages (
- _Inout_ PPHYSICAL_ADDRESS PhysicalAddress,
- _In_ ULONG Alignment,
- _In_ ULONG PageCount
- )
-{
- NTSTATUS Status;
- BL_PA_REQUEST Request;
- BL_MEMORY_DESCRIPTOR Descriptor;
-
- /* Increment descriptor usage count */
- ++MmDescriptorCallTreeCount;
-
- /* Bail if we don't have an address */
- if (!PhysicalAddress)
- {
- Status = STATUS_INVALID_PARAMETER;
- goto Quickie;
- }
-
- /* Make a request for the required number of self-map pages */
- Request.BaseRange.Minimum = PapMinimumPhysicalPage;
- Request.BaseRange.Maximum = 0xFFFFFFFF >> PAGE_SHIFT;
- Request.VirtualRange.Minimum = 0;
- Request.VirtualRange.Maximum = 0;
- Request.Pages = PageCount;
- Request.Alignment = Alignment;
- Request.Type = BL_MM_REQUEST_DEFAULT_TYPE;
- Request.Flags = 0;
- Status = MmPaAllocatePages(&MmMdlUnmappedUnallocated,
- &Descriptor,
- &MmMdlUnmappedUnallocated,
- &Request,
- BlLoaderSelfMap);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Remove this region from free virtual memory */
- Status = MmMdRemoveRegionFromMdlEx(&MmMdlFreeVirtual,
- BL_MM_REMOVE_VIRTUAL_REGION_FLAG,
- Descriptor.BasePage,
- Descriptor.PageCount,
- 0);
- if (!NT_SUCCESS(Status))
- {
- goto Quickie;
- }
-
- /* Return the physical address */
- PhysicalAddress->QuadPart = Descriptor.BasePage << PAGE_SHIFT;
-
-Quickie:
- /* Free global descriptors and reduce the count by one */
- MmMdFreeGlobalDescriptors();
- --MmDescriptorCallTreeCount;
- return Status;
-}
-
-NTSTATUS
-MmSelectMappingAddress (
- _Out_ PVOID* MappingAddress,
- _In_ PVOID PreferredAddress,
- _In_ ULONGLONG Size,
- _In_ ULONG AllocationAttributes,
- _In_ ULONG Flags,
- _In_ PHYSICAL_ADDRESS PhysicalAddress
- )
-{
- BL_PA_REQUEST Request;
- NTSTATUS Status;
- BL_MEMORY_DESCRIPTOR NewDescriptor;
-
- /* Are we in physical mode? */
- if (MmTranslationType == BlNone)
- {
- /* Just return the physical address as the mapping address */
- PreferredAddress = PhysicalAddressToPtr(PhysicalAddress);
- goto Success;
- }
-
- /* If no physical address, or caller wants a fixed address... */
- if ((PhysicalAddress.QuadPart == -1) || (Flags & BlMemoryFixed))
- {
- /* Then just return the preferred address */
- goto Success;
- }
-
- /* Check which range of virtual memory should be used */
- if (AllocationAttributes & BlMemoryKernelRange)
- {
- /* Use kernel range */
- Request.BaseRange.Minimum = MmArchKsegAddressRange.Minimum >> PAGE_SHIFT;
- Request.BaseRange.Maximum = MmArchKsegAddressRange.Maximum >> PAGE_SHIFT;
- Request.Type = BL_MM_REQUEST_DEFAULT_TYPE;
- }
- else
- {
- /* User user/application range */
- Request.BaseRange.Minimum = 0 >> PAGE_SHIFT;
- Request.BaseRange.Maximum = MmArchTopOfApplicationAddressSpace >> PAGE_SHIFT;
- Request.Type = BL_MM_REQUEST_TOP_DOWN_TYPE;
- }
-
- /* Build a request */
- Request.VirtualRange.Minimum = 0;
- Request.VirtualRange.Maximum = 0;
- Request.Flags = AllocationAttributes & BlMemoryLargePages;
- Request.Alignment = 1;
- Request.Pages = ADDRESS_AND_SIZE_TO_SPAN_PAGES(PhysicalAddress.LowPart, Size);
-
- /* Allocate the physical pages */
- Status = MmPaAllocatePages(NULL,
- &NewDescriptor,
- &MmMdlFreeVirtual,
- &Request,
- BlConventionalMemory);
- if (!NT_SUCCESS(Status))
- {
- return Status;
- }
-
- /* Return the address we got back */
- PreferredAddress = (PVOID)((ULONG_PTR)NewDescriptor.BasePage << PAGE_SHIFT);
-
- /* Check if the existing physical address was not aligned */
- if (PhysicalAddress.QuadPart != -1)
- {
- /* Add the offset to the returned virtual address */
- PreferredAddress = (PVOID)((ULONG_PTR)PreferredAddress +
- BYTE_OFFSET(PhysicalAddress.QuadPart));
- }
-
-Success:
- /* Return the mapping address and success */
- *MappingAddress = PreferredAddress;
- return STATUS_SUCCESS;
-}
diff --git a/boot/environ/lib/mm/stub/mm.c b/boot/environ/lib/mm/stub/mm.c
deleted file mode 100644
index ad8a3b38dd9..00000000000
--- a/boot/environ/lib/mm/stub/mm.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/mm/stub/mm.c
- * PURPOSE: Boot Library Memory Manager Skeleton Code
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-BL_ADDRESS_RANGE MmArchKsegAddressRange;
-ULONG_PTR MmArchTopOfApplicationAddressSpace;
-ULONG MmArchLargePageSize;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-MmArchInitialize (
- _In_ ULONG Phase,
- _In_ PBL_MEMORY_DATA MemoryData,
- _In_ BL_TRANSLATION_TYPE TranslationType,
- _In_ BL_TRANSLATION_TYPE RequestedTranslationType
- )
-{
- EfiPrintf(L" MmArchInitialize NOT IMPLEMENTED for this platform\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-NTSTATUS
-MmMapPhysicalAddress (
- _Inout_ PPHYSICAL_ADDRESS PhysicalAddressPtr,
- _Inout_ PVOID* VirtualAddressPtr,
- _Inout_ PULONGLONG SizePtr,
- _In_ ULONG CacheAttributes
- )
-{
- EfiPrintf(L" MmMapPhysicalAddress NOT IMPLEMENTED for this platform\r\n");
- return STATUS_NOT_IMPLEMENTED;
-}
-
-BOOLEAN
-MmArchTranslateVirtualAddress (
- _In_ PVOID VirtualAddress,
- _Out_opt_ PPHYSICAL_ADDRESS PhysicalAddress,
- _Out_opt_ PULONG CachingFlags
- )
-{
- EfiPrintf(L" MmMapPhysicalAddress NOT IMPLEMENTED for this platform\r\n");
- return FALSE;
-}
diff --git a/boot/environ/lib/platform/time.c b/boot/environ/lib/platform/time.c
deleted file mode 100644
index bef1b460c34..00000000000
--- a/boot/environ/lib/platform/time.c
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/platform/time.c
- * PURPOSE: Boot Library Time Management Routines
- * PROGRAMMER: Alex Ionescu (alex.ionescu@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* DATA VARIABLES ************************************************************/
-
-ULONGLONG BlpTimePerformanceFrequency;
-
-/* FUNCTIONS *****************************************************************/
-
-NTSTATUS
-BlpTimeMeasureTscFrequency (
- VOID
- )
-{
-#if defined(_M_IX86) || defined(_M_X64)
- ULONG Count;
- INT CpuInfo[4];
- ULONGLONG TimeStamp1, TimeStamp2, Delta;
-
- /* Check if the ISVM bit it set, meaning we're in a hypervisor */
- __cpuid(CpuInfo, 1);
- Count = CpuInfo[2] & 0x80000000 ? 10 : 1;
-
- /* Loop trying to get an accurate TSC */
- do
- {
- /* Stall for 1us and get count 1 */
- EfiStall(1);
- TimeStamp1 = __rdtsc();
-
- /* Stall for 1000us and get count 2*/
- EfiStall(1000);
- TimeStamp2 = __rdtsc();
-
- /* Stall for 9000us and get the difference */
- EfiStall(9000);
- Delta = __rdtsc() - TimeStamp2;
-
- /* Keep going as long as the TSC is fluctuating */
- --Count;
- } while (((TimeStamp2 - TimeStamp1) > Delta) && (Count));
-
- /* Set the frequency based on the two measurements we took */
- BlpTimePerformanceFrequency = 125 * (Delta - (TimeStamp2 - TimeStamp1)) & 0x1FFFFFFFFFFFFFF;
- return STATUS_SUCCESS;
-#else
- EfiPrintf(L"BlpTimeMeasureTscFrequency not implemented for this platform.\r\n");
- return STATUS_NOT_IMPLEMENTED;
-#endif
-}
-
-NTSTATUS
-BlpTimeCalibratePerformanceCounter (
- VOID
- )
-{
-#if defined(_M_IX86) || defined(_M_X64)
- INT CpuInfo[4];
-
- /* Check if the ISVM bit it set, meaning we're in a hypervisor */
- __cpuid(CpuInfo, 1);
- if (CpuInfo[2] & 0x80000000)
- {
- /* Get the Hypervisor Identification Leaf */
- __cpuid(CpuInfo, 0x40000001);
-
- /* Is this Hyper-V? */
- if (CpuInfo[0] == '1#vH')
- {
- /* Get the Hypervisor Feature Identification Leaf */
- __cpuid(CpuInfo, 0x40000003);
-
- /* Check if HV_X64_MSR_REFERENCE_TSC is present */
- if (CpuInfo[3] & 0x100)
- {
- /* Read the TSC frequency from the MSR */
- BlpTimePerformanceFrequency = __readmsr(0x40000022);
- return STATUS_SUCCESS;
- }
- }
- }
-
- /* On other systems, compute it */
- return BlpTimeMeasureTscFrequency();
-#else
- EfiPrintf(L"BlpTimeCalibratePerformanceCounter not implemented for this platform.\r\n");
- return STATUS_NOT_IMPLEMENTED;
-#endif
-}
-
-ULONGLONG
-BlTimeQueryPerformanceCounter (
- _Out_opt_ PLARGE_INTEGER Frequency
- )
-{
-#if defined(_M_IX86) || defined(_M_X64)
- /* Check if caller wants frequency */
- if (Frequency)
- {
- /* Return it */
- Frequency->QuadPart = BlpTimePerformanceFrequency;
- }
-
- /* Return the TSC value */
- return __rdtsc();
-#else
- EfiPrintf(L"BlTimeQueryPerformanceCounter not implemented for this platform.\r\n");
- return 0;
-#endif
-};
diff --git a/boot/environ/lib/rtl/libsupp.c b/boot/environ/lib/rtl/libsupp.c
deleted file mode 100644
index 257b859893a..00000000000
--- a/boot/environ/lib/rtl/libsupp.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * COPYRIGHT: See COPYING.ARM in the top level directory
- * PROJECT: ReactOS UEFI Boot Library
- * FILE: boot/environ/lib/rtl/libsupp.c
- * PURPOSE: RTL Support Routines
- * PROGRAMMER: Mark Jansen (mark.jansen@reactos.org)
- */
-
-/* INCLUDES ******************************************************************/
-
-#include "bl.h"
-
-/* FUNCTIONS *****************************************************************/
-
-/* Ldr access to IMAGE_NT_HEADERS without SEH */
-
-/* Rtl SEH-Free version of this */
-NTSTATUS
-NTAPI
-RtlpImageNtHeaderEx(
- _In_ ULONG Flags,
- _In_ PVOID Base,
- _In_ ULONG64 Size,
- _Out_ PIMAGE_NT_HEADERS *OutHeaders);
-
-
-/*
- * @implemented
- */
-NTSTATUS
-NTAPI
-RtlImageNtHeaderEx(
- _In_ ULONG Flags,
- _In_ PVOID Base,
- _In_ ULONG64 Size,
- _Out_ PIMAGE_NT_HEADERS *OutHeaders)
-{
- return RtlpImageNtHeaderEx(Flags, Base, Size, OutHeaders);
-}
diff --git a/boot/freeldr/freeldr/uefi.cmake b/boot/freeldr/freeldr/uefi.cmake
index 1800d9509f5..50f293bacd7 100644
--- a/boot/freeldr/freeldr/uefi.cmake
+++ b/boot/freeldr/freeldr/uefi.cmake
@@ -6,7 +6,7 @@
##
include_directories(BEFORE
- ${REACTOS_SOURCE_DIR}/boot/environ/include/efi
+ ${REACTOS_SOURCE_DIR}/sdk/include/reactos/edk2
${REACTOS_SOURCE_DIR}/boot/freeldr/freeldr
${REACTOS_SOURCE_DIR}/boot/freeldr/freeldr/include
${REACTOS_SOURCE_DIR}/boot/freeldr/freeldr/include/arch/uefi)
diff --git a/boot/environ/include/efi/Acpi.h b/sdk/include/reactos/edk2/Acpi.h
similarity index 80%
rename from boot/environ/include/efi/Acpi.h
rename to sdk/include/reactos/edk2/Acpi.h
index 3897ae62ff3..5cb4ec5261f 100644
--- a/boot/environ/include/efi/Acpi.h
+++ b/sdk/include/reactos/edk2/Acpi.h
@@ -2,17 +2,17 @@
GUIDs used for ACPI entries in the EFI system table
These GUIDs point the ACPI tables as defined in the ACPI specifications.
- ACPI 2.0 specification defines the ACPI 2.0 GUID. UEFI 2.0 defines the
+ ACPI 2.0 specification defines the ACPI 2.0 GUID. UEFI 2.0 defines the
ACPI 2.0 Table GUID and ACPI Table GUID.
Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
@par Revision Reference:
GUIDs defined in UEFI 2.0 spec.
diff --git a/boot/environ/include/efi/Base.h b/sdk/include/reactos/edk2/Base.h
similarity index 100%
rename from boot/environ/include/efi/Base.h
rename to sdk/include/reactos/edk2/Base.h
diff --git a/boot/environ/include/efi/BlockIo.h b/sdk/include/reactos/edk2/BlockIo.h
similarity index 96%
rename from boot/environ/include/efi/BlockIo.h
rename to sdk/include/reactos/edk2/BlockIo.h
index 4bc2109db12..12c5f74598a 100644
--- a/boot/environ/include/efi/BlockIo.h
+++ b/sdk/include/reactos/edk2/BlockIo.h
@@ -5,13 +5,13 @@
DVD-ROMs and floppy drives.
Copyright (c) 2006 - 2011, Intel Corporation. All rights reserved.
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
diff --git a/boot/environ/include/efi/DevicePath.h b/sdk/include/reactos/edk2/DevicePath.h
similarity index 100%
rename from boot/environ/include/efi/DevicePath.h
rename to sdk/include/reactos/edk2/DevicePath.h
diff --git a/boot/environ/include/efi/GlobalVariable.h b/sdk/include/reactos/edk2/GlobalVariable.h
similarity index 96%
rename from boot/environ/include/efi/GlobalVariable.h
rename to sdk/include/reactos/edk2/GlobalVariable.h
index f9737b36528..c8377066cb2 100644
--- a/boot/environ/include/efi/GlobalVariable.h
+++ b/sdk/include/reactos/edk2/GlobalVariable.h
@@ -2,13 +2,13 @@
GUID for EFI (NVRAM) Variables.
Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
@par Revision Reference:
GUID defined in UEFI 2.1
diff --git a/boot/environ/include/efi/GraphicsOutput.h b/sdk/include/reactos/edk2/GraphicsOutput.h
similarity index 97%
rename from boot/environ/include/efi/GraphicsOutput.h
rename to sdk/include/reactos/edk2/GraphicsOutput.h
index a3432ce1d6e..9ce3546734e 100644
--- a/boot/environ/include/efi/GraphicsOutput.h
+++ b/sdk/include/reactos/edk2/GraphicsOutput.h
@@ -4,13 +4,13 @@
Abstraction of a very simple graphics device.
Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.
- This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
+ This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
diff --git a/boot/environ/include/efi/LoadedImage.h b/sdk/include/reactos/edk2/LoadedImage.h
similarity index 100%
rename from boot/environ/include/efi/LoadedImage.h
rename to sdk/include/reactos/edk2/LoadedImage.h
diff --git a/boot/environ/include/efi/ProcessorBind.h b/sdk/include/reactos/edk2/ProcessorBind.h
similarity index 100%
rename from boot/environ/include/efi/ProcessorBind.h
rename to sdk/include/reactos/edk2/ProcessorBind.h
diff --git a/boot/environ/include/efi/SimpleTextIn.h b/sdk/include/reactos/edk2/SimpleTextIn.h
similarity index 100%
rename from boot/environ/include/efi/SimpleTextIn.h
rename to sdk/include/reactos/edk2/SimpleTextIn.h
diff --git a/boot/environ/include/efi/SimpleTextInEx.h b/sdk/include/reactos/edk2/SimpleTextInEx.h
similarity index 100%
rename from boot/environ/include/efi/SimpleTextInEx.h
rename to sdk/include/reactos/edk2/SimpleTextInEx.h
diff --git a/boot/environ/include/efi/SimpleTextOut.h b/sdk/include/reactos/edk2/SimpleTextOut.h
similarity index 100%
rename from boot/environ/include/efi/SimpleTextOut.h
rename to sdk/include/reactos/edk2/SimpleTextOut.h
diff --git a/boot/environ/include/efi/Uefi.h b/sdk/include/reactos/edk2/Uefi.h
similarity index 100%
rename from boot/environ/include/efi/Uefi.h
rename to sdk/include/reactos/edk2/Uefi.h
diff --git a/boot/environ/include/efi/UefiBaseType.h b/sdk/include/reactos/edk2/UefiBaseType.h
similarity index 100%
rename from boot/environ/include/efi/UefiBaseType.h
rename to sdk/include/reactos/edk2/UefiBaseType.h
diff --git a/boot/environ/include/efi/UefiMultiPhase.h b/sdk/include/reactos/edk2/UefiMultiPhase.h
similarity index 100%
rename from boot/environ/include/efi/UefiMultiPhase.h
rename to sdk/include/reactos/edk2/UefiMultiPhase.h
diff --git a/boot/environ/include/efi/UefiSpec.h b/sdk/include/reactos/edk2/UefiSpec.h
similarity index 100%
rename from boot/environ/include/efi/UefiSpec.h
rename to sdk/include/reactos/edk2/UefiSpec.h
diff --git a/boot/environ/include/efi/UgaDraw.h b/sdk/include/reactos/edk2/UgaDraw.h
similarity index 100%
rename from boot/environ/include/efi/UgaDraw.h
rename to sdk/include/reactos/edk2/UgaDraw.h
diff --git a/boot/environ/include/efi/WinCertificate.h b/sdk/include/reactos/edk2/WinCertificate.h
similarity index 100%
rename from boot/environ/include/efi/WinCertificate.h
rename to sdk/include/reactos/edk2/WinCertificate.h