Integrate sceUsbGps and sceUsbCam with Android

This commit is contained in:
Florin9doi 2017-08-20 21:03:06 +03:00
parent 4938ab786e
commit 892bc8617d
20 changed files with 1572 additions and 91 deletions

View File

@ -1500,6 +1500,8 @@ add_library(${CoreLibName} ${CoreLinkType}
Core/HLE/sceUmd.h
Core/HLE/sceUsb.cpp
Core/HLE/sceUsb.h
Core/HLE/sceUsbCam.cpp
Core/HLE/sceUsbCam.h
Core/HLE/sceUsbGps.cpp
Core/HLE/sceUsbGps.h
Core/HLE/sceUtility.cpp

View File

@ -186,6 +186,7 @@
<ClCompile Include="AVIDump.cpp" />
<ClCompile Include="FileSystems\BlobFileSystem.cpp" />
<ClCompile Include="HLE\KUBridge.cpp" />
<ClCompile Include="HLE\sceUsbCam.cpp" />
<ClCompile Include="MIPS\IR\IRAsm.cpp" />
<ClCompile Include="MIPS\IR\IRCompALU.cpp" />
<ClCompile Include="MIPS\IR\IRCompBranch.cpp" />
@ -528,6 +529,7 @@
<ClInclude Include="AVIDump.h" />
<ClInclude Include="FileSystems\BlobFileSystem.h" />
<ClInclude Include="HLE\KUBridge.h" />
<ClInclude Include="HLE\sceUsbCam.h" />
<ClInclude Include="MIPS\IR\IRFrontend.h" />
<ClInclude Include="MIPS\IR\IRInst.h" />
<ClInclude Include="MIPS\IR\IRInterpreter.h" />

View File

@ -683,6 +683,9 @@
<ClCompile Include="FileSystems\BlobFileSystem.cpp">
<Filter>FileSystems</Filter>
</ClCompile>
<ClCompile Include="HLE\sceUsbCam.cpp">
<Filter>HLE\Libraries</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="ELF\ElfReader.h">
@ -1256,6 +1259,9 @@
<ClInclude Include="FileSystems\BlobFileSystem.h">
<Filter>FileSystems</Filter>
</ClInclude>
<ClInclude Include="HLE\sceUsbCam.h">
<Filter>HLE\Libraries</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="CMakeLists.txt" />

View File

@ -66,10 +66,11 @@
#include "sceSsl.h"
#include "sceUmd.h"
#include "sceUsb.h"
#include "sceUsbCam.h"
#include "sceUsbGps.h"
#include "sceUtility.h"
#include "sceVaudio.h"
#include "sceMt19937.h"
#include "sceUsbGps.h"
#include "sceSha256.h"
#include "sceAdler.h"
#include "sceSfmt19937.h"

View File

@ -75,6 +75,7 @@
#include "scePsmf.h"
#include "sceImpose.h"
#include "sceUsb.h"
#include "sceUsbGps.h"
#include "scePspNpDrm_user.h"
#include "sceVaudio.h"
#include "sceHeap.h"
@ -132,6 +133,7 @@ void __KernelInit()
__SslInit();
__ImposeInit();
__UsbInit();
__UsbGpsInit();
__FontInit();
__NetInit();
__NetAdhocInit();
@ -261,6 +263,7 @@ void __KernelDoState(PointerWrap &p)
__UmdDoState(p);
__UtilityDoState(p);
__UsbDoState(p);
__UsbGpsDoState(p);
__VaudioDoState(p);
__HeapDoState(p);

View File

@ -15,6 +15,7 @@
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
#include "base/NativeApp.h"
#include "Core/HLE/HLE.h"
#include "Core/HLE/FunctionWrappers.h"
#include "Core/MIPS/MIPS.h"
@ -74,10 +75,15 @@ static int sceUsbStop(const char* driverName, u32 argsSize, u32 argsPtr) {
}
static int sceUsbGetState() {
ERROR_LOG(HLE, "UNIMPL sceUsbGetState");
int state = (usbStarted ? USB_STATUS_STARTED : USB_STATUS_STOPPED)
| (usbConnected ? USB_STATUS_CONNECTED : USB_STATUS_DISCONNECTED)
| (usbActivated ? USB_STATUS_ACTIVATED : USB_STATUS_DEACTIVATED);
int state = 0;
if (!usbStarted) {
state = 0x80243007;
} else {
state = USB_STATUS_STARTED
| (usbConnected ? USB_STATUS_CONNECTED : USB_STATUS_DISCONNECTED)
| (usbActivated ? USB_STATUS_ACTIVATED : USB_STATUS_DEACTIVATED);
}
ERROR_LOG(HLE, "UNIMPL sceUsbGetState: 0x%x", state);
return state;
}
@ -122,68 +128,9 @@ const HLEFunction sceUsbstorBoot[] =
{0XA55C9E16, nullptr, "sceUsbstorBootUnregisterNotify", '?', "" },
};
const HLEFunction sceUsbCam[] =
{
{0X17F7B2FB, nullptr, "sceUsbCamSetupVideo", '?', "" },
{0XF93C4669, nullptr, "sceUsbCamAutoImageReverseSW", '?', "" },
{0X574A8C3F, nullptr, "sceUsbCamStartVideo", '?', "" },
{0X6CF32CB9, nullptr, "sceUsbCamStopVideo", '?', "" },
{0X03ED7A82, nullptr, "sceUsbCamSetupMic", '?', "" },
{0X82A64030, nullptr, "sceUsbCamStartMic", '?', "" },
{0X7DAC0C71, nullptr, "sceUsbCamReadVideoFrameBlocking", '?', "" },
{0X99D86281, nullptr, "sceUsbCamReadVideoFrame", '?', "" },
{0X41E73E95, nullptr, "sceUsbCamPollReadVideoFrameEnd", '?', "" },
{0XF90B2293, nullptr, "sceUsbCamWaitReadVideoFrameEnd", '?', "" },
{0X4C34F553, nullptr, "sceUsbCamGetLensDirection", '?', "" },
{0X3F0CF289, nullptr, "sceUsbCamSetupStill", '?', "" },
{0X0A41A298, nullptr, "sceUsbCamSetupStillEx", '?', "" },
{0X61BE5CAC, nullptr, "sceUsbCamStillInputBlocking", '?', "" },
{0XFB0A6C5D, nullptr, "sceUsbCamStillInput", '?', "" },
{0X7563AFA1, nullptr, "sceUsbCamStillWaitInputEnd", '?', "" },
{0X1A46CFE7, nullptr, "sceUsbCamStillPollInputEnd", '?', "" },
{0XA720937C, nullptr, "sceUsbCamStillCancelInput", '?', "" },
{0XE5959C36, nullptr, "sceUsbCamStillGetInputLength", '?', "" },
{0XCFE9E999, nullptr, "sceUsbCamSetupVideoEx", '?', "" },
{0XDF9D0C92, nullptr, "sceUsbCamGetReadVideoFrameSize", '?', "" },
{0X6E205974, nullptr, "sceUsbCamSetSaturation", '?', "" },
{0X4F3D84D5, nullptr, "sceUsbCamSetBrightness", '?', "" },
{0X09C26C7E, nullptr, "sceUsbCamSetContrast", '?', "" },
{0X622F83CC, nullptr, "sceUsbCamSetSharpness", '?', "" },
{0XD4876173, nullptr, "sceUsbCamSetImageEffectMode", '?', "" },
{0X1D686870, nullptr, "sceUsbCamSetEvLevel", '?', "" },
{0X951BEDF5, nullptr, "sceUsbCamSetReverseMode", '?', "" },
{0XC484901F, nullptr, "sceUsbCamSetZoom", '?', "" },
{0X383E9FA8, nullptr, "sceUsbCamGetSaturation", '?', "" },
{0X70F522C5, nullptr, "sceUsbCamGetBrightness", '?', "" },
{0XA063A957, nullptr, "sceUsbCamGetContrast", '?', "" },
{0XFDB68C23, nullptr, "sceUsbCamGetSharpness", '?', "" },
{0X994471E0, nullptr, "sceUsbCamGetImageEffectMode", '?', "" },
{0X2BCD50C0, nullptr, "sceUsbCamGetEvLevel", '?', "" },
{0XD5279339, nullptr, "sceUsbCamGetReverseMode", '?', "" },
{0X9E8AAF8D, nullptr, "sceUsbCamGetZoom", '?', "" },
{0X11A1F128, nullptr, "sceUsbCamGetAutoImageReverseState", '?', "" },
{0X08AEE98A, nullptr, "sceUsbCamSetMicGain", '?', "" },
{0X2E930264, nullptr, "sceUsbCamSetupMicEx", '?', "" },
{0X36636925, nullptr, "sceUsbCamReadMicBlocking", '?', "" },
{0X3DC0088E, nullptr, "sceUsbCamReadMic", '?', "" },
{0X41EE8797, nullptr, "sceUsbCamUnregisterLensRotationCallback", '?', "" },
{0X5145868A, nullptr, "sceUsbCamStopMic", '?', "" },
{0X5778B452, nullptr, "sceUsbCamGetMicDataLength", '?', "" },
{0X6784E6A8, nullptr, "sceUsbCamSetAntiFlicker", '?', "" },
{0XAA7D94BA, nullptr, "sceUsbCamGetAntiFlicker", '?', "" },
{0XB048A67D, nullptr, "sceUsbCamWaitReadMicEnd", '?', "" },
{0XD293A100, nullptr, "sceUsbCamRegisterLensRotationCallback", '?', "" },
{0XF8847F60, nullptr, "sceUsbCamPollReadMicEnd", '?', "" },
};
void Register_sceUsb()
{
RegisterModule("sceUsbstor", ARRAY_SIZE(sceUsbstor), sceUsbstor);
RegisterModule("sceUsbstorBoot", ARRAY_SIZE(sceUsbstorBoot), sceUsbstorBoot);
RegisterModule("sceUsb", ARRAY_SIZE(sceUsb), sceUsb);
}
void Register_sceUsbCam()
{
RegisterModule("sceUsbCam", ARRAY_SIZE(sceUsbCam), sceUsbCam);
}

View File

@ -22,4 +22,3 @@ void Register_sceUsb();
void __UsbInit();
void __UsbDoState(PointerWrap &p);
void Register_sceUsbCam();

181
Core/HLE/sceUsbCam.cpp Normal file
View File

@ -0,0 +1,181 @@
// Copyright (c) 2012- PPSSPP Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0 or later versions.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
#include <mutex>
#include "base/NativeApp.h"
#include "Common/ChunkFile.h"
#include "Core/HLE/HLE.h"
#include "Core/HLE/FunctionWrappers.h"
#include "Core/HLE/sceUsbCam.h"
#include "Core/MemMapHelpers.h"
PspUsbCamSetupMicParam micParam;
PspUsbCamSetupVideoParam videoParam;
unsigned int videoBufferLength = 0;
unsigned int nextVideoFrame = 0;
unsigned char videoBuffer[40 * 1000];
std::mutex videoBufferMutex;
static int sceUsbCamSetupMic(u32 paramAddr, u32 workareaAddr, int wasize) {
INFO_LOG(HLE, "UNIMPL sceUsbCamSetupMic");
if (Memory::IsValidRange(paramAddr, sizeof(micParam))) {
Memory::ReadStruct(paramAddr, &micParam);
}
return 0;
}
static int sceUsbCamStartMic() {
INFO_LOG(HLE, "UNIMPL sceUsbCamStartMic");
return 0;
}
static int sceUsbCamStopMic() {
INFO_LOG(HLE, "UNIMPL sceUsbCamStopMic");
return 0;
}
static int sceUsbCamSetupVideo(u32 paramAddr, u32 workareaAddr, int wasize) {
INFO_LOG(HLE, "UNIMPL sceUsbCamSetupVideo");
if (Memory::IsValidRange(paramAddr, sizeof(videoParam))) {
Memory::ReadStruct(paramAddr, &videoParam);
}
std::lock_guard<std::mutex> lock(videoBufferMutex);
videoBufferLength = sizeof(sceUsbCamDummyImage);
memset(videoBuffer, 0, sizeof(videoBuffer));
memcpy(videoBuffer, sceUsbCamDummyImage, sizeof(sceUsbCamDummyImage));
INFO_LOG(HLE, "UNIMPL sceUsbCamSetupVideo - size: %d", videoParam.size);
INFO_LOG(HLE, "UNIMPL sceUsbCamSetupVideo - resolution: %d", videoParam.resolution);
return 0;
}
static int sceUsbCamStartVideo() {
INFO_LOG(HLE, "UNIMPL sceUsbCamStartVideo");
System_SendMessage("camera_command", "startVideo");
return 0;
}
static int sceUsbCamStopVideo() {
INFO_LOG(HLE, "UNIMPL sceUsbCamStopVideo");
System_SendMessage("camera_command", "stopVideo");
return 0;
}
static int sceUsbCamAutoImageReverseSW(int rev) {
INFO_LOG(HLE, "UNIMPL sceUsbCamAutoImageReverseSW");
return 0;
}
static int sceUsbCamReadVideoFrameBlocking(u32 bufAddr, u32 size) {
std::lock_guard<std::mutex> lock(videoBufferMutex);
for (unsigned int i = 0; i < videoBufferLength && i < size; i++) {
if (Memory::IsValidAddress(bufAddr + i)) {
Memory::Write_U8(videoBuffer[i], bufAddr + i);
}
}
return videoBufferLength;
}
static int sceUsbCamReadVideoFrame(u32 bufAddr, u32 size) {
std::lock_guard<std::mutex> lock(videoBufferMutex);
for (unsigned int i = 0; i < videoBufferLength && i < size; i++) {
if (Memory::IsValidAddress(bufAddr + i)) {
Memory::Write_U8(videoBuffer[i], bufAddr + i);
}
}
nextVideoFrame = videoBufferLength;
return 0;
}
static int sceUsbCamPollReadVideoFrameEnd() {
INFO_LOG(HLE, "UNIMPL sceUsbCamPollReadVideoFrameEnd: %d", nextVideoFrame);
return nextVideoFrame;
}
const HLEFunction sceUsbCam[] =
{
{ 0X03ED7A82, &WrapI_UUI<sceUsbCamSetupMic>, "sceUsbCamSetupMic", 'i', "xxi" },
{ 0X2E930264, nullptr, "sceUsbCamSetupMicEx", '?', "" },
{ 0X82A64030, &WrapI_V<sceUsbCamStartMic>, "sceUsbCamStartMic", 'i', "" },
{ 0X5145868A, &WrapI_V<sceUsbCamStopMic>, "sceUsbCamStopMic", 'i', "" },
{ 0X36636925, nullptr, "sceUsbCamReadMicBlocking", '?', "" },
{ 0X3DC0088E, nullptr, "sceUsbCamReadMic", '?', "" },
{ 0XB048A67D, nullptr, "sceUsbCamWaitReadMicEnd", '?', "" },
{ 0XF8847F60, nullptr, "sceUsbCamPollReadMicEnd", '?', "" },
{ 0X5778B452, nullptr, "sceUsbCamGetMicDataLength", '?', "" },
{ 0X08AEE98A, nullptr, "sceUsbCamSetMicGain", '?', "" },
{ 0X17F7B2FB, &WrapI_UUI<sceUsbCamSetupVideo>, "sceUsbCamSetupVideo", 'i', "xxi" },
{ 0XCFE9E999, nullptr, "sceUsbCamSetupVideoEx", '?', "" },
{ 0X574A8C3F, &WrapI_V<sceUsbCamStartVideo>, "sceUsbCamStartVideo", 'i', "" },
{ 0X6CF32CB9, &WrapI_V<sceUsbCamStopVideo>, "sceUsbCamStopVideo", 'i', "" },
{ 0X7DAC0C71, &WrapI_UU<sceUsbCamReadVideoFrameBlocking>, "sceUsbCamReadVideoFrameBlocking", 'i', "xx" },
{ 0X99D86281, &WrapI_UU<sceUsbCamReadVideoFrame>, "sceUsbCamReadVideoFrame", 'i', "xx" },
{ 0XF90B2293, nullptr, "sceUsbCamWaitReadVideoFrameEnd", '?', "" },
{ 0X41E73E95, &WrapI_V<sceUsbCamPollReadVideoFrameEnd>, "sceUsbCamPollReadVideoFrameEnd", 'i', "" },
{ 0XDF9D0C92, nullptr, "sceUsbCamGetReadVideoFrameSize", '?', "" },
{ 0X3F0CF289, nullptr, "sceUsbCamSetupStill", '?', "" },
{ 0X0A41A298, nullptr, "sceUsbCamSetupStillEx", '?', "" },
{ 0X61BE5CAC, nullptr, "sceUsbCamStillInputBlocking", '?', "" },
{ 0XFB0A6C5D, nullptr, "sceUsbCamStillInput", '?', "" },
{ 0X7563AFA1, nullptr, "sceUsbCamStillWaitInputEnd", '?', "" },
{ 0X1A46CFE7, nullptr, "sceUsbCamStillPollInputEnd", '?', "" },
{ 0XA720937C, nullptr, "sceUsbCamStillCancelInput", '?', "" },
{ 0XE5959C36, nullptr, "sceUsbCamStillGetInputLength", '?', "" },
{ 0XF93C4669, &WrapI_I<sceUsbCamAutoImageReverseSW>, "sceUsbCamAutoImageReverseSW", 'i', "i" },
{ 0X11A1F128, nullptr, "sceUsbCamGetAutoImageReverseState", '?', "" },
{ 0X4C34F553, nullptr, "sceUsbCamGetLensDirection", '?', "" },
{ 0X383E9FA8, nullptr, "sceUsbCamGetSaturation", '?', "" },
{ 0X6E205974, nullptr, "sceUsbCamSetSaturation", '?', "" },
{ 0X70F522C5, nullptr, "sceUsbCamGetBrightness", '?', "" },
{ 0X4F3D84D5, nullptr, "sceUsbCamSetBrightness", '?', "" },
{ 0XA063A957, nullptr, "sceUsbCamGetContrast", '?', "" },
{ 0X09C26C7E, nullptr, "sceUsbCamSetContrast", '?', "" },
{ 0XFDB68C23, nullptr, "sceUsbCamGetSharpness", '?', "" },
{ 0X622F83CC, nullptr, "sceUsbCamSetSharpness", '?', "" },
{ 0X994471E0, nullptr, "sceUsbCamGetImageEffectMode", '?', "" },
{ 0XD4876173, nullptr, "sceUsbCamSetImageEffectMode", '?', "" },
{ 0X2BCD50C0, nullptr, "sceUsbCamGetEvLevel", '?', "" },
{ 0X1D686870, nullptr, "sceUsbCamSetEvLevel", '?', "" },
{ 0XD5279339, nullptr, "sceUsbCamGetReverseMode", '?', "" },
{ 0X951BEDF5, nullptr, "sceUsbCamSetReverseMode", '?', "" },
{ 0X9E8AAF8D, nullptr, "sceUsbCamGetZoom", '?', "" },
{ 0XC484901F, nullptr, "sceUsbCamSetZoom", '?', "" },
{ 0XAA7D94BA, nullptr, "sceUsbCamGetAntiFlicker", '?', "" },
{ 0X6784E6A8, nullptr, "sceUsbCamSetAntiFlicker", '?', "" },
{ 0XD293A100, nullptr, "sceUsbCamRegisterLensRotationCallback", '?', "" },
{ 0X41EE8797, nullptr, "sceUsbCamUnregisterLensRotationCallback", '?', "" },
};
void Register_sceUsbCam()
{
RegisterModule("sceUsbCam", ARRAY_SIZE(sceUsbCam), sceUsbCam);
}
void Camera::pushCameraImage(long long length, unsigned char* image) {
std::lock_guard<std::mutex> lock(videoBufferMutex);
videoBufferLength = length;
memset (videoBuffer, 0, sizeof(videoBuffer));
memcpy (videoBuffer, image, length);
}

902
Core/HLE/sceUsbCam.h Normal file
View File

@ -0,0 +1,902 @@
// Copyright (c) 2012- PPSSPP Project.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 2.0 or later versions.
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License 2.0 for more details.
// A copy of the GPL 2.0 should have been included with the program.
// If not, see http://www.gnu.org/licenses/
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
#pragma once
void Register_sceUsbCam();
namespace Camera {
void pushCameraImage(long long length, unsigned char *image);
}
typedef struct PspUsbCamSetupMicParam {
int size;
u32 unk;
int gain;
u32 unk2;
int frequency;
} PspUsbCamSetupMicParam;
typedef struct PspUsbCamSetupVideoParam {
int size;
int resolution;
int framerate;
int wb;
int saturation;
int brightness;
int contrast;
int sharpness;
int effectmode;
int framesize;
u32 unk;
int evlevel;
} PspUsbCamSetupVideoParam;
static unsigned char sceUsbCamDummyImage[] = {
0xFF, 0xD8, 0xFF, 0xE0, 0x00, 0x10, 0x4A, 0x46, 0x49, 0x46, 0x00, 0x01, 0x01, 0x01, 0x00, 0x60,
0x00, 0x60, 0x00, 0x00, 0xFF, 0xE1, 0x00, 0x68, 0x45, 0x78, 0x69, 0x66, 0x00, 0x00, 0x4D, 0x4D,
0x00, 0x2A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x04, 0x01, 0x1A, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x3E, 0x01, 0x1B, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x46,
0x01, 0x28, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x00, 0x01, 0x31, 0x00, 0x02,
0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60,
0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x01, 0x70, 0x61, 0x69, 0x6E,
0x74, 0x2E, 0x6E, 0x65, 0x74, 0x20, 0x34, 0x2E, 0x30, 0x2E, 0x31, 0x37, 0x00, 0x00, 0xFF, 0xDB,
0x00, 0x43, 0x00, 0x04, 0x02, 0x03, 0x03, 0x03, 0x02, 0x04, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04,
0x04, 0x05, 0x09, 0x06, 0x05, 0x05, 0x05, 0x05, 0x0B, 0x08, 0x08, 0x06, 0x09, 0x0D, 0x0B, 0x0D,
0x0D, 0x0D, 0x0B, 0x0C, 0x0C, 0x0E, 0x10, 0x14, 0x11, 0x0E, 0x0F, 0x13, 0x0F, 0x0C, 0x0C, 0x12,
0x18, 0x12, 0x13, 0x15, 0x16, 0x17, 0x17, 0x17, 0x0E, 0x11, 0x19, 0x1B, 0x19, 0x16, 0x1A, 0x14,
0x16, 0x17, 0x16, 0xFF, 0xDB, 0x00, 0x43, 0x01, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x0A, 0x06,
0x06, 0x0A, 0x16, 0x0F, 0x0C, 0x0F, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16,
0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0x16, 0xFF, 0xC0, 0x00, 0x11, 0x08, 0x01, 0x10, 0x01,
0xE0, 0x03, 0x01, 0x22, 0x00, 0x02, 0x11, 0x01, 0x03, 0x11, 0x01, 0xFF, 0xC4, 0x00, 0x1F, 0x00,
0x00, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0xFF, 0xC4, 0x00, 0xB5,
0x10, 0x00, 0x02, 0x01, 0x03, 0x03, 0x02, 0x04, 0x03, 0x05, 0x05, 0x04, 0x04, 0x00, 0x00, 0x01,
0x7D, 0x01, 0x02, 0x03, 0x00, 0x04, 0x11, 0x05, 0x12, 0x21, 0x31, 0x41, 0x06, 0x13, 0x51, 0x61,
0x07, 0x22, 0x71, 0x14, 0x32, 0x81, 0x91, 0xA1, 0x08, 0x23, 0x42, 0xB1, 0xC1, 0x15, 0x52, 0xD1,
0xF0, 0x24, 0x33, 0x62, 0x72, 0x82, 0x09, 0x0A, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x25, 0x26, 0x27,
0x28, 0x29, 0x2A, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
0x89, 0x8A, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6,
0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4,
0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE1,
0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
0xF8, 0xF9, 0xFA, 0xFF, 0xC4, 0x00, 0x1F, 0x01, 0x00, 0x03, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0xFF, 0xC4, 0x00, 0xB5, 0x11, 0x00, 0x02, 0x01, 0x02, 0x04, 0x04, 0x03,
0x04, 0x07, 0x05, 0x04, 0x04, 0x00, 0x01, 0x02, 0x77, 0x00, 0x01, 0x02, 0x03, 0x11, 0x04, 0x05,
0x21, 0x31, 0x06, 0x12, 0x41, 0x51, 0x07, 0x61, 0x71, 0x13, 0x22, 0x32, 0x81, 0x08, 0x14, 0x42,
0x91, 0xA1, 0xB1, 0xC1, 0x09, 0x23, 0x33, 0x52, 0xF0, 0x15, 0x62, 0x72, 0xD1, 0x0A, 0x16, 0x24,
0x34, 0xE1, 0x25, 0xF1, 0x17, 0x18, 0x19, 0x1A, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x35, 0x36, 0x37,
0x38, 0x39, 0x3A, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A, 0x53, 0x54, 0x55, 0x56, 0x57,
0x58, 0x59, 0x5A, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x73, 0x74, 0x75, 0x76, 0x77,
0x78, 0x79, 0x7A, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x92, 0x93, 0x94, 0x95,
0x96, 0x97, 0x98, 0x99, 0x9A, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xB2, 0xB3,
0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA,
0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8,
0xE9, 0xEA, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFF, 0xDA, 0x00, 0x0C, 0x03,
0x01, 0x00, 0x02, 0x11, 0x03, 0x11, 0x00, 0x3F, 0x00, 0xF4, 0xEA, 0x28, 0xA2, 0xBF, 0x62, 0x3F,
0x6C, 0x0A, 0x2A, 0x1B, 0x89, 0xC4, 0x67, 0x68, 0x19, 0x35, 0x1F, 0xDA, 0x9B, 0xFB, 0x83, 0xF3,
0xAF, 0x96, 0xC7, 0xF1, 0x9E, 0x49, 0x81, 0xC4, 0x4B, 0x0F, 0x5A, 0xB7, 0xBF, 0x1D, 0xEC, 0x9B,
0xB7, 0x95, 0xD2, 0xB1, 0xF9, 0xBE, 0x77, 0xE2, 0xCF, 0x08, 0x64, 0xB8, 0xE9, 0xE0, 0x71, 0x78,
0xAF, 0xDE, 0xC3, 0x49, 0x28, 0xC6, 0x52, 0xB3, 0xEC, 0xDA, 0x4D, 0x5F, 0xBA, 0xBE, 0x9D, 0x4B,
0x54, 0x55, 0x5F, 0xB5, 0x37, 0xF7, 0x07, 0xE7, 0x40, 0xBB, 0x3D, 0xD3, 0xF5, 0xAE, 0x48, 0xF8,
0x81, 0xC3, 0xCD, 0xDB, 0xDB, 0x35, 0xFF, 0x00, 0x6E, 0xCB, 0xFC, 0x8F, 0x32, 0x9F, 0x8E, 0x1C,
0x0B, 0x29, 0x24, 0xF1, 0x6D, 0x7A, 0xD3, 0xA9, 0xFF, 0x00, 0xC8, 0x96, 0xA8, 0xA8, 0xE1, 0x95,
0x24, 0xE9, 0xD7, 0xD0, 0xD4, 0x95, 0xF5, 0x78, 0x4C, 0x66, 0x1F, 0x19, 0x45, 0x56, 0xC3, 0xCD,
0x4A, 0x0F, 0xAA, 0x3F, 0x4B, 0xCA, 0xF3, 0x6C, 0x0E, 0x6B, 0x85, 0x8E, 0x2F, 0x03, 0x55, 0x54,
0xA7, 0x2D, 0x9C, 0x5D, 0xD7, 0xFC, 0x07, 0xDD, 0x3D, 0x57, 0x50, 0xA2, 0x8A, 0x2B, 0xA4, 0xF4,
0x02, 0x8A, 0x2A, 0xB4, 0xB7, 0x24, 0x36, 0x10, 0x0C, 0x0F, 0x5A, 0xF1, 0xF3, 0x9C, 0xFB, 0x03,
0x93, 0xD2, 0x8D, 0x4C, 0x5C, 0xAC, 0xA4, 0xEC, 0x92, 0x57, 0x6F, 0xFE, 0x18, 0xF9, 0x4E, 0x2C,
0xE3, 0x4C, 0x9B, 0x85, 0x70, 0xD0, 0xC4, 0x66, 0x95, 0x1C, 0x54, 0xDD, 0xA2, 0x92, 0x6D, 0xB6,
0xB7, 0xB2, 0x5D, 0x17, 0x57, 0xB6, 0xDD, 0xD1, 0x66, 0x8A, 0xA7, 0xF6, 0xA9, 0x3D, 0x17, 0xF2,
0xA3, 0xED, 0x52, 0x7A, 0x2F, 0xE5, 0x5F, 0x37, 0xFF, 0x00, 0x11, 0x1F, 0x21, 0xFE, 0x69, 0x7F,
0xE0, 0x27, 0xC0, 0x7F, 0xC4, 0x7C, 0xE0, 0xBF, 0xE7, 0xA9, 0xFF, 0x00, 0x80, 0x3F, 0xF3, 0x2E,
0x51, 0x55, 0xE3, 0xBA, 0x07, 0x87, 0x5C, 0x7B, 0x8A, 0x9D, 0x48, 0x65, 0xC8, 0x39, 0x15, 0xF4,
0x99, 0x56, 0x7D, 0x96, 0xE6, 0xB1, 0x6F, 0x09, 0x55, 0x49, 0xAD, 0xD6, 0xCD, 0x7C, 0x9E, 0xBF,
0x3D, 0x8F, 0xD0, 0x38, 0x6B, 0x8D, 0xB2, 0x0E, 0x25, 0x83, 0x96, 0x57, 0x89, 0x53, 0x92, 0xD5,
0xC7, 0x69, 0x2F, 0x58, 0xBB, 0x3B, 0x79, 0xED, 0xE6, 0x2D, 0x14, 0x51, 0x5E, 0xC1, 0xF5, 0x41,
0x45, 0x14, 0x50, 0x01, 0x45, 0x41, 0x2D, 0xCA, 0xAB, 0x61, 0x46, 0xEA, 0x67, 0xDA, 0x9B, 0xFB,
0x83, 0xF3, 0xAF, 0x93, 0xC5, 0x71, 0xC6, 0x43, 0x86, 0xAA, 0xE9, 0x4E, 0xBD, 0xDA, 0xDE, 0xC9,
0xB5, 0xF7, 0xA5, 0x6F, 0xB8, 0xFC, 0xC7, 0x32, 0xF1, 0x8B, 0x82, 0xB2, 0xFC, 0x4C, 0xB0, 0xD5,
0x71, 0x97, 0x94, 0x5D, 0x9F, 0x2C, 0x67, 0x24, 0x9F, 0xF8, 0x92, 0x69, 0xFC, 0x9B, 0x2D, 0x51,
0x55, 0xD6, 0xE8, 0x7F, 0x12, 0xE3, 0xE9, 0x53, 0x47, 0x22, 0x3F, 0xDD, 0x6F, 0xC2, 0xBD, 0x0C,
0xBB, 0x89, 0x32, 0x8C, 0xC5, 0xA8, 0xE1, 0xAB, 0xA7, 0x2E, 0xCF, 0x47, 0xF7, 0x3B, 0x33, 0xDD,
0xC8, 0x7C, 0x40, 0xE1, 0x7C, 0xFA, 0x4A, 0x9E, 0x5F, 0x8C, 0x8C, 0xA6, 0xFE, 0xCB, 0xBC, 0x64,
0xFD, 0x23, 0x24, 0x9B, 0xF9, 0x26, 0x3A, 0x8A, 0x28, 0xAF, 0x70, 0xFB, 0x10, 0xA2, 0x8A, 0x28,
0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28,
0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28,
0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA8, 0xE4, 0x99, 0x11, 0xB0, 0x4F, 0x3E, 0xD5, 0x25, 0x67, 0xCD,
0xFE, 0xB9, 0xB3, 0xEA, 0x6B, 0xE2, 0xF8, 0xDB, 0x88, 0xB1, 0x59, 0x2E, 0x12, 0x9C, 0xF0, 0xD1,
0x5C, 0xD3, 0x76, 0xBB, 0xD5, 0x2B, 0x2B, 0xFD, 0xE7, 0xE4, 0x7E, 0x2F, 0x71, 0xDE, 0x63, 0xC2,
0x39, 0x5D, 0x0A, 0xB9, 0x7C, 0x22, 0xEA, 0x55, 0x93, 0x8D, 0xE4, 0xAE, 0x92, 0x4A, 0xFB, 0x5D,
0x6A, 0xFA, 0x7C, 0xCB, 0x5F, 0x6A, 0x8F, 0xD1, 0xBF, 0x2A, 0x55, 0xB8, 0x89, 0xB8, 0xCE, 0x3E,
0xB5, 0x51, 0x51, 0xD8, 0x65, 0x54, 0x9F, 0xA0, 0xA4, 0x65, 0x65, 0xFB, 0xC0, 0x8F, 0xAD, 0x7E,
0x7B, 0x4F, 0xC4, 0x0E, 0x23, 0xA5, 0x15, 0x5A, 0xA5, 0x34, 0xE1, 0xE7, 0x06, 0x93, 0xF9, 0xA6,
0x7E, 0x19, 0x47, 0xC7, 0x0E, 0x3D, 0xC3, 0xC2, 0x38, 0xBA, 0xF4, 0x23, 0x2A, 0x2F, 0xAB, 0xA5,
0x25, 0x17, 0xE9, 0x24, 0xD7, 0xE6, 0x68, 0xF5, 0xE9, 0x45, 0x67, 0xC7, 0x23, 0xA7, 0xDD, 0x6F,
0xC2, 0xAC, 0xDB, 0xDC, 0x07, 0x3B, 0x5F, 0x83, 0x5F, 0x77, 0x92, 0x71, 0xFE, 0x59, 0x98, 0xCE,
0x34, 0x6A, 0xA7, 0x4A, 0xA3, 0xEF, 0xF0, 0xB7, 0xD9, 0x4B, 0xFC, 0xD2, 0x3F, 0x67, 0xE0, 0xFF,
0x00, 0x1B, 0xF8, 0x7B, 0x3E, 0xAB, 0x4F, 0x09, 0x89, 0x4F, 0x0F, 0x5E, 0x5A, 0x5A, 0x56, 0x70,
0x6F, 0xB2, 0x9F, 0x9F, 0x4E, 0x65, 0x1E, 0xDA, 0xB2, 0x7A, 0x28, 0xA2, 0xBE, 0xEC, 0xFD, 0xA0,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0xA5, 0x79, 0xFF, 0x00, 0x1F, 0x0D, 0x49, 0x0C, 0x4D, 0x26, 0x76, 0x91, 0xC7, 0xAD, 0x3A, 0xFB,
0xFD, 0x70, 0xFA, 0x53, 0xB4, 0xF3, 0xF3, 0x30, 0xF5, 0x15, 0xFC, 0xFA, 0xF2, 0xBC, 0x36, 0x2B,
0x8C, 0xAA, 0x60, 0xF1, 0x5F, 0x04, 0xE7, 0x3E, 0xB6, 0xDD, 0x39, 0x2F, 0xC6, 0xC7, 0xF0, 0xDC,
0xB8, 0x77, 0x01, 0x99, 0x78, 0xB1, 0x88, 0xCA, 0xB3, 0x2B, 0xBA, 0x55, 0x6B, 0x55, 0xBD, 0x9D,
0x9F, 0xBC, 0xA5, 0x38, 0xD9, 0xFA, 0xD9, 0x79, 0x89, 0xF6, 0x59, 0x3D, 0x56, 0x9A, 0xD6, 0xF2,
0x2A, 0xE7, 0x83, 0xF4, 0xAB, 0xB4, 0x31, 0x01, 0x72, 0x4E, 0x05, 0x7E, 0x83, 0x5F, 0xC3, 0x9C,
0x8B, 0xD9, 0x4B, 0x59, 0x47, 0x4D, 0xF9, 0xB6, 0xF3, 0xD5, 0x58, 0xFD, 0xCB, 0x19, 0xE0, 0x1F,
0x05, 0xFD, 0x5E, 0x6D, 0x3A, 0x94, 0xEC, 0x9F, 0xBD, 0xCF, 0xF0, 0xF9, 0xBB, 0xAB, 0x59, 0x75,
0xB9, 0x9B, 0x92, 0x0E, 0x45, 0x5E, 0xB6, 0x72, 0xF0, 0x82, 0x7A, 0xD5, 0x39, 0x08, 0x32, 0x31,
0x1D, 0xCD, 0x5A, 0xB1, 0xFF, 0x00, 0x51, 0xF8, 0xD7, 0xC7, 0x78, 0x73, 0x5A, 0xA5, 0x2C, 0xEA,
0xAE, 0x1A, 0x9C, 0xEF, 0x4D, 0xC6, 0x5E, 0x8E, 0xCD, 0x59, 0xFF, 0x00, 0x5D, 0xCF, 0xCA, 0x3C,
0x03, 0xC5, 0x57, 0xC3, 0x71, 0x76, 0x27, 0x01, 0x46, 0xAB, 0x95, 0x07, 0x09, 0xDF, 0xB4, 0xB9,
0x65, 0x15, 0x19, 0x5B, 0xE7, 0xF7, 0x32, 0x6A, 0x28, 0xA2, 0xBF, 0x72, 0x3F, 0xB2, 0x42, 0xB3,
0x4D, 0x69, 0x56, 0x6D, 0x7E, 0x43, 0xE2, 0xB6, 0xD8, 0x3F, 0xFB, 0x7F, 0xFF, 0x00, 0x6C, 0x3F,
0x96, 0x7E, 0x92, 0xDF, 0x0E, 0x57, 0xFF, 0x00, 0x71, 0xBF, 0xF7, 0x19, 0x3C, 0x56, 0xFB, 0xE3,
0x0D, 0xBF, 0x19, 0xF6, 0xA5, 0xFB, 0x21, 0xEC, 0xFF, 0x00, 0xA5, 0x4D, 0x6B, 0xFF, 0x00, 0x1E,
0xEB, 0xF4, 0xA9, 0x2B, 0xDE, 0xCA, 0xF8, 0x1F, 0x20, 0xC4, 0x65, 0xD4, 0x2A, 0xD4, 0xA1, 0xEF,
0x4A, 0x11, 0x6D, 0xF3, 0x4B, 0x76, 0x93, 0x6F, 0xE2, 0xB1, 0xF6, 0x9C, 0x39, 0xE0, 0xEF, 0x04,
0xE3, 0xB2, 0x2C, 0x1E, 0x26, 0xBE, 0x0D, 0xBA, 0x95, 0x29, 0x42, 0x52, 0x7E, 0xD2, 0xA2, 0xF7,
0xA5, 0x04, 0xDB, 0xB7, 0x3D, 0xB7, 0x7D, 0xAD, 0xE4, 0x50, 0x96, 0x37, 0x8F, 0xEF, 0x0F, 0xC6,
0x96, 0xDE, 0x53, 0x1B, 0xFF, 0x00, 0xB3, 0xDC, 0x55, 0xD7, 0x50, 0xCA, 0x54, 0xF7, 0xAC, 0xF6,
0x1B, 0x58, 0x8F, 0x43, 0x5F, 0x03, 0xC4, 0xD9, 0x0D, 0x5E, 0x16, 0xC7, 0x51, 0xC5, 0xE0, 0x6A,
0x3E, 0x56, 0xF4, 0xBE, 0xE9, 0xAD, 0xD3, 0xEE, 0x9A, 0xFC, 0x2E, 0x99, 0xF8, 0xA7, 0x88, 0x5C,
0x17, 0x88, 0xF0, 0xE3, 0x38, 0xC2, 0xE6, 0x99, 0x35, 0x79, 0x7B, 0x39, 0x36, 0xE2, 0xDF, 0xC5,
0x19, 0x46, 0xD7, 0x8B, 0x6A, 0xDC, 0xD1, 0x69, 0xF6, 0xD5, 0x5D, 0x3E, 0xEF, 0x46, 0x8A, 0x8E,
0xD4, 0xE6, 0xDD, 0x73, 0x52, 0x57, 0xEE, 0x59, 0x7E, 0x2D, 0x63, 0x30, 0x74, 0xB1, 0x29, 0x59,
0x4E, 0x2A, 0x5F, 0x7A, 0xB9, 0xFD, 0x93, 0x91, 0xE6, 0x71, 0xCD, 0x72, 0xAC, 0x36, 0x61, 0x15,
0x65, 0x56, 0x11, 0x9D, 0xBB, 0x73, 0x45, 0x3B, 0x7C, 0xAE, 0x15, 0x5E, 0xF2, 0x5C, 0x7E, 0xED,
0x4F, 0xD6, 0xAC, 0x31, 0xC2, 0xE4, 0xF6, 0xAC, 0xE6, 0x25, 0x98, 0x93, 0xDE, 0xBE, 0x1F, 0xC4,
0x4C, 0xF6, 0xAE, 0x03, 0x05, 0x0C, 0x2D, 0x07, 0x69, 0x55, 0xBD, 0xDF, 0x55, 0x15, 0xBF, 0xDF,
0x7B, 0x7A, 0x5C, 0xFC, 0x6F, 0xC7, 0x8E, 0x33, 0xC4, 0xE4, 0xB9, 0x45, 0x2C, 0xB7, 0x07, 0x2E,
0x5A, 0x98, 0x9E, 0x6B, 0xB5, 0xBA, 0x84, 0x6D, 0x7B, 0x76, 0x72, 0x6D, 0x2B, 0xF6, 0xE6, 0x05,
0x52, 0xCD, 0xB5, 0x47, 0x35, 0x2F, 0xD9, 0x64, 0xF5, 0x5F, 0xCE, 0xA6, 0xB3, 0x8C, 0x2C, 0x7B,
0xBB, 0xB5, 0x4D, 0x5E, 0x4F, 0x0E, 0x78, 0x79, 0x83, 0xAD, 0x80, 0x85, 0x7C, 0xC2, 0xEE, 0x73,
0xD5, 0x24, 0xED, 0x64, 0xF6, 0xF9, 0xF5, 0x7D, 0xB6, 0x3E, 0x67, 0x80, 0xBC, 0x09, 0xCA, 0xB1,
0x59, 0x2D, 0x3C, 0x6E, 0x7B, 0xCC, 0xEA, 0xD5, 0x4A, 0x4A, 0x31, 0x97, 0x2A, 0x8C, 0x5A, 0xBA,
0x4F, 0xBC, 0x9A, 0xD5, 0xF6, 0xDB, 0xA3, 0x6E, 0x8C, 0x90, 0x48, 0xBD, 0x57, 0x3F, 0x4A, 0x8C,
0x12, 0x0E, 0x47, 0x15, 0xA5, 0x50, 0xDC, 0x40, 0xAF, 0xC8, 0xE1, 0xBF, 0x9D, 0x73, 0xE7, 0x5E,
0x1A, 0xBA, 0x50, 0x75, 0xB2, 0xBA, 0x8D, 0xB5, 0xAF, 0x2C, 0xB7, 0xF9, 0x4B, 0x4D, 0x7D, 0x7E,
0xF3, 0x8B, 0x8B, 0xBE, 0x8F, 0xB3, 0xC2, 0xD1, 0x78, 0xBE, 0x1C, 0xAD, 0x29, 0x4E, 0x3A, 0xFB,
0x39, 0xB5, 0x77, 0xFE, 0x09, 0xAB, 0x6B, 0xD9, 0x35, 0xFF, 0x00, 0x6F, 0x5C, 0x6D, 0xBD, 0xC6,
0x7E, 0x57, 0xEB, 0xD8, 0xD5, 0x8A, 0xA4, 0xB6, 0xF2, 0x6E, 0xC1, 0x18, 0xF7, 0xAB, 0xB5, 0xF5,
0x5C, 0x0F, 0x8C, 0xCE, 0x2B, 0x61, 0x27, 0x4B, 0x32, 0x83, 0x5C, 0x96, 0x51, 0x72, 0x4D, 0x37,
0xDE, 0xF7, 0xDE, 0xDA, 0x6A, 0x7E, 0x93, 0xE0, 0xEE, 0x6B, 0xC5, 0x78, 0xBC, 0xB2, 0xAE, 0x1F,
0x88, 0x28, 0xCA, 0x2E, 0x93, 0x51, 0x84, 0xA6, 0x9C, 0x67, 0x25, 0xAD, 0xD3, 0xBE, 0xAF, 0x97,
0x4F, 0x7B, 0xAD, 0xF5, 0x6D, 0xAB, 0x85, 0x14, 0x51, 0x5F, 0x70, 0x7E, 0xC4, 0x23, 0x30, 0x55,
0xDC, 0x7A, 0x0A, 0xAE, 0xD7, 0x47, 0x3C, 0x27, 0xE6, 0x68, 0xBF, 0x63, 0xF2, 0xA7, 0xE2, 0x6A,
0x08, 0x91, 0xA4, 0x6D, 0xAB, 0x5F, 0x91, 0xF1, 0x6F, 0x15, 0xE6, 0x8B, 0x36, 0x59, 0x66, 0x56,
0xEC, 0xD5, 0x93, 0xB2, 0x4D, 0xCA, 0x4F, 0x5B, 0x6B, 0x7D, 0x17, 0xE7, 0x73, 0xF9, 0x7B, 0xC4,
0xFF, 0x00, 0x12, 0xF8, 0x92, 0x3C, 0x4C, 0xB8, 0x7B, 0x86, 0xE4, 0xE3, 0x28, 0x59, 0x3E, 0x54,
0xA5, 0x29, 0xCE, 0x49, 0x3B, 0x2B, 0xA7, 0x64, 0x93, 0x4B, 0xA6, 0xB7, 0xBE, 0x84, 0xDF, 0x6A,
0x6F, 0xEE, 0x0A, 0x72, 0xDD, 0x0F, 0xE2, 0x4F, 0xC8, 0xD3, 0x3E, 0xCB, 0x27, 0xAA, 0xD3, 0x1A,
0x09, 0x57, 0xF8, 0x73, 0xF4, 0xAF, 0x25, 0xE6, 0x7C, 0x77, 0x84, 0xFD, 0xE5, 0x48, 0xCD, 0xAF,
0xF0, 0x27, 0xF9, 0x2B, 0x9F, 0x2F, 0x2E, 0x22, 0xF1, 0x9F, 0x2C, 0x5E, 0xDE, 0xB5, 0x3A, 0xB2,
0x8A, 0xDE, 0xF4, 0xA3, 0x25, 0xF3, 0xE5, 0x8B, 0x6B, 0xD7, 0x42, 0xD4, 0x73, 0x46, 0xFD, 0x1B,
0xF0, 0x35, 0x25, 0x66, 0x90, 0x47, 0x04, 0x54, 0x91, 0xCC, 0xE9, 0xD0, 0xE4, 0x7A, 0x1A, 0xF5,
0x32, 0xBF, 0x13, 0xA4, 0xA4, 0xA9, 0xE6, 0x54, 0x6D, 0xFD, 0xE8, 0xFE, 0xB1, 0x7F, 0xA3, 0xF9,
0x1F, 0x47, 0xC3, 0x9F, 0x48, 0x99, 0xC6, 0x6A, 0x86, 0x7F, 0x85, 0xB3, 0xBD, 0x9C, 0xE9, 0xDF,
0x4F, 0x58, 0x49, 0xFD, 0xF6, 0x97, 0xC8, 0xBD, 0x45, 0x47, 0x0C, 0xCB, 0x27, 0x4E, 0x0F, 0xA5,
0x49, 0x5F, 0xAA, 0x60, 0xB1, 0xD8, 0x6C, 0x6D, 0x15, 0x5F, 0x0D, 0x35, 0x28, 0x3E, 0xAB, 0xFA,
0xD1, 0xF9, 0x1F, 0xD2, 0x99, 0x4E, 0x71, 0x97, 0xE7, 0x18, 0x48, 0xE3, 0x32, 0xFA, 0xAA, 0xA5,
0x29, 0x6C, 0xD7, 0xE4, 0xFA, 0xA6, 0xBA, 0xA7, 0x66, 0xBA, 0x85, 0x14, 0x51, 0x5D, 0x47, 0xA4,
0x14, 0x51, 0x51, 0xC9, 0x34, 0x69, 0xC1, 0x3C, 0xFA, 0x0A, 0xE5, 0xC5, 0xE3, 0x70, 0xD8, 0x3A,
0x5E, 0xD7, 0x13, 0x51, 0x42, 0x3D, 0xDB, 0xB1, 0xE7, 0x66, 0x99, 0xBE, 0x5F, 0x95, 0x61, 0xDE,
0x27, 0x1F, 0x5A, 0x34, 0xA9, 0xAE, 0xB2, 0x69, 0x2B, 0xF6, 0xD7, 0x77, 0xE4, 0xB5, 0x24, 0xA2,
0xAB, 0x35, 0xD0, 0xFE, 0x14, 0xFC, 0xCD, 0x33, 0xED, 0x52, 0x7A, 0x2F, 0xE5, 0x5F, 0x29, 0x88,
0xF1, 0x03, 0x20, 0xA3, 0x2B, 0x2A, 0xAE, 0x5E, 0x91, 0x7F, 0xAD, 0x8F, 0xCC, 0xF1, 0xDE, 0x38,
0xF0, 0x46, 0x16, 0x7C, 0xB1, 0xC4, 0x4A, 0xA3, 0xFE, 0xE4, 0x24, 0xD7, 0xDE, 0xD4, 0x53, 0xF9,
0x5C, 0xB9, 0x45, 0x53, 0xFB, 0x54, 0x9E, 0x8B, 0xF9, 0x51, 0xF6, 0xA9, 0x3D, 0x17, 0xF2, 0xAE,
0x75, 0xE2, 0x46, 0x44, 0xDE, 0xF2, 0xFF, 0x00, 0xC0, 0x7F, 0xE0, 0x9C, 0x31, 0xF1, 0xFB, 0x83,
0x1B, 0x49, 0xCA, 0xA2, 0xFF, 0x00, 0xB7, 0x3F, 0xE0, 0x97, 0x28, 0xA6, 0x43, 0x22, 0xC8, 0xB9,
0x1D, 0x7B, 0x8A, 0x7D, 0x7D, 0xAE, 0x17, 0x17, 0x43, 0x17, 0x42, 0x35, 0xE8, 0x4B, 0x9A, 0x12,
0xD5, 0x34, 0x7E, 0xBB, 0x96, 0xE6, 0x78, 0x3C, 0xCF, 0x07, 0x4F, 0x19, 0x82, 0xA8, 0xA7, 0x4A,
0x6A, 0xEA, 0x4B, 0x66, 0xBF, 0xAD, 0x1A, 0x7A, 0xA7, 0xA3, 0xD4, 0x2A, 0x8D, 0xD7, 0x17, 0x0D,
0xF5, 0xAB, 0xD5, 0x4E, 0xF8, 0x62, 0x6C, 0xFA, 0x8A, 0xF8, 0x3F, 0x13, 0x30, 0xEE, 0xA6, 0x4D,
0x1A, 0x8B, 0xEC, 0x4D, 0x3F, 0x93, 0x4D, 0x7E, 0x6D, 0x1F, 0x8A, 0xFD, 0x21, 0xB0, 0x32, 0xAF,
0xC2, 0x94, 0xEB, 0xC7, 0xFE, 0x5D, 0x55, 0x8B, 0x7E, 0x8D, 0x4A, 0x3F, 0x9B, 0x44, 0xBA, 0x79,
0xFD, 0xDB, 0x0F, 0x7A, 0x99, 0x94, 0x32, 0xE1, 0x86, 0x6A, 0xB6, 0x9E, 0x7F, 0x78, 0xCB, 0xEA,
0x2A, 0xD5, 0x7A, 0x7C, 0x13, 0x56, 0x9E, 0x2F, 0x87, 0x68, 0xC6, 0x69, 0x34, 0x93, 0x8B, 0x5D,
0x34, 0x6F, 0xF4, 0xB1, 0xF4, 0x5E, 0x0F, 0xE2, 0x68, 0x66, 0x7C, 0x07, 0x84, 0xA7, 0x56, 0x2A,
0x4A, 0x2A, 0x50, 0x92, 0x6A, 0xEB, 0x49, 0x3D, 0x1A, 0x7B, 0xDE, 0x36, 0xFB, 0xCA, 0xF2, 0x5A,
0x8D, 0xB9, 0x42, 0x73, 0xE8, 0x6A, 0xAF, 0x4A, 0xD2, 0xAA, 0x97, 0xCA, 0x04, 0x81, 0x87, 0xF1,
0x75, 0xAF, 0x90, 0xE3, 0xCE, 0x11, 0xC1, 0xE1, 0x70, 0x9F, 0xDA, 0x38, 0x28, 0xA8, 0x72, 0xB5,
0xCC, 0x96, 0xCE, 0xED, 0x24, 0xD7, 0x6B, 0x37, 0xB2, 0xFD, 0x0F, 0xCB, 0x3C, 0x68, 0xF0, 0xBF,
0x2B, 0xCB, 0xB2, 0xCF, 0xED, 0xDC, 0xA2, 0x9A, 0xA2, 0xA9, 0xB4, 0xAA, 0x41, 0x5E, 0xCD, 0x4A,
0x49, 0x29, 0x45, 0x6C, 0x9A, 0x6D, 0x26, 0x96, 0x8D, 0x3B, 0xE9, 0x6D, 0x66, 0xB5, 0x93, 0xCC,
0x4C, 0x1F, 0xBC, 0xB5, 0x2D, 0x53, 0xB1, 0x3F, 0xBE, 0x23, 0xDA, 0xAE, 0x57, 0xDA, 0x70, 0x56,
0x65, 0x5B, 0x30, 0xC9, 0x69, 0xD4, 0xAE, 0xEF, 0x35, 0x78, 0xB7, 0xDE, 0xDB, 0x3F, 0xBA, 0xC7,
0xEB, 0x9E, 0x10, 0xF1, 0x06, 0x2F, 0x3C, 0xE1, 0x1C, 0x3E, 0x23, 0x19, 0x2E, 0x6A, 0x90, 0x72,
0x83, 0x93, 0xDE, 0x5C, 0xAF, 0x46, 0xFC, 0xED, 0x6B, 0xBE, 0xAF, 0x50, 0xA2, 0x8A, 0x2B, 0xEB,
0x0F, 0xD3, 0x42, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x02, 0x8A, 0x28, 0xA0, 0x0A, 0xFA,
0x80, 0xF9, 0x55, 0xBD, 0xF1, 0x50, 0xDA, 0x1C, 0x5C, 0x2D, 0x59, 0xBC, 0x5D, 0xD0, 0x9F, 0x6E,
0x6A, 0x9A, 0x92, 0xAC, 0x08, 0xEC, 0x6B, 0xF0, 0xCE, 0x34, 0xBE, 0x5B, 0xC5, 0x54, 0xB1, 0xB6,
0xD1, 0xF2, 0x4F, 0xD7, 0x95, 0xD9, 0xFE, 0x47, 0xF1, 0xAF, 0x8B, 0x49, 0xF0, 0xFF, 0x00, 0x89,
0x38, 0x6C, 0xDF, 0x97, 0xDD, 0x6E, 0x95, 0x5D, 0x3A, 0xF2, 0x35, 0x19, 0x2F, 0x5B, 0x47, 0xF1,
0x2F, 0xC8, 0xEB, 0x1A, 0xE5, 0x8D, 0x53, 0x9A, 0x56, 0x90, 0xF3, 0xC0, 0xF4, 0xA6, 0xC8, 0xEC,
0xED, 0x96, 0x35, 0x25, 0xBC, 0x06, 0x4E, 0x4F, 0x0B, 0xFC, 0xEB, 0x3C, 0xE3, 0x88, 0xB3, 0x3E,
0x29, 0xC5, 0xFD, 0x43, 0x2E, 0x8B, 0x54, 0x9F, 0x4E, 0xFE, 0x73, 0x7D, 0x17, 0x96, 0xDE, 0xAE,
0xC6, 0x1C, 0x55, 0xC7, 0x9C, 0x45, 0xE2, 0x3E, 0x66, 0xB2, 0x4C, 0x86, 0x9C, 0xA3, 0x87, 0x7F,
0x67, 0x67, 0x24, 0xBE, 0xD5, 0x47, 0xB2, 0x8A, 0xFE, 0x5B, 0xD9, 0x79, 0xBB, 0x0C, 0x86, 0x36,
0x91, 0xB0, 0x3A, 0x77, 0x35, 0x7A, 0x35, 0x08, 0xA1, 0x47, 0x6A, 0x15, 0x42, 0xAE, 0x14, 0x60,
0x52, 0xD7, 0xE9, 0x3C, 0x2B, 0xC2, 0x94, 0x32, 0x3A, 0x4E, 0x4D, 0xF3, 0x56, 0x97, 0xC4, 0xFA,
0x7A, 0x2F, 0x2F, 0xCF, 0xF0, 0x3F, 0xA0, 0x7C, 0x35, 0xF0, 0xCF, 0x07, 0xC1, 0xB8, 0x69, 0x4E,
0x52, 0xF6, 0x98, 0xAA, 0x8A, 0xD3, 0x9F, 0x44, 0xB7, 0xE5, 0x8F, 0x95, 0xF7, 0x6F, 0x59, 0x3D,
0x5D, 0xB4, 0x48, 0xA2, 0x8A, 0x2B, 0xEB, 0x8F, 0xD4, 0x02, 0xB3, 0x6B, 0x4A, 0xB3, 0x6B, 0xF2,
0x1F, 0x15, 0xB6, 0xC1, 0xFF, 0x00, 0xDB, 0xFF, 0x00, 0xFB, 0x61, 0xFC, 0xB3, 0xF4, 0x96, 0xDB,
0x2B, 0xFF, 0x00, 0xB8, 0xDF, 0xFB, 0x88, 0xBD, 0x6B, 0xFF, 0x00, 0x1E, 0xEB, 0xF4, 0xA7, 0x96,
0x03, 0xA9, 0x15, 0x9F, 0xB9, 0xB6, 0xE3, 0x71, 0xC7, 0xA6, 0x69, 0x2B, 0x97, 0x0D, 0xE2, 0x62,
0xC2, 0xE0, 0xE9, 0x61, 0xE9, 0xE1, 0xAE, 0xE1, 0x18, 0xC6, 0xEE, 0x56, 0xD9, 0x25, 0xB5, 0x9F,
0xE6, 0x79, 0xD9, 0x7F, 0xD2, 0x12, 0x39, 0x6E, 0x55, 0x86, 0xC0, 0xE1, 0xF2, 0xFE, 0x67, 0x4A,
0x9C, 0x21, 0xCD, 0x2A, 0x96, 0x4D, 0xC6, 0x29, 0x37, 0x65, 0x17, 0xDB, 0xB9, 0x76, 0x4B, 0x88,
0xD7, 0xA1, 0xDC, 0x7D, 0xAA, 0x9B, 0x1D, 0xCC, 0x4F, 0xA9, 0xA1, 0x41, 0x63, 0x80, 0x09, 0xFA,
0x54, 0xF0, 0xDB, 0x13, 0xCC, 0x9F, 0x95, 0x78, 0xB8, 0xAC, 0x5E, 0x7D, 0xC6, 0x35, 0xE1, 0x4E,
0x14, 0xED, 0x08, 0xBD, 0x2C, 0xAD, 0x15, 0xE6, 0xE4, 0xFA, 0xFF, 0x00, 0x49, 0x1F, 0x25, 0x99,
0x66, 0x7C, 0x69, 0xE2, 0xBE, 0x36, 0x95, 0x0A, 0x58, 0x74, 0xA8, 0xC1, 0xBB, 0x72, 0xA6, 0xA9,
0xC2, 0xFB, 0xB9, 0x4D, 0xDE, 0xEE, 0xDD, 0x2F, 0xFE, 0x18, 0xDC, 0x9A, 0xCC, 0x11, 0x6E, 0xB9,
0xA9, 0x28, 0xE9, 0xC5, 0x15, 0xFB, 0xB6, 0x5D, 0x84, 0x58, 0x3C, 0x1D, 0x2C, 0x32, 0x77, 0xE4,
0x8A, 0x8D, 0xFB, 0xD9, 0x58, 0xFE, 0xCE, 0xC8, 0x72, 0xB5, 0x94, 0xE5, 0x38, 0x6C, 0xBD, 0x4B,
0x9B, 0xD8, 0xC2, 0x30, 0xBF, 0x7E, 0x58, 0xA5, 0x7F, 0x9D, 0x86, 0xCD, 0xCC, 0x4C, 0x3D, 0x8D,
0x67, 0xD6, 0x95, 0x54, 0xBA, 0x80, 0xAB, 0x6E, 0x51, 0x95, 0xFE, 0x55, 0xF9, 0xCF, 0x89, 0x59,
0x2E, 0x2B, 0x15, 0x4E, 0x96, 0x32, 0x84, 0x79, 0x94, 0x13, 0x52, 0x4B, 0x74, 0x9F, 0x5F, 0x4E,
0xFF, 0x00, 0xF0, 0xE7, 0xE0, 0xBF, 0x48, 0x1E, 0x11, 0xCC, 0x73, 0x2A, 0x18, 0x6C, 0xDB, 0x05,
0x07, 0x38, 0xD1, 0x52, 0x8C, 0xD2, 0xD5, 0xA4, 0xDA, 0x6A, 0x56, 0xEA, 0x96, 0xBC, 0xDD, 0xB4,
0x7B, 0x5D, 0xA9, 0xED, 0xE4, 0x56, 0x8C, 0x00, 0x79, 0x03, 0xA5, 0x49, 0x59, 0xBD, 0x2A, 0x45,
0x9E, 0x55, 0xFE, 0x2C, 0xFD, 0x6B, 0x93, 0x27, 0xF1, 0x32, 0x8C, 0x28, 0xC6, 0x96, 0x3A, 0x8B,
0x4D, 0x24, 0xAF, 0x1D, 0x6F, 0x6F, 0x27, 0x6B, 0x7D, 0xEC, 0xF3, 0x38, 0x57, 0xE9, 0x0D, 0x84,
0xA3, 0x85, 0xA7, 0x85, 0xCE, 0x70, 0xB2, 0x4E, 0x09, 0x47, 0x9E, 0x9D, 0x9A, 0x76, 0x56, 0xBB,
0x8C, 0x9A, 0xB7, 0x9D, 0x9B, 0xF4, 0x2F, 0x51, 0x55, 0x56, 0xE9, 0x87, 0xDE, 0x50, 0x7E, 0x95,
0x2A, 0x5C, 0x46, 0xDD, 0x4E, 0xDF, 0xAD, 0x7D, 0x9E, 0x03, 0x8D, 0x32, 0x3C, 0x6D, 0x94, 0x6B,
0xA8, 0xBE, 0xD2, 0xF7, 0x7F, 0x17, 0xA7, 0xE2, 0x7E, 0xB5, 0x92, 0xF8, 0xB9, 0xC1, 0xB9, 0xBB,
0x51, 0xA7, 0x8C, 0x54, 0xE4, 0xFA, 0x54, 0xF7, 0x3F, 0x19, 0x7B, 0xAF, 0xE4, 0xC9, 0x68, 0xA4,
0x52, 0x18, 0x64, 0x1C, 0xFD, 0x29, 0x6B, 0xEA, 0x23, 0x38, 0xCE, 0x2A, 0x51, 0x77, 0x4C, 0xFD,
0x1A, 0x9D, 0x48, 0x55, 0x82, 0x9D, 0x39, 0x27, 0x17, 0xB3, 0x5A, 0xA7, 0xE8, 0xC2, 0x8A, 0x28,
0xAA, 0x2C, 0xA7, 0x7D, 0xFE, 0xB8, 0x7F, 0xBB, 0x4E, 0xD3, 0xFE, 0xF3, 0x7E, 0x14, 0x97, 0xE0,
0xF9, 0xA0, 0xFB, 0x53, 0x2D, 0xA5, 0xF2, 0xD8, 0xE4, 0x64, 0x1E, 0xB5, 0xF8, 0x3D, 0x4C, 0x5D,
0x0C, 0x0F, 0x1C, 0x4E, 0xBE, 0x25, 0xF2, 0xC1, 0x4D, 0xDD, 0xF6, 0xBC, 0x6C, 0x9F, 0xE2, 0x8F,
0xE2, 0xBA, 0xF9, 0xA6, 0x0F, 0x26, 0xF1, 0x8E, 0xA6, 0x37, 0x30, 0x97, 0x25, 0x28, 0xD5, 0x95,
0xDB, 0x4F, 0x4E, 0x6A, 0x6D, 0x45, 0xFA, 0x5D, 0xA7, 0x7E, 0xDA, 0x97, 0xA8, 0xA4, 0x56, 0x0C,
0xB9, 0x53, 0x91, 0x4B, 0x5F, 0xBA, 0xD3, 0xA9, 0x0A, 0x90, 0x53, 0x83, 0xBA, 0x7A, 0xA6, 0xB6,
0x67, 0xF6, 0x7D, 0x0A, 0xF4, 0xAB, 0xD2, 0x8D, 0x5A, 0x32, 0x52, 0x84, 0x95, 0xD3, 0x4E, 0xE9,
0xA7, 0xB3, 0x4D, 0x6E, 0x86, 0xC8, 0x8A, 0xFF, 0x00, 0x79, 0x73, 0x55, 0xE6, 0xB6, 0x23, 0x98,
0xF9, 0x1E, 0x95, 0x6A, 0x8A, 0xF0, 0xF3, 0x9E, 0x19, 0xCB, 0x73, 0x6A, 0x6D, 0x62, 0x29, 0xA5,
0x3F, 0xE6, 0x5A, 0x49, 0x7C, 0xFA, 0xFA, 0x3B, 0xA3, 0xE3, 0x78, 0xB3, 0xC3, 0xDE, 0x1F, 0xE2,
0x7A, 0x32, 0x8E, 0x36, 0x82, 0x55, 0x5E, 0xD5, 0x22, 0x92, 0x9A, 0x7E, 0xBD, 0x57, 0x94, 0xAE,
0x8C, 0xDE, 0x41, 0xAB, 0xB6, 0x8E, 0x5E, 0x2C, 0x9E, 0xA0, 0xE2, 0x96, 0x58, 0x51, 0xDB, 0x24,
0x60, 0xFB, 0x53, 0xA3, 0x50, 0x8B, 0xB5, 0x45, 0x7C, 0xA7, 0x0A, 0x70, 0x96, 0x67, 0x92, 0xE6,
0x75, 0x27, 0x2A, 0xA9, 0xD0, 0x69, 0xAD, 0x3E, 0xD7, 0x6B, 0xAE, 0x8D, 0x7F, 0xC0, 0x47, 0xE6,
0x9E, 0x19, 0xF8, 0x61, 0xC4, 0x3C, 0x23, 0xC4, 0x55, 0xAA, 0xD4, 0xC4, 0x46, 0x58, 0x47, 0x16,
0xB4, 0x6F, 0xDF, 0x7A, 0x72, 0xB7, 0x0D, 0xA2, 0xE3, 0xDE, 0xEF, 0xB2, 0x6D, 0x36, 0x3A, 0x8A,
0x28, 0xAF, 0xD2, 0x8F, 0xE8, 0x20, 0xAC, 0xE6, 0x24, 0xB1, 0x26, 0xB4, 0x6B, 0x36, 0xBF, 0x22,
0xF1, 0x56, 0x4F, 0x97, 0x08, 0xBA, 0x7B, 0xFF, 0x00, 0xFB, 0x69, 0xFC, 0xB9, 0xF4, 0x96, 0x9C,
0x95, 0x3C, 0xAE, 0x37, 0xD1, 0xBA, 0xBF, 0x87, 0xB3, 0xFF, 0x00, 0x36, 0x49, 0x1C, 0x32, 0x38,
0xC8, 0x1C, 0x1E, 0xE4, 0xD4, 0x8B, 0x6A, 0xDD, 0xDC, 0x7E, 0x02, 0xA6, 0xB5, 0xFF, 0x00, 0x8F,
0x75, 0xFA, 0x54, 0x95, 0xE9, 0xE4, 0x9C, 0x03, 0x92, 0xD4, 0xC1, 0x51, 0xC4, 0x57, 0x8C, 0xA7,
0x29, 0xC6, 0x2D, 0xDE, 0x4D, 0x2B, 0xB4, 0x9E, 0x9C, 0xB6, 0xFC, 0xCF, 0xA2, 0xE0, 0xFF, 0x00,
0x04, 0x78, 0x46, 0xBE, 0x51, 0x85, 0xC6, 0xE3, 0x21, 0x3A, 0xB3, 0xAB, 0x4E, 0x13, 0x69, 0xCD,
0xA4, 0x9C, 0xA2, 0x9B, 0xB7, 0x27, 0x2B, 0xB6, 0xBA, 0x5D, 0xB2, 0xB7, 0xD9, 0x3F, 0xE9, 0xA7,
0xE9, 0x4C, 0x9E, 0x03, 0x1A, 0xEE, 0xCE, 0xE1, 0xDF, 0x8A, 0xB9, 0x48, 0xEA, 0x19, 0x4A, 0x9E,
0xF5, 0xDD, 0x98, 0x78, 0x7D, 0x92, 0xD4, 0xC2, 0x54, 0x8E, 0x1A, 0x97, 0x2D, 0x4B, 0x3E, 0x57,
0xCD, 0x27, 0xAF, 0x4D, 0xDB, 0x5E, 0xA7, 0xAF, 0x9E, 0x78, 0x1B, 0xC2, 0x35, 0xB2, 0xCA, 0xF0,
0xCB, 0xB0, 0xDE, 0xCE, 0xBB, 0x8B, 0xE4, 0x97, 0x3D, 0x47, 0x69, 0x74, 0xBA, 0x94, 0x9A, 0xB3,
0x7A, 0x3D, 0x36, 0x7A, 0x6A, 0x51, 0x81, 0xF6, 0x48, 0x1B, 0xB7, 0x7A, 0xBF, 0x59, 0xA4, 0x60,
0xE0, 0xD5, 0xEB, 0x53, 0x98, 0x14, 0xD7, 0xCD, 0xF8, 0x63, 0x99, 0x54, 0x55, 0x2B, 0xE5, 0xD3,
0xD9, 0x7B, 0xCB, 0xCB, 0x54, 0xA4, 0xBF, 0x14, 0x7C, 0x07, 0xD1, 0xD7, 0x88, 0x2B, 0xC6, 0xBE,
0x2F, 0x21, 0xAD, 0xB2, 0x5E, 0xD2, 0x3E, 0x4D, 0x35, 0x19, 0xAF, 0x9D, 0xE2, 0xFD, 0x53, 0xEE,
0x49, 0x55, 0xF5, 0x01, 0xC2, 0x9A, 0xB1, 0x50, 0x6A, 0x1F, 0xEA, 0xD7, 0xEB, 0x5F, 0x6D, 0xC6,
0xD4, 0xD5, 0x4E, 0x1F, 0xC4, 0xA7, 0xD9, 0x3F, 0xBA, 0x49, 0x9F, 0xB0, 0x78, 0xBF, 0x42, 0x35,
0xB8, 0x1B, 0x30, 0x8C, 0xBA, 0x46, 0x2F, 0xE7, 0x19, 0xC5, 0xAF, 0xC8, 0x86, 0xCC, 0xE2, 0xE0,
0x7B, 0xD5, 0xDA, 0xCF, 0x8D, 0x8A, 0x38, 0x61, 0xD4, 0x53, 0xDA, 0xE2, 0x53, 0xDF, 0x1F, 0x41,
0x5F, 0x9C, 0xF0, 0x7F, 0x18, 0xE0, 0x32, 0x6C, 0xAE, 0x74, 0x31, 0x2A, 0x4E, 0x7C, 0xCD, 0xA4,
0x97, 0x46, 0xA3, 0xD5, 0xB5, 0xD6, 0xE7, 0xE0, 0x9E, 0x15, 0xF8, 0xAD, 0x92, 0xF0, 0x9F, 0x0E,
0x55, 0xC1, 0xE3, 0xD4, 0xE7, 0x53, 0xDA, 0x4A, 0x51, 0x8C, 0x52, 0x7E, 0xEB, 0x8C, 0x16, 0xED,
0xA4, 0xB5, 0x4C, 0xB6, 0xEE, 0xA8, 0x32, 0xC7, 0x15, 0x4A, 0xE2, 0x43, 0x24, 0x99, 0xED, 0xD8,
0x53, 0x09, 0x24, 0xE4, 0x9A, 0x92, 0x08, 0x5A, 0x46, 0xF4, 0x5E, 0xE6, 0xB8, 0xB3, 0x9E, 0x26,
0xCC, 0xB8, 0xA6, 0xA4, 0x30, 0x18, 0x4A, 0x5C, 0xB0, 0x6F, 0xE1, 0x5A, 0xB7, 0xE7, 0x27, 0xA5,
0x92, 0xDF, 0xB2, 0xDD, 0xF4, 0x3C, 0x7E, 0x2C, 0xF1, 0x0F, 0x3F, 0xF1, 0x22, 0xBD, 0x2C, 0x97,
0x2C, 0xC3, 0x38, 0x53, 0x94, 0xAF, 0xC8, 0x9F, 0x33, 0x93, 0x5B, 0x39, 0xCA, 0xC9, 0x28, 0xC7,
0x7E, 0x89, 0x6E, 0xDB, 0xB2, 0xB4, 0x96, 0x0A, 0x77, 0x17, 0xED, 0x8C, 0x55, 0xAA, 0x45, 0x50,
0xAB, 0xB4, 0x0E, 0x05, 0x2D, 0x7E, 0xC3, 0xC3, 0x99, 0x32, 0xC9, 0xF2, 0xDA, 0x78, 0x4B, 0xDE,
0x4B, 0x56, 0xFC, 0xDE, 0xF6, 0xF2, 0xE8, 0x8F, 0xEA, 0xAE, 0x01, 0xE1, 0x38, 0xF0, 0xAE, 0x41,
0x47, 0x2C, 0xE7, 0xE6, 0x9A, 0xBB, 0x93, 0xE8, 0xE5, 0x2D, 0x5D, 0xBC, 0x96, 0xCB, 0xC9, 0x5C,
0x28, 0xA2, 0x8A, 0xF7, 0x0F, 0xB2, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28,
0xA2, 0x80, 0x1B, 0x20, 0x26, 0x36, 0x03, 0xB8, 0xAC, 0xF2, 0x08, 0x38, 0x35, 0xA5, 0x54, 0x6E,
0x86, 0x2E, 0x1A, 0xBF, 0x27, 0xF1, 0x4B, 0x00, 0x9D, 0x0A, 0x18, 0xDB, 0xEA, 0x9F, 0x27, 0xDE,
0x9B, 0xFD, 0x0F, 0xE6, 0x4F, 0xA4, 0x7E, 0x4B, 0x19, 0x60, 0xB0, 0x79, 0xB2, 0x6E, 0xF1, 0x93,
0xA6, 0xD7, 0x4B, 0x49, 0x39, 0x27, 0xFF, 0x00, 0x92, 0xBF, 0xBC, 0x7D, 0xAC, 0x2A, 0xE3, 0x7B,
0x1C, 0x8C, 0xF4, 0xAB, 0x7D, 0x3A, 0x55, 0x7D, 0x3C, 0xFE, 0xED, 0x87, 0xBD, 0x58, 0xAF, 0xA8,
0xE0, 0x6C, 0x1E, 0x12, 0x8E, 0x4B, 0x46, 0xB5, 0x08, 0x25, 0x29, 0xAB, 0xC9, 0xF5, 0x6D, 0x36,
0xB7, 0xFD, 0x36, 0x47, 0xE8, 0xDE, 0x0D, 0xE5, 0x59, 0x5E, 0x17, 0x84, 0x70, 0xB8, 0xAC, 0x1D,
0x25, 0x19, 0xD5, 0x8D, 0xE7, 0x2E, 0xB2, 0x92, 0x6D, 0x3B, 0xB7, 0xAD, 0x93, 0x4E, 0xCB, 0x65,
0xD1, 0x05, 0x14, 0x51, 0x5F, 0x60, 0x7E, 0xAA, 0x14, 0x51, 0x45, 0x00, 0x15, 0x9B, 0x5A, 0x55,
0x9B, 0x5F, 0x90, 0xF8, 0xAD, 0xB6, 0x0F, 0xFE, 0xDF, 0xFF, 0x00, 0xDB, 0x0F, 0xE5, 0x9F, 0xA4,
0xB6, 0xD9, 0x5F, 0xFD, 0xC6, 0xFF, 0x00, 0xDC, 0x65, 0xA8, 0x20, 0x8D, 0xA3, 0x56, 0x39, 0xC9,
0xF7, 0xA9, 0x16, 0x18, 0x87, 0xF0, 0x0F, 0xC6, 0x8B, 0x5F, 0xF8, 0xF7, 0x5F, 0xA5, 0x49, 0x5F,
0x6B, 0x90, 0xE4, 0x79, 0x5C, 0x72, 0xEC, 0x3D, 0x5F, 0xAB, 0xC3, 0x99, 0xC2, 0x2D, 0xBE, 0x54,
0xDD, 0xF9, 0x56, 0xB7, 0xB1, 0xFA, 0xEF, 0x05, 0xF0, 0x6F, 0x0D, 0xC3, 0x22, 0xC0, 0xE2, 0x56,
0x02, 0x97, 0xB4, 0x95, 0x2A, 0x72, 0x72, 0x70, 0x8B, 0x6D, 0xB8, 0x26, 0xDD, 0xDA, 0xBD, 0xDB,
0x11, 0x40, 0x5E, 0x80, 0x0F, 0xA5, 0x2D, 0x14, 0x57, 0xD3, 0xC2, 0x11, 0x84, 0x54, 0x62, 0xAC,
0x8F, 0xD1, 0x69, 0x52, 0xA7, 0x4A, 0x0A, 0x14, 0xE2, 0x94, 0x57, 0x44, 0xAC, 0x82, 0x8A, 0x28,
0xAA, 0x34, 0x0A, 0x28, 0xA2, 0x80, 0x19, 0x24, 0x51, 0xBF, 0xDE, 0x5F, 0xC4, 0x54, 0x4D, 0x6A,
0x3F, 0x85, 0xCF, 0xE2, 0x2A, 0xC5, 0x15, 0xE0, 0xE3, 0xF8, 0x63, 0x27, 0xC7, 0xC9, 0xCB, 0x11,
0x87, 0x8B, 0x93, 0xEA, 0xB4, 0x7F, 0x7C, 0x6C, 0xCF, 0x8B, 0xCE, 0xFC, 0x3B, 0xE1, 0x4C, 0xEE,
0xA3, 0xA9, 0x8E, 0xC0, 0xC2, 0x53, 0x7B, 0xC9, 0x5E, 0x12, 0x7E, 0xB2, 0x83, 0x8B, 0x7F, 0x36,
0x53, 0x7B, 0x69, 0x07, 0x4C, 0x35, 0x44, 0xCA, 0xCB, 0xF7, 0x94, 0x8A, 0xD1, 0xA4, 0x60, 0x0A,
0xE0, 0x8E, 0x2B, 0xE4, 0x33, 0x1F, 0x0C, 0x72, 0xFA, 0xA9, 0xCB, 0x07, 0x52, 0x54, 0xDF, 0x67,
0xEF, 0x2F, 0xF3, 0xFC, 0x59, 0xF9, 0x66, 0x7D, 0xF4, 0x77, 0xC8, 0xF1, 0x2A, 0x53, 0xCA, 0xAB,
0xCE, 0x8C, 0xBA, 0x29, 0x7B, 0xF0, 0xF2, 0x5A, 0xDA, 0x4B, 0xD7, 0x99, 0xFA, 0x14, 0x61, 0x91,
0xA3, 0x6C, 0x8F, 0xC4, 0x55, 0xE5, 0x60, 0xCA, 0x18, 0x74, 0x35, 0x42, 0x64, 0xD9, 0x21, 0x5A,
0xB1, 0x60, 0xD9, 0x8C, 0xAF, 0xA1, 0xAF, 0x17, 0xC3, 0xFC, 0xD3, 0x13, 0x82, 0xCC, 0xAA, 0x64,
0xD8, 0x97, 0xA7, 0xBD, 0x65, 0xDA, 0x51, 0xDE, 0xDE, 0x4D, 0x27, 0xF3, 0x47, 0xC8, 0x78, 0x1F,
0xC4, 0x79, 0x8E, 0x51, 0xC4, 0x15, 0xB8, 0x53, 0x1E, 0xDF, 0x2B, 0x73, 0x4A, 0x2D, 0xDF, 0x92,
0xA4, 0x2F, 0xCC, 0x97, 0x94, 0x92, 0x77, 0xF3, 0x49, 0xAD, 0xD9, 0x62, 0x8A, 0x28, 0xAF, 0xD9,
0xCF, 0xEB, 0x61, 0xB2, 0xA2, 0xC8, 0xB8, 0x6A, 0xA7, 0x3C, 0x4D, 0x19, 0xE7, 0x91, 0xD8, 0xD5,
0xEA, 0x46, 0x01, 0x97, 0x04, 0x64, 0x57, 0xC9, 0x71, 0x37, 0x08, 0xE0, 0xF3, 0xAA, 0x6E, 0x7F,
0x0D, 0x64, 0xB4, 0x97, 0xE9, 0x2E, 0xEB, 0xF1, 0x5D, 0x3B, 0x1F, 0x98, 0x78, 0x85, 0xE1, 0x7E,
0x55, 0xC5, 0xD4, 0x5D, 0x5B, 0x7B, 0x3C, 0x5A, 0x56, 0x8D, 0x45, 0xD6, 0xDB, 0x29, 0xAF, 0xB4,
0xBC, 0xF7, 0x5D, 0x3B, 0x3A, 0x30, 0xC8, 0xD1, 0xB6, 0x47, 0xE2, 0x2A, 0xE4, 0x32, 0xAC, 0x8B,
0xC7, 0x5E, 0xE2, 0xAB, 0xDC, 0x5B, 0x95, 0xF9, 0x93, 0x95, 0xF4, 0xF4, 0xA8, 0x55, 0x8A, 0xB6,
0x54, 0xE0, 0xD7, 0xE6, 0x59, 0x6E, 0x77, 0x9B, 0xF0, 0x96, 0x2F, 0xEA, 0x78, 0xD8, 0x37, 0x4B,
0xB7, 0x97, 0x78, 0x3F, 0xD3, 0x6E, 0xF6, 0x67, 0xF3, 0xBE, 0x41, 0xC5, 0xFC, 0x53, 0xE1, 0x7E,
0x67, 0xFD, 0x93, 0x9B, 0xD3, 0x73, 0xC3, 0x5F, 0xE0, 0x6E, 0xEA, 0xDF, 0xCD, 0x4A, 0x5B, 0x79,
0xDB, 0x66, 0xF4, 0x6A, 0x32, 0xD5, 0x68, 0xD1, 0x50, 0xC1, 0x70, 0xAD, 0x85, 0x6E, 0x1B, 0xF9,
0xD4, 0xD5, 0xFB, 0x4E, 0x59, 0x9A, 0xE0, 0xF3, 0x3A, 0x0A, 0xBE, 0x16, 0x6A, 0x51, 0xFC, 0x57,
0x93, 0x5D, 0x19, 0xFD, 0x73, 0xC3, 0xBC, 0x4B, 0x95, 0x71, 0x0E, 0x09, 0x63, 0x32, 0xDA, 0xCA,
0x70, 0x7B, 0xF7, 0x8B, 0xED, 0x25, 0xBA, 0x7E, 0xBF, 0x2D, 0x02, 0x8A, 0x28, 0xAF, 0x44, 0xF7,
0x82, 0x8A, 0x28, 0xA0, 0x02, 0xB3, 0x4F, 0x5A, 0xD2, 0xAC, 0xF9, 0x86, 0x26, 0x61, 0xEF, 0x5F,
0x93, 0xF8, 0xA9, 0x45, 0xBA, 0x18, 0x5A, 0xBD, 0x9C, 0x97, 0xDE, 0x93, 0xFD, 0x0F, 0xE6, 0x4F,
0xA4, 0xA6, 0x15, 0xCB, 0x05, 0x97, 0x62, 0x7A, 0x46, 0x55, 0x23, 0xFF, 0x00, 0x81, 0x28, 0xBF,
0xFD, 0xB4, 0xB9, 0x6B, 0xFF, 0x00, 0x1E, 0xEB, 0x52, 0x55, 0x04, 0x96, 0x45, 0x5D, 0xAA, 0xD8,
0x1F, 0x4A, 0x5F, 0x3E, 0x5F, 0xEF, 0xFE, 0x82, 0xAB, 0x2C, 0xF1, 0x1F, 0x2B, 0xC3, 0x60, 0x68,
0xD0, 0xA9, 0x4E, 0x7C, 0xD0, 0x8C, 0x62, 0xEC, 0xA3, 0x6B, 0xA4, 0x96, 0x9E, 0xF1, 0xA7, 0x0E,
0xF8, 0xFB, 0xC3, 0x99, 0x76, 0x4D, 0x84, 0xC1, 0x62, 0x30, 0xF5, 0x9C, 0xE9, 0x53, 0x84, 0x1F,
0x2C, 0x61, 0x6B, 0xC6, 0x29, 0x3B, 0x5E, 0xA2, 0x76, 0xD3, 0x4B, 0xA4, 0x5E, 0xA8, 0x66, 0xB8,
0x44, 0xE0, 0x7C, 0xCD, 0x55, 0x5A, 0x59, 0x1B, 0xAB, 0x9A, 0x45, 0x05, 0x8E, 0x00, 0xC9, 0xAE,
0x0C, 0xD7, 0xC4, 0xBA, 0xD8, 0x88, 0xFB, 0x1C, 0xB2, 0x93, 0x8C, 0x9E, 0x97, 0x7A, 0xBF, 0x94,
0x55, 0xD5, 0xFE, 0xFF, 0x00, 0x43, 0xC5, 0xE2, 0x5F, 0xA4, 0x26, 0x2F, 0x1B, 0x4F, 0xEA, 0xBC,
0x3D, 0x86, 0x70, 0x9C, 0xB4, 0xE7, 0x9D, 0xA5, 0x2D, 0x76, 0xE5, 0x82, 0xBA, 0xBF, 0xAB, 0x97,
0xA0, 0x31, 0x25, 0x89, 0x3D, 0xCD, 0x5D, 0xB5, 0x04, 0x40, 0xA0, 0xD4, 0x70, 0x5B, 0x63, 0xE6,
0x93, 0xF2, 0xAB, 0x15, 0xEB, 0x70, 0x0F, 0x0C, 0xE3, 0x70, 0x35, 0x67, 0x98, 0x63, 0x57, 0x2C,
0xA6, 0xAC, 0xA2, 0xF7, 0xD5, 0xA6, 0xDB, 0xED, 0xB6, 0xDB, 0xF7, 0x3E, 0x9B, 0xC1, 0x3F, 0x0F,
0x33, 0x7C, 0x9F, 0x13, 0x5B, 0x3D, 0xCD, 0xD3, 0x85, 0x4A, 0xB1, 0x71, 0x8C, 0x1F, 0xC5, 0x69,
0x35, 0x27, 0x29, 0x76, 0x6D, 0xA5, 0x64, 0xF5, 0xDE, 0xF6, 0x0A, 0x83, 0x50, 0xFF, 0x00, 0x56,
0xBF, 0x5A, 0x9E, 0xA0, 0xD4, 0x3F, 0xD5, 0xAF, 0xD6, 0xBE, 0xA7, 0x8C, 0xBF, 0xE4, 0x41, 0x8A,
0xFF, 0x00, 0x0F, 0xEA, 0x8F, 0xD2, 0x3C, 0x58, 0xFF, 0x00, 0x92, 0x23, 0x31, 0xFF, 0x00, 0x07,
0xFE, 0xDC, 0x8A, 0xD1, 0xA9, 0x77, 0x0A, 0x3B, 0xD4, 0xEB, 0x6B, 0xFD, 0xE7, 0xFC, 0x85, 0x45,
0x69, 0xFF, 0x00, 0x1F, 0x0B, 0xFE, 0x7B, 0x55, 0xEA, 0xFC, 0xFB, 0x80, 0xB8, 0x67, 0x2B, 0xCC,
0xF0, 0x13, 0xC4, 0xE3, 0x29, 0xF3, 0x49, 0x4D, 0xA5, 0xAB, 0x4A, 0xC9, 0x45, 0xEC, 0x9A, 0xEE,
0x7E, 0x1B, 0xE0, 0xA7, 0x87, 0x7C, 0x39, 0xC4, 0x59, 0x35, 0x5C, 0xC3, 0x34, 0xA1, 0xED, 0x2A,
0x46, 0xAB, 0x8A, 0xF7, 0xA4, 0x95, 0x94, 0x61, 0x25, 0xA4, 0x5A, 0xBE, 0xAD, 0xEE, 0x47, 0x1C,
0x11, 0xAF, 0xF0, 0xE7, 0xEB, 0x52, 0x51, 0x45, 0x7E, 0xB9, 0x83, 0xC0, 0x61, 0x70, 0x70, 0xF6,
0x78, 0x6A, 0x6A, 0x0B, 0xC9, 0x24, 0x7F, 0x51, 0x65, 0x79, 0x2E, 0x5B, 0x94, 0xD1, 0xF6, 0x39,
0x7D, 0x08, 0xD2, 0x8F, 0x68, 0xC5, 0x2F, 0xBE, 0xDB, 0xFC, 0xC2, 0x8A, 0x28, 0xAE, 0xB3, 0xD3,
0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80,
0x0A, 0xA7, 0x7C, 0x31, 0x3F, 0xD4, 0x55, 0xCA, 0xA9, 0x7E, 0x3F, 0x7C, 0x0F, 0xB5, 0x7C, 0x17,
0x89, 0x10, 0xE6, 0xC8, 0x9B, 0xB6, 0xD2, 0x8B, 0xFC, 0xD7, 0xEA, 0x7E, 0x29, 0xE3, 0xF5, 0x15,
0x3E, 0x0C, 0x94, 0xAD, 0xF0, 0xD4, 0x83, 0xF4, 0xDD, 0x7E, 0xB6, 0x1D, 0xA7, 0xFF, 0x00, 0x1F,
0xE1, 0x56, 0x6A, 0xAE, 0x9E, 0x7F, 0x78, 0xC3, 0xDA, 0xAD, 0x57, 0x57, 0x87, 0xF5, 0x14, 0xB8,
0x7A, 0x82, 0x5D, 0x1C, 0x97, 0xFE, 0x4C, 0xDF, 0xEA, 0x7A, 0x3E, 0x07, 0xD7, 0x8D, 0x4E, 0x04,
0xC2, 0x45, 0x3D, 0x62, 0xEA, 0x27, 0xEB, 0xED, 0x24, 0xFF, 0x00, 0x26, 0x82, 0x8A, 0x28, 0xAF,
0xB3, 0x3F, 0x5A, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0xCD, 0xAD, 0x2A, 0xCD, 0xAF, 0xC8, 0x7C, 0x56,
0xDB, 0x07, 0xFF, 0x00, 0x6F, 0xFF, 0x00, 0xED, 0x87, 0xF2, 0xCF, 0xD2, 0x5B, 0x6C, 0xAF, 0xFE,
0xE3, 0x7F, 0xEE, 0x22, 0xF5, 0xAF, 0xFC, 0x7B, 0xAF, 0xD2, 0xA4, 0xA8, 0xED, 0x7F, 0xE3, 0xDD,
0x7E, 0x95, 0x25, 0x7E, 0x95, 0x91, 0xFF, 0x00, 0xC8, 0xAB, 0x0D, 0xFF, 0x00, 0x5E, 0xE1, 0xFF,
0x00, 0xA4, 0xA3, 0xFA, 0x0B, 0x83, 0x7F, 0xE4, 0x9A, 0xCB, 0xBF, 0xEB, 0xCD, 0x2F, 0xFD, 0x22,
0x21, 0x45, 0x14, 0x57, 0xA8, 0x7D, 0x20, 0x54, 0x73, 0x4C, 0xB1, 0xF0, 0x79, 0x3E, 0x95, 0x25,
0x56, 0xBE, 0x43, 0x9F, 0x30, 0x7E, 0x35, 0xF3, 0x9C, 0x55, 0x8F, 0xC7, 0x60, 0x32, 0xAA, 0x98,
0x8C, 0x14, 0x6F, 0x38, 0xDB, 0xA5, 0xEC, 0xBA, 0xBB, 0x79, 0x7F, 0xC1, 0x3E, 0x0B, 0xC4, 0xBC,
0xEB, 0x39, 0xC9, 0x78, 0x6A, 0xB6, 0x3B, 0x27, 0x82, 0x95, 0x58, 0x5A, 0xF7, 0x57, 0xE5, 0x8D,
0xFD, 0xE9, 0x5B, 0xAD, 0xBF, 0x05, 0x77, 0xD0, 0x9A, 0x19, 0x16, 0x45, 0xCA, 0xFE, 0x22, 0x9F,
0x59, 0xF1, 0xBB, 0x23, 0x6E, 0x53, 0x56, 0xA2, 0xB8, 0x46, 0xE0, 0xFC, 0xA7, 0xDE, 0xBC, 0x2E,
0x17, 0xE3, 0xAC, 0x26, 0x61, 0x49, 0x51, 0xC7, 0x4D, 0x42, 0xB2, 0xEF, 0xA4, 0x65, 0xE9, 0xD9,
0xF7, 0x5F, 0x77, 0x97, 0xC5, 0x78, 0x73, 0xE3, 0x36, 0x5B, 0x9E, 0x61, 0xA3, 0x85, 0xCE, 0x2A,
0xC6, 0x8E, 0x2D, 0x69, 0x77, 0xEE, 0xC2, 0x7D, 0x9C, 0x5B, 0xD1, 0x3E, 0xF1, 0x7D, 0x7E, 0x1D,
0x34, 0x53, 0x51, 0x46, 0x68, 0xCD, 0x7D, 0xFF, 0x00, 0x32, 0x67, 0xEE, 0x0A, 0x51, 0x6A, 0xE9,
0x85, 0x14, 0x64, 0x7A, 0xD4, 0x32, 0x5C, 0x46, 0xBD, 0x3E, 0x63, 0xED, 0x5C, 0x18, 0xFC, 0xD7,
0x03, 0x97, 0xD3, 0xE7, 0xC5, 0x55, 0x50, 0x5E, 0x6F, 0x57, 0xE8, 0xB7, 0x7F, 0x23, 0xC5, 0xCE,
0xF8, 0x9B, 0x26, 0xC8, 0xE8, 0xFB, 0x6C, 0xCB, 0x13, 0x1A, 0x51, 0xE9, 0x77, 0xAB, 0xF4, 0x8E,
0xEF, 0xE4, 0x99, 0x0D, 0xF7, 0xFA, 0xE1, 0xF4, 0xA7, 0x69, 0xFF, 0x00, 0x79, 0xBE, 0x95, 0x14,
0xD2, 0x19, 0x1F, 0x71, 0x18, 0xA9, 0x74, 0xF1, 0xF3, 0x31, 0xAF, 0xC5, 0x72, 0x7C, 0x5D, 0x2C,
0x77, 0x1B, 0x47, 0x11, 0x87, 0xD6, 0x12, 0x94, 0x9A, 0xD2, 0xDA, 0x72, 0xB3, 0xF9, 0x13, 0x85,
0xB3, 0x3C, 0x36, 0x71, 0xE2, 0xFC, 0x31, 0xF8, 0x1B, 0xBA, 0x55, 0x2A, 0x4E, 0x49, 0xDA, 0xDA,
0x7B, 0x39, 0x6B, 0x6E, 0x9F, 0x32, 0xD5, 0x14, 0x53, 0x65, 0x71, 0x1A, 0xEE, 0x6A, 0xFD, 0xD6,
0xBD, 0x7A, 0x54, 0x29, 0x4A, 0xAD, 0x59, 0x72, 0xC6, 0x3A, 0xB6, 0xFA, 0x23, 0xFB, 0x3B, 0x19,
0x8C, 0xC3, 0xE0, 0xB0, 0xF3, 0xC4, 0xE2, 0x66, 0xA1, 0x4E, 0x0A, 0xF2, 0x6F, 0x44, 0x92, 0xEA,
0xC7, 0x51, 0x51, 0x43, 0x3A, 0x48, 0xD8, 0xE8, 0x7D, 0xEA, 0x5A, 0xC3, 0x03, 0x98, 0x61, 0x31,
0xF4, 0x7D, 0xB6, 0x16, 0xA2, 0x9C, 0x76, 0xBA, 0x38, 0xB2, 0x5C, 0xF7, 0x2D, 0xCE, 0xF0, 0xAB,
0x17, 0x96, 0xD6, 0x55, 0x69, 0xDE, 0xD7, 0x5D, 0xD7, 0x47, 0xD5, 0x3F, 0x26, 0x15, 0x05, 0xC5,
0xBE, 0xEF, 0x99, 0x38, 0x3E, 0x95, 0x3D, 0x15, 0x86, 0x6D, 0x93, 0xE0, 0xF3, 0x5C, 0x3B, 0xC3,
0xE2, 0xA1, 0x75, 0xD1, 0xF5, 0x4F, 0xBA, 0x7D, 0x3F, 0xAB, 0x9C, 0x7C, 0x4D, 0xC2, 0xB9, 0x57,
0x12, 0xE0, 0x1E, 0x0B, 0x32, 0xA7, 0xCD, 0x1D, 0xD3, 0xDA, 0x51, 0x7D, 0xE2, 0xFA, 0x3F, 0xC1,
0xEC, 0xD3, 0x46, 0x73, 0x02, 0xAD, 0x82, 0x30, 0x6A, 0x58, 0x2E, 0x19, 0x78, 0x7F, 0x99, 0x6A,
0xCC, 0xB1, 0x24, 0x83, 0xE6, 0x1C, 0xFA, 0xD5, 0x49, 0xA2, 0x68, 0xCF, 0x3C, 0x8F, 0x5A, 0xFC,
0x63, 0x31, 0xC8, 0x33, 0xAE, 0x14, 0xC4, 0x3C, 0x66, 0x0A, 0x6E, 0x54, 0xBB, 0xAE, 0xDD, 0xA7,
0x1F, 0xD7, 0x6F, 0x46, 0x7F, 0x25, 0xE7, 0xDC, 0x13, 0xC5, 0xDE, 0x1A, 0x63, 0x9E, 0x6B, 0x93,
0xD6, 0x73, 0xC3, 0xA7, 0xF1, 0x47, 0xB7, 0x6A, 0xB0, 0xDA, 0xDE, 0x7A, 0xC7, 0xAD, 0xE2, 0xEC,
0x8B, 0xA8, 0xCA, 0xCB, 0x95, 0x39, 0xA5, 0xAA, 0x10, 0x48, 0x63, 0x7C, 0xF6, 0xEE, 0x2A, 0xF2,
0x90, 0xCA, 0x08, 0xE8, 0x6B, 0xF4, 0xEE, 0x14, 0xE2, 0x8A, 0x59, 0xE6, 0x1D, 0xDD, 0x72, 0xD5,
0x8F, 0xC5, 0x1F, 0xD5, 0x79, 0x3F, 0xC3, 0xEE, 0x3F, 0xA2, 0x7C, 0x33, 0xF1, 0x1F, 0x0D, 0xC6,
0x58, 0x09, 0x39, 0x45, 0x43, 0x13, 0x4F, 0xE3, 0x82, 0xDA, 0xCF, 0x69, 0x46, 0xFF, 0x00, 0x65,
0xFD, 0xE9, 0xE8, 0xFA, 0x36, 0xB4, 0x51, 0x45, 0x7D, 0x61, 0xFA, 0x68, 0x55, 0x1B, 0xBF, 0xF8,
0xF8, 0x6A, 0xBD, 0x54, 0x6E, 0xFF, 0x00, 0xE3, 0xE1, 0xBF, 0xCF, 0x6A, 0xFC, 0xDB, 0xC5, 0x0F,
0xF9, 0x14, 0x52, 0xFF, 0x00, 0xAF, 0x8B, 0xFF, 0x00, 0x49, 0x91, 0xFC, 0xFF, 0x00, 0xF4, 0x8C,
0xFF, 0x00, 0x92, 0x5B, 0x0D, 0xFF, 0x00, 0x5F, 0xE3, 0xFF, 0x00, 0xA6, 0xEA, 0x0E, 0xB6, 0x85,
0x64, 0x42, 0x49, 0x23, 0x9E, 0xD5, 0x2F, 0xD9, 0x53, 0xFB, 0xCD, 0x45, 0x87, 0xFA, 0xA3, 0xFE,
0xF5, 0x4F, 0x5B, 0x70, 0xCF, 0x0B, 0xE4, 0xD8, 0xAC, 0x9F, 0x0F, 0x5A, 0xB6, 0x1D, 0x4A, 0x72,
0x8E, 0xAF, 0x5D, 0x75, 0xF5, 0x3A, 0xFC, 0x3B, 0xF0, 0xE7, 0x84, 0xF3, 0x1E, 0x14, 0xC0, 0xE2,
0xF1, 0x78, 0x18, 0x4E, 0xAC, 0xE1, 0x79, 0x49, 0xDE, 0xED, 0xDD, 0xF9, 0x90, 0xAD, 0xAC, 0x63,
0xA9, 0x63, 0xF8, 0xD4, 0x91, 0xA2, 0xA7, 0x0A, 0xB8, 0xA7, 0x51, 0x5F, 0x5D, 0x81, 0xC8, 0xF2,
0xCC, 0x0C, 0xB9, 0xB0, 0xD4, 0x23, 0x19, 0x77, 0x4B, 0x5F, 0xBF, 0x73, 0xF4, 0xFC, 0x9F, 0x83,
0x78, 0x77, 0x26, 0x9F, 0xB4, 0xCB, 0xF0, 0x54, 0xE9, 0xCF, 0xF9, 0x94, 0x57, 0x37, 0xFE, 0x04,
0xEE, 0xFF, 0x00, 0x10, 0xA2, 0x8A, 0x2B, 0xD5, 0x3E, 0x98, 0x2A, 0x0D, 0x43, 0xFD, 0x5A, 0xFD,
0x6A, 0x7A, 0x83, 0x50, 0xFF, 0x00, 0x56, 0xBF, 0x5A, 0xF9, 0x9E, 0x32, 0xFF, 0x00, 0x91, 0x06,
0x2B, 0xFC, 0x3F, 0xAA, 0x3F, 0x3C, 0xF1, 0x63, 0xFE, 0x48, 0x8C, 0xC7, 0xFC, 0x1F, 0xFB, 0x72,
0x20, 0xB4, 0xFF, 0x00, 0x8F, 0x85, 0xFF, 0x00, 0x3D, 0xAA, 0xF5, 0x51, 0xB4, 0xFF, 0x00, 0x8F,
0x85, 0xFF, 0x00, 0x3D, 0xAA, 0xF5, 0x7C, 0xEF, 0x85, 0xFF, 0x00, 0xF2, 0x27, 0xAB, 0xFF, 0x00,
0x5F, 0x1F, 0xFE, 0x93, 0x03, 0xE1, 0x3E, 0x8E, 0x7F, 0xF2, 0x4A, 0xE2, 0x3F, 0xEB, 0xFC, 0xBF,
0xF4, 0xDD, 0x30, 0xA2, 0x8A, 0x2B, 0xF4, 0x83, 0xF7, 0xE0, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A,
0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xAA, 0xBA,
0x80, 0xF9, 0x94, 0xD5, 0xAA, 0x86, 0xF5, 0x0B, 0x28, 0x23, 0xF8, 0x7B, 0x57, 0xCA, 0xF1, 0xB6,
0x16, 0xA6, 0x27, 0x21, 0xAF, 0x0A, 0x71, 0x72, 0x96, 0x8E, 0xCB, 0xCA, 0x49, 0xBF, 0xC2, 0xE7,
0xE6, 0xBE, 0x2F, 0xE5, 0xB5, 0xF3, 0x0E, 0x0A, 0xC6, 0xD1, 0xA1, 0x07, 0x39, 0xA5, 0x19, 0x24,
0xB5, 0x7E, 0xEC, 0xE2, 0xDE, 0x9E, 0x49, 0x36, 0x43, 0x62, 0x71, 0x36, 0x3D, 0x45, 0x5C, 0xAA,
0x96, 0x71, 0xB7, 0x9B, 0xB8, 0x8C, 0x01, 0xEB, 0x56, 0xEB, 0xCC, 0xF0, 0xE6, 0x95, 0x7A, 0x79,
0x2B, 0x55, 0xA2, 0xD7, 0xBE, 0xED, 0x7E, 0xD6, 0x5F, 0xAD, 0xCF, 0x9D, 0xF0, 0x0F, 0x0F, 0x8D,
0xA1, 0xC2, 0x2E, 0x38, 0xAA, 0x6E, 0x0B, 0xDA, 0xCD, 0xC6, 0xEA, 0xD7, 0x8D, 0xA3, 0xAF, 0xA7,
0x37, 0x30, 0x51, 0x45, 0x15, 0xF7, 0xA7, 0xED, 0x81, 0x45, 0x14, 0x50, 0x01, 0x59, 0xB5, 0xA5,
0x54, 0x9E, 0x09, 0x04, 0x98, 0x0A, 0x4F, 0xA1, 0xAF, 0xCB, 0x7C, 0x4C, 0xCB, 0xF1, 0x58, 0xAA,
0x78, 0x59, 0xD0, 0xA6, 0xE4, 0xA2, 0xE4, 0x9D, 0x95, 0xF7, 0xE5, 0xB6, 0xDE, 0x8C, 0xFE, 0x6E,
0xFA, 0x43, 0x64, 0x79, 0x96, 0x63, 0x47, 0x2E, 0xAB, 0x82, 0xA1, 0x2A, 0x8A, 0x0E, 0xA2, 0x7C,
0xA9, 0xC9, 0xA7, 0x2E, 0x4E, 0x5D, 0x16, 0xBA, 0xF2, 0xB2, 0xCD, 0xAF, 0xFC, 0x7B, 0xAF, 0xD2,
0xA4, 0xA6, 0xC2, 0xBB, 0x23, 0x55, 0xF4, 0x14, 0xEA, 0xFD, 0x0B, 0x29, 0xA3, 0x3A, 0x39, 0x7D,
0x0A, 0x55, 0x15, 0xA5, 0x18, 0x45, 0x3F, 0x54, 0x92, 0x67, 0xEE, 0xBC, 0x33, 0x85, 0xAD, 0x84,
0xC8, 0xB0, 0x58, 0x6A, 0xCA, 0xD3, 0x85, 0x2A, 0x71, 0x6B, 0xB3, 0x50, 0x49, 0xAF, 0xBC, 0x28,
0xA2, 0x8A, 0xF4, 0x0F, 0x70, 0x28, 0xEB, 0xC1, 0xA2, 0x8A, 0x4D, 0x26, 0xAC, 0xC5, 0x28, 0xA9,
0x26, 0x9A, 0xBA, 0x65, 0x6B, 0x8B, 0x6F, 0xE2, 0x8F, 0xF2, 0xAA, 0xEC, 0xAC, 0xA7, 0x0C, 0x31,
0x5A, 0x34, 0x8C, 0xA1, 0xB8, 0x60, 0x0F, 0xD6, 0xBF, 0x39, 0xCE, 0xFC, 0x38, 0xC0, 0xE3, 0x27,
0x2A, 0xD8, 0x39, 0x7B, 0x29, 0x3E, 0x96, 0xBC, 0x7E, 0xED, 0xD7, 0xCB, 0x4F, 0x23, 0xF0, 0x2E,
0x2F, 0xF0, 0x0F, 0x27, 0xCD, 0x6B, 0x4F, 0x15, 0x95, 0x54, 0xFA, 0xBD, 0x49, 0x6B, 0xCB, 0x6B,
0xD3, 0xBF, 0x92, 0xD1, 0xC6, 0xFE, 0x4D, 0xAE, 0xD1, 0x33, 0xA8, 0xCD, 0x5E, 0xF2, 0x62, 0xFE,
0xE0, 0xA3, 0xC9, 0x8B, 0xFB, 0x82, 0xBE, 0x53, 0xFE, 0x21, 0x86, 0x6B, 0xD2, 0xB4, 0x3E, 0xF9,
0x7F, 0xF2, 0x27, 0xE6, 0xAF, 0xE8, 0xE9, 0xC4, 0xC9, 0xE9, 0x8B, 0xA3, 0x6F, 0x59, 0xFF, 0x00,
0xF2, 0x05, 0x1A, 0x55, 0x56, 0x63, 0x85, 0x19, 0xAB, 0xBE, 0x4C, 0x5F, 0xDC, 0x14, 0xF5, 0x01,
0x46, 0x00, 0xC5, 0x75, 0xE0, 0xFC, 0x2E, 0xC4, 0xBA, 0x9F, 0xED, 0x78, 0x84, 0xA3, 0xFD, 0xDB,
0xB7, 0xF8, 0xA5, 0x6F, 0xC4, 0xF4, 0xF2, 0xAF, 0xA3, 0x86, 0x61, 0x3C, 0x42, 0x79, 0xA6, 0x36,
0x2A, 0x9F, 0xFD, 0x3B, 0x4E, 0x52, 0x7F, 0x39, 0x28, 0xA5, 0xEB, 0x67, 0xE8, 0x56, 0x8E, 0xD5,
0x8F, 0x2E, 0x71, 0xEC, 0x2A, 0xC4, 0x6A, 0xA8, 0xB8, 0x51, 0x4E, 0xA2, 0xBF, 0x48, 0xC9, 0xB8,
0x67, 0x2C, 0xCA, 0x15, 0xF0, 0xB4, 0xFD, 0xEE, 0xB2, 0x7A, 0xCB, 0xEF, 0xE9, 0xF2, 0xB1, 0xFB,
0xFF, 0x00, 0x09, 0xF8, 0x7B, 0xC3, 0xDC, 0x2C, 0x9C, 0xB2, 0xEA, 0x3F, 0xBC, 0x6A, 0xCE, 0x72,
0x7C, 0xD3, 0x6B, 0xD7, 0xA2, 0xEE, 0xA2, 0x92, 0xF2, 0x0A, 0x8A, 0xF1, 0x0B, 0xC3, 0xC7, 0xF0,
0xF3, 0x52, 0xD1, 0x5E, 0x8E, 0x65, 0x81, 0xA7, 0x8F, 0xC1, 0xD4, 0xC2, 0xD4, 0xF8, 0x66, 0xAD,
0xFF, 0x00, 0x07, 0xE4, 0x7B, 0xDC, 0x41, 0x92, 0xD0, 0xCE, 0xF2, 0xAC, 0x46, 0x5B, 0x88, 0x76,
0x85, 0x58, 0xB8, 0xB6, 0xB7, 0x57, 0xD9, 0xAF, 0x47, 0xA9, 0x9C, 0xA4, 0x86, 0x04, 0x75, 0x15,
0x7A, 0x19, 0x04, 0x89, 0x91, 0xD7, 0xB8, 0xAA, 0xF7, 0x50, 0x95, 0x6D, 0xEA, 0x3E, 0x53, 0xD7,
0xDA, 0xA2, 0x8D, 0xD9, 0x1B, 0x72, 0x9A, 0xFC, 0x3F, 0x27, 0xCC, 0xF1, 0xBC, 0x1F, 0x9A, 0x4F,
0x0B, 0x8B, 0x8B, 0x74, 0xE5, 0xBA, 0xEE, 0xBA, 0x4E, 0x3F, 0xD6, 0xBB, 0x3D, 0x56, 0x9F, 0xC7,
0x3C, 0x2D, 0xC4, 0x39, 0xBF, 0x85, 0x7C, 0x47, 0x57, 0x2E, 0xCD, 0x29, 0xB7, 0x87, 0x9B, 0xF7,
0x92, 0xEA, 0xBE, 0xCD, 0x5A, 0x7D, 0x1E, 0x9D, 0x3A, 0xAF, 0x75, 0xD9, 0xAD, 0x34, 0x28, 0xA8,
0x05, 0xD2, 0x63, 0x95, 0x6A, 0x3E, 0xD4, 0x9F, 0xDD, 0x6A, 0xFD, 0x65, 0x71, 0x8E, 0x40, 0xD5,
0xFE, 0xB5, 0x1F, 0xC7, 0xFC, 0x8F, 0xE9, 0xC8, 0xF8, 0xAD, 0xC1, 0x32, 0x8A, 0x97, 0xF6, 0x8C,
0x35, 0xF5, 0xFC, 0xAC, 0x4F, 0x4C, 0x98, 0xA0, 0x8C, 0xEF, 0xE9, 0x50, 0x3D, 0xD1, 0xFE, 0x15,
0xFC, 0x4D, 0x40, 0xEC, 0xCE, 0xD9, 0x63, 0x9A, 0xF9, 0x8C, 0xFB, 0xC4, 0x5C, 0xBA, 0x9D, 0x09,
0x52, 0xC1, 0x2F, 0x6B, 0x26, 0xAD, 0xAA, 0x6A, 0x3F, 0x3B, 0xD9, 0xBF, 0x4D, 0xBC, 0xCF, 0xCE,
0xF8, 0xD3, 0xC7, 0x8C, 0x82, 0x86, 0x0E, 0x78, 0x6C, 0x9E, 0x3F, 0x59, 0xA9, 0x34, 0xD5, 0xE5,
0x16, 0xA9, 0xA4, 0xF4, 0x77, 0x52, 0x49, 0xCB, 0xD1, 0x2B, 0x3F, 0xE6, 0x10, 0xE3, 0x3C, 0x55,
0xDB, 0x3C, 0xFD, 0x9C, 0x66, 0xAB, 0xC1, 0x0B, 0x49, 0xC9, 0xE1, 0x7D, 0x6A, 0xE2, 0x80, 0xAB,
0x81, 0xD0, 0x57, 0x97, 0xE1, 0xBE, 0x47, 0x8C, 0xA7, 0x89, 0x9E, 0x63, 0x56, 0x3C, 0xB0, 0x71,
0xB4, 0x7A, 0x73, 0x5D, 0xA7, 0x74, 0xBB, 0x2B, 0x7C, 0xFA, 0x1F, 0x37, 0xE0, 0x0F, 0x07, 0xE6,
0xB4, 0x31, 0xF5, 0x73, 0xEC, 0x55, 0x37, 0x4E, 0x8C, 0xA0, 0xE3, 0x04, 0xD5, 0xB9, 0xF9, 0x9A,
0x77, 0x4B, 0xF9, 0x55, 0xB4, 0x7D, 0x6E, 0xAD, 0xB0, 0xB4, 0x51, 0x45, 0x7E, 0xC0, 0x7F, 0x55,
0x05, 0x52, 0xBC, 0x18, 0xB8, 0x6A, 0xBB, 0x54, 0xEF, 0x7F, 0xD7, 0x9F, 0xA5, 0x7E, 0x77, 0xE2,
0x6C, 0x14, 0xB2, 0x58, 0x3E, 0xD5, 0x17, 0xE5, 0x23, 0xF0, 0x7F, 0xA4, 0x3D, 0x25, 0x3E, 0x12,
0xA5, 0x27, 0xF6, 0x6B, 0x41, 0xFF, 0x00, 0xE4, 0xB3, 0x5F, 0xA9, 0x26, 0x9E, 0x7E, 0x56, 0x5F,
0x7C, 0xD5, 0x8A, 0xAD, 0xA7, 0xFF, 0x00, 0x17, 0xE1, 0x56, 0x6B, 0xD7, 0xE0, 0x5A, 0x92, 0x9F,
0x0F, 0x61, 0x9C, 0xBF, 0xBC, 0xBE, 0xE9, 0x49, 0x1F, 0x53, 0xE0, 0xD5, 0x69, 0xD5, 0xE0, 0x4C,
0x04, 0xA6, 0xF5, 0x4A, 0x6B, 0xE4, 0xAA, 0x4D, 0x2F, 0xC1, 0x05, 0x14, 0x51, 0x5F, 0x5A, 0x7E,
0x9E, 0x14, 0x51, 0x45, 0x00, 0x15, 0x06, 0xA1, 0xFE, 0xA9, 0x7E, 0xB5, 0x3D, 0x36, 0x44, 0x12,
0x2E, 0xD6, 0xAF, 0x1F, 0x88, 0x30, 0x15, 0x73, 0x0C, 0xAE, 0xBE, 0x16, 0x97, 0xC5, 0x25, 0xA5,
0xFB, 0xEE, 0x7C, 0xAF, 0x1C, 0x64, 0xB8, 0x8C, 0xF3, 0x86, 0xF1, 0x99, 0x76, 0x19, 0xA5, 0x52,
0xA4, 0x2D, 0x1B, 0xED, 0x7B, 0xA6, 0x97, 0xCE, 0xD6, 0x29, 0xDA, 0x7F, 0xC7, 0xC2, 0xD5, 0xEA,
0x8A, 0x18, 0x16, 0x36, 0xDD, 0x9C, 0x9A, 0x96, 0xBC, 0x6E, 0x08, 0xC9, 0x71, 0x59, 0x46, 0x59,
0x2A, 0x38, 0xA4, 0x94, 0xE5, 0x27, 0x2B, 0x27, 0x7B, 0x68, 0x97, 0xE8, 0x7C, 0x9F, 0x83, 0xDC,
0x23, 0x99, 0x70, 0xBF, 0x0F, 0x4F, 0x09, 0x99, 0x24, 0xAA, 0xCE, 0xA4, 0xA7, 0x64, 0xD3, 0xB2,
0x71, 0x8C, 0x52, 0x6D, 0x69, 0x7F, 0x76, 0xFA, 0x77, 0x0A, 0x28, 0xA2, 0xBE, 0xC4, 0xFD, 0x58,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x2A, 0xB5, 0xC5, 0xB9, 0xDD, 0xBA, 0x3F, 0xCA,
0xAC, 0xD1, 0x5E, 0x3E, 0x75, 0x91, 0x60, 0x73, 0x8A, 0x1E, 0xC7, 0x15, 0x1D, 0xB6, 0x6B, 0x46,
0xBD, 0x1F, 0xE9, 0xB1, 0xF2, 0x9C, 0x5D, 0xC1, 0x79, 0x3F, 0x15, 0xE0, 0x96, 0x17, 0x32, 0x85,
0xED, 0xAC, 0x64, 0xB4, 0x94, 0x5F, 0xF7, 0x5E, 0xBB, 0xF5, 0x4D, 0x34, 0xFA, 0xAD, 0x11, 0x47,
0xC9, 0x97, 0xFB, 0x86, 0x8F, 0x26, 0x5F, 0xEE, 0x1A, 0xBD, 0x45, 0x7C, 0x67, 0xFC, 0x42, 0xFC,
0xAB, 0xFE, 0x7F, 0x54, 0xFB, 0xE3, 0xFF, 0x00, 0xC8, 0x9F, 0x93, 0x7F, 0xC4, 0xB8, 0xF0, 0xD7,
0xFD, 0x05, 0x56, 0xFB, 0xE1, 0xFF, 0x00, 0xC8, 0x14, 0xD6, 0xDA, 0x53, 0xD4, 0x01, 0xF5, 0x35,
0x34, 0x56, 0xC8, 0xBC, 0xB7, 0xCC, 0x6A, 0x6A, 0x2B, 0xD9, 0xCB, 0x78, 0x0F, 0x24, 0xC0, 0xCD,
0x54, 0xE4, 0x73, 0x92, 0xDB, 0x9D, 0xDF, 0xF0, 0x49, 0x2F, 0xBD, 0x1F, 0x57, 0xC3, 0xFE, 0x0A,
0xF0, 0x86, 0x4D, 0x5A, 0x35, 0xD5, 0x17, 0x5A, 0x6B, 0x67, 0x55, 0xF3, 0x25, 0xFF, 0x00, 0x6E,
0xA5, 0x18, 0xFD, 0xE9, 0x85, 0x14, 0x51, 0x5F, 0x64, 0x7E, 0xB2, 0x95, 0x95, 0x90, 0x51, 0x45,
0x14, 0x00, 0x55, 0x5B, 0xE4, 0x6F, 0x33, 0x70, 0x1C, 0x62, 0xAD, 0x51, 0x5E, 0x27, 0x10, 0x64,
0x94, 0xB3, 0x9C, 0x0B, 0xC2, 0xD4, 0x93, 0x8E, 0xA9, 0xA6, 0xBA, 0x35, 0xE4, 0x7C, 0x7F, 0x1C,
0x70, 0x7E, 0x1B, 0x8B, 0x72, 0x79, 0x65, 0xB5, 0xEA, 0x38, 0x6A, 0xA4, 0xA4, 0x95, 0xEC, 0xD7,
0x97, 0x55, 0x66, 0xD6, 0xE8, 0x82, 0xC5, 0x19, 0x55, 0x89, 0x18, 0xCF, 0x4A, 0x9E, 0x8A, 0x2B,
0xA3, 0x27, 0xCA, 0xE9, 0xE5, 0x78, 0x0A, 0x78, 0x3A, 0x6E, 0xEA, 0x1D, 0x5F, 0x5B, 0xB6, 0xDF,
0xE2, 0xCE, 0xFE, 0x14, 0xE1, 0xDC, 0x3F, 0x0E, 0x64, 0xB4, 0x32, 0xAC, 0x3C, 0x9C, 0xA3, 0x4D,
0x3D, 0x5E, 0xED, 0xB6, 0xE4, 0xDF, 0xCD, 0xB7, 0xA7, 0x40, 0xA2, 0x8A, 0x2B, 0xD3, 0x3E, 0x84,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00,
0x28, 0xA2, 0x8C, 0xE3, 0xAD, 0x26, 0xD2, 0x57, 0x62, 0x94, 0x94, 0x55, 0xDB, 0xD0, 0x28, 0xA2,
0x8A, 0x63, 0xDC, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28,
0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x98, 0xD3, 0x44,
0x0E, 0x0B, 0x8A, 0xE6, 0xC4, 0xE3, 0x30, 0xD8, 0x58, 0xA9, 0x62, 0x2A, 0x46, 0x09, 0xFF, 0x00,
0x33, 0x4B, 0xF3, 0x3C, 0xFC, 0xC3, 0x36, 0xCB, 0xF2, 0xE8, 0x29, 0xE3, 0xAB, 0xC2, 0x92, 0x7B,
0x39, 0xC9, 0x45, 0x3F, 0x4B, 0xB4, 0x3E, 0x8A, 0x62, 0xCB, 0x1B, 0x1C, 0x2B, 0x0C, 0xD3, 0xEA,
0xB0, 0xF8, 0xAC, 0x3E, 0x26, 0x1C, 0xF4, 0x26, 0xA7, 0x1E, 0xE9, 0xA6, 0xBF, 0x02, 0xF0, 0x39,
0x96, 0x0B, 0x30, 0xA5, 0xED, 0x70, 0x75, 0xA3, 0x52, 0x1B, 0x5E, 0x32, 0x52, 0x57, 0xF5, 0x4D,
0xA0, 0xA2, 0x8A, 0x2B, 0x73, 0xB4, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2,
0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xA2, 0x8A, 0x00, 0x28, 0xAA, 0x6D, 0x71, 0x27, 0x99,
0x90, 0x78, 0xF4, 0xAB, 0x50, 0xB8, 0x78, 0xC3, 0x0A, 0xF9, 0xAC, 0x97, 0x8A, 0xF2, 0xEC, 0xDF,
0x11, 0x53, 0x0F, 0x87, 0x6F, 0x9A, 0x3D, 0xD5, 0xAE, 0xB6, 0xBA, 0xFE, 0x93, 0x3F, 0x3D, 0xE1,
0x1F, 0x13, 0x32, 0x1E, 0x29, 0xC7, 0x57, 0xC1, 0x60, 0x1C, 0x95, 0x4A, 0x7A, 0xFB, 0xCA, 0xDC,
0xD1, 0x4E, 0xDC, 0xD1, 0xD5, 0xE9, 0x7B, 0x6F, 0x67, 0xAA, 0xD0, 0x75, 0x14, 0x51, 0x5F, 0x4A,
0x7E, 0x84, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51,
0x45, 0x00, 0x14, 0x52, 0x48, 0xC1, 0x14, 0xB1, 0xED, 0x54, 0x66, 0x95, 0xA4, 0x6C, 0x93, 0xC7,
0x61, 0x5F, 0x29, 0xC4, 0xDC, 0x59, 0x85, 0xC8, 0xA1, 0x18, 0xCA, 0x3C, 0xF5, 0x25, 0xB4, 0x53,
0xB6, 0x9D, 0xDB, 0xD6, 0xCB, 0xE5, 0xA9, 0xF9, 0xA7, 0x88, 0x5E, 0x27, 0x65, 0xBC, 0x1B, 0x4E,
0x10, 0xA9, 0x0F, 0x6B, 0x5E, 0x7A, 0xC6, 0x9A, 0x76, 0xD3, 0xF9, 0xA4, 0xEC, 0xEC, 0xBA, 0x2D,
0x1B, 0x6F, 0x65, 0xA3, 0x6A, 0xFE, 0x68, 0xAC, 0xDA, 0x55, 0x62, 0x3A, 0x12, 0x3E, 0x95, 0xF1,
0xB0, 0xF1, 0x56, 0x2E, 0x4B, 0x9F, 0x09, 0x65, 0xE5, 0x3B, 0xFF, 0x00, 0xED, 0xA8, 0xFC, 0x9A,
0x8F, 0xD2, 0x5A, 0x0E, 0x69, 0x55, 0xCA, 0xDA, 0x8F, 0x5B, 0x55, 0xBB, 0xFB, 0x9D, 0x35, 0xF9,
0x9A, 0x34, 0x55, 0x48, 0x6E, 0x59, 0x78, 0x7F, 0x98, 0x55, 0x98, 0xDD, 0x5D, 0x72, 0xA7, 0x35,
0xF7, 0x79, 0x1F, 0x14, 0x65, 0xB9, 0xC4, 0x7F, 0xD9, 0xE7, 0x69, 0xF5, 0x8B, 0xD2, 0x5F, 0xF0,
0x7D, 0x55, 0xCF, 0xDA, 0x78, 0x3F, 0xC4, 0x6E, 0x1F, 0xE2, 0xB8, 0x5B, 0x03, 0x56, 0xD5, 0x56,
0xF4, 0xE5, 0xA4, 0xD7, 0xCA, 0xED, 0x49, 0x79, 0xC5, 0xBF, 0x3B, 0x0E, 0xA0, 0x90, 0x06, 0x4D,
0x15, 0x5A, 0xF9, 0xCE, 0x42, 0x0F, 0xA9, 0xAE, 0x8C, 0xFF, 0x00, 0x39, 0xA7, 0x93, 0xE5, 0xF3,
0xC5, 0xCD, 0x5D, 0xAD, 0x12, 0xEE, 0xDE, 0xCB, 0xFC, 0xFC, 0x8E, 0xEE, 0x37, 0xE2, 0xBA, 0x1C,
0x2D, 0x91, 0xD5, 0xCC, 0xEA, 0xC7, 0x99, 0xC6, 0xCA, 0x31, 0xDB, 0x9A, 0x4F, 0x44, 0xAF, 0xD1,
0x75, 0x7E, 0x49, 0x8B, 0x2D, 0xC8, 0x07, 0x08, 0x33, 0xEE, 0x6A, 0x3F, 0xB5, 0x49, 0xE8, 0xBF,
0x95, 0x47, 0x1A, 0xB3, 0xB6, 0x14, 0x54, 0xDF, 0x65, 0x7F, 0xEF, 0x2D, 0x7E, 0x3F, 0x47, 0x38,
0xE3, 0x1C, 0xE6, 0x52, 0xC4, 0x61, 0x1C, 0xB9, 0x2F, 0xF6, 0x52, 0x51, 0x5E, 0x4A, 0xFB, 0xFD,
0xED, 0x9F, 0xCA, 0xF8, 0x5E, 0x2B, 0xF1, 0x5F, 0x8B, 0x27, 0x53, 0x1D, 0x95, 0xB9, 0xFB, 0x2B,
0xDA, 0xD4, 0xD4, 0x63, 0x05, 0xE4, 0x9C, 0xB7, 0xB7, 0x5D, 0x5B, 0xEE, 0x20, 0xBA, 0x7E, 0xEA,
0xB5, 0x3C, 0x33, 0x2C, 0x9C, 0x74, 0x6F, 0x4A, 0xAF, 0x25, 0xBB, 0xAA, 0x96, 0xC8, 0x38, 0xA8,
0x94, 0x95, 0x60, 0x47, 0x51, 0x5A, 0xD1, 0xE2, 0x9E, 0x24, 0xC8, 0xF1, 0x90, 0x8E, 0x69, 0x77,
0x07, 0xBA, 0x95, 0xB6, 0xEF, 0x16, 0xBA, 0xAF, 0x5B, 0x77, 0x37, 0xC2, 0x78, 0x91, 0xC7, 0xFC,
0x1D, 0x9B, 0x52, 0xA7, 0xC4, 0x6A, 0x53, 0xA7, 0x3D, 0x5C, 0x66, 0xA3, 0x77, 0x1B, 0xD9, 0xB8,
0x49, 0x75, 0x5D, 0xAE, 0xD7, 0x74, 0x68, 0xD1, 0x48, 0xA7, 0x2A, 0x0F, 0xA8, 0xA5, 0xAF, 0xDC,
0xE1, 0x38, 0xCE, 0x2A, 0x51, 0xD9, 0x9F, 0xD9, 0x54, 0xAA, 0xC2, 0xAD, 0x38, 0xD4, 0x83, 0xBC,
0x5A, 0x4D, 0x7A, 0x30, 0xA2, 0xAA, 0xC9, 0x72, 0xDB, 0xFE, 0x50, 0x31, 0x53, 0x5B, 0xCA, 0x24,
0x5F, 0x42, 0x3A, 0x8A, 0xF9, 0xBC, 0xB7, 0x8B, 0xF2, 0x8C, 0xC7, 0x18, 0xF0, 0x94, 0x2A, 0x7B,
0xFD, 0x2E, 0xAC, 0xA5, 0x6E, 0xCF, 0xAF, 0xE0, 0x7E, 0x7F, 0x90, 0x78, 0xA5, 0xC2, 0xF9, 0xEE,
0x69, 0x2C, 0xAF, 0x07, 0x59, 0xFB, 0x55, 0x7B, 0x5D, 0x59, 0x4E, 0xDB, 0xF2, 0x3E, 0xBD, 0xF5,
0xB3, 0x6B, 0x54, 0x89, 0x2A, 0x95, 0xD4, 0x85, 0xE4, 0x38, 0x3F, 0x28, 0xE9, 0x53, 0x5E, 0x4B,
0xB5, 0x76, 0x29, 0xE4, 0xF5, 0xAA, 0x95, 0xF0, 0x1E, 0x23, 0x71, 0x1C, 0x6A, 0x49, 0x65, 0x78,
0x77, 0xA4, 0x5D, 0xE6, 0xD7, 0x7E, 0x91, 0xF9, 0x6E, 0xFC, 0xED, 0xD8, 0xFC, 0x47, 0xC7, 0xCE,
0x3E, 0x86, 0x22, 0xA2, 0xE1, 0xCC, 0x0C, 0xF4, 0x83, 0xE6, 0xAA, 0xD3, 0xD1, 0xBB, 0x69, 0x0F,
0x3B, 0x5E, 0xF2, 0xF3, 0xB2, 0xDD, 0x32, 0xD5, 0x8B, 0x12, 0xAC, 0xA4, 0xF4, 0xE9, 0x56, 0x2A,
0xBE, 0x9F, 0xD1, 0xBF, 0x0A, 0x96, 0xE2, 0x4F, 0x2E, 0x3C, 0xF7, 0xED, 0x5F, 0x65, 0xC2, 0x98,
0xF8, 0x61, 0xF8, 0x5E, 0x8E, 0x2B, 0x15, 0x3F, 0x76, 0x2A, 0x57, 0x6F, 0xB2, 0x93, 0x4B, 0xFC,
0x91, 0xFA, 0xC7, 0x86, 0x79, 0xD5, 0x2C, 0x0F, 0x87, 0x38, 0x5C, 0xC7, 0x31, 0xAB, 0xEE, 0x53,
0x84, 0xDC, 0xA4, 0xF5, 0xF7, 0x63, 0x39, 0xA4, 0xBC, 0xF4, 0x49, 0x25, 0xE8, 0x90, 0xE6, 0x65,
0x5F, 0xBC, 0xC0, 0x7D, 0x4D, 0x27, 0x99, 0x1F, 0xF7, 0xD7, 0xF3, 0xAA, 0x0C, 0x4B, 0x36, 0x49,
0xC9, 0xA4, 0xAF, 0x8C, 0xAD, 0xE2, 0x9D, 0x7F, 0x68, 0xFD, 0x96, 0x19, 0x72, 0xF4, 0xBB, 0x77,
0xF9, 0xD8, 0xFC, 0x9B, 0x17, 0xF4, 0x92, 0xC6, 0x7B, 0x79, 0x7D, 0x5B, 0x01, 0x1F, 0x67, 0x7D,
0x39, 0xA4, 0xF9, 0xAD, 0xE7, 0x65, 0x6B, 0xF9, 0x2D, 0xBB, 0xB3, 0x43, 0xCC, 0x8F, 0xFB, 0xEB,
0xF9, 0xD2, 0xAB, 0x2B, 0x7D, 0xD6, 0x07, 0xE8, 0x6B, 0x3A, 0xA4, 0xB7, 0xDD, 0xE7, 0x2E, 0xDF,
0x5A, 0xDF, 0x2F, 0xF1, 0x2F, 0x15, 0x88, 0xC5, 0xD3, 0xA3, 0x2C, 0x32, 0xB4, 0x9A, 0x5A, 0x37,
0x7D, 0x7B, 0x1D, 0xB9, 0x1F, 0xD2, 0x13, 0x31, 0xC7, 0xE6, 0x54, 0x30, 0x95, 0x32, 0xF8, 0xB5,
0x52, 0x4A, 0x3E, 0xEC, 0xA4, 0xE5, 0xAB, 0xB6, 0x89, 0xAD, 0x6D, 0xD8, 0xBD, 0x45, 0x14, 0xD9,
0x18, 0x24, 0x65, 0x8F, 0x6A, 0xFD, 0x6E, 0xB5, 0x68, 0x51, 0xA5, 0x2A, 0xB5, 0x1D, 0xA3, 0x14,
0xDB, 0x7D, 0x92, 0xD5, 0x9F, 0xD3, 0xD8, 0xAC, 0x55, 0x1C, 0x26, 0x1E, 0xA6, 0x22, 0xBC, 0xB9,
0x61, 0x04, 0xE5, 0x27, 0xD9, 0x25, 0x76, 0xFE, 0x48, 0x73, 0x10, 0x39, 0x27, 0x15, 0x1B, 0x4F,
0x10, 0xFE, 0x2C, 0xFD, 0x2A, 0x9C, 0x92, 0x33, 0xB6, 0x58, 0xFE, 0x14, 0x8A, 0x09, 0xE8, 0x09,
0xFA, 0x57, 0xE3, 0xF9, 0x87, 0x89, 0xB8, 0x9A, 0x95, 0x5D, 0x3C, 0xBA, 0x8A, 0xB7, 0x47, 0x2B,
0xB6, 0xFE, 0x4A, 0xD6, 0xFC, 0x4F, 0xE5, 0x7C, 0xF7, 0xE9, 0x0F, 0x98, 0x57, 0xC4, 0xBA, 0x19,
0x0E, 0x11, 0x72, 0xDE, 0xC9, 0xCD, 0x39, 0x4A, 0x5E, 0x6A, 0x31, 0x6A, 0xDE, 0x97, 0x65, 0xBF,
0xB4, 0xC5, 0xEF, 0xF9, 0x53, 0xE3, 0x95, 0x1C, 0xE1, 0x4F, 0x3E, 0x86, 0xA9, 0x79, 0x6F, 0xFD,
0xC6, 0xFC, 0xA9, 0xAA, 0x48, 0x39, 0x15, 0xC7, 0x4B, 0xC4, 0x5C, 0xEF, 0x0F, 0x5A, 0x3F, 0x5C,
0xA2, 0xB9, 0x3A, 0xAE, 0x57, 0x17, 0x6F, 0x26, 0xD9, 0xE4, 0xE1, 0xFC, 0x79, 0xE2, 0xFC, 0x06,
0x2E, 0x9B, 0xCD, 0x70, 0xB1, 0xF6, 0x4D, 0xEA, 0xB9, 0x25, 0x09, 0x35, 0xD7, 0x95, 0xB7, 0xBA,
0xF4, 0x68, 0xD2, 0xA2, 0x92, 0x33, 0xBA, 0x35, 0x3E, 0xA2, 0x96, 0xBF, 0x6C, 0xA5, 0x52, 0x35,
0x69, 0xC6, 0xA4, 0x76, 0x6A, 0xFF, 0x00, 0x79, 0xFD, 0x81, 0x87, 0xAF, 0x0C, 0x45, 0x18, 0x56,
0xA7, 0xF0, 0xC9, 0x26, 0xBD, 0x1A, 0xBA, 0x21, 0xBC, 0x72, 0xB1, 0x60, 0x7F, 0x11, 0xAA, 0x75,
0x63, 0x50, 0x3F, 0x3A, 0x8F, 0x6A, 0x6D, 0x88, 0xCC, 0xD9, 0xF4, 0x15, 0xF8, 0x5F, 0x15, 0x46,
0xA6, 0x73, 0xC5, 0x6B, 0x02, 0xA5, 0x64, 0x9C, 0x60, 0xBA, 0xDB, 0x4B, 0xB7, 0x6F, 0x9B, 0x3F,
0x8C, 0x7C, 0x4A, 0xA7, 0x88, 0xE2, 0xCF, 0x13, 0x16, 0x4C, 0xAA, 0x72, 0xC5, 0x38, 0x52, 0x8B,
0xDF, 0x95, 0x59, 0x4A, 0x6E, 0xD7, 0x57, 0x77, 0x6F, 0xAA, 0xBD, 0x96, 0xA4, 0x3D, 0x2A, 0xF5,
0xAC, 0x9B, 0xE3, 0xE7, 0xA8, 0xE0, 0xD4, 0x17, 0xC9, 0x87, 0x0E, 0x3F, 0x8B, 0xAD, 0x25, 0x9B,
0xED, 0x9B, 0x07, 0xA3, 0x71, 0x47, 0x0F, 0xD5, 0xAD, 0xC3, 0x5C, 0x4C, 0xF0, 0x15, 0xA5, 0xEE,
0x49, 0xF2, 0xBE, 0xCE, 0xFF, 0x00, 0x04, 0xAD, 0xF7, 0x7A, 0x5D, 0x8F, 0x81, 0xB1, 0x18, 0xBF,
0x0F, 0xBC, 0x42, 0x96, 0x4B, 0x8B, 0xA9, 0x7A, 0x53, 0x97, 0xB3, 0x93, 0xD9, 0x49, 0x4B, 0x5A,
0x73, 0xB6, 0xB6, 0xD5, 0xAE, 0xAE, 0xC9, 0xC9, 0x5C, 0xB9, 0x45, 0x14, 0x57, 0xEF, 0x07, 0xF6,
0x98, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14, 0x00, 0x51, 0x45, 0x14,
0x00, 0xC9, 0x25, 0x44, 0x38, 0x63, 0x4E, 0x52, 0x0A, 0xE4, 0x1A, 0xAD, 0x75, 0x13, 0x99, 0x37,
0x01, 0x90, 0x6A, 0x6B, 0x74, 0x29, 0x10, 0x53, 0x5F, 0x25, 0x95, 0xE7, 0x19, 0xAE, 0x27, 0x39,
0xAF, 0x84, 0xC4, 0x61, 0xF9, 0x68, 0xC2, 0xFC, 0xB2, 0xB3, 0xEF, 0xA6, 0xBB, 0x3B, 0xAD, 0x74,
0xD8, 0xFC, 0xBF, 0x86, 0xF8, 0xAB, 0x89, 0x71, 0xFC, 0x57, 0x8D, 0xCB, 0x31, 0xD8, 0x1F, 0x67,
0x85, 0xA7, 0x7E, 0x49, 0xDA, 0x4A, 0xF6, 0x69, 0x2D, 0x5E, 0x92, 0xE6, 0x5A, 0xE9, 0xB1, 0x5A,
0xEA, 0x32, 0x92, 0x64, 0x7D, 0xD6, 0xA4, 0xB6, 0x94, 0xC6, 0xFC, 0xFD, 0xD3, 0xD6, 0xAE, 0x48,
0xA1, 0xD0, 0xA9, 0xEF, 0x54, 0x18, 0x15, 0x62, 0xA7, 0xB1, 0xAF, 0xCD, 0xB8, 0xB3, 0x2A, 0xAD,
0xC3, 0x79, 0xB5, 0x3C, 0xC7, 0x02, 0xED, 0x19, 0x3B, 0xAF, 0x27, 0xD6, 0x3E, 0x8F, 0xF2, 0xBA,
0xE8, 0x7F, 0x3F, 0xF8, 0x99, 0xC3, 0x58, 0xAE, 0x01, 0xE2, 0x7A, 0x39, 0xF6, 0x4F, 0x2E, 0x5A,
0x75, 0x24, 0xE5, 0x1F, 0xEE, 0xCF, 0x79, 0x41, 0xF7, 0x8C, 0x93, 0xD1, 0x76, 0x6E, 0x3D, 0x2E,
0x68, 0xD1, 0x50, 0xD9, 0xB1, 0x68, 0x79, 0xEC, 0x71, 0x53, 0x57, 0xED, 0x19, 0x5E, 0x3A, 0x38,
0xFC, 0x15, 0x2C, 0x54, 0x55, 0x94, 0xD2, 0x76, 0xED, 0xE5, 0xF2, 0x3F, 0xAD, 0xB8, 0x77, 0x39,
0xA7, 0x9D, 0xE5, 0x18, 0x6C, 0xCA, 0x9A, 0xB2, 0xAB, 0x05, 0x2B, 0x76, 0x6D, 0x6A, 0xBE, 0x4E,
0xE8, 0x28, 0xA2, 0x8A, 0xEE, 0x3D, 0xA0, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2,
0x8A, 0x28, 0x02, 0xA5, 0xF4, 0x9B, 0x9F, 0x60, 0xE8, 0xBD, 0x69, 0x96, 0xF1, 0xF9, 0x92, 0x63,
0xB0, 0xEB, 0x4D, 0x9B, 0xFD, 0x73, 0x7D, 0x4D, 0x5A, 0xB1, 0x03, 0xC9, 0xCF, 0xBD, 0x7E, 0x05,
0x97, 0xE1, 0xFF, 0x00, 0xD6, 0x1E, 0x2C, 0x9F, 0xD6, 0xDD, 0xE2, 0x9C, 0x9B, 0x5E, 0x51, 0xD1,
0x47, 0xD3, 0x6B, 0xFC, 0xCF, 0xE2, 0x4C, 0x8F, 0x01, 0xFE, 0xBD, 0xF8, 0x9B, 0x5B, 0xFB, 0x4D,
0xDE, 0x11, 0x9C, 0xE4, 0xE3, 0xDE, 0x14, 0xDD, 0xA3, 0x0F, 0x4D, 0x93, 0xEE, 0xAF, 0xD5, 0x8F,
0xF2, 0xA3, 0xFE, 0xE2, 0xFE, 0x54, 0xD7, 0xB7, 0x8D, 0xBA, 0x0D, 0xBF, 0x4A, 0x96, 0x8A, 0xFD,
0xA2, 0xB6, 0x47, 0x95, 0xD6, 0x83, 0x85, 0x4C, 0x34, 0x1A, 0xFF, 0x00, 0x0A, 0xFF, 0x00, 0x2D,
0x0F, 0xEB, 0x6C, 0x57, 0x06, 0xF0, 0xDE, 0x2A, 0x8B, 0xA3, 0x5B, 0x01, 0x49, 0xC5, 0xFF, 0x00,
0xD3, 0xB8, 0xAF, 0xB9, 0xA5, 0x75, 0xEA, 0xB5, 0x28, 0xCD, 0x0B, 0xC7, 0xEE, 0x3D, 0x45, 0x49,
0x62, 0x1B, 0xCC, 0x27, 0xB6, 0x39, 0xAB, 0x54, 0x57, 0xC9, 0xE0, 0xFC, 0x3F, 0xC2, 0xE0, 0xB3,
0x68, 0x63, 0xB0, 0xF5, 0x5A, 0x84, 0x5D, 0xF9, 0x77, 0xD7, 0xB7, 0x35, 0xF6, 0xF9, 0x5F, 0xCC,
0xFC, 0xC7, 0x2B, 0xF0, 0x37, 0x2D, 0xCA, 0x78, 0x9A, 0x8E, 0x71, 0x81, 0xC4, 0xCA, 0x34, 0xA9,
0xBE, 0x65, 0x4E, 0xD7, 0x77, 0xED, 0xCF, 0x7B, 0xF2, 0xF9, 0x34, 0xDD, 0xB4, 0xB8, 0x55, 0x3B,
0xDF, 0xF5, 0xFF, 0x00, 0x85, 0x5C, 0xAA, 0x37, 0x2D, 0xBA, 0x66, 0x3F, 0x85, 0x65, 0xE2, 0x6D,
0x68, 0x47, 0x28, 0x85, 0x36, 0xFD, 0xE9, 0x4D, 0x5B, 0xE4, 0x9D, 0xFF, 0x00, 0x33, 0x9B, 0xE9,
0x11, 0x8B, 0xA3, 0x4F, 0x85, 0xA8, 0xD0, 0x93, 0xF7, 0xE7, 0x56, 0x2D, 0x2E, 0xEA, 0x31, 0x95,
0xFE, 0xEB, 0xAF, 0xBC, 0x97, 0x4F, 0xFE, 0x2F, 0xC2, 0xA6, 0x69, 0x63, 0x5E, 0xAE, 0x2A, 0x86,
0x4D, 0x15, 0xF1, 0x19, 0x4F, 0x1F, 0x57, 0xCA, 0xF2, 0xBA, 0x58, 0x1C, 0x3D, 0x04, 0xE5, 0x1B,
0xFB, 0xCD, 0xBB, 0x6B, 0x26, 0xF6, 0x56, 0xEF, 0xDC, 0xFC, 0x7F, 0x86, 0x3C, 0x6C, 0xC6, 0x70,
0xE7, 0x0E, 0x61, 0xF2, 0x7C, 0x0E, 0x0E, 0x32, 0x9D, 0x3E, 0x6F, 0x7E, 0x72, 0x6D, 0x3E, 0x69,
0xCA, 0x5F, 0x0A, 0xB3, 0xEB, 0x6F, 0x88, 0xBA, 0xD3, 0xC4, 0x54, 0x8D, 0xDD, 0x7D, 0xAA, 0x95,
0x18, 0x3E, 0x94, 0x57, 0x89, 0xC4, 0x5C, 0x49, 0x8C, 0xCE, 0xFD, 0x9C, 0xB1, 0x34, 0xE3, 0x17,
0x0B, 0xD9, 0xC5, 0x35, 0xBD, 0xB7, 0xBB, 0x7D, 0x8F, 0x8F, 0xE3, 0xBE, 0x3F, 0xCD, 0x38, 0xBD,
0xD0, 0x9E, 0x63, 0x42, 0x10, 0x74, 0xAE, 0x93, 0x82, 0x92, 0xBA, 0x95, 0xAE, 0x9F, 0x34, 0xA5,
0xDB, 0x4F, 0x99, 0x7A, 0xCD, 0xB3, 0x00, 0xF6, 0xE2, 0xA4, 0xA8, 0x2C, 0x3F, 0xD5, 0x1F, 0xF7,
0xAA, 0x7A, 0xFD, 0xEB, 0x85, 0xEB, 0x4A, 0xBE, 0x49, 0x85, 0x9C, 0xF7, 0xE4, 0x4B, 0xEE, 0xD3,
0xF4, 0x3F, 0xB5, 0xFC, 0x39, 0xC5, 0xD4, 0xC6, 0x70, 0x86, 0x5D, 0x56, 0xAF, 0xC4, 0xE9, 0x45,
0x7F, 0xE0, 0x2B, 0x96, 0xFF, 0x00, 0x3B, 0x19, 0xCC, 0x30, 0xC4, 0x7A, 0x1A, 0x58, 0xDC, 0xA3,
0x6E, 0x14, 0xEB, 0xA1, 0x8B, 0x86, 0xFC, 0xEA, 0x3A, 0xFE, 0x71, 0xC6, 0x42, 0xA6, 0x5F, 0x98,
0xD4, 0x85, 0x36, 0xE3, 0x2A, 0x73, 0x69, 0x3E, 0xD6, 0x7A, 0x1F, 0xC0, 0xB9, 0xAD, 0x1C, 0x46,
0x45, 0x9F, 0xD7, 0xA5, 0x42, 0x4E, 0x13, 0xA1, 0x56, 0x4A, 0x2D, 0x6E, 0x9C, 0x24, 0xEC, 0xD7,
0xDC, 0x2B, 0xB1, 0x66, 0x2C, 0x7B, 0xD0, 0xC0, 0xAF, 0x5E, 0xE3, 0x34, 0xB1, 0xAE, 0xE9, 0x15,
0x7D, 0x4D, 0x4B, 0x7C, 0x31, 0x22, 0xFD, 0x2B, 0xAA, 0x96, 0x5B, 0x57, 0x15, 0x96, 0xE2, 0x73,
0x3A, 0x8D, 0xBE, 0x59, 0x45, 0x7A, 0xB9, 0x37, 0x76, 0xFF, 0x00, 0x0F, 0xBC, 0xF4, 0xB0, 0xF9,
0x06, 0x23, 0x31, 0xC8, 0x31, 0xFC, 0x43, 0x5A, 0x4D, 0xBA, 0x75, 0x20, 0xAF, 0xFC, 0xD2, 0x9B,
0x6E, 0x4D, 0xFA, 0x7B, 0xBF, 0xF8, 0x10, 0xED, 0x3C, 0xFD, 0xE1, 0xF4, 0xA6, 0x5F, 0x36, 0x65,
0xDB, 0xFD, 0xD1, 0x4B, 0x60, 0x7F, 0x78, 0xC3, 0xDA, 0x9B, 0x79, 0xFF, 0x00, 0x1F, 0x0D, 0x5F,
0x5B, 0x8A, 0xC6, 0x4B, 0xFD, 0x44, 0xA1, 0x08, 0xBF, 0xF9, 0x78, 0xE2, 0xFE, 0xF9, 0x4B, 0xFC,
0x8F, 0xD3, 0xF3, 0x2C, 0xD2, 0xA7, 0xFC, 0x41, 0x7C, 0x1D, 0x1A, 0x6E, 0xC9, 0xD7, 0x70, 0x97,
0x9A, 0xE6, 0xA9, 0x51, 0x2F, 0xBF, 0x95, 0xFC, 0x85, 0xB3, 0x8C, 0x3C, 0x99, 0x3D, 0x16, 0xAD,
0xED, 0x5F, 0xEE, 0x8F, 0xCA, 0xA9, 0xDB, 0xCA, 0x22, 0x56, 0xE3, 0x24, 0xD4, 0x9F, 0x6B, 0xFF,
0x00, 0x63, 0xF5, 0xAF, 0x67, 0x84, 0xF3, 0xCE, 0x1C, 0xCB, 0x32, 0x9A, 0x74, 0xF1, 0x33, 0x4A,
0xAC, 0xAE, 0xE5, 0xEE, 0xB9, 0x75, 0x69, 0x6A, 0xA2, 0xFA, 0x25, 0xA1, 0xF5, 0x7E, 0x18, 0xF1,
0x97, 0x01, 0x70, 0xF7, 0x0C, 0xD0, 0xC3, 0xE6, 0x15, 0xA2, 0xB1, 0x13, 0x72, 0x94, 0xEF, 0x4E,
0x73, 0x77, 0x72, 0x6A, 0x37, 0x71, 0x84, 0x97, 0xC2, 0x96, 0x97, 0xF3, 0xEA, 0x58, 0xDA, 0xBF,
0xDD, 0x1F, 0x95, 0x00, 0x01, 0xD0, 0x0A, 0x8A, 0x1B, 0x80, 0xED, 0xB4, 0xAE, 0x0F, 0x6E, 0x6A,
0x6A, 0xFD, 0x1B, 0x2B, 0xC6, 0xE5, 0xB9, 0x85, 0x2F, 0xAC, 0x60, 0x9A, 0x94, 0x76, 0xBA, 0x56,
0x69, 0xFC, 0xD2, 0x68, 0xFD, 0xF7, 0x86, 0xF3, 0x7E, 0x1F, 0xCF, 0x30, 0xDF, 0x5E, 0xC9, 0xE5,
0x19, 0xC1, 0x3B, 0x5D, 0x47, 0x95, 0xA7, 0xD9, 0xA6, 0x94, 0x97, 0xCD, 0x05, 0x45, 0x79, 0xFF,
0x00, 0x1E, 0xED, 0xF8, 0x54, 0xB5, 0x15, 0xE7, 0xFC, 0x7B, 0xB7, 0xE1, 0x53, 0xC4, 0x3F, 0xF2,
0x27, 0xC5, 0xFF, 0x00, 0xD7, 0xB9, 0xFF, 0x00, 0xE9, 0x2C, 0xCF, 0x8E, 0xBF, 0xE4, 0x94, 0xCC,
0xFF, 0x00, 0xEB, 0xC5, 0x5F, 0xFD, 0x37, 0x22, 0x9A, 0xF2, 0xC0, 0x7B, 0xD6, 0x82, 0x80, 0x06,
0x00, 0xC5, 0x67, 0x53, 0xB7, 0xBF, 0xF7, 0x9B, 0xF3, 0xAF, 0xC3, 0x78, 0x4B, 0x8A, 0x68, 0xE4,
0x4A, 0xAF, 0x3D, 0x1E, 0x77, 0x3B, 0x6B, 0x74, 0xAD, 0x6B, 0xF9, 0x3E, 0xE7, 0xF1, 0xB7, 0x86,
0x1E, 0x24, 0x61, 0x38, 0x2E, 0x38, 0x97, 0x57, 0x09, 0xED, 0x65, 0x57, 0x96, 0xCD, 0x34, 0x9A,
0x4A, 0xF7, 0x57, 0x69, 0xEF, 0x7F, 0xC0, 0xB5, 0x75, 0x2E, 0xC5, 0xDA, 0x3E, 0xF1, 0xFD, 0x2A,
0x9D, 0x1C, 0x9A, 0xB5, 0x69, 0x0E, 0x3E, 0x77, 0x1C, 0xF6, 0x15, 0xD1, 0x5A, 0xA6, 0x61, 0xC6,
0x99, 0xBA, 0x50, 0x8F, 0x2C, 0x17, 0xCD, 0x42, 0x3D, 0x5B, 0x7D, 0x5B, 0xFC, 0x5E, 0x9B, 0x23,
0xBB, 0x15, 0x88, 0xCF, 0x3C, 0x5C, 0xE2, 0x98, 0xC6, 0x94, 0x3D, 0x9D, 0x18, 0x2B, 0x2E, 0xB1,
0xA5, 0x0E, 0xAD, 0xBB, 0x2B, 0xCA, 0x4F, 0xD2, 0xEE, 0xCB, 0x44, 0xAE, 0xA6, 0x8C, 0x62, 0x35,
0x07, 0xB0, 0xA7, 0x51, 0x45, 0x7E, 0xFD, 0x46, 0x92, 0xA5, 0x4A, 0x34, 0xE3, 0xB4, 0x52, 0x5F,
0x71, 0xFD, 0xBB, 0x85, 0xC3, 0xC7, 0x0D, 0x87, 0xA7, 0x42, 0x1B, 0x41, 0x24, 0xBD, 0x12, 0xB1,
0x4E, 0xF8, 0xE6, 0x7F, 0xA0, 0xA7, 0x69, 0xFD, 0x58, 0xFD, 0x2A, 0x19, 0x49, 0x32, 0x31, 0x3D,
0x73, 0x4D, 0xAF, 0xE7, 0x08, 0xE7, 0xCB, 0x0B, 0xC4, 0x95, 0x33, 0x4F, 0x67, 0xCC, 0x94, 0xE6,
0xD4, 0x5B, 0xB6, 0xF7, 0x4B, 0x5B, 0x3D, 0xAF, 0xD8, 0xFE, 0x05, 0x8F, 0x1B, 0x47, 0x2E, 0xE3,
0xFA, 0xDC, 0x46, 0xE8, 0x7B, 0x44, 0xAA, 0xD4, 0x6A, 0x0D, 0xF2, 0xBB, 0x35, 0x28, 0xAB, 0xBB,
0x4A, 0xCD, 0x26, 0x9E, 0xCF, 0x54, 0x5E, 0xB8, 0x50, 0xF0, 0x91, 0xDF, 0xA8, 0xAA, 0x3D, 0x39,
0x14, 0x51, 0x59, 0xF1, 0x37, 0x11, 0x43, 0x3B, 0xC4, 0xC3, 0x13, 0x1A, 0x3E, 0xCE, 0x51, 0x56,
0x7E, 0xF5, 0xEF, 0xAD, 0xD7, 0x45, 0x6B, 0x6A, 0x73, 0xF8, 0x89, 0xC7, 0x74, 0xB8, 0xC3, 0x31,
0xA3, 0x98, 0x43, 0x09, 0xEC, 0x2A, 0x42, 0x3C, 0xAE, 0xD3, 0xE6, 0xE6, 0xB3, 0xBC, 0x5F, 0xC3,
0x1B, 0x35, 0x77, 0xDE, 0xFA, 0x76, 0x34, 0x22, 0x6D, 0xD1, 0xAB, 0x7A, 0x8A, 0x75, 0x43, 0x62,
0x73, 0x0E, 0x3D, 0x0D, 0x4D, 0x5F, 0xD0, 0x39, 0x16, 0x36, 0x58, 0xEC, 0xAE, 0x86, 0x26, 0x5B,
0xCA, 0x2A, 0xFE, 0xBD, 0x7F, 0x13, 0xFB, 0x93, 0x83, 0x33, 0x79, 0xE7, 0x1C, 0x3B, 0x82, 0xC7,
0xD4, 0xF8, 0xAA, 0x53, 0x8B, 0x7F, 0xE2, 0xB5, 0x9F, 0xE2, 0x98, 0x51, 0x45, 0x15, 0xEB, 0x1F,
0x4C, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0x51, 0x45, 0x00, 0x14, 0x50, 0xC4,
0x01, 0x92, 0x69, 0xAA, 0xEA, 0xDF, 0x74, 0xE6, 0xB2, 0x95, 0x7A, 0x51, 0xA8, 0xA9, 0x4A, 0x49,
0x49, 0xEC, 0xAF, 0xAB, 0xF4, 0x47, 0x34, 0xF1, 0xB8, 0x5A, 0x75, 0xE3, 0x87, 0x9D, 0x48, 0xAA,
0x92, 0xD5, 0x45, 0xB5, 0xCC, 0xFD, 0x16, 0xEC, 0x75, 0x52, 0xBC, 0x18, 0x9C, 0xFB, 0x8C, 0xD5,
0xDA, 0xA5, 0x78, 0xDB, 0xA7, 0x3E, 0xDC, 0x57, 0xC0, 0x78, 0x98, 0xE9, 0x2C, 0x9A, 0x0A, 0x7F,
0x17, 0x3A, 0xB7, 0xDC, 0xEF, 0xF8, 0x1F, 0x88, 0x7D, 0x21, 0xA5, 0x86, 0x5C, 0x27, 0x49, 0x54,
0xF8, 0xDD, 0x58, 0xF2, 0xFA, 0xF2, 0xCA, 0xFF, 0x00, 0x2B, 0x5F, 0xF0, 0x24, 0xD3, 0xCF, 0xDE,
0x15, 0x66, 0xAB, 0x69, 0xE3, 0xEF, 0x35, 0x59, 0xAF, 0x53, 0x80, 0xD4, 0xD7, 0x0F, 0x50, 0xE7,
0xFE, 0xF5, 0xBD, 0x39, 0x99, 0xF4, 0x9E, 0x0A, 0xC6, 0xB2, 0xE0, 0x5C, 0x17, 0xB5, 0xFE, 0xFD,
0xBD, 0x3D, 0xA4, 0xAD, 0xFF, 0x00, 0x03, 0xC8, 0x28, 0xA2, 0x8A, 0xFB, 0x03, 0xF5, 0x40, 0xA2,
0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x02, 0x8D, 0xD2, 0x95, 0x99, 0xB3,
0xDC, 0xE4, 0x52, 0xDB, 0xCC, 0x63, 0xE3, 0x19, 0x15, 0x6E, 0x58, 0xD6, 0x45, 0xC3, 0x0F, 0xA1,
0xAA, 0xCF, 0x6A, 0xE3, 0xEE, 0x90, 0xD5, 0xF8, 0xA6, 0x73, 0xC2, 0xF9, 0xDE, 0x53, 0x99, 0xCF,
0x30, 0xCA, 0x6F, 0x28, 0xB6, 0xDA, 0xE5, 0xD5, 0xAB, 0xEE, 0x9C, 0x7A, 0xAF, 0x93, 0xF3, 0x3F,
0x90, 0xF8, 0xB3, 0xC3, 0x8E, 0x30, 0xE1, 0x8E, 0x22, 0xAB, 0x9E, 0x70, 0xC2, 0x94, 0xE1, 0x39,
0x4A, 0x49, 0xC2, 0xCE, 0x71, 0xE6, 0xD5, 0xC6, 0x50, 0x77, 0xE6, 0x57, 0xDA, 0xCA, 0x49, 0xAB,
0x5E, 0xCC, 0x7F, 0xDA, 0x97, 0xFB, 0x86, 0x8F, 0xB5, 0x2F, 0xF7, 0x4D, 0x43, 0xF6, 0x79, 0x7F,
0xBB, 0xFA, 0xD1, 0xE4, 0x4B, 0xFD, 0xDF, 0xD6, 0xB1, 0xFF, 0x00, 0x58, 0x78, 0xE7, 0xFE, 0x7C,
0xCF, 0xFF, 0x00, 0x05, 0x7F, 0xF6, 0xA7, 0x2F, 0xFA, 0xF5, 0xE3, 0x1F, 0xFD, 0x02, 0xD5, 0xFF,
0x00, 0xC2, 0x67, 0xFF, 0x00, 0xC8, 0x13, 0x7D, 0xA9, 0x3F, 0xBA, 0x6A, 0x75, 0x21, 0x97, 0x23,
0xA1, 0xAA, 0x7F, 0x67, 0x97, 0xFB, 0xBF, 0xAD, 0x5B, 0x85, 0x76, 0x46, 0x17, 0xD2, 0xBE, 0xCF,
0x83, 0xF3, 0x3E, 0x22, 0xC5, 0xD6, 0xA9, 0x1C, 0xD2, 0x93, 0x8C, 0x12, 0xD1, 0xB8, 0xF2, 0xBB,
0xDF, 0x6E, 0x97, 0xD2, 0xFD, 0x0F, 0xD6, 0x3C, 0x2A, 0xE2, 0x2E, 0x3C, 0xCD, 0x31, 0x75, 0xE1,
0xC4, 0x78, 0x69, 0x42, 0x92, 0x8D, 0xE3, 0x29, 0x53, 0xF6, 0x6F, 0x9A, 0xEB, 0x44, 0xAC, 0xAE,
0x9A, 0xBB, 0x6E, 0xDA, 0x59, 0x6B, 0xA8, 0xEA, 0xCF, 0x9B, 0xFD, 0x73, 0x7D, 0x4D, 0x68, 0x55,
0x39, 0x20, 0x93, 0xCC, 0x38, 0x5C, 0xE4, 0xF5, 0xAE, 0x3F, 0x12, 0xB0, 0x58, 0xBC, 0x56, 0x12,
0x84, 0x70, 0xF4, 0xDC, 0xED, 0x27, 0x7B, 0x2B, 0xDB, 0x4D, 0x36, 0x3C, 0xBF, 0xA4, 0x0E, 0x53,
0x9A, 0x66, 0x59, 0x66, 0x0A, 0x18, 0x1C, 0x3C, 0xAA, 0xA5, 0x39, 0x5F, 0x95, 0x39, 0x35, 0x75,
0x65, 0xA2, 0xD7, 0x5D, 0x75, 0xD8, 0x75, 0xAC, 0x28, 0xF1, 0xEE, 0x61, 0x9E, 0x6A, 0xC2, 0xA2,
0xAF, 0xDD, 0x50, 0x3F, 0x0A, 0x48, 0x53, 0x64, 0x61, 0x69, 0xF5, 0xF4, 0xDC, 0x3B, 0x91, 0xE1,
0xB0, 0x18, 0x0A, 0x09, 0xD1, 0x8C, 0x6A, 0xA8, 0xAE, 0x67, 0x65, 0x7B, 0xDB, 0x5B, 0xBD, 0xCF,
0xD1, 0x38, 0x0B, 0x83, 0xB2, 0xFC, 0x93, 0x24, 0xC2, 0x29, 0xE1, 0x21, 0x0C, 0x4A, 0x84, 0x79,
0xE5, 0xCB, 0x1E, 0x6E, 0x6B, 0x7B, 0xD7, 0x95, 0xAE, 0xF5, 0xF3, 0x0A, 0xA3, 0x75, 0xC5, 0xC3,
0x7D, 0x6A, 0xF5, 0x32, 0x48, 0x91, 0xCE, 0x58, 0x57, 0x37, 0x18, 0xF0, 0xFD, 0x7C, 0xEB, 0x01,
0x1A, 0x34, 0x24, 0x94, 0xA3, 0x25, 0x2D, 0x76, 0x7A, 0x35, 0xFA, 0x9E, 0x6F, 0x8A, 0xDC, 0x0F,
0x8C, 0xE2, 0xEC, 0x96, 0x9E, 0x13, 0x05, 0x38, 0xC6, 0xA4, 0x26, 0xA6, 0xB9, 0xAE, 0x93, 0xD1,
0xC5, 0xAB, 0xA4, 0xED, 0xBD, 0xF6, 0xE8, 0x47, 0x61, 0xFE, 0xA4, 0xFF, 0x00, 0xBD, 0x53, 0xD2,
0x28, 0x0A, 0xB8, 0x03, 0x02, 0x96, 0xBD, 0x9C, 0x97, 0x2F, 0x96, 0x5F, 0x97, 0x51, 0xC2, 0x49,
0xDD, 0xC1, 0x24, 0xDF, 0x99, 0xF5, 0xBC, 0x23, 0x92, 0x4F, 0x22, 0xC8, 0x70, 0xB9, 0x65, 0x49,
0x73, 0x4A, 0x94, 0x12, 0x6D, 0x6C, 0xDF, 0x5B, 0x79, 0x5F, 0x62, 0xAE, 0xA0, 0x31, 0x22, 0xB7,
0xA8, 0xA8, 0xED, 0xD0, 0x48, 0xE5, 0x0F, 0xA5, 0x59, 0xBA, 0x88, 0xC8, 0xA3, 0x1D, 0x45, 0x36,
0xD6, 0x16, 0x46, 0xDC, 0xDD, 0x7D, 0x2B, 0xF3, 0x3C, 0xCB, 0x85, 0xF1, 0x55, 0xF8, 0xBB, 0xDA,
0x3A, 0x17, 0xC3, 0xCD, 0xA6, 0xDF, 0xD9, 0xB7, 0x2F, 0xBD, 0x77, 0xDE, 0xF7, 0xF3, 0x3F, 0x9E,
0x33, 0xFF, 0x00, 0x0E, 0x33, 0x2C, 0x6F, 0x8A, 0x3E, 0xDD, 0xE1, 0x1C, 0xF0, 0x55, 0x65, 0x19,
0x4A, 0x5F, 0x63, 0x95, 0xC1, 0x2A, 0x89, 0xBE, 0x8D, 0xBE, 0x6B, 0x2D, 0xF5, 0x4D, 0x0B, 0x0C,
0x02, 0x36, 0xDD, 0x9C, 0x9E, 0xD4, 0xDD, 0x40, 0x7C, 0xAA, 0xD5, 0x62, 0x91, 0xD4, 0x3A, 0xED,
0x61, 0xC5, 0x7D, 0xC6, 0x61, 0xC3, 0x18, 0x59, 0x64, 0xB5, 0x72, 0xCC, 0x14, 0x54, 0x14, 0xB5,
0x5B, 0xFC, 0x49, 0xA6, 0x9B, 0x7A, 0xBE, 0x8B, 0xE4, 0x7E, 0xC9, 0x9D, 0xF8, 0x77, 0x96, 0xD4,
0xE1, 0x0C, 0x4F, 0x0F, 0x65, 0x14, 0xE3, 0x46, 0x35, 0x35, 0x5B, 0xB5, 0xCE, 0x9A, 0x92, 0x72,
0x6E, 0xF2, 0x77, 0x71, 0x49, 0xB7, 0x7B, 0x2F, 0x4B, 0x14, 0xEC, 0xC9, 0xFB, 0x40, 0xC5, 0x17,
0x80, 0xFD, 0xA0, 0xD5, 0xA8, 0xA2, 0x48, 0xCE, 0x54, 0x73, 0xEF, 0x44, 0xD1, 0x2C, 0x8B, 0xCF,
0x5E, 0xC6, 0xBE, 0x4B, 0xFD, 0x48, 0xC7, 0xFF, 0x00, 0xAB, 0x2F, 0x01, 0x29, 0xA7, 0x55, 0x4F,
0xDA, 0x25, 0xD3, 0x6B, 0x72, 0xDF, 0xEF, 0x7D, 0xAF, 0xF7, 0x9F, 0x97, 0xBF, 0x07, 0xF3, 0xA5,
0xE1, 0xEC, 0xB2, 0x49, 0xD4, 0x8B, 0xC4, 0xAA, 0xDE, 0xDA, 0x29, 0x3F, 0x77, 0xE1, 0xE5, 0xE4,
0xE6, 0x69, 0x6A, 0xD5, 0xDD, 0xED, 0x6B, 0xBB, 0x3D, 0x35, 0x28, 0x0E, 0x4E, 0x33, 0x8A, 0x9B,
0xEC, 0xD2, 0x1E, 0x41, 0x5F, 0xCE, 0xA3, 0x91, 0x19, 0x1B, 0x6B, 0x0A, 0x92, 0x19, 0xDA, 0x35,
0xDB, 0x8D, 0xC3, 0xB7, 0x35, 0xF9, 0xE6, 0x4D, 0x4B, 0x29, 0xA5, 0x8A, 0x9E, 0x1B, 0x3B, 0x84,
0xA3, 0x6E, 0xAA, 0xF7, 0x4D, 0x74, 0x69, 0x27, 0xF8, 0x7E, 0x5B, 0x7E, 0x13, 0xC2, 0x78, 0x6E,
0x18, 0xC3, 0x66, 0x55, 0x70, 0x1C, 0x5F, 0x4A, 0x74, 0xD4, 0x6E, 0xB9, 0xA2, 0xE4, 0x9C, 0x24,
0xB7, 0x8C, 0xA2, 0x93, 0x6D, 0x3E, 0x8D, 0x2B, 0xA7, 0xBD, 0xD3, 0xBA, 0x92, 0xDE, 0xDC, 0xA4,
0x9B, 0x98, 0x8E, 0x3B, 0x0A, 0xB1, 0x54, 0x66, 0x95, 0xA4, 0x6C, 0xF4, 0x1D, 0x85, 0x58, 0xB2,
0x66, 0x68, 0xB9, 0xEC, 0x78, 0xAF, 0xD3, 0x78, 0x3F, 0x3D, 0xCA, 0x16, 0x32, 0x59, 0x56, 0x5B,
0x46, 0x4A, 0x1A, 0xC9, 0x4D, 0xBB, 0xF3, 0x35, 0xD5, 0xAE, 0x9E, 0x5F, 0x92, 0x3F, 0xA2, 0x3C,
0x2B, 0xE3, 0x3E, 0x17, 0x8E, 0x6B, 0x53, 0x86, 0xB2, 0x0C, 0x2C, 0xE3, 0x45, 0xF3, 0x4D, 0x54,
0x94, 0xAE, 0xE6, 0xD2, 0x57, 0x6D, 0x35, 0x78, 0xAB, 0x7C, 0x3A, 0xF6, 0xBA, 0x4D, 0x93, 0x54,
0x57, 0x9F, 0xF1, 0xEE, 0xDF, 0x85, 0x4B, 0x51, 0x5E, 0x7F, 0xC7, 0xBB, 0x7E, 0x15, 0xF6, 0x7C,
0x43, 0xFF, 0x00, 0x22, 0x7C, 0x5F, 0xFD, 0x7B, 0x9F, 0xFE, 0x92, 0xCF, 0xD6, 0xB8, 0xEB, 0xFE,
0x49, 0x4C, 0xCF, 0xFE, 0xBC, 0x55, 0xFF, 0x00, 0xD3, 0x72, 0x29, 0x01, 0x93, 0x8A, 0x74, 0x8A,
0xC8, 0xD8, 0x61, 0x8A, 0x44, 0xFB, 0xC3, 0xEB, 0x57, 0xE5, 0x45, 0x91, 0x70, 0xC3, 0xF1, 0xAF,
0xC2, 0xB8, 0x6F, 0x85, 0x5E, 0x79, 0x83, 0xC4, 0x4E, 0x94, 0xED, 0x56, 0x0D, 0x5B, 0xB3, 0xBA,
0x7A, 0x3E, 0xDB, 0x68, 0xCF, 0xE3, 0x1E, 0x00, 0xF0, 0xD9, 0xF1, 0x8E, 0x53, 0x8E, 0xAB, 0x87,
0xAB, 0xC9, 0x88, 0xA2, 0xE3, 0xC8, 0x9F, 0xC3, 0x2B, 0xA9, 0x5D, 0x3E, 0xA9, 0xE8, 0xAC, 0xFA,
0x75, 0x5D, 0xA9, 0xDB, 0xBA, 0xA4, 0x99, 0x65, 0xC8, 0xFE, 0x55, 0x78, 0x10, 0x46, 0x45, 0x67,
0xCA, 0x86, 0x36, 0xDA, 0x6A, 0x4B, 0x79, 0x8A, 0x61, 0x4F, 0x2B, 0x5E, 0xE7, 0x07, 0xF1, 0x33,
0xC9, 0x2B, 0xCF, 0x2C, 0xCC, 0x63, 0xCB, 0x1B, 0xEF, 0x6D, 0x63, 0x2F, 0x3E, 0xEB, 0xCF, 0x5B,
0x7A, 0x1F, 0x65, 0xE1, 0x4F, 0x88, 0x4F, 0x83, 0xF1, 0x95, 0x78, 0x7B, 0x3D, 0xA7, 0xEC, 0xE9,
0xF3, 0x35, 0x7E, 0x5F, 0x7A, 0x13, 0xBD, 0x9A, 0x95, 0xB5, 0x71, 0x7D, 0xF5, 0xB7, 0x4F, 0x75,
0xE9, 0x72, 0x8A, 0x29, 0x18, 0xE1, 0x49, 0xF4, 0x15, 0xFB, 0x7C, 0xE4, 0xA3, 0x17, 0x26, 0xF4,
0x47, 0xF6, 0x15, 0x5A, 0x91, 0xA7, 0x4E, 0x55, 0x24, 0xEC, 0x92, 0xBB, 0xF4, 0x45, 0x09, 0x0E,
0x64, 0x63, 0xEA, 0x6A, 0xCD, 0xA4, 0x68, 0x61, 0x05, 0x94, 0x12, 0x7D, 0x45, 0x54, 0xAB, 0xD6,
0xC3, 0x10, 0x2F, 0xD2, 0xBF, 0x0B, 0xF0, 0xEF, 0x0F, 0x4F, 0x1B, 0x9C, 0xD6, 0xAB, 0x5A, 0x0A,
0x4B, 0x95, 0xBD, 0x55, 0xD5, 0xDC, 0x97, 0xFC, 0x13, 0xF8, 0xCF, 0xC0, 0x9C, 0x0D, 0x1C, 0xDB,
0x8A, 0xF1, 0x78, 0x9C, 0x5D, 0x35, 0x52, 0x2A, 0x9C, 0x9F, 0xBC, 0x93, 0x5C, 0xD2, 0x9C, 0x7A,
0x3E, 0xB6, 0xB8, 0xEF, 0x2A, 0x3F, 0xEE, 0x2F, 0xE5, 0x54, 0xEE, 0x80, 0x13, 0xB0, 0x03, 0x02,
0xAF, 0x55, 0x1B, 0xCF, 0xF8, 0xF8, 0x6A, 0xFA, 0x6F, 0x12, 0xB0, 0x58, 0x7A, 0x39, 0x4D, 0x39,
0x52, 0xA6, 0xA2, 0xFD, 0xA2, 0xD5, 0x24, 0xBE, 0xCC, 0xBB, 0x1F, 0xA1, 0x7D, 0x20, 0x72, 0x9C,
0x06, 0x13, 0x86, 0x30, 0xF5, 0x30, 0xB8, 0x78, 0x41, 0xFB, 0x68, 0xA6, 0xE3, 0x14, 0x9D, 0xB9,
0x2A, 0x75, 0x4B, 0x6B, 0xD8, 0x9E, 0xC3, 0xFD, 0x51, 0xFF, 0x00, 0x7A, 0xA7, 0xA8, 0x2C, 0x3F,
0xD4, 0x9F, 0xF7, 0xAA, 0x7A, 0xFA, 0xCE, 0x10, 0x4D, 0x64, 0x38, 0x5B, 0xFF, 0x00, 0x2F, 0xEA,
0xCF, 0xD3, 0xFC, 0x2C, 0x8B, 0x5C, 0x15, 0x97, 0x5D, 0x7F, 0xCB, 0xB5, 0xF9, 0xB0, 0xA2, 0x8A,
0x2B, 0xE9, 0x0F, 0xBF, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80,
0x22, 0xBB, 0x56, 0x68, 0xB0, 0xBF, 0x95, 0x45, 0x66, 0x8E, 0x24, 0xDC, 0x46, 0x05, 0x5A, 0xA2,
0xBE, 0x5F, 0x1B, 0xC2, 0xD8, 0x7C, 0x5E, 0x71, 0x4B, 0x34, 0x95, 0x46, 0xA5, 0x0B, 0x69, 0xD1,
0xDB, 0x6F, 0x4F, 0x3E, 0xE7, 0xE7, 0x39, 0xC7, 0x86, 0xF8, 0x1C, 0xCF, 0x8A, 0xF0, 0xDC, 0x47,
0x52, 0xB4, 0xD4, 0xE9, 0x72, 0xFB, 0xAB, 0x66, 0xE3, 0x76, 0xB5, 0xDD, 0x2E, 0xEB, 0xA8, 0x56,
0x7C, 0x87, 0x74, 0x8C, 0x7D, 0x4D, 0x5A, 0xBA, 0x98, 0x22, 0xED, 0x1F, 0x78, 0xFE, 0x95, 0x4C,
0x0C, 0x9C, 0x0A, 0xFC, 0xF7, 0xC4, 0xBC, 0xDA, 0x8E, 0x26, 0xBD, 0x2C, 0x05, 0x07, 0xCC, 0xE0,
0xDB, 0x95, 0xBB, 0xBB, 0x24, 0xBD, 0x77, 0xBF, 0xA9, 0xF8, 0x5F, 0xD2, 0x0F, 0x8A, 0x30, 0xB9,
0x86, 0x37, 0x0D, 0x92, 0xE0, 0xE7, 0xCF, 0x2A, 0x2E, 0x4E, 0x76, 0xD6, 0xD2, 0x76, 0x51, 0x8F,
0xAA, 0x57, 0xBA, 0xE9, 0x74, 0xB7, 0xB9, 0x72, 0xC4, 0x62, 0x0C, 0xFA, 0x9A, 0x9A, 0x9B, 0x1A,
0xED, 0x8D, 0x57, 0xD0, 0x53, 0xAB, 0xF5, 0x7C, 0x97, 0x06, 0xF0, 0x59, 0x6D, 0x0C, 0x3B, 0xDE,
0x31, 0x49, 0xFA, 0xDB, 0x5F, 0xC4, 0xFE, 0x98, 0xE1, 0x2C, 0xAA, 0x59, 0x4F, 0x0F, 0xE0, 0xB0,
0x12, 0x5E, 0xF5, 0x3A, 0x70, 0x4F, 0xFC, 0x56, 0x5C, 0xDF, 0x8D, 0xC2, 0x8A, 0x28, 0xAF, 0x4C,
0xFA, 0x20, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A,
0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A,
0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A,
0x28, 0x00, 0xA2, 0x8A, 0x28, 0x01, 0x93, 0x46, 0x24, 0x5C, 0x1E, 0xBD, 0x8D, 0x57, 0xFB, 0x2C,
0x9E, 0xAB, 0x56, 0xE8, 0xAF, 0x99, 0xCD, 0xF8, 0x47, 0x29, 0xCD, 0x6B, 0x7B, 0x7C, 0x44, 0x1F,
0x3F, 0x74, 0xED, 0x7F, 0x5E, 0xE7, 0xE7, 0x9C, 0x53, 0xE1, 0x77, 0x0C, 0xF1, 0x36, 0x2D, 0x63,
0x71, 0xF4, 0x5A, 0xAB, 0x6B, 0x39, 0x46, 0x4E, 0x2D, 0xA5, 0xB5, 0xFA, 0x3B, 0x77, 0xB5, 0xED,
0xA5, 0xEC, 0x91, 0x55, 0x6D, 0x5B, 0x77, 0xCC, 0xC3, 0x1E, 0xD5, 0x65, 0x54, 0x2A, 0xED, 0x03,
0x81, 0x4B, 0x45, 0x74, 0x64, 0xDC, 0x37, 0x96, 0xE4, 0xFC, 0xCF, 0x09, 0x0B, 0x4A, 0x5B, 0xB6,
0xEE, 0xED, 0xDB, 0xD0, 0xEF, 0xE1, 0x3F, 0x0F, 0xF8, 0x7F, 0x85, 0x79, 0xE5, 0x96, 0x52, 0xB4,
0xE7, 0xA3, 0x94, 0x9F, 0x34, 0xAD, 0xDA, 0xEF, 0x65, 0xE4, 0xAD, 0x7E, 0xBB, 0x20, 0xA6, 0xCA,
0xBB, 0xE3, 0x2B, 0xEB, 0x4E, 0xA2, 0xBD, 0x9A, 0xF4, 0x69, 0xD7, 0xA5, 0x2A, 0x35, 0x15, 0xE3,
0x24, 0xD3, 0x5E, 0x4F, 0x46, 0x7D, 0x5E, 0x33, 0x07, 0x47, 0x1B, 0x86, 0xA9, 0x85, 0xAF, 0x1E,
0x6A, 0x75, 0x22, 0xE3, 0x25, 0xDD, 0x49, 0x59, 0xAF, 0xB9, 0x95, 0x63, 0xB6, 0x71, 0x20, 0x2D,
0x8C, 0x0A, 0xB5, 0x45, 0x15, 0xE4, 0xE4, 0x7C, 0x3F, 0x82, 0xC9, 0x69, 0x4A, 0x9E, 0x15, 0x3F,
0x79, 0xDD, 0xB6, 0xEE, 0xFF, 0x00, 0xA4, 0x7C, 0xC7, 0x07, 0xF0, 0x3E, 0x51, 0xC2, 0x58, 0x6A,
0x94, 0x32, 0xD5, 0x2B, 0x54, 0x77, 0x93, 0x93, 0xBB, 0x7D, 0x96, 0xCB, 0x45, 0xD3, 0x41, 0x93,
0x46, 0x24, 0x5C, 0x1E, 0xBD, 0x8D, 0x43, 0x1D, 0xA9, 0x0F, 0x96, 0x61, 0x81, 0xE9, 0x56, 0x68,
0xAC, 0xB3, 0x0E, 0x17, 0xCA, 0xB3, 0x0C, 0x5C, 0x71, 0x78, 0x8A, 0x57, 0x9A, 0xF3, 0x6A, 0xF6,
0xDA, 0xEB, 0xAF, 0xF4, 0xB6, 0x39, 0xF3, 0xCF, 0x0E, 0x78, 0x6B, 0x3C, 0xCC, 0xE9, 0xE6, 0x78,
0xEC, 0x3F, 0x35, 0x68, 0x5B, 0x5B, 0xB4, 0xA5, 0x6D, 0xB9, 0x92, 0xD2, 0x56, 0xF3, 0xE9, 0xA3,
0xBA, 0xD0, 0x29, 0x24, 0x1B, 0x90, 0xAF, 0xA8, 0xA5, 0xA2, 0xBD, 0xDA, 0x94, 0xE3, 0x56, 0x9C,
0xA9, 0xCB, 0x66, 0xAC, 0xFE, 0x67, 0xD9, 0x62, 0x30, 0xF4, 0xF1, 0x14, 0x67, 0x46, 0xA2, 0xBC,
0x64, 0x9A, 0x7E, 0x8D, 0x59, 0x94, 0x96, 0xDE, 0x42, 0xF8, 0x23, 0x8F, 0x5A, 0xBA, 0x06, 0x06,
0x05, 0x14, 0x57, 0xCF, 0xF0, 0xFF, 0x00, 0x0C, 0x60, 0xB2, 0x35, 0x53, 0xEA, 0xED, 0xB7, 0x3D,
0xDB, 0xEC, 0xB6, 0x5D, 0x3B, 0x9F, 0x11, 0xC0, 0xFE, 0x1D, 0xE5, 0x1C, 0x1D, 0x1A, 0xFF, 0x00,
0x50, 0x72, 0x94, 0xAA, 0xB5, 0x77, 0x26, 0x9B, 0xB2, 0xBD, 0xA2, 0xAC, 0x96, 0x8A, 0xEF, 0xD7,
0xA8, 0x53, 0x64, 0x8D, 0x1F, 0xEF, 0x2E, 0x69, 0xD4, 0x57, 0xBB, 0x88, 0xC3, 0xD1, 0xC4, 0x53,
0x74, 0xEB, 0x41, 0x4A, 0x2F, 0xA3, 0x57, 0x5F, 0x73, 0x3E, 0xCF, 0x1B, 0x81, 0xC2, 0x63, 0xA8,
0x3C, 0x3E, 0x2E, 0x94, 0x6A, 0x53, 0x7B, 0xC6, 0x49, 0x49, 0x3F, 0x93, 0xBA, 0x11, 0x40, 0x55,
0xC0, 0x18, 0x14, 0xB4, 0x51, 0x5A, 0x46, 0x31, 0x84, 0x54, 0x62, 0xAC, 0x91, 0xBD, 0x3A, 0x70,
0xA5, 0x05, 0x4E, 0x9A, 0x4A, 0x2B, 0x44, 0x96, 0x89, 0x25, 0xD1, 0x20, 0xA2, 0x8A, 0x2A, 0x8B,
0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80, 0x0A, 0x28, 0xA2, 0x80,
0x28, 0xDC, 0x2B, 0x09, 0x9B, 0x20, 0xF2, 0x78, 0xA9, 0xAD, 0x61, 0xDB, 0xF3, 0xBF, 0x5E, 0xC3,
0xD2, 0xAC, 0x51, 0x5F, 0x0D, 0x96, 0xF0, 0x26, 0x0B, 0x09, 0x99, 0xCF, 0x1F, 0x52, 0x6E, 0xA3,
0x6D, 0xB8, 0xA6, 0xB6, 0x6D, 0xDE, 0xEF, 0x5D, 0x5A, 0xE9, 0xB7, 0x7D, 0xCF, 0xC6, 0xB8, 0x7F,
0xC1, 0x8C, 0xA7, 0x2B, 0xE2, 0x2A, 0xB9, 0xD5, 0x7A, 0xAE, 0xBB, 0x72, 0x73, 0x84, 0x64, 0xB4,
0x84, 0x9B, 0xBD, 0xDB, 0xBB, 0xE6, 0x6B, 0xA3, 0xB2, 0xB6, 0xF6, 0xBD, 0x9A, 0x28, 0xA2, 0x8A,
0xFB, 0x93, 0xF6, 0x50, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00,
0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x00, 0xA2, 0x8A, 0x28, 0x03, 0xFF, 0xD9 };

View File

@ -15,24 +15,63 @@
// Official git repository and contact information can be found at
// https://github.com/hrydgard/ppsspp and http://www.ppsspp.org/.
#include "base/NativeApp.h"
#include "Common/ChunkFile.h"
#include "Core/HLE/HLE.h"
#include "Core/HLE/FunctionWrappers.h"
#include "Core/HLE/sceUsbGps.h"
#include "Core/MemMapHelpers.h"
enum UsbStatus {
enum GpsStatus {
GPS_STATE_OFF = 0,
GPS_STATE_ACTIVATING1 = 1,
GPS_STATE_ACTIVATING2 = 2,
GPS_STATE_ON = 3,
};
GpsStatus gpsStatus = GPS_STATE_OFF;
void __UsbGpsInit() {
gpsStatus = GPS_STATE_OFF;
}
void __UsbGpsDoState(PointerWrap &p) {
auto s = p.Section("sceUsbGps", 1, 4);
if (!s)
return;
p.Do(gpsStatus);
}
static int sceUsbGpsGetState(u32 stateAddr) {
ERROR_LOG(HLE, "UNIMPL sceUsbGpsGetData(%08x)", stateAddr);
if (Memory::IsValidAddress(stateAddr)) {
Memory::Write_U32(gpsStatus, stateAddr);
}
return 0;
}
static int sceUsbGpsOpen() {
ERROR_LOG(HLE, "UNIMPL sceUsbGpsOpen");
GPS::init();
gpsStatus = GPS_STATE_ON;
System_SendMessage("gps_command", "open");
return 0;
}
static int sceUsbGpsClose() {
ERROR_LOG(HLE, "UNIMPL sceUsbGpsClose");
gpsStatus = GPS_STATE_OFF;
System_SendMessage("gps_command", "close");
return 0;
}
static int sceUsbGpsGetData(u32 gpsDataAddr, u32 satDataAddr) {
if (Memory::IsValidRange(gpsDataAddr, sizeof(GpsData))) {
Memory::WriteStruct(gpsDataAddr, GPS::getGpsData());
}
if (Memory::IsValidRange(satDataAddr, sizeof(SatData))) {
Memory::WriteStruct(satDataAddr, GPS::getSatData());
}
return 0;
}
@ -43,9 +82,9 @@ const HLEFunction sceUsbGps[] =
{0X54D26AA4, nullptr, "sceUsbGpsGetInitDataLocation", '?', "" },
{0X63D1F89D, nullptr, "sceUsbGpsResetInitialPosition", '?', "" },
{0X69E4AAA8, nullptr, "sceUsbGpsSaveInitData", '?', "" },
{0X6EED4811, nullptr, "sceUsbGpsClose", '?', "" },
{0X6EED4811, &WrapI_V<sceUsbGpsClose>, "sceUsbGpsClose", 'i', "" },
{0X7C16AC3A, &WrapI_U<sceUsbGpsGetState>, "sceUsbGpsGetState", 'i', "x"},
{0X934EC2B2, nullptr, "sceUsbGpsGetData", '?', "" },
{0X934EC2B2, &WrapI_UU<sceUsbGpsGetData>, "sceUsbGpsGetData", 'i', "xx" },
{0X9D8F99E8, nullptr, "sceUsbGpsSetPowerSaveMode", '?', "" },
{0X9F267D34, &WrapI_V<sceUsbGpsOpen>, "sceUsbGpsOpen", 'i', "" },
{0XA259CD67, nullptr, "sceUsbGpsReset", '?', "" },
@ -55,3 +94,58 @@ void Register_sceUsbGps()
{
RegisterModule("sceUsbGps", ARRAY_SIZE(sceUsbGps), sceUsbGps);
}
GpsData gpsData;
SatData satData;
void GPS::init() {
time_t currentTime;
time(&currentTime);
setGpsTime(&currentTime);
gpsData.hdop = 1.0f;
gpsData.latitude = 51.510357f;
gpsData.longitude = -0.116773f;
gpsData.altitude = 19.0f;
gpsData.speed = 3.0f;
gpsData.bearing = 35.0f;
satData.satellites_in_view = 6;
for (int i = 0; i < satData.satellites_in_view; i++) {
satData.satInfo[i].id = i + 1; // 1 .. 32
satData.satInfo[i].elevation = i * 10;
satData.satInfo[i].azimuth = i * 50;
satData.satInfo[i].snr = 0;
satData.satInfo[i].good = 1;
}
}
void GPS::setGpsTime(time_t *time) {
struct tm *gpsTime;
gpsTime = localtime(time);
gpsData.year = (short)(gpsTime->tm_year + 1900);
gpsData.month = (short)(gpsTime->tm_mon + 1);
gpsData.date = (short)gpsTime->tm_mday;
gpsData.hour = (short)gpsTime->tm_hour;
gpsData.minute = (short)gpsTime->tm_min;
gpsData.second = (short)gpsTime->tm_sec;
}
void GPS::setGpsData(float latitude, float longitude, float altitude, float speed, float bearing, long long gpsTime) {
setGpsTime((time_t*)&gpsTime);
gpsData.latitude = latitude;
gpsData.longitude = longitude;
gpsData.altitude = altitude;
gpsData.speed = speed;
gpsData.bearing = bearing;
}
GpsData* GPS::getGpsData() {
return &gpsData;
}
SatData* GPS::getSatData() {
return &satData;
}

View File

@ -18,3 +18,52 @@
#pragma once
void Register_sceUsbGps();
void __UsbGpsInit();
void __UsbGpsDoState(PointerWrap &p);
#pragma pack(push)
#pragma pack(1)
typedef struct {
short year;
short month;
short date;
short hour;
short minute;
short second;
float garbage1;
float hdop;
float garbage2;
float latitude;
float longitude;
float altitude;
float garbage3;
float speed;
float bearing;
} GpsData;
typedef struct {
unsigned char id;
unsigned char elevation;
short azimuth;
unsigned char snr;
unsigned char good;
short garbage;
} SatInfo;
typedef struct {
short satellites_in_view;
short garbage;
SatInfo satInfo[24];
} SatData;
#pragma pack(pop)
namespace GPS {
void init();
void setGpsTime(time_t *time);
void setGpsData(float latitude, float longitude, float altitude, float speed, float bearing, long long time);
GpsData *getGpsData();
SatData *getSatData();
}

View File

@ -80,6 +80,8 @@
#include "Core/System.h"
#include "Core/HLE/__sceAudio.h"
#include "Core/HLE/sceCtrl.h"
#include "Core/HLE/sceUsbCam.h"
#include "Core/HLE/sceUsbGps.h"
#include "Core/Util/GameManager.h"
#include "Core/Util/AudioFormat.h"
#include "GPU/GPUInterface.h"
@ -1118,3 +1120,11 @@ void NativeShutdown() {
void NativePermissionStatus(SystemPermission permission, PermissionStatus status) {
// TODO: Send this through the screen system? Nicer than listening to string messages
}
void PushNewGpsData(float latitude, float longitude, float altitude, float speed, float bearing, long long time) {
GPS::setGpsData(latitude, longitude, altitude, speed, bearing, time);
}
void PushCameraImage(long long length, unsigned char* image) {
Camera::pushCameraImage(length, image);
}

View File

@ -14,13 +14,20 @@
<uses-feature android:name="android.hardware.screen.landscape" android:required="false" />
<uses-feature android:name="android.hardware.touchscreen" android:required="false" />
<uses-feature android:name="android.software.leanback" android:required="false" />
<uses-feature android:name="android.hardware.gamepad" android:required="false"/>
<uses-feature android:name="android.hardware.gamepad" android:required="false" />
<uses-feature android:name="android.hardware.location.gps" android:required="false" />
<uses-feature android:name="android.hardware.location.network" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="archos.permission.FULLSCREEN.FULL" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="archos.permission.FULLSCREEN.FULL" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission-sdk-23 android:name="android.permission.CAMERA" />
<supports-screens
android:largeScreens="true"

View File

@ -357,6 +357,7 @@ EXEC_AND_LIB_FILES := \
$(SRC)/Core/HLE/sceSsl.cpp \
$(SRC)/Core/HLE/sceUmd.cpp \
$(SRC)/Core/HLE/sceUsb.cpp \
$(SRC)/Core/HLE/sceUsbCam.cpp \
$(SRC)/Core/HLE/sceUsbGps.cpp \
$(SRC)/Core/HLE/sceUtility.cpp \
$(SRC)/Core/HLE/sceVaudio.cpp \

View File

@ -995,6 +995,22 @@ extern "C" jint JNICALL Java_org_ppsspp_ppsspp_NativeApp_getDesiredBackbufferHei
return desiredBackbufferSizeY;
}
extern "C" void JNICALL Java_org_ppsspp_ppsspp_NativeApp_pushNewGpsData(JNIEnv *, jclass,
jfloat latitude, jfloat longitude, jfloat altitude, jfloat speed, jfloat bearing, jlong time) {
PushNewGpsData(latitude, longitude, altitude, speed, bearing, time);
}
extern "C" void JNICALL Java_org_ppsspp_ppsspp_NativeApp_pushCameraImage(JNIEnv *env, jclass,
jbyteArray image) {
if (image != NULL) {
jlong size = env->GetArrayLength(image);
jbyte* buffer = env->GetByteArrayElements(image, NULL);
PushCameraImage(size, (unsigned char *)buffer);
env->ReleaseByteArrayElements(image, buffer, JNI_ABORT);
}
}
// Call this under frameCommandLock.
static void ProcessFrameCommands(JNIEnv *env) {
while (!frameCommands.empty()) {

View File

@ -0,0 +1,112 @@
package org.ppsspp.ppsspp;
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.ImageFormat;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
import android.graphics.YuvImage;
import android.hardware.Camera;
import android.util.Log;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
@TargetApi(23)
@SuppressWarnings("deprecation")
class CameraHelper {
private static final String TAG = "CameraHelper";
private Camera mCamera = null;
private int previewWidth = 0;
private int previewHeight = 0;
private long lastTime = 0;
private SurfaceTexture mSurfaceTexture;
private Camera.PreviewCallback mPreviewCallback = new Camera.PreviewCallback() {
@Override
public void onPreviewFrame(byte[] previewData, Camera camera) {
// throttle at 100 ms
long currentTime = System.currentTimeMillis();
if (currentTime - lastTime < 100) {
return;
}
lastTime = currentTime;
YuvImage yuvImage = new YuvImage(previewData, ImageFormat.NV21, previewWidth, previewHeight, null);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// the expected values arrives in sceUsbCamSetupVideo
int targetW = 480;
int targetH = 272;
// crop to expected size and convert to Jpeg
Rect rect = new Rect(
(previewWidth-targetW)/2,
(previewHeight-targetH)/2,
previewWidth-(previewWidth-targetW)/2,
previewHeight-(previewHeight-targetH)/2
);
yuvImage.compressToJpeg(rect, 80, baos);
NativeApp.pushCameraImage(baos.toByteArray());
}
};
@SuppressWarnings("unused")
CameraHelper(Context context) {
mSurfaceTexture = new SurfaceTexture(10);
}
void startCamera() {
Log.d(TAG, "startCamera");
try {
mCamera = Camera.open();
Camera.Parameters param = mCamera.getParameters();
// Set preview size
List<Camera.Size> previewSizes = param.getSupportedPreviewSizes();
previewWidth = previewSizes.get(0).width;
previewHeight = previewSizes.get(0).height;
for (int i = 0; i < previewSizes.size(); i++) {
Log.d(TAG, "getSupportedPreviewSizes[" + i + "]: " + previewSizes.get(i).height + " " + previewSizes.get(i).width);
if (previewSizes.get(i).width <= 640 && previewSizes.get(i).height <= 480) {
previewWidth = previewSizes.get(i).width;
previewHeight = previewSizes.get(i).height;
break;
}
}
Log.d(TAG, "setPreviewSize(" + previewWidth + ", " + previewHeight + ")");
param.setPreviewSize(previewWidth, previewHeight);
// Set preview FPS
int[] fps;
List<int[]> previewFps = param.getSupportedPreviewFpsRange();
fps = previewFps.get(0);
for (int i = 0; i < previewFps.size(); i++) {
Log.d(TAG, "getSupportedPreviewFpsRange[" + i + "]: " + previewFps.get(i)[0] + " " + previewFps.get(i)[1]);
if (previewFps.get(i)[0] <= fps[0] && previewFps.get(i)[1] <= fps[1]) {
fps = previewFps.get(i);
}
}
Log.d(TAG, "setPreviewFpsRange(" + fps[0] + ", " + fps[1] + ")");
param.setPreviewFpsRange(fps[0], fps[1]);
mCamera.setParameters(param);
mCamera.setPreviewTexture(mSurfaceTexture);
mCamera.setPreviewCallback(mPreviewCallback);
mCamera.startPreview();
} catch (IOException e) {
Log.e(TAG, "Cannot start camera: " + e.toString());
}
}
void stopCamera() {
Log.d(TAG, "stopCamera");
if (mCamera != null) {
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
}

View File

@ -0,0 +1,71 @@
package org.ppsspp.ppsspp;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.util.Log;
class LocationHelper implements LocationListener {
private static final String TAG = "LocationHelper";
private LocationManager mLocationManager;
private boolean mLocationEnable;
LocationHelper(Context context) {
mLocationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
mLocationEnable = false;
}
void startLocationUpdates() {
Log.d(TAG, "startLocationUpdates");
if (!mLocationEnable) {
boolean isGPSEnabled = mLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);
boolean isNetworkEnabled = mLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
try {
mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, this);
mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, this);
mLocationEnable = true;
} catch (SecurityException e) {
Log.e(TAG, "Cannot start location updates: " + e.toString());
}
if(!isGPSEnabled && !isNetworkEnabled) {
Log.i(TAG, "No location provider found");
// TODO: notify user
}
}
}
void stopLocationUpdates() {
Log.d(TAG, "stopLocationUpdates");
if (mLocationEnable) {
mLocationEnable = false;
mLocationManager.removeUpdates(this);
}
}
@Override
public void onLocationChanged(Location location) {
float latitude = (float)location.getLatitude();
float longitude = (float)location.getLongitude();
float altitude = (float)location.getAltitude();
float speed = location.getSpeed();
float bearing = location.getBearing();
long time = location.getTime() / 1000; // ms to s !!
NativeApp.pushNewGpsData(latitude, longitude, altitude, speed, bearing, time);
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
}

View File

@ -1,10 +1,5 @@
package org.ppsspp.ppsspp;
import java.io.File;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Locale;
import android.Manifest;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
@ -24,7 +19,6 @@ import android.content.res.Configuration;
import android.database.Cursor;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Build;
@ -38,10 +32,10 @@ import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Display;
import android.view.Gravity;
import android.view.HapticFeedbackConstants;
import android.view.InputDevice;
import android.view.InputEvent;
import android.view.KeyEvent;
import android.view.HapticFeedbackConstants;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
@ -55,6 +49,11 @@ import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.Toast;
import java.io.File;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Locale;
public abstract class NativeActivity extends Activity implements SurfaceHolder.Callback {
// Remember to loadLibrary your JNI .so in a static {} block
@ -108,11 +107,29 @@ public abstract class NativeActivity extends Activity implements SurfaceHolder.C
private InputDeviceState inputPlayerC;
private String inputPlayerADesc;
private static LocationHelper mLocationHelper;
private static CameraHelper mCameraHelper;
private float densityDpi;
private float refreshRate;
private int pixelWidth;
private int pixelHeight;
private static final String[] permissionsForStorage = {
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
private static final String[] permissionsForLocation = {
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
};
private static final String[] permissionsForCamera = {
Manifest.permission.CAMERA
};
public static final int REQUEST_CODE_STORAGE_PERMISSION = 1;
public static final int REQUEST_CODE_LOCATION_PERMISSION = 2;
public static final int REQUEST_CODE_CAMERA_PERMISSION = 3;
// Functions for the app activity to override to change behaviour.
public native void registerCallbacks();
@ -158,18 +175,20 @@ public abstract class NativeActivity extends Activity implements SurfaceHolder.C
return libdir;
}
public static final int REQUEST_CODE_STORAGE_PERMISSION = 1337;
@TargetApi(23)
public void askForStoragePermission() {
boolean askForPermissions(String[] permissions, int requestCode) {
boolean shouldAsk = false;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (this.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
NativeApp.sendMessage("permission_pending", "storage");
this.requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_CODE_STORAGE_PERMISSION);
} else {
NativeApp.sendMessage("permission_granted", "storage");
for (String permission : permissions) {
if (this.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
shouldAsk = true;
}
}
if (shouldAsk) {
this.requestPermissions(permissions, requestCode);
}
}
return shouldAsk;
}
@TargetApi(23)
@ -182,13 +201,36 @@ public abstract class NativeActivity extends Activity implements SurfaceHolder.C
}
}
boolean permissionsGranted(String[] permissions, int[] grantResults) {
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED)
return false;
}
return true;
}
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
if (requestCode == REQUEST_CODE_STORAGE_PERMISSION && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
NativeApp.sendMessage("permission_granted", "storage");
} else {
NativeApp.sendMessage("permission_denied", "storage");
switch (requestCode) {
case REQUEST_CODE_STORAGE_PERMISSION:
if (permissionsGranted(permissions, grantResults)) {
NativeApp.sendMessage("permission_granted", "storage");
} else {
NativeApp.sendMessage("permission_denied", "storage");
}
break;
case REQUEST_CODE_LOCATION_PERMISSION:
if (permissionsGranted(permissions, grantResults)) {
mLocationHelper.startLocationUpdates();
}
break;
case REQUEST_CODE_CAMERA_PERMISSION:
if (permissionsGranted(permissions, grantResults)) {
mCameraHelper.startCamera();
}
break;
default:
}
}
@ -288,6 +330,9 @@ public abstract class NativeActivity extends Activity implements SurfaceHolder.C
if (Build.VERSION.SDK_INT >= 11) {
checkForVibrator();
}
mLocationHelper = new LocationHelper(this);
mCameraHelper = new CameraHelper(this);
}
@TargetApi(24)
@ -1149,7 +1194,33 @@ public abstract class NativeActivity extends Activity implements SurfaceHolder.C
shuttingDown = true;
recreate();
} else if (command.equals("ask_permission") && params.equals("storage")) {
askForStoragePermission();
if (askForPermissions(permissionsForStorage, REQUEST_CODE_STORAGE_PERMISSION)) {
NativeApp.sendMessage("permission_pending", "storage");
} else {
NativeApp.sendMessage("permission_granted", "storage");
}
} else if (command.equals("gps_command")) {
switch (params) {
case "open":
if(!askForPermissions(permissionsForLocation, REQUEST_CODE_LOCATION_PERMISSION)) {
mLocationHelper.startLocationUpdates();
}
break;
case "close":
mLocationHelper.stopLocationUpdates();
break;
}
} else if (command.equals("camera_command")) {
switch (params) {
case "startVideo":
if(!askForPermissions(permissionsForCamera, REQUEST_CODE_CAMERA_PERMISSION)) {
mCameraHelper.startCamera();
}
break;
case "stopVideo":
mCameraHelper.stopCamera();
break;
}
}
return false;
}

View File

@ -52,5 +52,9 @@ public class NativeApp {
public static native void sendMessage(String msg, String arg);
public static native String queryConfig(String queryName);
public static native void pushNewGpsData(float latitude, float longitude, float altitude, float speed, float bearing, long time);
public static native void pushCameraImage(byte[] image);
}

View File

@ -190,3 +190,6 @@ enum SystemProperty {
std::string System_GetProperty(SystemProperty prop);
int System_GetPropertyInt(SystemProperty prop);
bool System_GetPropertyBool(SystemProperty prop);
void PushNewGpsData(float latitude, float longitude, float altitude, float speed, float bearing, long long time);
void PushCameraImage(long long length, unsigned char* image);