aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ARM.cpp49
-rw-r--r--src/ARM.h32
-rw-r--r--src/CMakeLists.txt13
-rw-r--r--src/CP15.cpp21
-rw-r--r--src/Config.cpp25
-rw-r--r--src/Config.h13
-rw-r--r--src/DMA.cpp32
-rw-r--r--src/DMA.h5
-rw-r--r--src/DSi.cpp1806
-rw-r--r--src/DSi.h93
-rw-r--r--src/DSiCrypto.cpp17
-rw-r--r--src/DSiCrypto.h24
-rw-r--r--src/DSi_AES.cpp555
-rw-r--r--src/DSi_AES.h54
-rw-r--r--src/DSi_Camera.cpp166
-rw-r--r--src/DSi_Camera.h58
-rw-r--r--src/DSi_I2C.cpp255
-rw-r--r--src/DSi_I2C.h41
-rw-r--r--src/DSi_NDMA.cpp341
-rw-r--r--src/DSi_NDMA.h96
-rw-r--r--src/DSi_NWifi.cpp881
-rw-r--r--src/DSi_NWifi.h121
-rw-r--r--src/DSi_SD.cpp934
-rw-r--r--src/DSi_SD.h154
-rw-r--r--src/DSi_SPI_TSC.cpp231
-rw-r--r--src/DSi_SPI_TSC.h40
-rw-r--r--src/FIFO.h9
-rw-r--r--src/GPU.cpp89
-rw-r--r--src/GPU.h34
-rw-r--r--src/GPU2D.cpp16
-rw-r--r--src/GPU2D.h2
-rw-r--r--src/GPU3D.cpp57
-rw-r--r--src/GPU3D.h7
-rw-r--r--src/GPU3D_OpenGL.cpp29
-rw-r--r--src/GPU3D_Soft.cpp10
-rw-r--r--src/GPU_OpenGL.cpp206
-rw-r--r--src/GPU_OpenGL_shaders.h867
-rw-r--r--src/NDS.cpp232
-rw-r--r--src/NDS.h63
-rw-r--r--src/NDSCart.cpp160
-rw-r--r--src/NDSCart.h2
-rw-r--r--src/OpenGLSupport.cpp14
-rw-r--r--src/OpenGLSupport.h31
-rw-r--r--src/Platform.h3
-rw-r--r--src/ROMList.h6809
-rw-r--r--src/SPI.cpp52
-rw-r--r--src/SPI.h5
-rw-r--r--src/SPU.cpp18
-rw-r--r--src/SPU.h6
-rw-r--r--src/frontend/FrontendUtil.h80
-rw-r--r--src/frontend/Util_Audio.cpp72
-rw-r--r--src/frontend/Util_ROM.cpp301
-rw-r--r--src/frontend/Util_Video.cpp334
-rw-r--r--src/frontend/mic_blow.h5539
-rw-r--r--src/frontend/qt_sdl/AudioSettingsDialog.cpp103
-rw-r--r--src/frontend/qt_sdl/AudioSettingsDialog.h69
-rw-r--r--src/frontend/qt_sdl/AudioSettingsDialog.ui174
-rw-r--r--src/frontend/qt_sdl/CMakeLists.txt79
-rw-r--r--src/frontend/qt_sdl/EmuSettingsDialog.cpp213
-rw-r--r--src/frontend/qt_sdl/EmuSettingsDialog.h72
-rw-r--r--src/frontend/qt_sdl/EmuSettingsDialog.ui313
-rw-r--r--src/frontend/qt_sdl/Input.cpp244
-rw-r--r--src/frontend/qt_sdl/Input.h51
-rw-r--r--src/frontend/qt_sdl/InputConfigDialog.cpp494
-rw-r--r--src/frontend/qt_sdl/InputConfigDialog.h123
-rw-r--r--src/frontend/qt_sdl/InputConfigDialog.ui131
-rw-r--r--src/frontend/qt_sdl/LAN_PCap.cpp387
-rw-r--r--src/frontend/qt_sdl/LAN_PCap.h53
-rw-r--r--src/frontend/qt_sdl/LAN_Socket.cpp1145
-rw-r--r--src/frontend/qt_sdl/LAN_Socket.h38
-rw-r--r--src/frontend/qt_sdl/OSD.cpp474
-rw-r--r--src/frontend/qt_sdl/OSD.h36
-rw-r--r--src/frontend/qt_sdl/OSD_shaders.h65
-rw-r--r--src/frontend/qt_sdl/Platform.cpp255
-rw-r--r--src/frontend/qt_sdl/PlatformConfig.cpp72
-rw-r--r--src/frontend/qt_sdl/PlatformConfig.h14
-rw-r--r--src/frontend/qt_sdl/VideoSettingsDialog.cpp169
-rw-r--r--src/frontend/qt_sdl/VideoSettingsDialog.h84
-rw-r--r--src/frontend/qt_sdl/VideoSettingsDialog.ui229
-rw-r--r--src/frontend/qt_sdl/WifiSettingsDialog.cpp140
-rw-r--r--src/frontend/qt_sdl/WifiSettingsDialog.h68
-rw-r--r--src/frontend/qt_sdl/WifiSettingsDialog.ui165
-rw-r--r--src/frontend/qt_sdl/font.h135
-rw-r--r--src/frontend/qt_sdl/main.cpp1634
-rw-r--r--src/frontend/qt_sdl/main.h166
-rw-r--r--src/frontend/qt_sdl/main_shaders.h64
-rw-r--r--src/frontend/qt_sdl/pcap/bluetooth.h (renamed from src/pcap/bluetooth.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/bpf.h (renamed from src/pcap/bpf.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/can_socketcan.h (renamed from src/pcap/can_socketcan.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/compiler-tests.h (renamed from src/pcap/compiler-tests.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/dlt.h (renamed from src/pcap/dlt.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/funcattrs.h (renamed from src/pcap/funcattrs.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/ipnet.h (renamed from src/pcap/ipnet.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/namedb.h (renamed from src/pcap/namedb.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/nflog.h (renamed from src/pcap/nflog.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/pcap-inttypes.h (renamed from src/pcap/pcap-inttypes.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/pcap.h (renamed from src/pcap/pcap.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/sll.h (renamed from src/pcap/sll.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/usb.h (renamed from src/pcap/usb.h)0
-rw-r--r--src/frontend/qt_sdl/pcap/vlan.h (renamed from src/pcap/vlan.h)0
-rw-r--r--src/sha1/sha1.c277
-rw-r--r--src/sha1/sha1.h19
-rw-r--r--src/tiny-AES-c/README.md80
-rw-r--r--src/tiny-AES-c/aes.c572
-rw-r--r--src/tiny-AES-c/aes.h90
-rw-r--r--src/tiny-AES-c/aes.hpp12
-rw-r--r--src/tiny-AES-c/unlicense.txt24
107 files changed, 28853 insertions, 784 deletions
diff --git a/src/ARM.cpp b/src/ARM.cpp
index 6248de2..68cac59 100644
--- a/src/ARM.cpp
+++ b/src/ARM.cpp
@@ -18,6 +18,7 @@
#include <stdio.h>
#include "NDS.h"
+#include "DSi.h"
#include "ARM.h"
#include "ARMInterpreter.h"
#include "AREngine.h"
@@ -101,10 +102,55 @@ void ARM::Reset()
void ARMv5::Reset()
{
+ if (NDS::ConsoleType == 1)
+ {
+ BusRead8 = DSi::ARM9Read8;
+ BusRead16 = DSi::ARM9Read16;
+ BusRead32 = DSi::ARM9Read32;
+ BusWrite8 = DSi::ARM9Write8;
+ BusWrite16 = DSi::ARM9Write16;
+ BusWrite32 = DSi::ARM9Write32;
+ GetMemRegion = DSi::ARM9GetMemRegion;
+ }
+ else
+ {
+ BusRead8 = NDS::ARM9Read8;
+ BusRead16 = NDS::ARM9Read16;
+ BusRead32 = NDS::ARM9Read32;
+ BusWrite8 = NDS::ARM9Write8;
+ BusWrite16 = NDS::ARM9Write16;
+ BusWrite32 = NDS::ARM9Write32;
+ GetMemRegion = NDS::ARM9GetMemRegion;
+ }
+
CP15Reset();
ARM::Reset();
}
+void ARMv4::Reset()
+{
+ if (NDS::ConsoleType)
+ {
+ BusRead8 = DSi::ARM7Read8;
+ BusRead16 = DSi::ARM7Read16;
+ BusRead32 = DSi::ARM7Read32;
+ BusWrite8 = DSi::ARM7Write8;
+ BusWrite16 = DSi::ARM7Write16;
+ BusWrite32 = DSi::ARM7Write32;
+ }
+ else
+ {
+ BusRead8 = NDS::ARM7Read8;
+ BusRead16 = NDS::ARM7Read16;
+ BusRead32 = NDS::ARM7Read32;
+ BusWrite8 = NDS::ARM7Write8;
+ BusWrite16 = NDS::ARM7Write16;
+ BusWrite32 = NDS::ARM7Write32;
+ }
+
+ ARM::Reset();
+}
+
void ARM::DoSavestate(Savestate* file)
{
@@ -222,9 +268,6 @@ void ARMv5::JumpTo(u32 addr, bool restorecpsr)
CPSR &= ~0x20;
}
- // TODO: investigate this
- // firmware jumps to region 01FFxxxx, but region 5 (01000000-02000000) is set to non-executable
- // is melonDS fucked up somewhere, or is the DS PU just incomplete/crapoed?
/*if (!(PU_Map[addr>>12] & 0x04))
{
printf("jumped to %08X. very bad\n", addr);
diff --git a/src/ARM.h b/src/ARM.h
index b9f5d89..e0832e2 100644
--- a/src/ARM.h
+++ b/src/ARM.h
@@ -132,6 +132,14 @@ public:
NDS::MemRegion CodeMem;
static u32 ConditionTable[16];
+
+protected:
+ u8 (*BusRead8)(u32 addr);
+ u16 (*BusRead16)(u32 addr);
+ u32 (*BusRead32)(u32 addr);
+ void (*BusWrite8)(u32 addr, u8 val);
+ void (*BusWrite16)(u32 addr, u16 val);
+ void (*BusWrite32)(u32 addr, u32 val);
};
class ARMv5 : public ARM
@@ -259,6 +267,8 @@ public:
s32 RegionCodeCycles;
u8* CurICacheLine;
+
+ bool (*GetMemRegion)(u32 addr, bool write, NDS::MemRegion* region);
};
class ARMv4 : public ARM
@@ -266,23 +276,25 @@ class ARMv4 : public ARM
public:
ARMv4();
+ void Reset();
+
void JumpTo(u32 addr, bool restorecpsr = false);
void Execute();
u16 CodeRead16(u32 addr)
{
- return NDS::ARM7Read16(addr);
+ return BusRead16(addr);
}
u32 CodeRead32(u32 addr)
{
- return NDS::ARM7Read32(addr);
+ return BusRead32(addr);
}
void DataRead8(u32 addr, u32* val)
{
- *val = NDS::ARM7Read8(addr);
+ *val = BusRead8(addr);
DataRegion = addr >> 24;
DataCycles = NDS::ARM7MemTimings[DataRegion][0];
}
@@ -291,7 +303,7 @@ public:
{
addr &= ~1;
- *val = NDS::ARM7Read16(addr);
+ *val = BusRead16(addr);
DataRegion = addr >> 24;
DataCycles = NDS::ARM7MemTimings[DataRegion][0];
}
@@ -300,7 +312,7 @@ public:
{
addr &= ~3;
- *val = NDS::ARM7Read32(addr);
+ *val = BusRead32(addr);
DataRegion = addr >> 24;
DataCycles = NDS::ARM7MemTimings[DataRegion][2];
}
@@ -309,13 +321,13 @@ public:
{
addr &= ~3;
- *val = NDS::ARM7Read32(addr);
+ *val = BusRead32(addr);
DataCycles += NDS::ARM7MemTimings[DataRegion][3];
}
void DataWrite8(u32 addr, u8 val)
{
- NDS::ARM7Write8(addr, val);
+ BusWrite8(addr, val);
DataRegion = addr >> 24;
DataCycles = NDS::ARM7MemTimings[DataRegion][0];
}
@@ -324,7 +336,7 @@ public:
{
addr &= ~1;
- NDS::ARM7Write16(addr, val);
+ BusWrite16(addr, val);
DataRegion = addr >> 24;
DataCycles = NDS::ARM7MemTimings[DataRegion][0];
}
@@ -333,7 +345,7 @@ public:
{
addr &= ~3;
- NDS::ARM7Write32(addr, val);
+ BusWrite32(addr, val);
DataRegion = addr >> 24;
DataCycles = NDS::ARM7MemTimings[DataRegion][2];
}
@@ -342,7 +354,7 @@ public:
{
addr &= ~3;
- NDS::ARM7Write32(addr, val);
+ BusWrite32(addr, val);
DataCycles += NDS::ARM7MemTimings[DataRegion][3];
}
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 245e6a2..32fcac2 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -13,9 +13,19 @@ add_library(core STATIC
CP15.cpp
CRC32.cpp
DMA.cpp
+ DSi.cpp
+ DSi_AES.cpp
+ DSi_Camera.cpp
+ DSi_I2C.cpp
+ DSi_NDMA.cpp
+ DSi_NWifi.cpp
+ DSi_SD.cpp
+ DSi_SPI_TSC.cpp
FIFO.h
GBACart.cpp
GPU.cpp
+ GPU_OpenGL.cpp
+ GPU_OpenGL_shaders.h
GPU2D.cpp
GPU3D.cpp
GPU3D_OpenGL.cpp
@@ -25,6 +35,7 @@ add_library(core STATIC
NDSCart.cpp
OpenGLSupport.cpp
Platform.h
+ ROMList.h
RTC.cpp
Savestate.cpp
SPI.cpp
@@ -33,6 +44,8 @@ add_library(core STATIC
version.h
Wifi.cpp
WifiAP.cpp
+
+ tiny-AES-c/aes.c
)
if (WIN32)
diff --git a/src/CP15.cpp b/src/CP15.cpp
index c1f46bc..d340b9e 100644
--- a/src/CP15.cpp
+++ b/src/CP15.cpp
@@ -19,6 +19,7 @@
#include <stdio.h>
#include <string.h>
#include "NDS.h"
+#include "DSi.h"
#include "ARM.h"
@@ -719,7 +720,7 @@ u32 ARMv5::CodeRead32(u32 addr, bool branch)
if (CodeMem.Mem) return *(u32*)&CodeMem.Mem[addr & CodeMem.Mask];
- return NDS::ARM9Read32(addr);
+ return BusRead32(addr);
}
@@ -738,7 +739,7 @@ void ARMv5::DataRead8(u32 addr, u32* val)
return;
}
- *val = NDS::ARM9Read8(addr);
+ *val = BusRead8(addr);
DataCycles = MemTimings[addr >> 12][1];
}
@@ -759,7 +760,7 @@ void ARMv5::DataRead16(u32 addr, u32* val)
return;
}
- *val = NDS::ARM9Read16(addr);
+ *val = BusRead16(addr);
DataCycles = MemTimings[addr >> 12][1];
}
@@ -780,7 +781,7 @@ void ARMv5::DataRead32(u32 addr, u32* val)
return;
}
- *val = NDS::ARM9Read32(addr);
+ *val = BusRead32(addr);
DataCycles = MemTimings[addr >> 12][2];
}
@@ -801,7 +802,7 @@ void ARMv5::DataRead32S(u32 addr, u32* val)
return;
}
- *val = NDS::ARM9Read32(addr);
+ *val = BusRead32(addr);
DataCycles += MemTimings[addr >> 12][3];
}
@@ -820,7 +821,7 @@ void ARMv5::DataWrite8(u32 addr, u8 val)
return;
}
- NDS::ARM9Write8(addr, val);
+ BusWrite8(addr, val);
DataCycles = MemTimings[addr >> 12][1];
}
@@ -841,7 +842,7 @@ void ARMv5::DataWrite16(u32 addr, u16 val)
return;
}
- NDS::ARM9Write16(addr, val);
+ BusWrite16(addr, val);
DataCycles = MemTimings[addr >> 12][1];
}
@@ -862,7 +863,7 @@ void ARMv5::DataWrite32(u32 addr, u32 val)
return;
}
- NDS::ARM9Write32(addr, val);
+ BusWrite32(addr, val);
DataCycles = MemTimings[addr >> 12][2];
}
@@ -883,7 +884,7 @@ void ARMv5::DataWrite32S(u32 addr, u32 val)
return;
}
- NDS::ARM9Write32(addr, val);
+ BusWrite32(addr, val);
DataCycles += MemTimings[addr >> 12][3];
}
@@ -896,6 +897,6 @@ void ARMv5::GetCodeMemRegion(u32 addr, NDS::MemRegion* region)
return;
}*/
- NDS::ARM9GetMemRegion(addr, false, &CodeMem);
+ GetMemRegion(addr, false, &CodeMem);
}
diff --git a/src/Config.cpp b/src/Config.cpp
index f558ef6..5745f34 100644
--- a/src/Config.cpp
+++ b/src/Config.cpp
@@ -28,19 +28,25 @@ namespace Config
const char* kConfigFile = "melonDS.ini";
-int _3DRenderer;
-int Threaded3D;
+char BIOS9Path[1024];
+char BIOS7Path[1024];
+char FirmwarePath[1024];
-int GL_ScaleFactor;
-int GL_Antialias;
+char DSiBIOS9Path[1024];
+char DSiBIOS7Path[1024];
+char DSiFirmwarePath[1024];
+char DSiNANDPath[1024];
ConfigEntry ConfigFile[] =
{
- {"3DRenderer", 0, &_3DRenderer, 1, NULL, 0},
- {"Threaded3D", 0, &Threaded3D, 1, NULL, 0},
+ {"BIOS9Path", 1, BIOS9Path, 0, "", 1023},
+ {"BIOS7Path", 1, BIOS7Path, 0, "", 1023},
+ {"FirmwarePath", 1, FirmwarePath, 0, "", 1023},
- {"GL_ScaleFactor", 0, &GL_ScaleFactor, 1, NULL, 0},
- {"GL_Antialias", 0, &GL_Antialias, 0, NULL, 0},
+ {"DSiBIOS9Path", 1, DSiBIOS9Path, 0, "", 1023},
+ {"DSiBIOS7Path", 1, DSiBIOS7Path, 0, "", 1023},
+ {"DSiFirmwarePath", 1, DSiFirmwarePath, 0, "", 1023},
+ {"DSiNANDPath", 1, DSiNANDPath, 0, "", 1023},
{"", -1, NULL, 0, NULL, 0}
};
@@ -82,7 +88,8 @@ void Load()
while (!feof(f))
{
fgets(linebuf, 1024, f);
- int ret = sscanf(linebuf, "%32[A-Za-z_0-9]=%[^\t\n]", entryname, entryval);
+ int ret = sscanf(linebuf, "%31[A-Za-z_0-9]=%[^\t\n]", entryname, entryval);
+ entryname[31] = '\0';
if (ret < 2) continue;
ConfigEntry* entry = &ConfigFile[0];
diff --git a/src/Config.h b/src/Config.h
index 0aeab85..3947598 100644
--- a/src/Config.h
+++ b/src/Config.h
@@ -42,11 +42,14 @@ bool HasConfigFile(const char* fileName);
void Load();
void Save();
-extern int _3DRenderer;
-extern int Threaded3D;
-
-extern int GL_ScaleFactor;
-extern int GL_Antialias;
+extern char BIOS9Path[1024];
+extern char BIOS7Path[1024];
+extern char FirmwarePath[1024];
+
+extern char DSiBIOS9Path[1024];
+extern char DSiBIOS7Path[1024];
+extern char DSiFirmwarePath[1024];
+extern char DSiNANDPath[1024];
}
diff --git a/src/DMA.cpp b/src/DMA.cpp
index ae3fdd7..cd2df45 100644
--- a/src/DMA.cpp
+++ b/src/DMA.cpp
@@ -18,16 +18,11 @@
#include <stdio.h>
#include "NDS.h"
+#include "DSi.h"
#include "DMA.h"
-#include "NDSCart.h"
#include "GPU.h"
-// NOTES ON DMA SHIT
-//
-// * could use optimized code paths for common types of DMA transfers. for example, VRAM
-// have to profile it to see if it's actually worth doing
-
// DMA TIMINGS
//
@@ -58,8 +53,6 @@ DMA::DMA(u32 cpu, u32 num)
CountMask = 0x001FFFFF;
else
CountMask = (num==3 ? 0x0000FFFF : 0x00003FFF);
-
- Reset();
}
DMA::~DMA()
@@ -82,6 +75,21 @@ void DMA::Reset()
Running = false;
InProgress = false;
+
+ if (NDS::ConsoleType == 1)
+ {
+ BusRead16 = (CPU==0) ? DSi::ARM9Read16 : DSi::ARM7Read16;
+ BusRead32 = (CPU==0) ? DSi::ARM9Read32 : DSi::ARM7Read32;
+ BusWrite16 = (CPU==0) ? DSi::ARM9Write16 : DSi::ARM7Write16;
+ BusWrite32 = (CPU==0) ? DSi::ARM9Write32 : DSi::ARM7Write32;
+ }
+ else
+ {
+ BusRead16 = (CPU==0) ? NDS::ARM9Read16 : NDS::ARM7Read16;
+ BusRead32 = (CPU==0) ? NDS::ARM9Read32 : NDS::ARM7Read32;
+ BusWrite16 = (CPU==0) ? NDS::ARM9Write16 : NDS::ARM7Write16;
+ BusWrite32 = (CPU==0) ? NDS::ARM9Write32 : NDS::ARM7Write32;
+ }
}
void DMA::DoSavestate(Savestate* file)
@@ -232,7 +240,7 @@ void DMA::Run9()
{
NDS::ARM9Timestamp += (unitcycles << NDS::ARM9ClockShift);
- NDS::ARM9Write16(CurDstAddr, NDS::ARM9Read16(CurSrcAddr));
+ BusWrite16(CurDstAddr, BusRead16(CurSrcAddr));
CurSrcAddr += SrcAddrInc<<1;
CurDstAddr += DstAddrInc<<1;
@@ -268,7 +276,7 @@ void DMA::Run9()
{
NDS::ARM9Timestamp += (unitcycles << NDS::ARM9ClockShift);
- NDS::ARM9Write32(CurDstAddr, NDS::ARM9Read32(CurSrcAddr));
+ BusWrite32(CurDstAddr, BusRead32(CurSrcAddr));
CurSrcAddr += SrcAddrInc<<2;
CurDstAddr += DstAddrInc<<2;
@@ -344,7 +352,7 @@ void DMA::Run7()
{
NDS::ARM7Timestamp += unitcycles;
- NDS::ARM7Write16(CurDstAddr, NDS::ARM7Read16(CurSrcAddr));
+ BusWrite16(CurDstAddr, BusRead16(CurSrcAddr));
CurSrcAddr += SrcAddrInc<<1;
CurDstAddr += DstAddrInc<<1;
@@ -380,7 +388,7 @@ void DMA::Run7()
{
NDS::ARM7Timestamp += unitcycles;
- NDS::ARM7Write32(CurDstAddr, NDS::ARM7Read32(CurSrcAddr));
+ BusWrite32(CurDstAddr, BusRead32(CurSrcAddr));
CurSrcAddr += SrcAddrInc<<2;
CurDstAddr += DstAddrInc<<2;
diff --git a/src/DMA.h b/src/DMA.h
index 2e7678c..0344fba 100644
--- a/src/DMA.h
+++ b/src/DMA.h
@@ -86,6 +86,11 @@ private:
bool Stall;
bool IsGXFIFODMA;
+
+ u16 (*BusRead16)(u32 addr);
+ u32 (*BusRead32)(u32 addr);
+ void (*BusWrite16)(u32 addr, u16 val);
+ void (*BusWrite32)(u32 addr, u32 val);
};
#endif
diff --git a/src/DSi.cpp b/src/DSi.cpp
new file mode 100644
index 0000000..216f724
--- /dev/null
+++ b/src/DSi.cpp
@@ -0,0 +1,1806 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "Config.h"
+#include "NDS.h"
+#include "DSi.h"
+#include "ARM.h"
+#include "GPU.h"
+#include "NDSCart.h"
+#include "Platform.h"
+
+#include "DSi_NDMA.h"
+#include "DSi_I2C.h"
+#include "DSi_SD.h"
+#include "DSi_AES.h"
+
+#include "tiny-AES-c/aes.hpp"
+
+
+namespace NDS
+{
+
+extern ARMv5* ARM9;
+extern ARMv4* ARM7;
+
+}
+
+
+namespace DSi
+{
+
+u32 BootAddr[2];
+
+u16 SCFG_BIOS;
+u16 SCFG_Clock9;
+u16 SCFG_Clock7;
+u32 SCFG_EXT[2];
+u32 SCFG_MC;
+
+u8 ARM9iBIOS[0x10000];
+u8 ARM7iBIOS[0x10000];
+
+u32 MBK[2][9];
+
+u8 NWRAM_A[0x40000];
+u8 NWRAM_B[0x40000];
+u8 NWRAM_C[0x40000];
+
+u8* NWRAMMap_A[2][4];
+u8* NWRAMMap_B[3][8];
+u8* NWRAMMap_C[3][8];
+
+u32 NWRAMStart[2][3];
+u32 NWRAMEnd[2][3];
+u32 NWRAMMask[2][3];
+
+u32 NDMACnt[2];
+DSi_NDMA* NDMAs[8];
+
+DSi_SDHost* SDMMC;
+DSi_SDHost* SDIO;
+
+u64 ConsoleID;
+u8 eMMC_CID[16];
+
+u8 ITCMInit[0x8000];
+u8 ARM7Init[0x3C00];
+
+
+bool Init()
+{
+ if (!DSi_I2C::Init()) return false;
+ if (!DSi_AES::Init()) return false;
+
+ NDMAs[0] = new DSi_NDMA(0, 0);
+ NDMAs[1] = new DSi_NDMA(0, 1);
+ NDMAs[2] = new DSi_NDMA(0, 2);
+ NDMAs[3] = new DSi_NDMA(0, 3);
+ NDMAs[4] = new DSi_NDMA(1, 0);
+ NDMAs[5] = new DSi_NDMA(1, 1);
+ NDMAs[6] = new DSi_NDMA(1, 2);
+ NDMAs[7] = new DSi_NDMA(1, 3);
+
+ SDMMC = new DSi_SDHost(0);
+ SDIO = new DSi_SDHost(1);
+
+ return true;
+}
+
+void DeInit()
+{
+ DSi_I2C::DeInit();
+ DSi_AES::DeInit();
+
+ for (int i = 0; i < 8; i++) delete NDMAs[i];
+
+ delete SDMMC;
+ delete SDIO;
+}
+
+void Reset()
+{
+ //NDS::ARM9->CP15Write(0x910, 0x0D00000A);
+ //NDS::ARM9->CP15Write(0x911, 0x00000020);
+ //NDS::ARM9->CP15Write(0x100, NDS::ARM9->CP15Read(0x100) | 0x00050000);
+
+ NDS::ARM9->JumpTo(BootAddr[0]);
+ NDS::ARM7->JumpTo(BootAddr[1]);
+
+ NDMACnt[0] = 0; NDMACnt[1] = 0;
+ for (int i = 0; i < 8; i++) NDMAs[i]->Reset();
+
+ memcpy(NDS::ARM9->ITCM, ITCMInit, 0x8000);
+
+ DSi_I2C::Reset();
+ DSi_AES::Reset();
+
+ SDMMC->Reset();
+ SDIO->Reset();
+
+ SCFG_BIOS = 0x0101; // TODO: should be zero when booting from BIOS
+ SCFG_Clock9 = 0x0187; // CHECKME
+ SCFG_Clock7 = 0x0187;
+ SCFG_EXT[0] = 0x8307F100;
+ SCFG_EXT[1] = 0x93FFFB06;
+ SCFG_MC = 0x0010;//0x0011;
+
+ // LCD init flag
+ GPU::DispStat[0] |= (1<<6);
+ GPU::DispStat[1] |= (1<<6);
+
+ NDS::MapSharedWRAM(3);
+
+ for (u32 i = 0; i < 0x3C00; i+=4)
+ ARM7Write32(0x03FFC400+i, *(u32*)&ARM7Init[i]);
+
+ u32 eaddr = 0x03FFE6E4;
+ ARM7Write32(eaddr+0x00, *(u32*)&eMMC_CID[0]);
+ ARM7Write32(eaddr+0x04, *(u32*)&eMMC_CID[4]);
+ ARM7Write32(eaddr+0x08, *(u32*)&eMMC_CID[8]);
+ ARM7Write32(eaddr+0x0C, *(u32*)&eMMC_CID[12]);
+ ARM7Write16(eaddr+0x2C, 0x0001);
+ ARM7Write16(eaddr+0x2E, 0x0001);
+ ARM7Write16(eaddr+0x3C, 0x0100);
+ ARM7Write16(eaddr+0x3E, 0x40E0);
+ ARM7Write16(eaddr+0x42, 0x0001);
+}
+
+void SoftReset()
+{
+ // TODO: check exactly what is reset
+ // presumably, main RAM isn't reset, since the DSi can be told
+ // to boot a specific title this way
+ // BPTWL state wouldn't be reset either since BPTWL[0x70] is
+ // the warmboot flag
+
+ // also, BPTWL[0x70] could be abused to quickly boot specific titles
+
+ NDS::ARM9->Reset();
+ NDS::ARM7->Reset();
+
+ memcpy(NDS::ARM9->ITCM, ITCMInit, 0x8000);
+
+ DSi_AES::Reset();
+
+ LoadNAND();
+
+ SDMMC->Reset();
+ SDIO->Reset();
+
+ NDS::ARM9->JumpTo(BootAddr[0]);
+ NDS::ARM7->JumpTo(BootAddr[1]);
+
+ SCFG_BIOS = 0x0101; // TODO: should be zero when booting from BIOS
+ SCFG_Clock9 = 0x0187; // CHECKME
+ SCFG_Clock7 = 0x0187;
+ SCFG_EXT[0] = 0x8307F100;
+ SCFG_EXT[1] = 0x93FFFB06;
+ SCFG_MC = 0x0010;//0x0011;
+
+ // LCD init flag
+ GPU::DispStat[0] |= (1<<6);
+ GPU::DispStat[1] |= (1<<6);
+
+ NDS::MapSharedWRAM(3);
+
+ for (u32 i = 0; i < 0x3C00; i+=4)
+ ARM7Write32(0x03FFC400+i, *(u32*)&ARM7Init[i]);
+
+ u32 eaddr = 0x03FFE6E4;
+ ARM7Write32(eaddr+0x00, *(u32*)&eMMC_CID[0]);
+ ARM7Write32(eaddr+0x04, *(u32*)&eMMC_CID[4]);
+ ARM7Write32(eaddr+0x08, *(u32*)&eMMC_CID[8]);
+ ARM7Write32(eaddr+0x0C, *(u32*)&eMMC_CID[12]);
+ ARM7Write16(eaddr+0x2C, 0x0001);
+ ARM7Write16(eaddr+0x2E, 0x0001);
+ ARM7Write16(eaddr+0x3C, 0x0100);
+ ARM7Write16(eaddr+0x3E, 0x40E0);
+ ARM7Write16(eaddr+0x42, 0x0001);
+}
+
+bool LoadBIOS()
+{
+ FILE* f;
+ u32 i;
+
+ memset(ARM9iBIOS, 0, 0x10000);
+ memset(ARM7iBIOS, 0, 0x10000);
+
+ f = Platform::OpenLocalFile(Config::DSiBIOS9Path, "rb");
+ if (!f)
+ {
+ printf("ARM9i BIOS not found\n");
+
+ for (i = 0; i < 16; i++)
+ ((u32*)ARM9iBIOS)[i] = 0xE7FFDEFF;
+ }
+ else
+ {
+ fseek(f, 0, SEEK_SET);
+ fread(ARM9iBIOS, 0x10000, 1, f);
+
+ printf("ARM9i BIOS loaded\n");
+ fclose(f);
+ }
+
+ f = Platform::OpenLocalFile(Config::DSiBIOS7Path, "rb");
+ if (!f)
+ {
+ printf("ARM7i BIOS not found\n");
+
+ for (i = 0; i < 16; i++)
+ ((u32*)ARM7iBIOS)[i] = 0xE7FFDEFF;
+ }
+ else
+ {
+ // TODO: check if the first 32 bytes are crapoed
+
+ fseek(f, 0, SEEK_SET);
+ fread(ARM7iBIOS, 0x10000, 1, f);
+
+ printf("ARM7i BIOS loaded\n");
+ fclose(f);
+ }
+
+ // herp
+ *(u32*)&ARM9iBIOS[0] = 0xEAFFFFFE;
+ *(u32*)&ARM7iBIOS[0] = 0xEAFFFFFE;
+
+ // TODO!!!!
+ // hax the upper 32K out of the goddamn DSi
+
+ return true;
+}
+
+bool LoadNAND()
+{
+ printf("Loading DSi NAND\n");
+
+ memset(NWRAM_A, 0, 0x40000);
+ memset(NWRAM_B, 0, 0x40000);
+ memset(NWRAM_C, 0, 0x40000);
+
+ memset(MBK, 0, sizeof(MBK));
+ memset(NWRAMMap_A, 0, sizeof(NWRAMMap_A));
+ memset(NWRAMMap_B, 0, sizeof(NWRAMMap_B));
+ memset(NWRAMMap_C, 0, sizeof(NWRAMMap_C));
+ memset(NWRAMStart, 0, sizeof(NWRAMStart));
+ memset(NWRAMEnd, 0, sizeof(NWRAMEnd));
+ memset(NWRAMMask, 0, sizeof(NWRAMMask));
+
+ FILE* f = Platform::OpenLocalFile(Config::DSiNANDPath, "rb");
+ if (f)
+ {
+ u32 bootparams[8];
+ fseek(f, 0x220, SEEK_SET);
+ fread(bootparams, 4, 8, f);
+
+ printf("ARM9: offset=%08X size=%08X RAM=%08X size_aligned=%08X\n",
+ bootparams[0], bootparams[1], bootparams[2], bootparams[3]);
+ printf("ARM7: offset=%08X size=%08X RAM=%08X size_aligned=%08X\n",
+ bootparams[4], bootparams[5], bootparams[6], bootparams[7]);
+
+ // read and apply new-WRAM settings
+
+ MBK[0][8] = 0;
+ MBK[1][8] = 0;
+
+ u32 mbk[12];
+ fseek(f, 0x380, SEEK_SET);
+ fread(mbk, 4, 12, f);
+
+ MapNWRAM_A(0, mbk[0] & 0xFF);
+ MapNWRAM_A(1, (mbk[0] >> 8) & 0xFF);
+ MapNWRAM_A(2, (mbk[0] >> 16) & 0xFF);
+ MapNWRAM_A(3, mbk[0] >> 24);
+
+ MapNWRAM_B(0, mbk[1] & 0xFF);
+ MapNWRAM_B(1, (mbk[1] >> 8) & 0xFF);
+ MapNWRAM_B(2, (mbk[1] >> 16) & 0xFF);
+ MapNWRAM_B(3, mbk[1] >> 24);
+ MapNWRAM_B(4, mbk[2] & 0xFF);
+ MapNWRAM_B(5, (mbk[2] >> 8) & 0xFF);
+ MapNWRAM_B(6, (mbk[2] >> 16) & 0xFF);
+ MapNWRAM_B(7, mbk[2] >> 24);
+
+ MapNWRAM_C(0, mbk[3] & 0xFF);
+ MapNWRAM_C(1, (mbk[3] >> 8) & 0xFF);
+ MapNWRAM_C(2, (mbk[3] >> 16) & 0xFF);
+ MapNWRAM_C(3, mbk[3] >> 24);
+ MapNWRAM_C(4, mbk[4] & 0xFF);
+ MapNWRAM_C(5, (mbk[4] >> 8) & 0xFF);
+ MapNWRAM_C(6, (mbk[4] >> 16) & 0xFF);
+ MapNWRAM_C(7, mbk[4] >> 24);
+
+ MapNWRAMRange(0, 0, mbk[5]);
+ MapNWRAMRange(0, 1, mbk[6]);
+ MapNWRAMRange(0, 2, mbk[7]);
+
+ MapNWRAMRange(1, 0, mbk[8]);
+ MapNWRAMRange(1, 1, mbk[9]);
+ MapNWRAMRange(1, 2, mbk[10]);
+
+ // TODO: find out why it is 0xFF000000
+ mbk[11] &= 0x00FFFF0F;
+ MBK[0][8] = mbk[11];
+ MBK[1][8] = mbk[11];
+
+ // load boot2 binaries
+
+ AES_ctx ctx;
+ const u8 boot2key[16] = {0xAD, 0x34, 0xEC, 0xF9, 0x62, 0x6E, 0xC2, 0x3A, 0xF6, 0xB4, 0x6C, 0x00, 0x80, 0x80, 0xEE, 0x98};
+ u8 boot2iv[16];
+ u8 tmp[16];
+ u32 dstaddr;
+
+ *(u32*)&tmp[0] = bootparams[3];
+ *(u32*)&tmp[4] = -bootparams[3];
+ *(u32*)&tmp[8] = ~bootparams[3];
+ *(u32*)&tmp[12] = 0;
+ for (int i = 0; i < 16; i++) boot2iv[i] = tmp[15-i];
+
+ AES_init_ctx_iv(&ctx, boot2key, boot2iv);
+
+ fseek(f, bootparams[0], SEEK_SET);
+ dstaddr = bootparams[2];
+ for (u32 i = 0; i < bootparams[3]; i += 16)
+ {
+ u8 data[16];
+ fread(data, 16, 1, f);
+
+ for (int j = 0; j < 16; j++) tmp[j] = data[15-j];
+ AES_CTR_xcrypt_buffer(&ctx, tmp, 16);
+ for (int j = 0; j < 16; j++) data[j] = tmp[15-j];
+
+ ARM9Write32(dstaddr, *(u32*)&data[0]); dstaddr += 4;
+ ARM9Write32(dstaddr, *(u32*)&data[4]); dstaddr += 4;
+ ARM9Write32(dstaddr, *(u32*)&data[8]); dstaddr += 4;
+ ARM9Write32(dstaddr, *(u32*)&data[12]); dstaddr += 4;
+ }
+
+ *(u32*)&tmp[0] = bootparams[7];
+ *(u32*)&tmp[4] = -bootparams[7];
+ *(u32*)&tmp[8] = ~bootparams[7];
+ *(u32*)&tmp[12] = 0;
+ for (int i = 0; i < 16; i++) boot2iv[i] = tmp[15-i];
+
+ AES_init_ctx_iv(&ctx, boot2key, boot2iv);
+
+ fseek(f, bootparams[4], SEEK_SET);
+ dstaddr = bootparams[6];
+ for (u32 i = 0; i < bootparams[7]; i += 16)
+ {
+ u8 data[16];
+ fread(data, 16, 1, f);
+
+ for (int j = 0; j < 16; j++) tmp[j] = data[15-j];
+ AES_CTR_xcrypt_buffer(&ctx, tmp, 16);
+ for (int j = 0; j < 16; j++) data[j] = tmp[15-j];
+
+ ARM7Write32(dstaddr, *(u32*)&data[0]); dstaddr += 4;
+ ARM7Write32(dstaddr, *(u32*)&data[4]); dstaddr += 4;
+ ARM7Write32(dstaddr, *(u32*)&data[8]); dstaddr += 4;
+ ARM7Write32(dstaddr, *(u32*)&data[12]); dstaddr += 4;
+ }
+
+ // repoint the CPUs to the boot2 binaries
+
+ BootAddr[0] = bootparams[2];
+ BootAddr[1] = bootparams[6];
+
+#define printhex(str, size) { for (int z = 0; z < (size); z++) printf("%02X", (str)[z]); printf("\n"); }
+#define printhex_rev(str, size) { for (int z = (size)-1; z >= 0; z--) printf("%02X", (str)[z]); printf("\n"); }
+
+ // read the nocash footer
+
+ fseek(f, -0x40, SEEK_END);
+
+ char nand_footer[16];
+ const char* nand_footer_ref = "DSi eMMC CID/CPU";
+ fread(nand_footer, 1, 16, f);
+ if (memcmp(nand_footer, nand_footer_ref, 16))
+ {
+ printf("ERROR: NAND missing nocash footer\n");
+ fclose(f);
+ return false;
+ }
+
+ fread(eMMC_CID, 1, 16, f);
+ fread(&ConsoleID, 1, 8, f);
+
+ printf("eMMC CID: "); printhex(eMMC_CID, 16);
+ printf("Console ID: %016llX\n", ConsoleID);
+
+ fclose(f);
+ }
+
+ memset(ITCMInit, 0, 0x8000);
+ memcpy(&ITCMInit[0x4400], &ARM9iBIOS[0x87F4], 0x400);
+ memcpy(&ITCMInit[0x4800], &ARM9iBIOS[0x9920], 0x80);
+ memcpy(&ITCMInit[0x4894], &ARM9iBIOS[0x99A0], 0x1048);
+ memcpy(&ITCMInit[0x58DC], &ARM9iBIOS[0xA9E8], 0x1048);
+
+ memset(ARM7Init, 0, 0x3C00);
+ memcpy(&ARM7Init[0x0000], &ARM7iBIOS[0x8188], 0x200);
+ memcpy(&ARM7Init[0x0200], &ARM7iBIOS[0xB5D8], 0x40);
+ memcpy(&ARM7Init[0x0254], &ARM7iBIOS[0xC6D0], 0x1048);
+ memcpy(&ARM7Init[0x129C], &ARM7iBIOS[0xD718], 0x1048);
+
+ return true;
+}
+
+
+void RunNDMAs(u32 cpu)
+{
+ // TODO: round-robin mode (requires DMA channels to have a subblock delay set)
+
+ if (cpu == 0)
+ {
+ if (NDS::ARM9Timestamp >= NDS::ARM9Target) return;
+
+ if (!(NDS::CPUStop & 0x80000000)) NDMAs[0]->Run();
+ if (!(NDS::CPUStop & 0x80000000)) NDMAs[1]->Run();
+ if (!(NDS::CPUStop & 0x80000000)) NDMAs[2]->Run();
+ if (!(NDS::CPUStop & 0x80000000)) NDMAs[3]->Run();
+ }
+ else
+ {
+ if (NDS::ARM7Timestamp >= NDS::ARM7Target) return;
+
+ NDMAs[4]->Run();
+ NDMAs[5]->Run();
+ NDMAs[6]->Run();
+ NDMAs[7]->Run();
+ }
+}
+
+void StallNDMAs()
+{
+ // TODO
+}
+
+bool NDMAsInMode(u32 cpu, u32 mode)
+{
+ cpu <<= 2;
+ if (NDMAs[cpu+0]->IsInMode(mode)) return true;
+ if (NDMAs[cpu+1]->IsInMode(mode)) return true;
+ if (NDMAs[cpu+2]->IsInMode(mode)) return true;
+ if (NDMAs[cpu+3]->IsInMode(mode)) return true;
+ return false;
+}
+
+bool NDMAsRunning(u32 cpu)
+{
+ cpu <<= 2;
+ if (NDMAs[cpu+0]->IsRunning()) return true;
+ if (NDMAs[cpu+1]->IsRunning()) return true;
+ if (NDMAs[cpu+2]->IsRunning()) return true;
+ if (NDMAs[cpu+3]->IsRunning()) return true;
+ return false;
+}
+
+void CheckNDMAs(u32 cpu, u32 mode)
+{
+ cpu <<= 2;
+ NDMAs[cpu+0]->StartIfNeeded(mode);
+ NDMAs[cpu+1]->StartIfNeeded(mode);
+ NDMAs[cpu+2]->StartIfNeeded(mode);
+ NDMAs[cpu+3]->StartIfNeeded(mode);
+}
+
+void StopNDMAs(u32 cpu, u32 mode)
+{
+ cpu <<= 2;
+ NDMAs[cpu+0]->StopIfNeeded(mode);
+ NDMAs[cpu+1]->StopIfNeeded(mode);
+ NDMAs[cpu+2]->StopIfNeeded(mode);
+ NDMAs[cpu+3]->StopIfNeeded(mode);
+}
+
+
+// new WRAM mapping
+// TODO: find out what happens upon overlapping slots!!
+
+void MapNWRAM_A(u32 num, u8 val)
+{
+ if (MBK[0][8] & (1 << num))
+ {
+ printf("trying to map NWRAM_A %d to %02X, but it is write-protected (%08X)\n", num, val, MBK[0][8]);
+ return;
+ }
+
+ int mbkn = 0, mbks = 8*num;
+
+ u8 oldval = (MBK[0][mbkn] >> mbks) & 0xFF;
+ if (oldval == val) return;
+
+ MBK[0][mbkn] &= ~(0xFF << mbks);
+ MBK[0][mbkn] |= (val << mbks);
+ MBK[1][mbkn] = MBK[0][mbkn];
+
+ u8* ptr = &NWRAM_A[num << 16];
+
+ if (oldval & 0x80)
+ {
+ if (NWRAMMap_A[oldval & 0x01][(oldval >> 2) & 0x3] == ptr)
+ NWRAMMap_A[oldval & 0x01][(oldval >> 2) & 0x3] = NULL;
+ }
+
+ if (val & 0x80)
+ {
+ NWRAMMap_A[val & 0x01][(val >> 2) & 0x3] = ptr;
+ }
+}
+
+void MapNWRAM_B(u32 num, u8 val)
+{
+ if (MBK[0][8] & (1 << (8+num)))
+ {
+ printf("trying to map NWRAM_B %d to %02X, but it is write-protected (%08X)\n", num, val, MBK[0][8]);
+ return;
+ }
+
+ int mbkn = 1+(num>>2), mbks = 8*(num&3);
+
+ u8 oldval = (MBK[0][mbkn] >> mbks) & 0xFF;
+ if (oldval == val) return;
+
+ MBK[0][mbkn] &= ~(0xFF << mbks);
+ MBK[0][mbkn] |= (val << mbks);
+ MBK[1][mbkn] = MBK[0][mbkn];
+
+ u8* ptr = &NWRAM_B[num << 15];
+
+ if (oldval & 0x80)
+ {
+ if (oldval & 0x02) oldval &= 0xFE;
+
+ if (NWRAMMap_B[oldval & 0x03][(oldval >> 2) & 0x7] == ptr)
+ NWRAMMap_B[oldval & 0x03][(oldval >> 2) & 0x7] = NULL;
+ }
+
+ if (val & 0x80)
+ {
+ if (val & 0x02) val &= 0xFE;
+
+ NWRAMMap_B[val & 0x03][(val >> 2) & 0x7] = ptr;
+ }
+}
+
+void MapNWRAM_C(u32 num, u8 val)
+{
+ if (MBK[0][8] & (1 << (16+num)))
+ {
+ printf("trying to map NWRAM_C %d to %02X, but it is write-protected (%08X)\n", num, val, MBK[0][8]);
+ return;
+ }
+
+ int mbkn = 3+(num>>2), mbks = 8*(num&3);
+
+ u8 oldval = (MBK[0][mbkn] >> mbks) & 0xFF;
+ if (oldval == val) return;
+
+ MBK[0][mbkn] &= ~(0xFF << mbks);
+ MBK[0][mbkn] |= (val << mbks);
+ MBK[1][mbkn] = MBK[0][mbkn];
+
+ u8* ptr = &NWRAM_C[num << 15];
+
+ if (oldval & 0x80)
+ {
+ if (oldval & 0x02) oldval &= 0xFE;
+
+ if (NWRAMMap_C[oldval & 0x03][(oldval >> 2) & 0x7] == ptr)
+ NWRAMMap_C[oldval & 0x03][(oldval >> 2) & 0x7] = NULL;
+ }
+
+ if (val & 0x80)
+ {
+ if (val & 0x02) val &= 0xFE;
+
+ NWRAMMap_C[val & 0x03][(val >> 2) & 0x7] = ptr;
+ }
+}
+
+void MapNWRAMRange(u32 cpu, u32 num, u32 val)
+{
+ u32 oldval = MBK[cpu][5+num];
+ if (oldval == val) return;
+
+ MBK[cpu][5+num] = val;
+
+ // TODO: what happens when the ranges are 'out of range'????
+ if (num == 0)
+ {
+ u32 start = 0x03000000 + (((val >> 4) & 0xFF) << 16);
+ u32 end = 0x03000000 + (((val >> 20) & 0x1FF) << 16);
+ u32 size = (val >> 12) & 0x3;
+
+ printf("NWRAM-A: ARM%d range %08X-%08X, size %d\n", cpu?7:9, start, end, size);
+
+ NWRAMStart[cpu][num] = start;
+ NWRAMEnd[cpu][num] = end;
+
+ switch (size)
+ {
+ case 0:
+ case 1: NWRAMMask[cpu][num] = 0x0; break;
+ case 2: NWRAMMask[cpu][num] = 0x1; break; // CHECKME
+ case 3: NWRAMMask[cpu][num] = 0x3; break;
+ }
+ }
+ else
+ {
+ u32 start = 0x03000000 + (((val >> 3) & 0x1FF) << 15);
+ u32 end = 0x03000000 + (((val >> 19) & 0x3FF) << 15);
+ u32 size = (val >> 12) & 0x3;
+
+ printf("NWRAM-%c: ARM%d range %08X-%08X, size %d\n", 'A'+num, cpu?7:9, start, end, size);
+
+ NWRAMStart[cpu][num] = start;
+ NWRAMEnd[cpu][num] = end;
+
+ switch (size)
+ {
+ case 0: NWRAMMask[cpu][num] = 0x0; break;
+ case 1: NWRAMMask[cpu][num] = 0x1; break;
+ case 2: NWRAMMask[cpu][num] = 0x3; break;
+ case 3: NWRAMMask[cpu][num] = 0x7; break;
+ }
+ }
+}
+
+
+void Set_SCFG_Clock9(u16 val)
+{
+ SCFG_Clock9 = val & 0x0187;
+ return;
+
+ NDS::ARM9Timestamp >>= NDS::ARM9ClockShift;
+
+ printf("CLOCK9=%04X\n", val);
+ SCFG_Clock9 = val & 0x0187;
+
+ if (SCFG_Clock9 & (1<<0)) NDS::ARM9ClockShift = 2;
+ else NDS::ARM9ClockShift = 1;
+ NDS::ARM9Timestamp <<= NDS::ARM9ClockShift;
+ NDS::ARM9->UpdateRegionTimings(0x00000000, 0xFFFFFFFF);
+}
+
+void Set_SCFG_MC(u32 val)
+{
+ u32 oldslotstatus = SCFG_MC & 0xC;
+
+ val &= 0xFFFF800C;
+ if ((val & 0xC) == 0xC) val &= ~0xC; // hax
+ if (val & 0x8000) printf("SCFG_MC: weird NDS slot swap\n");
+ SCFG_MC = (SCFG_MC & ~0xFFFF800C) | val;
+
+ if ((oldslotstatus == 0x0) && ((SCFG_MC & 0xC) == 0x4))
+ {
+ NDSCart::ResetCart();
+ }
+}
+
+
+u8 ARM9Read8(u32 addr)
+{
+ if ((addr >= 0xFFFF0000) && (!(SCFG_BIOS & (1<<1))))
+ {
+ if ((addr >= 0xFFFF8000) && (SCFG_BIOS & (1<<0)))
+ return 0xFF;
+
+ return *(u8*)&ARM9iBIOS[addr & 0xFFFF];
+ }
+
+ switch (addr & 0xFF000000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[0][0] && addr < NWRAMEnd[0][0])
+ {
+ u8* ptr = NWRAMMap_A[0][(addr >> 16) & NWRAMMask[0][0]];
+ return ptr ? *(u8*)&ptr[addr & 0xFFFF] : 0;
+ }
+ if (addr >= NWRAMStart[0][1] && addr < NWRAMEnd[0][1])
+ {
+ u8* ptr = NWRAMMap_B[0][(addr >> 15) & NWRAMMask[0][1]];
+ return ptr ? *(u8*)&ptr[addr & 0x7FFF] : 0;
+ }
+ if (addr >= NWRAMStart[0][2] && addr < NWRAMEnd[0][2])
+ {
+ u8* ptr = NWRAMMap_C[0][(addr >> 15) & NWRAMMask[0][2]];
+ return ptr ? *(u8*)&ptr[addr & 0x7FFF] : 0;
+ }
+ return NDS::ARM9Read8(addr);
+
+ case 0x04000000:
+ return ARM9IORead8(addr);
+ }
+
+ return NDS::ARM9Read8(addr);
+}
+
+u16 ARM9Read16(u32 addr)
+{
+ if ((addr >= 0xFFFF0000) && (!(SCFG_BIOS & (1<<1))))
+ {
+ if ((addr >= 0xFFFF8000) && (SCFG_BIOS & (1<<0)))
+ return 0xFFFF;
+
+ return *(u16*)&ARM9iBIOS[addr & 0xFFFF];
+ }
+
+ switch (addr & 0xFF000000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[0][0] && addr < NWRAMEnd[0][0])
+ {
+ u8* ptr = NWRAMMap_A[0][(addr >> 16) & NWRAMMask[0][0]];
+ return ptr ? *(u16*)&ptr[addr & 0xFFFF] : 0;
+ }
+ if (addr >= NWRAMStart[0][1] && addr < NWRAMEnd[0][1])
+ {
+ u8* ptr = NWRAMMap_B[0][(addr >> 15) & NWRAMMask[0][1]];
+ return ptr ? *(u16*)&ptr[addr & 0x7FFF] : 0;
+ }
+ if (addr >= NWRAMStart[0][2] && addr < NWRAMEnd[0][2])
+ {
+ u8* ptr = NWRAMMap_C[0][(addr >> 15) & NWRAMMask[0][2]];
+ return ptr ? *(u16*)&ptr[addr & 0x7FFF] : 0;
+ }
+ return NDS::ARM9Read16(addr);
+
+ case 0x04000000:
+ return ARM9IORead16(addr);
+ }
+
+ return NDS::ARM9Read16(addr);
+}
+
+u32 ARM9Read32(u32 addr)
+{
+ if ((addr >= 0xFFFF0000) && (!(SCFG_BIOS & (1<<1))))
+ {
+ if ((addr >= 0xFFFF8000) && (SCFG_BIOS & (1<<0)))
+ return 0xFFFFFFFF;
+
+ return *(u32*)&ARM9iBIOS[addr & 0xFFFF];
+ }
+
+ switch (addr & 0xFF000000)
+ {
+ case 0x02000000:
+ // HACK to bypass region locking
+ // TODO: make optional
+ if (addr == 0x02FE71B0) return 0xFFFFFFFF;
+ break;
+
+ case 0x03000000:
+ if (addr >= NWRAMStart[0][0] && addr < NWRAMEnd[0][0])
+ {
+ u8* ptr = NWRAMMap_A[0][(addr >> 16) & NWRAMMask[0][0]];
+ return ptr ? *(u32*)&ptr[addr & 0xFFFF] : 0;
+ }
+ if (addr >= NWRAMStart[0][1] && addr < NWRAMEnd[0][1])
+ {
+ u8* ptr = NWRAMMap_B[0][(addr >> 15) & NWRAMMask[0][1]];
+ return ptr ? *(u32*)&ptr[addr & 0x7FFF] : 0;
+ }
+ if (addr >= NWRAMStart[0][2] && addr < NWRAMEnd[0][2])
+ {
+ u8* ptr = NWRAMMap_C[0][(addr >> 15) & NWRAMMask[0][2]];
+ return ptr ? *(u32*)&ptr[addr & 0x7FFF] : 0;
+ }
+ return NDS::ARM9Read32(addr);
+
+ case 0x04000000:
+ return ARM9IORead32(addr);
+ }
+
+ return NDS::ARM9Read32(addr);
+}
+
+void ARM9Write8(u32 addr, u8 val)
+{
+ switch (addr & 0xFF000000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[0][0] && addr < NWRAMEnd[0][0])
+ {
+ u8* ptr = NWRAMMap_A[0][(addr >> 16) & NWRAMMask[0][0]];
+ if (ptr) *(u8*)&ptr[addr & 0xFFFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[0][1] && addr < NWRAMEnd[0][1])
+ {
+ u8* ptr = NWRAMMap_B[0][(addr >> 15) & NWRAMMask[0][1]];
+ if (ptr) *(u8*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[0][2] && addr < NWRAMEnd[0][2])
+ {
+ u8* ptr = NWRAMMap_C[0][(addr >> 15) & NWRAMMask[0][2]];
+ if (ptr) *(u8*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ return NDS::ARM9Write8(addr, val);
+
+ case 0x04000000:
+ ARM9IOWrite8(addr, val);
+ return;
+ }
+
+ return NDS::ARM9Write8(addr, val);
+}
+
+void ARM9Write16(u32 addr, u16 val)
+{
+ switch (addr & 0xFF000000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[0][0] && addr < NWRAMEnd[0][0])
+ {
+ u8* ptr = NWRAMMap_A[0][(addr >> 16) & NWRAMMask[0][0]];
+ if (ptr) *(u16*)&ptr[addr & 0xFFFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[0][1] && addr < NWRAMEnd[0][1])
+ {
+ u8* ptr = NWRAMMap_B[0][(addr >> 15) & NWRAMMask[0][1]];
+ if (ptr) *(u16*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[0][2] && addr < NWRAMEnd[0][2])
+ {
+ u8* ptr = NWRAMMap_C[0][(addr >> 15) & NWRAMMask[0][2]];
+ if (ptr) *(u16*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ return NDS::ARM9Write16(addr, val);
+
+ case 0x04000000:
+ ARM9IOWrite16(addr, val);
+ return;
+ }
+
+ return NDS::ARM9Write16(addr, val);
+}
+
+void ARM9Write32(u32 addr, u32 val)
+{
+ switch (addr & 0xFF000000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[0][0] && addr < NWRAMEnd[0][0])
+ {
+ u8* ptr = NWRAMMap_A[0][(addr >> 16) & NWRAMMask[0][0]];
+ if (ptr) *(u32*)&ptr[addr & 0xFFFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[0][1] && addr < NWRAMEnd[0][1])
+ {
+ u8* ptr = NWRAMMap_B[0][(addr >> 15) & NWRAMMask[0][1]];
+ if (ptr) *(u32*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[0][2] && addr < NWRAMEnd[0][2])
+ {
+ u8* ptr = NWRAMMap_C[0][(addr >> 15) & NWRAMMask[0][2]];
+ if (ptr) *(u32*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ return NDS::ARM9Write32(addr, val);
+
+ case 0x04000000:
+ ARM9IOWrite32(addr, val);
+ return;
+ }
+
+ return NDS::ARM9Write32(addr, val);
+}
+
+bool ARM9GetMemRegion(u32 addr, bool write, NDS::MemRegion* region)
+{
+ switch (addr & 0xFF000000)
+ {
+ case 0x02000000:
+ region->Mem = NDS::MainRAM;
+ region->Mask = NDS::MainRAMMask;
+ return true;
+ }
+
+ if ((addr & 0xFFFF0000) == 0xFFFF0000 && !write)
+ {
+ if (SCFG_BIOS & (1<<1))
+ {
+ if (addr >= 0xFFFF1000)
+ {
+ region->Mem = NULL;
+ return false;
+ }
+
+ region->Mem = NDS::ARM9BIOS;
+ region->Mask = 0xFFF;
+ }
+ else
+ {
+ region->Mem = ARM9iBIOS;
+ region->Mask = 0xFFFF;
+ }
+ return true;
+ }
+
+ region->Mem = NULL;
+ return false;
+}
+
+
+
+u8 ARM7Read8(u32 addr)
+{
+ if ((addr < 0x00010000) && (!(SCFG_BIOS & (1<<9))))
+ {
+ if ((addr >= 0x00008000) && (SCFG_BIOS & (1<<8)))
+ return 0xFF;
+ if (NDS::ARM7->R[15] >= 0x00010000)
+ return 0xFF;
+ if (addr < NDS::ARM7BIOSProt && NDS::ARM7->R[15] >= NDS::ARM7BIOSProt)
+ return 0xFF;
+
+ return *(u8*)&ARM7iBIOS[addr];
+ }
+
+ switch (addr & 0xFF800000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[1][0] && addr < NWRAMEnd[1][0])
+ {
+ u8* ptr = NWRAMMap_A[1][(addr >> 16) & NWRAMMask[1][0]];
+ return ptr ? *(u8*)&ptr[addr & 0xFFFF] : 0;
+ }
+ if (addr >= NWRAMStart[1][1] && addr < NWRAMEnd[1][1])
+ {
+ u8* ptr = NWRAMMap_B[1][(addr >> 15) & NWRAMMask[1][1]];
+ return ptr ? *(u8*)&ptr[addr & 0x7FFF] : 0;
+ }
+ if (addr >= NWRAMStart[1][2] && addr < NWRAMEnd[1][2])
+ {
+ u8* ptr = NWRAMMap_C[1][(addr >> 15) & NWRAMMask[1][2]];
+ return ptr ? *(u8*)&ptr[addr & 0x7FFF] : 0;
+ }
+ return NDS::ARM7Read8(addr);
+
+ case 0x04000000:
+ return ARM7IORead8(addr);
+ }
+
+ return NDS::ARM7Read8(addr);
+}
+
+u16 ARM7Read16(u32 addr)
+{
+ if ((addr < 0x00010000) && (!(SCFG_BIOS & (1<<9))))
+ {
+ if ((addr >= 0x00008000) && (SCFG_BIOS & (1<<8)))
+ return 0xFFFF;
+ if (NDS::ARM7->R[15] >= 0x00010000)
+ return 0xFFFF;
+ if (addr < NDS::ARM7BIOSProt && NDS::ARM7->R[15] >= NDS::ARM7BIOSProt)
+ return 0xFFFF;
+
+ return *(u16*)&ARM7iBIOS[addr];
+ }
+
+ switch (addr & 0xFF800000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[1][0] && addr < NWRAMEnd[1][0])
+ {
+ u8* ptr = NWRAMMap_A[1][(addr >> 16) & NWRAMMask[1][0]];
+ return ptr ? *(u16*)&ptr[addr & 0xFFFF] : 0;
+ }
+ if (addr >= NWRAMStart[1][1] && addr < NWRAMEnd[1][1])
+ {
+ u8* ptr = NWRAMMap_B[1][(addr >> 15) & NWRAMMask[1][1]];
+ return ptr ? *(u16*)&ptr[addr & 0x7FFF] : 0;
+ }
+ if (addr >= NWRAMStart[1][2] && addr < NWRAMEnd[1][2])
+ {
+ u8* ptr = NWRAMMap_C[1][(addr >> 15) & NWRAMMask[1][2]];
+ return ptr ? *(u16*)&ptr[addr & 0x7FFF] : 0;
+ }
+ return NDS::ARM7Read16(addr);
+
+ case 0x04000000:
+ return ARM7IORead16(addr);
+ }
+
+ return NDS::ARM7Read16(addr);
+}
+
+u32 ARM7Read32(u32 addr)
+{
+ if ((addr < 0x00010000) && (!(SCFG_BIOS & (1<<9))))
+ {
+ if ((addr >= 0x00008000) && (SCFG_BIOS & (1<<8)))
+ return 0xFFFFFFFF;
+ if (NDS::ARM7->R[15] >= 0x00010000)
+ return 0xFFFFFFFF;
+ if (addr < NDS::ARM7BIOSProt && NDS::ARM7->R[15] >= NDS::ARM7BIOSProt)
+ return 0xFFFFFFFF;
+
+ return *(u32*)&ARM7iBIOS[addr];
+ }
+
+ switch (addr & 0xFF800000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[1][0] && addr < NWRAMEnd[1][0])
+ {
+ u8* ptr = NWRAMMap_A[1][(addr >> 16) & NWRAMMask[1][0]];
+ return ptr ? *(u32*)&ptr[addr & 0xFFFF] : 0;
+ }
+ if (addr >= NWRAMStart[1][1] && addr < NWRAMEnd[1][1])
+ {
+ u8* ptr = NWRAMMap_B[1][(addr >> 15) & NWRAMMask[1][1]];
+ return ptr ? *(u32*)&ptr[addr & 0x7FFF] : 0;
+ }
+ if (addr >= NWRAMStart[1][2] && addr < NWRAMEnd[1][2])
+ {
+ u8* ptr = NWRAMMap_C[1][(addr >> 15) & NWRAMMask[1][2]];
+ return ptr ? *(u32*)&ptr[addr & 0x7FFF] : 0;
+ }
+ return NDS::ARM7Read32(addr);
+
+ case 0x04000000:
+ return ARM7IORead32(addr);
+ }
+
+ return NDS::ARM7Read32(addr);
+}
+
+void ARM7Write8(u32 addr, u8 val)
+{
+ switch (addr & 0xFF800000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[1][0] && addr < NWRAMEnd[1][0])
+ {
+ u8* ptr = NWRAMMap_A[1][(addr >> 16) & NWRAMMask[1][0]];
+ if (ptr) *(u8*)&ptr[addr & 0xFFFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[1][1] && addr < NWRAMEnd[1][1])
+ {
+ u8* ptr = NWRAMMap_B[1][(addr >> 15) & NWRAMMask[1][1]];
+ if (ptr) *(u8*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[1][2] && addr < NWRAMEnd[1][2])
+ {
+ u8* ptr = NWRAMMap_C[1][(addr >> 15) & NWRAMMask[1][2]];
+ if (ptr) *(u8*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ return NDS::ARM7Write8(addr, val);
+
+ case 0x04000000:
+ ARM7IOWrite8(addr, val);
+ return;
+ }
+
+ return NDS::ARM7Write8(addr, val);
+}
+
+void ARM7Write16(u32 addr, u16 val)
+{
+ switch (addr & 0xFF800000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[1][0] && addr < NWRAMEnd[1][0])
+ {
+ u8* ptr = NWRAMMap_A[1][(addr >> 16) & NWRAMMask[1][0]];
+ if (ptr) *(u16*)&ptr[addr & 0xFFFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[1][1] && addr < NWRAMEnd[1][1])
+ {
+ u8* ptr = NWRAMMap_B[1][(addr >> 15) & NWRAMMask[1][1]];
+ if (ptr) *(u16*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[1][2] && addr < NWRAMEnd[1][2])
+ {
+ u8* ptr = NWRAMMap_C[1][(addr >> 15) & NWRAMMask[1][2]];
+ if (ptr) *(u16*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ return NDS::ARM7Write16(addr, val);
+
+ case 0x04000000:
+ ARM7IOWrite16(addr, val);
+ return;
+ }
+
+ return NDS::ARM7Write16(addr, val);
+}
+
+void ARM7Write32(u32 addr, u32 val)
+{
+ switch (addr & 0xFF800000)
+ {
+ case 0x03000000:
+ if (addr >= NWRAMStart[1][0] && addr < NWRAMEnd[1][0])
+ {
+ u8* ptr = NWRAMMap_A[1][(addr >> 16) & NWRAMMask[1][0]];
+ if (ptr) *(u32*)&ptr[addr & 0xFFFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[1][1] && addr < NWRAMEnd[1][1])
+ {
+ u8* ptr = NWRAMMap_B[1][(addr >> 15) & NWRAMMask[1][1]];
+ if (ptr) *(u32*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ if (addr >= NWRAMStart[1][2] && addr < NWRAMEnd[1][2])
+ {
+ u8* ptr = NWRAMMap_C[1][(addr >> 15) & NWRAMMask[1][2]];
+ if (ptr) *(u32*)&ptr[addr & 0x7FFF] = val;
+ return;
+ }
+ return NDS::ARM7Write32(addr, val);
+
+ case 0x04000000:
+ ARM7IOWrite32(addr, val);
+ return;
+ }
+
+ return NDS::ARM7Write32(addr, val);
+}
+
+bool ARM7GetMemRegion(u32 addr, bool write, NDS::MemRegion* region)
+{
+ switch (addr & 0xFF800000)
+ {
+ case 0x02000000:
+ case 0x02800000:
+ region->Mem = NDS::MainRAM;
+ region->Mask = NDS::MainRAMMask;
+ return true;
+ }
+
+ // BIOS. ARM7 PC has to be within range.
+ /*if (addr < 0x00010000 && !write)
+ {
+ if (NDS::ARM7->R[15] < 0x00010000 && (addr >= NDS::ARM7BIOSProt || NDS::ARM7->R[15] < NDS::ARM7BIOSProt))
+ {
+ region->Mem = NDS::ARM7BIOS;
+ region->Mask = 0xFFFF;
+ return true;
+ }
+ }*/
+
+ region->Mem = NULL;
+ return false;
+}
+
+
+
+
+#define CASE_READ8_16BIT(addr, val) \
+ case (addr): return (val) & 0xFF; \
+ case (addr+1): return (val) >> 8;
+
+#define CASE_READ8_32BIT(addr, val) \
+ case (addr): return (val) & 0xFF; \
+ case (addr+1): return ((val) >> 8) & 0xFF; \
+ case (addr+2): return ((val) >> 16) & 0xFF; \
+ case (addr+3): return (val) >> 24;
+
+#define CASE_READ16_32BIT(addr, val) \
+ case (addr): return (val) & 0xFFFF; \
+ case (addr+2): return (val) >> 16;
+
+u8 ARM9IORead8(u32 addr)
+{
+ switch (addr)
+ {
+ case 0x04004000: return SCFG_BIOS & 0xFF;
+
+ CASE_READ8_32BIT(0x04004040, MBK[0][0])
+ CASE_READ8_32BIT(0x04004044, MBK[0][1])
+ CASE_READ8_32BIT(0x04004048, MBK[0][2])
+ CASE_READ8_32BIT(0x0400404C, MBK[0][3])
+ CASE_READ8_32BIT(0x04004050, MBK[0][4])
+ CASE_READ8_32BIT(0x04004054, MBK[0][5])
+ CASE_READ8_32BIT(0x04004058, MBK[0][6])
+ CASE_READ8_32BIT(0x0400405C, MBK[0][7])
+ CASE_READ8_32BIT(0x04004060, MBK[0][8])
+ }
+
+ return NDS::ARM9IORead8(addr);
+}
+
+u16 ARM9IORead16(u32 addr)
+{
+ switch (addr)
+ {
+ case 0x04004000: return SCFG_BIOS & 0xFF;
+ case 0x04004004: return SCFG_Clock9;
+ case 0x04004010: return SCFG_MC & 0xFFFF;
+
+ CASE_READ16_32BIT(0x04004040, MBK[0][0])
+ CASE_READ16_32BIT(0x04004044, MBK[0][1])
+ CASE_READ16_32BIT(0x04004048, MBK[0][2])
+ CASE_READ16_32BIT(0x0400404C, MBK[0][3])
+ CASE_READ16_32BIT(0x04004050, MBK[0][4])
+ CASE_READ16_32BIT(0x04004054, MBK[0][5])
+ CASE_READ16_32BIT(0x04004058, MBK[0][6])
+ CASE_READ16_32BIT(0x0400405C, MBK[0][7])
+ CASE_READ16_32BIT(0x04004060, MBK[0][8])
+ }
+
+ return NDS::ARM9IORead16(addr);
+}
+
+u32 ARM9IORead32(u32 addr)
+{
+ switch (addr)
+ {
+ case 0x04004000: return SCFG_BIOS & 0xFF;
+ case 0x04004008: return SCFG_EXT[0];
+ case 0x04004010: return SCFG_MC & 0xFFFF;
+
+ case 0x04004040: return MBK[0][0];
+ case 0x04004044: return MBK[0][1];
+ case 0x04004048: return MBK[0][2];
+ case 0x0400404C: return MBK[0][3];
+ case 0x04004050: return MBK[0][4];
+ case 0x04004054: return MBK[0][5];
+ case 0x04004058: return MBK[0][6];
+ case 0x0400405C: return MBK[0][7];
+ case 0x04004060: return MBK[0][8];
+
+ case 0x04004100: return NDMACnt[0];
+ case 0x04004104: return NDMAs[0]->SrcAddr;
+ case 0x04004108: return NDMAs[0]->DstAddr;
+ case 0x0400410C: return NDMAs[0]->TotalLength;
+ case 0x04004110: return NDMAs[0]->BlockLength;
+ case 0x04004114: return NDMAs[0]->SubblockTimer;
+ case 0x04004118: return NDMAs[0]->FillData;
+ case 0x0400411C: return NDMAs[0]->Cnt;
+ case 0x04004120: return NDMAs[1]->SrcAddr;
+ case 0x04004124: return NDMAs[1]->DstAddr;
+ case 0x04004128: return NDMAs[1]->TotalLength;
+ case 0x0400412C: return NDMAs[1]->BlockLength;
+ case 0x04004130: return NDMAs[1]->SubblockTimer;
+ case 0x04004134: return NDMAs[1]->FillData;
+ case 0x04004138: return NDMAs[1]->Cnt;
+ case 0x0400413C: return NDMAs[2]->SrcAddr;
+ case 0x04004140: return NDMAs[2]->DstAddr;
+ case 0x04004144: return NDMAs[2]->TotalLength;
+ case 0x04004148: return NDMAs[2]->BlockLength;
+ case 0x0400414C: return NDMAs[2]->SubblockTimer;
+ case 0x04004150: return NDMAs[2]->FillData;
+ case 0x04004154: return NDMAs[2]->Cnt;
+ case 0x04004158: return NDMAs[3]->SrcAddr;
+ case 0x0400415C: return NDMAs[3]->DstAddr;
+ case 0x04004160: return NDMAs[3]->TotalLength;
+ case 0x04004164: return NDMAs[3]->BlockLength;
+ case 0x04004168: return NDMAs[3]->SubblockTimer;
+ case 0x0400416C: return NDMAs[3]->FillData;
+ case 0x04004170: return NDMAs[3]->Cnt;
+ }
+
+ return NDS::ARM9IORead32(addr);
+}
+
+void ARM9IOWrite8(u32 addr, u8 val)
+{
+ switch (addr)
+ {
+ case 0x04000301:
+ // TODO: OPTIONAL PERFORMANCE HACK
+ // the DSi ARM9 BIOS has a bug where the IRQ wait function attempts to use (ARM7-only) HALTCNT
+ // effectively causing it to wait in a busy loop.
+ // for better DSi performance, we can implement an actual IRQ wait here.
+ // in practice this would only matter when running DS software in DSi mode (ie already a hack).
+ // DSi software does not use the BIOS IRQ wait function.
+ //if (val == 0x80 && NDS::ARM9->R[15] == 0xFFFF0268) NDS::ARM9->Halt(1);
+ return;
+
+ case 0x04004040: MapNWRAM_A(0, val); return;
+ case 0x04004041: MapNWRAM_A(1, val); return;
+ case 0x04004042: MapNWRAM_A(2, val); return;
+ case 0x04004043: MapNWRAM_A(3, val); return;
+ case 0x04004044: MapNWRAM_B(0, val); return;
+ case 0x04004045: MapNWRAM_B(1, val); return;
+ case 0x04004046: MapNWRAM_B(2, val); return;
+ case 0x04004047: MapNWRAM_B(3, val); return;
+ case 0x04004048: MapNWRAM_B(4, val); return;
+ case 0x04004049: MapNWRAM_B(5, val); return;
+ case 0x0400404A: MapNWRAM_B(6, val); return;
+ case 0x0400404B: MapNWRAM_B(7, val); return;
+ case 0x0400404C: MapNWRAM_C(0, val); return;
+ case 0x0400404D: MapNWRAM_C(1, val); return;
+ case 0x0400404E: MapNWRAM_C(2, val); return;
+ case 0x0400404F: MapNWRAM_C(3, val); return;
+ case 0x04004050: MapNWRAM_C(4, val); return;
+ case 0x04004051: MapNWRAM_C(5, val); return;
+ case 0x04004052: MapNWRAM_C(6, val); return;
+ case 0x04004053: MapNWRAM_C(7, val); return;
+ }
+
+ return NDS::ARM9IOWrite8(addr, val);
+}
+
+void ARM9IOWrite16(u32 addr, u16 val)
+{
+ switch (addr)
+ {
+ case 0x04004004:
+ Set_SCFG_Clock9(val);
+ return;
+
+ case 0x04004040:
+ MapNWRAM_A(0, val & 0xFF);
+ MapNWRAM_A(1, val >> 8);
+ return;
+ case 0x04004042:
+ MapNWRAM_A(2, val & 0xFF);
+ MapNWRAM_A(3, val >> 8);
+ return;
+ case 0x04004044:
+ MapNWRAM_B(0, val & 0xFF);
+ MapNWRAM_B(1, val >> 8);
+ return;
+ case 0x04004046:
+ MapNWRAM_B(2, val & 0xFF);
+ MapNWRAM_B(3, val >> 8);
+ return;
+ case 0x04004048:
+ MapNWRAM_B(4, val & 0xFF);
+ MapNWRAM_B(5, val >> 8);
+ return;
+ case 0x0400404A:
+ MapNWRAM_B(6, val & 0xFF);
+ MapNWRAM_B(7, val >> 8);
+ return;
+ case 0x0400404C:
+ MapNWRAM_C(0, val & 0xFF);
+ MapNWRAM_C(1, val >> 8);
+ return;
+ case 0x0400404E:
+ MapNWRAM_C(2, val & 0xFF);
+ MapNWRAM_C(3, val >> 8);
+ return;
+ case 0x04004050:
+ MapNWRAM_C(4, val & 0xFF);
+ MapNWRAM_C(5, val >> 8);
+ return;
+ case 0x04004052:
+ MapNWRAM_C(6, val & 0xFF);
+ MapNWRAM_C(7, val >> 8);
+ return;
+ }
+
+ return NDS::ARM9IOWrite16(addr, val);
+}
+
+void ARM9IOWrite32(u32 addr, u32 val)
+{
+ switch (addr)
+ {
+ case 0x04004008:
+ SCFG_EXT[0] &= ~0x8007F19F;
+ SCFG_EXT[0] |= (val & 0x8007F19F);
+ SCFG_EXT[1] &= ~0x0000F080;
+ SCFG_EXT[1] |= (val & 0x0000F080);
+ printf("SCFG_EXT = %08X / %08X (val9 %08X)\n", SCFG_EXT[0], SCFG_EXT[1], val);
+ /*switch ((SCFG_EXT[0] >> 14) & 0x3)
+ {
+ case 0:
+ case 1:
+ NDS::MainRAMMask = 0x3FFFFF;
+ printf("RAM: 4MB\n");
+ break;
+ case 2:
+ case 3: // TODO: debug console w/ 32MB?
+ NDS::MainRAMMask = 0xFFFFFF;
+ printf("RAM: 16MB\n");
+ break;
+ }*/
+ printf("from %08X, ARM7 %08X, %08X\n", NDS::GetPC(0), NDS::GetPC(1), NDS::ARM7->R[1]);
+ return;
+
+ case 0x04004040:
+ MapNWRAM_A(0, val & 0xFF);
+ MapNWRAM_A(1, (val >> 8) & 0xFF);
+ MapNWRAM_A(2, (val >> 16) & 0xFF);
+ MapNWRAM_A(3, val >> 24);
+ return;
+ case 0x04004044:
+ MapNWRAM_B(0, val & 0xFF);
+ MapNWRAM_B(1, (val >> 8) & 0xFF);
+ MapNWRAM_B(2, (val >> 16) & 0xFF);
+ MapNWRAM_B(3, val >> 24);
+ return;
+ case 0x04004048:
+ MapNWRAM_B(4, val & 0xFF);
+ MapNWRAM_B(5, (val >> 8) & 0xFF);
+ MapNWRAM_B(6, (val >> 16) & 0xFF);
+ MapNWRAM_B(7, val >> 24);
+ return;
+ case 0x0400404C:
+ MapNWRAM_C(0, val & 0xFF);
+ MapNWRAM_C(1, (val >> 8) & 0xFF);
+ MapNWRAM_C(2, (val >> 16) & 0xFF);
+ MapNWRAM_C(3, val >> 24);
+ return;
+ case 0x04004050:
+ MapNWRAM_C(4, val & 0xFF);
+ MapNWRAM_C(5, (val >> 8) & 0xFF);
+ MapNWRAM_C(6, (val >> 16) & 0xFF);
+ MapNWRAM_C(7, val >> 24);
+ return;
+ case 0x04004054: MapNWRAMRange(0, 0, val); return;
+ case 0x04004058: MapNWRAMRange(0, 1, val); return;
+ case 0x0400405C: MapNWRAMRange(0, 2, val); return;
+
+ case 0x04004100: NDMACnt[0] = val & 0x800F0000; return;
+ case 0x04004104: NDMAs[0]->SrcAddr = val & 0xFFFFFFFC; return;
+ case 0x04004108: NDMAs[0]->DstAddr = val & 0xFFFFFFFC; return;
+ case 0x0400410C: NDMAs[0]->TotalLength = val & 0x0FFFFFFF; return;
+ case 0x04004110: NDMAs[0]->BlockLength = val & 0x00FFFFFF; return;
+ case 0x04004114: NDMAs[0]->SubblockTimer = val & 0x0003FFFF; return;
+ case 0x04004118: NDMAs[0]->FillData = val; return;
+ case 0x0400411C: NDMAs[0]->WriteCnt(val); return;
+ case 0x04004120: NDMAs[1]->SrcAddr = val & 0xFFFFFFFC; return;
+ case 0x04004124: NDMAs[1]->DstAddr = val & 0xFFFFFFFC; return;
+ case 0x04004128: NDMAs[1]->TotalLength = val & 0x0FFFFFFF; return;
+ case 0x0400412C: NDMAs[1]->BlockLength = val & 0x00FFFFFF; return;
+ case 0x04004130: NDMAs[1]->SubblockTimer = val & 0x0003FFFF; return;
+ case 0x04004134: NDMAs[1]->FillData = val; return;
+ case 0x04004138: NDMAs[1]->WriteCnt(val); return;
+ case 0x0400413C: NDMAs[2]->SrcAddr = val & 0xFFFFFFFC; return;
+ case 0x04004140: NDMAs[2]->DstAddr = val & 0xFFFFFFFC; return;
+ case 0x04004144: NDMAs[2]->TotalLength = val & 0x0FFFFFFF; return;
+ case 0x04004148: NDMAs[2]->BlockLength = val & 0x00FFFFFF; return;
+ case 0x0400414C: NDMAs[2]->SubblockTimer = val & 0x0003FFFF; return;
+ case 0x04004150: NDMAs[2]->FillData = val; return;
+ case 0x04004154: NDMAs[2]->WriteCnt(val); return;
+ case 0x04004158: NDMAs[3]->SrcAddr = val & 0xFFFFFFFC; return;
+ case 0x0400415C: NDMAs[3]->DstAddr = val & 0xFFFFFFFC; return;
+ case 0x04004160: NDMAs[3]->TotalLength = val & 0x0FFFFFFF; return;
+ case 0x04004164: NDMAs[3]->BlockLength = val & 0x00FFFFFF; return;
+ case 0x04004168: NDMAs[3]->SubblockTimer = val & 0x0003FFFF; return;
+ case 0x0400416C: NDMAs[3]->FillData = val; return;
+ case 0x04004170: NDMAs[3]->WriteCnt(val); return;
+ }
+
+ return NDS::ARM9IOWrite32(addr, val);
+}
+
+
+u8 ARM7IORead8(u32 addr)
+{
+ switch (addr)
+ {
+ case 0x04004000: return SCFG_BIOS & 0xFF;
+ case 0x04004001: return SCFG_BIOS >> 8;
+
+ CASE_READ8_32BIT(0x04004040, MBK[1][0])
+ CASE_READ8_32BIT(0x04004044, MBK[1][1])
+ CASE_READ8_32BIT(0x04004048, MBK[1][2])
+ CASE_READ8_32BIT(0x0400404C, MBK[1][3])
+ CASE_READ8_32BIT(0x04004050, MBK[1][4])
+ CASE_READ8_32BIT(0x04004054, MBK[1][5])
+ CASE_READ8_32BIT(0x04004058, MBK[1][6])
+ CASE_READ8_32BIT(0x0400405C, MBK[1][7])
+ CASE_READ8_32BIT(0x04004060, MBK[1][8])
+
+ case 0x04004500: return DSi_I2C::ReadData();
+ case 0x04004501: return DSi_I2C::Cnt;
+
+ case 0x04004D00: if (SCFG_BIOS & (1<<10)) return 0; return ConsoleID & 0xFF;
+ case 0x04004D01: if (SCFG_BIOS & (1<<10)) return 0; return (ConsoleID >> 8) & 0xFF;
+ case 0x04004D02: if (SCFG_BIOS & (1<<10)) return 0; return (ConsoleID >> 16) & 0xFF;
+ case 0x04004D03: if (SCFG_BIOS & (1<<10)) return 0; return (ConsoleID >> 24) & 0xFF;
+ case 0x04004D04: if (SCFG_BIOS & (1<<10)) return 0; return (ConsoleID >> 32) & 0xFF;
+ case 0x04004D05: if (SCFG_BIOS & (1<<10)) return 0; return (ConsoleID >> 40) & 0xFF;
+ case 0x04004D06: if (SCFG_BIOS & (1<<10)) return 0; return (ConsoleID >> 48) & 0xFF;
+ case 0x04004D07: if (SCFG_BIOS & (1<<10)) return 0; return ConsoleID >> 56;
+ case 0x04004D08: return 0;
+ }
+
+ return NDS::ARM7IORead8(addr);
+}
+
+u16 ARM7IORead16(u32 addr)
+{
+ switch (addr)
+ {
+ case 0x04000218: return NDS::IE2;
+ case 0x0400021C: return NDS::IF2;
+
+ case 0x04004000: return SCFG_BIOS;
+ case 0x04004004: return SCFG_Clock7;
+ case 0x04004006: return 0; // JTAG register
+ case 0x04004010: return SCFG_MC & 0xFFFF;
+
+ CASE_READ16_32BIT(0x04004040, MBK[1][0])
+ CASE_READ16_32BIT(0x04004044, MBK[1][1])
+ CASE_READ16_32BIT(0x04004048, MBK[1][2])
+ CASE_READ16_32BIT(0x0400404C, MBK[1][3])
+ CASE_READ16_32BIT(0x04004050, MBK[1][4])
+ CASE_READ16_32BIT(0x04004054, MBK[1][5])
+ CASE_READ16_32BIT(0x04004058, MBK[1][6])
+ CASE_READ16_32BIT(0x0400405C, MBK[1][7])
+ CASE_READ16_32BIT(0x04004060, MBK[1][8])
+
+ case 0x04004D00: if (SCFG_BIOS & (1<<10)) return 0; return ConsoleID & 0xFFFF;
+ case 0x04004D02: if (SCFG_BIOS & (1<<10)) return 0; return (ConsoleID >> 16) & 0xFFFF;
+ case 0x04004D04: if (SCFG_BIOS & (1<<10)) return 0; return (ConsoleID >> 32) & 0xFFFF;
+ case 0x04004D06: if (SCFG_BIOS & (1<<10)) return 0; return ConsoleID >> 48;
+ case 0x04004D08: return 0;
+ }
+
+ if (addr >= 0x04004800 && addr < 0x04004A00)
+ {
+ return SDMMC->Read(addr);
+ }
+ if (addr >= 0x04004A00 && addr < 0x04004C00)
+ {
+ return SDIO->Read(addr);
+ }
+
+ return NDS::ARM7IORead16(addr);
+}
+
+u32 ARM7IORead32(u32 addr)
+{
+ switch (addr)
+ {
+ case 0x04000218: return NDS::IE2;
+ case 0x0400021C: return NDS::IF2;
+
+ case 0x04004000: return SCFG_BIOS;
+ case 0x04004008: return SCFG_EXT[1];
+ case 0x04004010: return SCFG_MC;
+
+ case 0x04004040: return MBK[1][0];
+ case 0x04004044: return MBK[1][1];
+ case 0x04004048: return MBK[1][2];
+ case 0x0400404C: return MBK[1][3];
+ case 0x04004050: return MBK[1][4];
+ case 0x04004054: return MBK[1][5];
+ case 0x04004058: return MBK[1][6];
+ case 0x0400405C: return MBK[1][7];
+ case 0x04004060: return MBK[1][8];
+
+ case 0x04004100: return NDMACnt[1];
+ case 0x04004104: return NDMAs[4]->SrcAddr;
+ case 0x04004108: return NDMAs[4]->DstAddr;
+ case 0x0400410C: return NDMAs[4]->TotalLength;
+ case 0x04004110: return NDMAs[4]->BlockLength;
+ case 0x04004114: return NDMAs[4]->SubblockTimer;
+ case 0x04004118: return NDMAs[4]->FillData;
+ case 0x0400411C: return NDMAs[4]->Cnt;
+ case 0x04004120: return NDMAs[5]->SrcAddr;
+ case 0x04004124: return NDMAs[5]->DstAddr;
+ case 0x04004128: return NDMAs[5]->TotalLength;
+ case 0x0400412C: return NDMAs[5]->BlockLength;
+ case 0x04004130: return NDMAs[5]->SubblockTimer;
+ case 0x04004134: return NDMAs[5]->FillData;
+ case 0x04004138: return NDMAs[5]->Cnt;
+ case 0x0400413C: return NDMAs[6]->SrcAddr;
+ case 0x04004140: return NDMAs[6]->DstAddr;
+ case 0x04004144: return NDMAs[6]->TotalLength;
+ case 0x04004148: return NDMAs[6]->BlockLength;
+ case 0x0400414C: return NDMAs[6]->SubblockTimer;
+ case 0x04004150: return NDMAs[6]->FillData;
+ case 0x04004154: return NDMAs[6]->Cnt;
+ case 0x04004158: return NDMAs[7]->SrcAddr;
+ case 0x0400415C: return NDMAs[7]->DstAddr;
+ case 0x04004160: return NDMAs[7]->TotalLength;
+ case 0x04004164: return NDMAs[7]->BlockLength;
+ case 0x04004168: return NDMAs[7]->SubblockTimer;
+ case 0x0400416C: return NDMAs[7]->FillData;
+ case 0x04004170: return NDMAs[7]->Cnt;
+
+ case 0x04004400: return DSi_AES::ReadCnt();
+ case 0x0400440C: return DSi_AES::ReadOutputFIFO();
+
+ case 0x04004D00: if (SCFG_BIOS & (1<<10)) return 0; return ConsoleID & 0xFFFFFFFF;
+ case 0x04004D04: if (SCFG_BIOS & (1<<10)) return 0; return ConsoleID >> 32;
+ case 0x04004D08: return 0;
+ }
+
+ if (addr >= 0x04004800 && addr < 0x04004A00)
+ {
+ if (addr == 0x0400490C) return SDMMC->ReadFIFO32();
+ return SDMMC->Read(addr) | (SDMMC->Read(addr+2) << 16);
+ }
+ if (addr >= 0x04004A00 && addr < 0x04004C00)
+ {
+ if (addr == 0x04004B0C) return SDIO->ReadFIFO32();
+ return SDIO->Read(addr) | (SDIO->Read(addr+2) << 16);
+ }
+
+ return NDS::ARM7IORead32(addr);
+}
+
+void ARM7IOWrite8(u32 addr, u8 val)
+{
+ switch (addr)
+ {
+ case 0x04004000:
+ SCFG_BIOS |= (val & 0x03);
+ return;
+ case 0x04004001:
+ SCFG_BIOS |= ((val & 0x07) << 8);
+ return;
+
+ case 0x04004500: DSi_I2C::WriteData(val); return;
+ case 0x04004501: DSi_I2C::WriteCnt(val); return;
+ }
+
+ return NDS::ARM7IOWrite8(addr, val);
+}
+
+void ARM7IOWrite16(u32 addr, u16 val)
+{
+ switch (addr)
+ {
+ case 0x04000218: NDS::IE2 = (val & 0x7FF7); NDS::UpdateIRQ(1); return;
+ case 0x0400021C: NDS::IF2 &= ~(val & 0x7FF7); NDS::UpdateIRQ(1); return;
+
+ case 0x04004000:
+ SCFG_BIOS |= (val & 0x0703);
+ return;
+ case 0x04004004:
+ SCFG_Clock7 = val & 0x0187;
+ return;
+ case 0x04004010:
+ Set_SCFG_MC((SCFG_MC & 0xFFFF0000) | val);
+ return;
+ }
+
+ if (addr >= 0x04004800 && addr < 0x04004A00)
+ {
+ SDMMC->Write(addr, val);
+ return;
+ }
+ if (addr >= 0x04004A00 && addr < 0x04004C00)
+ {
+ SDIO->Write(addr, val);
+ return;
+ }
+
+ return NDS::ARM7IOWrite16(addr, val);
+}
+
+void ARM7IOWrite32(u32 addr, u32 val)
+{
+ switch (addr)
+ {
+ case 0x04000218: NDS::IE2 = (val & 0x7FF7); NDS::UpdateIRQ(1); return;
+ case 0x0400021C: NDS::IF2 &= ~(val & 0x7FF7); NDS::UpdateIRQ(1); return;
+
+ case 0x04004000:
+ SCFG_BIOS |= (val & 0x0703);
+ return;
+ case 0x04004008:
+ SCFG_EXT[0] &= ~0x03000000;
+ SCFG_EXT[0] |= (val & 0x03000000);
+ SCFG_EXT[1] &= ~0x93FF0F07;
+ SCFG_EXT[1] |= (val & 0x93FF0F07);
+ printf("SCFG_EXT = %08X / %08X (val7 %08X)\n", SCFG_EXT[0], SCFG_EXT[1], val);
+ return;
+ case 0x04004010:
+ Set_SCFG_MC(val);
+ return;
+
+ case 0x04004054: MapNWRAMRange(1, 0, val); return;
+ case 0x04004058: MapNWRAMRange(1, 1, val); return;
+ case 0x0400405C: MapNWRAMRange(1, 2, val); return;
+ case 0x04004060: val &= 0x00FFFF0F; MBK[0][8] = val; MBK[1][8] = val; return;
+
+ case 0x04004100: NDMACnt[1] = val & 0x800F0000; return;
+ case 0x04004104: NDMAs[4]->SrcAddr = val & 0xFFFFFFFC; return;
+ case 0x04004108: NDMAs[4]->DstAddr = val & 0xFFFFFFFC; return;
+ case 0x0400410C: NDMAs[4]->TotalLength = val & 0x0FFFFFFF; return;
+ case 0x04004110: NDMAs[4]->BlockLength = val & 0x00FFFFFF; return;
+ case 0x04004114: NDMAs[4]->SubblockTimer = val & 0x0003FFFF; return;
+ case 0x04004118: NDMAs[4]->FillData = val; return;
+ case 0x0400411C: NDMAs[4]->WriteCnt(val); return;
+ case 0x04004120: NDMAs[5]->SrcAddr = val & 0xFFFFFFFC; return;
+ case 0x04004124: NDMAs[5]->DstAddr = val & 0xFFFFFFFC; return;
+ case 0x04004128: NDMAs[5]->TotalLength = val & 0x0FFFFFFF; return;
+ case 0x0400412C: NDMAs[5]->BlockLength = val & 0x00FFFFFF; return;
+ case 0x04004130: NDMAs[5]->SubblockTimer = val & 0x0003FFFF; return;
+ case 0x04004134: NDMAs[5]->FillData = val; return;
+ case 0x04004138: NDMAs[5]->WriteCnt(val); return;
+ case 0x0400413C: NDMAs[6]->SrcAddr = val & 0xFFFFFFFC; return;
+ case 0x04004140: NDMAs[6]->DstAddr = val & 0xFFFFFFFC; return;
+ case 0x04004144: NDMAs[6]->TotalLength = val & 0x0FFFFFFF; return;
+ case 0x04004148: NDMAs[6]->BlockLength = val & 0x00FFFFFF; return;
+ case 0x0400414C: NDMAs[6]->SubblockTimer = val & 0x0003FFFF; return;
+ case 0x04004150: NDMAs[6]->FillData = val; return;
+ case 0x04004154: NDMAs[6]->WriteCnt(val); return;
+ case 0x04004158: NDMAs[7]->SrcAddr = val & 0xFFFFFFFC; return;
+ case 0x0400415C: NDMAs[7]->DstAddr = val & 0xFFFFFFFC; return;
+ case 0x04004160: NDMAs[7]->TotalLength = val & 0x0FFFFFFF; return;
+ case 0x04004164: NDMAs[7]->BlockLength = val & 0x00FFFFFF; return;
+ case 0x04004168: NDMAs[7]->SubblockTimer = val & 0x0003FFFF; return;
+ case 0x0400416C: NDMAs[7]->FillData = val; return;
+ case 0x04004170: NDMAs[7]->WriteCnt(val); return;
+
+ case 0x04004400: DSi_AES::WriteCnt(val); return;
+ case 0x04004404: DSi_AES::WriteBlkCnt(val); return;
+ case 0x04004408: DSi_AES::WriteInputFIFO(val); return;
+ }
+
+ if (addr >= 0x04004420 && addr < 0x04004430)
+ {
+ addr -= 0x04004420;
+ DSi_AES::WriteIV(addr, val, 0xFFFFFFFF);
+ return;
+ }
+ if (addr >= 0x04004430 && addr < 0x04004440)
+ {
+ addr -= 0x04004430;
+ DSi_AES::WriteMAC(addr, val, 0xFFFFFFFF);
+ return;
+ }
+ if (addr >= 0x04004440 && addr < 0x04004500)
+ {
+ addr -= 0x04004440;
+ int n = 0;
+ while (addr >= 0x30) { addr -= 0x30; n++; }
+
+ switch (addr >> 4)
+ {
+ case 0: DSi_AES::WriteKeyNormal(n, addr&0xF, val, 0xFFFFFFFF); return;
+ case 1: DSi_AES::WriteKeyX(n, addr&0xF, val, 0xFFFFFFFF); return;
+ case 2: DSi_AES::WriteKeyY(n, addr&0xF, val, 0xFFFFFFFF); return;
+ }
+ }
+
+ if (addr >= 0x04004800 && addr < 0x04004A00)
+ {
+ if (addr == 0x0400490C) { SDMMC->WriteFIFO32(val); return; }
+ SDMMC->Write(addr, val & 0xFFFF);
+ SDMMC->Write(addr+2, val >> 16);
+ return;
+ }
+ if (addr >= 0x04004A00 && addr < 0x04004C00)
+ {
+ if (addr == 0x04004B0C) { SDIO->WriteFIFO32(val); return; }
+ SDIO->Write(addr, val & 0xFFFF);
+ SDIO->Write(addr+2, val >> 16);
+ return;
+ }
+
+ return NDS::ARM7IOWrite32(addr, val);
+}
+
+}
diff --git a/src/DSi.h b/src/DSi.h
new file mode 100644
index 0000000..8cc8fd5
--- /dev/null
+++ b/src/DSi.h
@@ -0,0 +1,93 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef DSI_H
+#define DSI_H
+
+#include "NDS.h"
+#include "DSi_SD.h"
+
+namespace DSi
+{
+
+extern u8 ARM9iBIOS[0x10000];
+extern u8 ARM7iBIOS[0x10000];
+
+extern u8 eMMC_CID[16];
+extern u64 ConsoleID;
+
+extern DSi_SDHost* SDMMC;
+extern DSi_SDHost* SDIO;
+
+
+bool Init();
+void DeInit();
+void Reset();
+
+void SoftReset();
+
+bool LoadBIOS();
+bool LoadNAND();
+
+void RunNDMAs(u32 cpu);
+void StallNDMAs();
+bool NDMAsInMode(u32 cpu, u32 mode);
+bool NDMAsRunning(u32 cpu);
+void CheckNDMAs(u32 cpu, u32 mode);
+void StopNDMAs(u32 cpu, u32 mode);
+
+void MapNWRAM_A(u32 num, u8 val);
+void MapNWRAM_B(u32 num, u8 val);
+void MapNWRAM_C(u32 num, u8 val);
+void MapNWRAMRange(u32 cpu, u32 num, u32 val);
+
+u8 ARM9Read8(u32 addr);
+u16 ARM9Read16(u32 addr);
+u32 ARM9Read32(u32 addr);
+void ARM9Write8(u32 addr, u8 val);
+void ARM9Write16(u32 addr, u16 val);
+void ARM9Write32(u32 addr, u32 val);
+
+bool ARM9GetMemRegion(u32 addr, bool write, NDS::MemRegion* region);
+
+u8 ARM7Read8(u32 addr);
+u16 ARM7Read16(u32 addr);
+u32 ARM7Read32(u32 addr);
+void ARM7Write8(u32 addr, u8 val);
+void ARM7Write16(u32 addr, u16 val);
+void ARM7Write32(u32 addr, u32 val);
+
+bool ARM7GetMemRegion(u32 addr, bool write, NDS::MemRegion* region);
+
+u8 ARM9IORead8(u32 addr);
+u16 ARM9IORead16(u32 addr);
+u32 ARM9IORead32(u32 addr);
+void ARM9IOWrite8(u32 addr, u8 val);
+void ARM9IOWrite16(u32 addr, u16 val);
+void ARM9IOWrite32(u32 addr, u32 val);
+
+u8 ARM7IORead8(u32 addr);
+u16 ARM7IORead16(u32 addr);
+u32 ARM7IORead32(u32 addr);
+void ARM7IOWrite8(u32 addr, u8 val);
+void ARM7IOWrite16(u32 addr, u16 val);
+void ARM7IOWrite32(u32 addr, u32 val);
+
+}
+
+#endif // DSI_H
diff --git a/src/DSiCrypto.cpp b/src/DSiCrypto.cpp
new file mode 100644
index 0000000..6a524dd
--- /dev/null
+++ b/src/DSiCrypto.cpp
@@ -0,0 +1,17 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
diff --git a/src/DSiCrypto.h b/src/DSiCrypto.h
new file mode 100644
index 0000000..dc9bfe6
--- /dev/null
+++ b/src/DSiCrypto.h
@@ -0,0 +1,24 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef DSICRYPTO_H
+#define DSICRYPTO_H
+
+//
+
+#endif // DSICRYPTO_H
diff --git a/src/DSi_AES.cpp b/src/DSi_AES.cpp
new file mode 100644
index 0000000..6a8ffad
--- /dev/null
+++ b/src/DSi_AES.cpp
@@ -0,0 +1,555 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "DSi.h"
+#include "DSi_AES.h"
+#include "FIFO.h"
+#include "tiny-AES-c/aes.hpp"
+#include "Platform.h"
+
+
+namespace DSi_AES
+{
+
+u32 Cnt;
+
+u32 BlkCnt;
+u32 RemBlocks;
+
+bool OutputFlush;
+
+u32 InputDMASize, OutputDMASize;
+u32 AESMode;
+
+FIFO<u32>* InputFIFO;
+FIFO<u32>* OutputFIFO;
+
+u8 IV[16];
+
+u8 MAC[16];
+
+u8 KeyNormal[4][16];
+u8 KeyX[4][16];
+u8 KeyY[4][16];
+
+u8 CurKey[16];
+u8 CurMAC[16];
+
+AES_ctx Ctx;
+
+
+void Swap16(u8* dst, u8* src)
+{
+ for (int i = 0; i < 16; i++)
+ dst[i] = src[15-i];
+}
+
+void ROL16(u8* val, u32 n)
+{
+ u32 n_coarse = n >> 3;
+ u32 n_fine = n & 7;
+ u8 tmp[16];
+
+ for (u32 i = 0; i < 16; i++)
+ {
+ tmp[i] = val[(i - n_coarse) & 0xF];
+ }
+
+ for (u32 i = 0; i < 16; i++)
+ {
+ val[i] = (tmp[i] << n_fine) | (tmp[(i - 1) & 0xF] >> (8-n_fine));
+ }
+}
+
+#define _printhex(str, size) { for (int z = 0; z < (size); z++) printf("%02X", (str)[z]); printf("\n"); }
+#define _printhex2(str, size) { for (int z = 0; z < (size); z++) printf("%02X", (str)[z]); }
+
+#define _printhexR(str, size) { for (int z = 0; z < (size); z++) printf("%02X", (str)[((size)-1)-z]); printf("\n"); }
+#define _printhex2R(str, size) { for (int z = 0; z < (size); z++) printf("%02X", (str)[((size)-1)-z]); }
+
+
+bool Init()
+{
+ InputFIFO = new FIFO<u32>(16);
+ OutputFIFO = new FIFO<u32>(16);
+
+ const u8 zero[16] = {0};
+ AES_init_ctx_iv(&Ctx, zero, zero);
+
+ return true;
+}
+
+void DeInit()
+{
+ delete InputFIFO;
+ delete OutputFIFO;
+}
+
+void Reset()
+{
+ Cnt = 0;
+
+ BlkCnt = 0;
+ RemBlocks = 0;
+
+ OutputFlush = false;
+
+ InputDMASize = 0;
+ OutputDMASize = 0;
+ AESMode = 0;
+
+ InputFIFO->Clear();
+ OutputFIFO->Clear();
+
+ memset(IV, 0, sizeof(IV));
+
+ memset(MAC, 0, sizeof(MAC));
+
+ memset(KeyNormal, 0, sizeof(KeyNormal));
+ memset(KeyX, 0, sizeof(KeyX));
+ memset(KeyY, 0, sizeof(KeyY));
+
+ memset(CurKey, 0, sizeof(CurKey));
+ memset(CurMAC, 0, sizeof(CurMAC));
+
+ // initialize keys
+
+ // slot 0: modcrypt
+ *(u32*)&KeyX[0][0] = 0x746E694E;
+ *(u32*)&KeyX[0][4] = 0x6F646E65;
+
+ // slot 1: 'Tad'/dev.kp
+ *(u32*)&KeyX[1][0] = 0x4E00004A;
+ *(u32*)&KeyX[1][4] = 0x4A00004E;
+ *(u32*)&KeyX[1][8] = (u32)(DSi::ConsoleID >> 32) ^ 0xC80C4B72;
+ *(u32*)&KeyX[1][12] = (u32)DSi::ConsoleID;
+
+ // slot 3: console-unique eMMC crypto
+ *(u32*)&KeyX[3][0] = (u32)DSi::ConsoleID;
+ *(u32*)&KeyX[3][4] = (u32)DSi::ConsoleID ^ 0x24EE6906;
+ *(u32*)&KeyX[3][8] = (u32)(DSi::ConsoleID >> 32) ^ 0xE65B601D;
+ *(u32*)&KeyX[3][12] = (u32)(DSi::ConsoleID >> 32);
+ *(u32*)&KeyY[3][0] = 0x0AB9DC76;
+ *(u32*)&KeyY[3][4] = 0xBD4DC4D3;
+ *(u32*)&KeyY[3][8] = 0x202DDD1D;
+}
+
+
+void ProcessBlock_CCM_Decrypt()
+{
+ u8 data[16];
+ u8 data_rev[16];
+
+ *(u32*)&data[0] = InputFIFO->Read();
+ *(u32*)&data[4] = InputFIFO->Read();
+ *(u32*)&data[8] = InputFIFO->Read();
+ *(u32*)&data[12] = InputFIFO->Read();
+
+ //printf("AES-CCM: "); _printhex2(data, 16);
+
+ Swap16(data_rev, data);
+ AES_CTR_xcrypt_buffer(&Ctx, data_rev, 16);
+
+ for (int i = 0; i < 16; i++) CurMAC[i] ^= data_rev[i];
+ AES_ECB_encrypt(&Ctx, CurMAC);
+
+ Swap16(data, data_rev);
+
+ //printf(" -> "); _printhex2(data, 16);
+
+ OutputFIFO->Write(*(u32*)&data[0]);
+ OutputFIFO->Write(*(u32*)&data[4]);
+ OutputFIFO->Write(*(u32*)&data[8]);
+ OutputFIFO->Write(*(u32*)&data[12]);
+}
+
+void ProcessBlock_CTR()
+{
+ u8 data[16];
+ u8 data_rev[16];
+
+ *(u32*)&data[0] = InputFIFO->Read();
+ *(u32*)&data[4] = InputFIFO->Read();
+ *(u32*)&data[8] = InputFIFO->Read();
+ *(u32*)&data[12] = InputFIFO->Read();
+
+ //printf("AES-CTR: "); _printhex2(data, 16);
+
+ Swap16(data_rev, data);
+ AES_CTR_xcrypt_buffer(&Ctx, data_rev, 16);
+ Swap16(data, data_rev);
+
+ //printf(" -> "); _printhex(data, 16);
+
+ OutputFIFO->Write(*(u32*)&data[0]);
+ OutputFIFO->Write(*(u32*)&data[4]);
+ OutputFIFO->Write(*(u32*)&data[8]);
+ OutputFIFO->Write(*(u32*)&data[12]);
+}
+
+
+u32 ReadCnt()
+{
+ u32 ret = Cnt;
+
+ ret |= InputFIFO->Level();
+ ret |= (OutputFIFO->Level() << 5);
+
+ return ret;
+}
+
+void WriteCnt(u32 val)
+{
+ u32 oldcnt = Cnt;
+ Cnt = val & 0xFC1FF000;
+
+ /*if (val & (3<<10))
+ {
+ if (val & (1<<11)) OutputFlush = true;
+ Update();
+ }*/
+
+ u32 dmasize_in[4] = {0, 4, 8, 12};
+ u32 dmasize_out[4] = {4, 8, 12, 16};
+ InputDMASize = dmasize_in[(val >> 12) & 0x3];
+ OutputDMASize = dmasize_out[(val >> 14) & 0x3];
+
+ AESMode = (val >> 28) & 0x3;
+ if (AESMode == 1) printf("AES-CCM TODO\n");
+
+ if (val & (1<<24))
+ {
+ u32 slot = (val >> 26) & 0x3;
+ memcpy(CurKey, KeyNormal[slot], 16);
+ }
+
+ if (!(oldcnt & (1<<31)) && (val & (1<<31)))
+ {
+ // transfer start (checkme)
+ RemBlocks = BlkCnt >> 16;
+
+ if (RemBlocks > 0)
+ {
+ u8 key[16];
+ u8 iv[16];
+
+ Swap16(key, CurKey);
+ Swap16(iv, IV);
+
+ if (AESMode < 2)
+ {
+ if (BlkCnt & 0xFFFF) printf("AES: CCM EXTRA LEN TODO\n");
+
+ u32 maclen = (val >> 16) & 0x7;
+ if (maclen < 1) maclen = 1;
+
+ iv[0] = 0x02;
+ for (int i = 0; i < 12; i++) iv[1+i] = iv[4+i];
+ iv[13] = 0x00;
+ iv[14] = 0x00;
+ iv[15] = 0x01;
+
+ AES_init_ctx_iv(&Ctx, key, iv);
+
+ iv[0] |= (maclen << 3) | ((BlkCnt & 0xFFFF) ? (1<<6) : 0);
+ iv[13] = RemBlocks >> 12;
+ iv[14] = RemBlocks >> 4;
+ iv[15] = RemBlocks << 4;
+
+ memcpy(CurMAC, iv, 16);
+ AES_ECB_encrypt(&Ctx, CurMAC);
+ }
+ else
+ {
+ AES_init_ctx_iv(&Ctx, key, iv);
+ }
+
+ DSi::CheckNDMAs(1, 0x2A);
+ }
+ else
+ {
+ // no blocks to process? oh well. mark it finished
+ // CHECKME: does this trigger any IRQ or shit?
+
+ Cnt &= ~(1<<31);
+ }
+ }
+
+ //printf("AES CNT: %08X / mode=%d key=%d inDMA=%d outDMA=%d blocks=%d\n",
+ // val, AESMode, (val >> 26) & 0x3, InputDMASize, OutputDMASize, RemBlocks);
+}
+
+void WriteBlkCnt(u32 val)
+{
+ BlkCnt = val;
+}
+
+u32 ReadOutputFIFO()
+{
+ if (OutputFIFO->IsEmpty()) printf("!!! AES OUTPUT FIFO EMPTY\n");
+
+ u32 ret = OutputFIFO->Read();
+
+ if (Cnt & (1<<31))
+ {
+ CheckInputDMA();
+ CheckOutputDMA();
+ }
+ else
+ {
+ if (OutputFIFO->Level() > 0)
+ DSi::CheckNDMAs(1, 0x2B);
+ else
+ DSi::StopNDMAs(1, 0x2B);
+ }
+
+ return ret;
+}
+
+void WriteInputFIFO(u32 val)
+{
+ // TODO: add some delay to processing
+
+ if (InputFIFO->IsFull()) printf("!!! AES INPUT FIFO FULL\n");
+
+ InputFIFO->Write(val);
+
+ if (!(Cnt & (1<<31))) return;
+
+ Update();
+}
+
+void CheckInputDMA()
+{
+ if (RemBlocks == 0) return;
+
+ if (InputFIFO->Level() <= InputDMASize)
+ {
+ // trigger input DMA
+ DSi::CheckNDMAs(1, 0x2A);
+ }
+
+ Update();
+}
+
+void CheckOutputDMA()
+{
+ if (OutputFIFO->Level() >= OutputDMASize)
+ {
+ // trigger output DMA
+ DSi::CheckNDMAs(1, 0x2B);
+ }
+}
+
+void Update()
+{
+ while (InputFIFO->Level() >= 4 && OutputFIFO->Level() <= 12 && RemBlocks > 0)
+ {
+ switch (AESMode)
+ {
+ case 0: ProcessBlock_CCM_Decrypt(); break;
+ case 2:
+ case 3: ProcessBlock_CTR(); break;
+ default:
+ // dorp
+ OutputFIFO->Write(InputFIFO->Read());
+ OutputFIFO->Write(InputFIFO->Read());
+ OutputFIFO->Write(InputFIFO->Read());
+ OutputFIFO->Write(InputFIFO->Read());
+ }
+
+ RemBlocks--;
+ }
+
+ CheckOutputDMA();
+
+ if (RemBlocks == 0)
+ {
+ if (AESMode == 0)
+ {
+ Ctx.Iv[13] = 0x00;
+ Ctx.Iv[14] = 0x00;
+ Ctx.Iv[15] = 0x00;
+ AES_CTR_xcrypt_buffer(&Ctx, CurMAC, 16);
+
+ //printf("FINAL MAC: "); _printhexR(CurMAC, 16);
+ //printf("INPUT MAC: "); _printhex(MAC, 16);
+
+ Cnt |= (1<<21);
+ for (int i = 0; i < 16; i++)
+ {
+ if (CurMAC[15-i] != MAC[i]) Cnt &= ~(1<<21);
+ }
+ }
+ else
+ {
+ // CHECKME
+ Cnt &= ~(1<<21);
+ }
+
+ Cnt &= ~(1<<31);
+ if (Cnt & (1<<30)) NDS::SetIRQ2(NDS::IRQ2_DSi_AES);
+ DSi::StopNDMAs(1, 0x2A);
+
+ if (OutputFIFO->Level() > 0)
+ DSi::CheckNDMAs(1, 0x2B);
+ else
+ DSi::StopNDMAs(1, 0x2B);
+ OutputFlush = false;
+ }
+}
+
+
+void WriteIV(u32 offset, u32 val, u32 mask)
+{
+ u32 old = *(u32*)&IV[offset];
+
+ *(u32*)&IV[offset] = (old & ~mask) | (val & mask);
+
+ //printf("AES: IV: "); _printhex(IV, 16);
+}
+
+void WriteMAC(u32 offset, u32 val, u32 mask)
+{
+ u32 old = *(u32*)&MAC[offset];
+
+ *(u32*)&MAC[offset] = (old & ~mask) | (val & mask);
+
+ //printf("AES: MAC: "); _printhex(MAC, 16);
+}
+
+void DeriveNormalKey(u32 slot)
+{
+ const u8 key_const[16] = {0xFF, 0xFE, 0xFB, 0x4E, 0x29, 0x59, 0x02, 0x58, 0x2A, 0x68, 0x0F, 0x5F, 0x1A, 0x4F, 0x3E, 0x79};
+ u8 tmp[16];
+
+ //printf("slot%d keyX: ", slot); _printhex(KeyX[slot], 16);
+ //printf("slot%d keyY: ", slot); _printhex(KeyY[slot], 16);
+
+ for (int i = 0; i < 16; i++)
+ tmp[i] = KeyX[slot][i] ^ KeyY[slot][i];
+
+ u32 carry = 0;
+ for (int i = 0; i < 16; i++)
+ {
+ u32 res = tmp[i] + key_const[15-i] + carry;
+ tmp[i] = res & 0xFF;
+ carry = res >> 8;
+ }
+
+ ROL16(tmp, 42);
+
+ //printf("derive normalkey %d\n", slot); _printhex(tmp, 16);
+
+ memcpy(KeyNormal[slot], tmp, 16);
+}
+
+void WriteKeyNormal(u32 slot, u32 offset, u32 val, u32 mask)
+{
+ u32 old = *(u32*)&KeyNormal[slot][offset];
+
+ *(u32*)&KeyNormal[slot][offset] = (old & ~mask) | (val & mask);
+
+ //printf("KeyNormal(%d): ", slot); _printhex(KeyNormal[slot], 16);
+}
+
+void WriteKeyX(u32 slot, u32 offset, u32 val, u32 mask)
+{
+ u32 old = *(u32*)&KeyX[slot][offset];
+
+ *(u32*)&KeyX[slot][offset] = (old & ~mask) | (val & mask);
+
+ //printf("KeyX(%d): ", slot); _printhex(KeyX[slot], 16);
+}
+
+void WriteKeyY(u32 slot, u32 offset, u32 val, u32 mask)
+{
+ u32 old = *(u32*)&KeyY[slot][offset];
+
+ *(u32*)&KeyY[slot][offset] = (old & ~mask) | (val & mask);
+
+ //printf("[%08X] KeyY(%d): ", NDS::GetPC(1), slot); _printhex(KeyY[slot], 16);
+
+ if (offset >= 0xC)
+ {
+ DeriveNormalKey(slot);
+ }
+}
+
+
+// utility
+
+void GetModcryptKey(u8* romheader, u8* key)
+{
+ if ((romheader[0x01C] & 0x04) || (romheader[0x1BF] & 0x80))
+ {
+ // dev key
+ memcpy(key, &romheader[0x000], 16);
+ return;
+ }
+
+ u8 oldkeys[16*3];
+ memcpy(&oldkeys[16*0], KeyX[0], 16);
+ memcpy(&oldkeys[16*1], KeyY[0], 16);
+ memcpy(&oldkeys[16*2], KeyNormal[0], 16);
+
+ KeyX[0][8] = romheader[0x00C];
+ KeyX[0][9] = romheader[0x00D];
+ KeyX[0][10] = romheader[0x00E];
+ KeyX[0][11] = romheader[0x00F];
+ KeyX[0][12] = romheader[0x00F];
+ KeyX[0][13] = romheader[0x00E];
+ KeyX[0][14] = romheader[0x00D];
+ KeyX[0][15] = romheader[0x00C];
+
+ memcpy(KeyY[0], &romheader[0x350], 16);
+
+ DeriveNormalKey(0);
+ memcpy(key, KeyNormal[0], 16);
+
+ memcpy(KeyX[0], &oldkeys[16*0], 16);
+ memcpy(KeyY[0], &oldkeys[16*1], 16);
+ memcpy(KeyNormal[0], &oldkeys[16*2], 16);
+}
+
+void ApplyModcrypt(u8* data, u32 len, u8* key, u8* iv)
+{
+ u8 key_rev[16], iv_rev[16];
+ u8 data_rev[16];
+ u8 oldkeys[16*2];
+ memcpy(&oldkeys[16*0], Ctx.RoundKey, 16);
+ memcpy(&oldkeys[16*1], Ctx.Iv, 16);
+
+ Swap16(key_rev, key);
+ Swap16(iv_rev, iv);
+ AES_init_ctx_iv(&Ctx, key_rev, iv_rev);
+
+ for (u32 i = 0; i < len; i += 16)
+ {
+ Swap16(data_rev, &data[i]);
+ AES_CTR_xcrypt_buffer(&Ctx, data_rev, 16);
+ Swap16(&data[i], data_rev);
+ }
+
+ memcpy(Ctx.RoundKey, &oldkeys[16*0], 16);
+ memcpy(Ctx.Iv, &oldkeys[16*1], 16);
+}
+
+}
diff --git a/src/DSi_AES.h b/src/DSi_AES.h
new file mode 100644
index 0000000..354c4a7
--- /dev/null
+++ b/src/DSi_AES.h
@@ -0,0 +1,54 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef DSI_AES_H
+#define DSI_AES_H
+
+#include "types.h"
+
+namespace DSi_AES
+{
+
+extern u32 Cnt;
+
+bool Init();
+void DeInit();
+void Reset();
+
+u32 ReadCnt();
+void WriteCnt(u32 val);
+void WriteBlkCnt(u32 val);
+
+u32 ReadOutputFIFO();
+void WriteInputFIFO(u32 val);
+void CheckInputDMA();
+void CheckOutputDMA();
+void Update();
+
+void WriteIV(u32 offset, u32 val, u32 mask);
+void WriteMAC(u32 offset, u32 val, u32 mask);
+void WriteKeyNormal(u32 slot, u32 offset, u32 val, u32 mask);
+void WriteKeyX(u32 slot, u32 offset, u32 val, u32 mask);
+void WriteKeyY(u32 slot, u32 offset, u32 val, u32 mask);
+
+void GetModcryptKey(u8* romheader, u8* key);
+void ApplyModcrypt(u8* data, u32 len, u8* key, u8* iv);
+
+}
+
+#endif // DSI_AES_H
diff --git a/src/DSi_Camera.cpp b/src/DSi_Camera.cpp
new file mode 100644
index 0000000..45061b2
--- /dev/null
+++ b/src/DSi_Camera.cpp
@@ -0,0 +1,166 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "DSi_Camera.h"
+
+
+DSi_Camera* DSi_Camera0; // 78 / facing outside
+DSi_Camera* DSi_Camera1; // 7A / selfie cam
+
+
+bool DSi_Camera::Init()
+{
+ DSi_Camera0 = new DSi_Camera(0);
+ DSi_Camera1 = new DSi_Camera(1);
+
+ return true;
+}
+
+void DSi_Camera::DeInit()
+{
+ delete DSi_Camera0;
+ delete DSi_Camera1;
+}
+
+void DSi_Camera::Reset()
+{
+ DSi_Camera0->ResetCam();
+ DSi_Camera1->ResetCam();
+}
+
+
+DSi_Camera::DSi_Camera(u32 num)
+{
+ Num = num;
+}
+
+DSi_Camera::~DSi_Camera()
+{
+ //
+}
+
+void DSi_Camera::ResetCam()
+{
+ DataPos = 0;
+ RegAddr = 0;
+ RegData = 0;
+
+ PLLCnt = 0;
+ StandbyCnt = 0x4029; // checkme
+}
+
+
+void DSi_Camera::Start()
+{
+}
+
+u8 DSi_Camera::Read(bool last)
+{
+ u8 ret;
+
+ if (DataPos < 2)
+ {
+ printf("DSi_Camera: WHAT??\n");
+ ret = 0;
+ }
+ else
+ {
+ if (DataPos & 0x1)
+ {
+ ret = RegData & 0xFF;
+ RegAddr += 2; // checkme
+ }
+ else
+ {
+ RegData = ReadReg(RegAddr);
+ ret = RegData >> 8;
+ }
+ }
+
+ if (last) DataPos = 0;
+ else DataPos++;
+
+ return ret;
+}
+
+void DSi_Camera::Write(u8 val, bool last)
+{
+ if (DataPos < 2)
+ {
+ if (DataPos == 0)
+ RegAddr = val << 8;
+ else
+ RegAddr |= val;
+
+ if (RegAddr & 0x1) printf("DSi_Camera: !! UNALIGNED REG ADDRESS %04X\n", RegAddr);
+ }
+ else
+ {
+ if (DataPos & 0x1)
+ {
+ RegData |= val;
+ WriteReg(RegAddr, RegData);
+ RegAddr += 2; // checkme
+ }
+ else
+ {
+ RegData = val << 8;
+ }
+ }
+
+ if (last) DataPos = 0;
+ else DataPos++;
+}
+
+u16 DSi_Camera::ReadReg(u16 addr)
+{
+ switch (addr)
+ {
+ case 0x0000: return 0x2280; // chip ID
+ case 0x0014: return PLLCnt;
+ case 0x0018: return StandbyCnt;
+
+ case 0x301A: return ((~StandbyCnt) & 0x4000) >> 12;
+ }
+
+ printf("DSi_Camera%d: unknown read %04X\n", Num, addr);
+ return 0;
+}
+
+void DSi_Camera::WriteReg(u16 addr, u16 val)
+{
+ switch (addr)
+ {
+ case 0x0014:
+ // shouldn't be instant either?
+ val &= 0x7FFF;
+ val |= ((val & 0x0002) << 14);
+ PLLCnt = val;
+ return;
+ case 0x0018:
+ // TODO: this shouldn't be instant, but uh
+ val &= 0x003F;
+ val |= ((val & 0x0001) << 14);
+ StandbyCnt = val;
+ return;
+ }
+
+ printf("DSi_Camera%d: unknown write %04X %04X\n", Num, addr, val);
+}
diff --git a/src/DSi_Camera.h b/src/DSi_Camera.h
new file mode 100644
index 0000000..78629b5
--- /dev/null
+++ b/src/DSi_Camera.h
@@ -0,0 +1,58 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef DSI_CAMERA_H
+#define DSI_CAMERA_H
+
+#include "types.h"
+
+class DSi_Camera
+{
+public:
+ static bool Init();
+ static void DeInit();
+ static void Reset();
+
+ DSi_Camera(u32 num);
+ ~DSi_Camera();
+
+ void ResetCam();
+
+ void Start();
+ u8 Read(bool last);
+ void Write(u8 val, bool last);
+
+private:
+ u32 Num;
+
+ u32 DataPos;
+ u32 RegAddr;
+ u16 RegData;
+
+ u16 ReadReg(u16 addr);
+ void WriteReg(u16 addr, u16 val);
+
+ u16 PLLCnt;
+ u16 StandbyCnt;
+};
+
+
+extern DSi_Camera* DSi_Camera0;
+extern DSi_Camera* DSi_Camera1;
+
+#endif // DSI_CAMERA_H
diff --git a/src/DSi_I2C.cpp b/src/DSi_I2C.cpp
new file mode 100644
index 0000000..9984f5e
--- /dev/null
+++ b/src/DSi_I2C.cpp
@@ -0,0 +1,255 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "DSi.h"
+#include "DSi_I2C.h"
+#include "DSi_Camera.h"
+
+
+namespace DSi_BPTWL
+{
+
+u8 Registers[0x100];
+u32 CurPos;
+
+bool Init()
+{
+ return true;
+}
+
+void DeInit()
+{
+}
+
+void Reset()
+{
+ CurPos = -1;
+ memset(Registers, 0x5A, 0x100);
+
+ Registers[0x00] = 0x33; // TODO: support others??
+ Registers[0x01] = 0x00;
+ Registers[0x02] = 0x50;
+ Registers[0x10] = 0x00; // power btn
+ Registers[0x11] = 0x00; // reset
+ Registers[0x12] = 0x00; // power btn tap
+ Registers[0x20] = 0x83; // battery
+ Registers[0x21] = 0x07;
+ Registers[0x30] = 0x13;
+ Registers[0x31] = 0x00; // camera power
+ Registers[0x40] = 0x1F; // volume
+ Registers[0x41] = 0x04; // backlight
+ Registers[0x60] = 0x00;
+ Registers[0x61] = 0x01;
+ Registers[0x62] = 0x50;
+ Registers[0x63] = 0x00;
+ Registers[0x70] = 0x00; // boot flag
+ Registers[0x71] = 0x00;
+ Registers[0x72] = 0x00;
+ Registers[0x73] = 0x00;
+ Registers[0x74] = 0x00;
+ Registers[0x75] = 0x00;
+ Registers[0x76] = 0x00;
+ Registers[0x77] = 0x00;
+ Registers[0x80] = 0x10;
+ Registers[0x81] = 0x64;
+}
+
+void Start()
+{
+ //printf("BPTWL: start\n");
+}
+
+u8 Read(bool last)
+{
+ if (last)
+ {
+ CurPos = -1;
+ return 0;
+ }
+
+ //printf("BPTWL: read %02X -> %02X\n", CurPos, Registers[CurPos]);
+ return Registers[CurPos++];
+}
+
+void Write(u8 val, bool last)
+{
+ if (last)
+ {
+ CurPos = -1;
+ return;
+ }
+
+ if (CurPos == -1)
+ {
+ CurPos = val;
+ //printf("BPTWL: reg=%02X\n", val);
+ return;
+ }
+
+ if (CurPos == 0x11 && val == 0x01)
+ {
+ printf("BPTWL: soft-reset\n");
+ val = 0; // checkme
+ // TODO: soft-reset might need to be scheduled later!
+ DSi::SoftReset();
+ CurPos = -1;
+ return;
+ }
+
+ if (CurPos == 0x11 || CurPos == 0x12 ||
+ CurPos == 0x21 ||
+ CurPos == 0x30 || CurPos == 0x31 ||
+ CurPos == 0x40 || CurPos == 0x31 ||
+ CurPos == 0x60 || CurPos == 0x63 ||
+ (CurPos >= 0x70 && CurPos <= 0x77) ||
+ CurPos == 0x80 || CurPos == 0x81)
+ {
+ Registers[CurPos] = val;
+ }
+
+ //printf("BPTWL: write %02X -> %02X\n", CurPos, val);
+ CurPos++; // CHECKME
+}
+
+}
+
+
+namespace DSi_I2C
+{
+
+u8 Cnt;
+u8 Data;
+
+u32 Device;
+
+bool Init()
+{
+ if (!DSi_BPTWL::Init()) return false;
+ if (!DSi_Camera::Init()) return false;
+
+ return true;
+}
+
+void DeInit()
+{
+ DSi_BPTWL::DeInit();
+ DSi_Camera::DeInit();
+}
+
+void Reset()
+{
+ Cnt = 0;
+ Data = 0;
+
+ Device = -1;
+
+ DSi_BPTWL::Reset();
+ DSi_Camera::Reset();
+}
+
+void WriteCnt(u8 val)
+{
+ //printf("I2C: write CNT %02X, %08X\n", val, NDS::GetPC(1));
+
+ // TODO: check ACK flag
+ // TODO: transfer delay
+ // TODO: IRQ
+ // TODO: check read/write direction
+
+ if (val & (1<<7))
+ {
+ bool islast = val & (1<<0);
+
+ if (val & (1<<5))
+ {
+ // read
+ val &= 0xF7;
+
+ switch (Device)
+ {
+ case 0x4A: Data = DSi_BPTWL::Read(islast); break;
+ case 0x78: Data = DSi_Camera0->Read(islast); break;
+ case 0x7A: Data = DSi_Camera1->Read(islast); break;
+ default:
+ printf("I2C: read on unknown device %02X, cnt=%02X, data=%02X, last=%d\n", Device, val, 0, islast);
+ Data = 0xFF;
+ break;
+ }
+
+ //printf("I2C read, device=%02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast);
+ }
+ else
+ {
+ // write
+ val &= 0xE7;
+ bool ack = true;
+
+ if (val & (1<<1))
+ {
+ Device = Data & 0xFE;
+ //printf("I2C: %s start, device=%02X\n", (Data&0x01)?"read":"write", Device);
+
+ switch (Device)
+ {
+ case 0x4A: DSi_BPTWL::Start(); break;
+ case 0x78: DSi_Camera0->Start(); break;
+ case 0x7A: DSi_Camera1->Start(); break;
+ default:
+ printf("I2C: %s start on unknown device %02X\n", (Data&0x01)?"read":"write", Device);
+ ack = false;
+ break;
+ }
+ }
+ else
+ {
+ //printf("I2C write, device=%02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast);
+
+ switch (Device)
+ {
+ case 0x4A: DSi_BPTWL::Write(Data, islast); break;
+ case 0x78: DSi_Camera0->Write(Data, islast); break;
+ case 0x7A: DSi_Camera1->Write(Data, islast); break;
+ default:
+ printf("I2C: write on unknown device %02X, cnt=%02X, data=%02X, last=%d\n", Device, val, Data, islast);
+ ack = false;
+ break;
+ }
+ }
+
+ if (ack) val |= (1<<4);
+ }
+
+ val &= 0x7F;
+ }
+
+ Cnt = val;
+}
+
+u8 ReadData()
+{
+ return Data;
+}
+
+void WriteData(u8 val)
+{
+ Data = val;
+}
+
+}
diff --git a/src/DSi_I2C.h b/src/DSi_I2C.h
new file mode 100644
index 0000000..d058be1
--- /dev/null
+++ b/src/DSi_I2C.h
@@ -0,0 +1,41 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef DSI_I2C_H
+#define DSI_I2C_H
+
+namespace DSi_I2C
+{
+
+extern u8 Cnt;
+
+bool Init();
+void DeInit();
+void Reset();
+//void DoSavestate(Savestate* file);
+
+void WriteCnt(u8 val);
+
+u8 ReadData();
+void WriteData(u8 val);
+
+//void TransferDone(u32 param);
+
+}
+
+#endif // DSI_I2C_H
diff --git a/src/DSi_NDMA.cpp b/src/DSi_NDMA.cpp
new file mode 100644
index 0000000..19c72b6
--- /dev/null
+++ b/src/DSi_NDMA.cpp
@@ -0,0 +1,341 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include "NDS.h"
+#include "DSi.h"
+#include "DSi_NDMA.h"
+#include "GPU.h"
+#include "DSi_AES.h"
+
+
+
+DSi_NDMA::DSi_NDMA(u32 cpu, u32 num)
+{
+ CPU = cpu;
+ Num = num;
+
+ Reset();
+}
+
+DSi_NDMA::~DSi_NDMA()
+{
+}
+
+void DSi_NDMA::Reset()
+{
+ SrcAddr = 0;
+ DstAddr = 0;
+ TotalLength = 0;
+ BlockLength = 0;
+ SubblockTimer = 0;
+ FillData = 0;
+ Cnt = 0;
+
+ StartMode = 0;
+ CurSrcAddr = 0;
+ CurDstAddr = 0;
+ SubblockLength = 0;
+ RemCount = 0;
+ IterCount = 0;
+ TotalRemCount = 0;
+ SrcAddrInc = 0;
+ DstAddrInc = 0;
+
+ Running = false;
+ InProgress = false;
+}
+
+void DSi_NDMA::DoSavestate(Savestate* file)
+{
+ // TODO!
+}
+
+void DSi_NDMA::WriteCnt(u32 val)
+{
+ u32 oldcnt = Cnt;
+ Cnt = val;
+
+ if ((!(oldcnt & 0x80000000)) && (val & 0x80000000)) // checkme
+ {
+ CurSrcAddr = SrcAddr;
+ CurDstAddr = DstAddr;
+ TotalRemCount = TotalLength;
+
+ switch ((Cnt >> 10) & 0x3)
+ {
+ case 0: DstAddrInc = 1; break;
+ case 1: DstAddrInc = -1; break;
+ case 2: DstAddrInc = 0; break;
+ case 3: DstAddrInc = 1; printf("BAD NDMA DST INC MODE 3\n"); break;
+ }
+
+ switch ((Cnt >> 13) & 0x3)
+ {
+ case 0: SrcAddrInc = 1; break;
+ case 1: SrcAddrInc = -1; break;
+ case 2: SrcAddrInc = 0; break;
+ case 3: SrcAddrInc = 0; break; // fill mode
+ }
+
+ StartMode = (Cnt >> 24) & 0x1F;
+ if (StartMode > 0x10) StartMode = 0x10;
+ if (CPU == 1) StartMode |= 0x20;
+
+ if ((StartMode & 0x1F) == 0x10)
+ Start();
+
+ if (StartMode != 0x10 && StartMode != 0x30 &&
+ StartMode != 0x04 && StartMode != 0x06 && StartMode != 0x07 && StartMode != 0x08 && StartMode != 0x09 &&
+ StartMode != 0x24 && StartMode != 0x26 && StartMode != 0x28 && StartMode != 0x29 && StartMode != 0x2A && StartMode != 0x2B)
+ printf("UNIMPLEMENTED ARM%d NDMA%d START MODE %02X, %08X->%08X LEN=%d BLK=%d CNT=%08X\n",
+ CPU?7:9, Num, StartMode, SrcAddr, DstAddr, TotalLength, BlockLength, Cnt);
+ }
+}
+
+void DSi_NDMA::Start()
+{
+ if (Running) return;
+
+ if (!InProgress)
+ {
+ RemCount = BlockLength;
+ if (!RemCount)
+ RemCount = 0x1000000;
+ }
+
+ // TODO: how does GXFIFO DMA work with all the block shito?
+ IterCount = RemCount;
+
+ if (((StartMode & 0x1F) != 0x10) && !(Cnt & (1<<29)))
+ {
+ if (IterCount > TotalRemCount)
+ {
+ IterCount = TotalRemCount;
+ RemCount = IterCount;
+ }
+ }
+
+ if (Cnt & (1<<12)) CurDstAddr = DstAddr;
+ if (Cnt & (1<<15)) CurSrcAddr = SrcAddr;
+
+ //printf("ARM%d NDMA%d %08X %02X %08X->%08X %d bytes, total=%d\n", CPU?7:9, Num, Cnt, StartMode, CurSrcAddr, CurDstAddr, RemCount*4, TotalRemCount*4);
+
+ //IsGXFIFODMA = (CPU == 0 && (CurSrcAddr>>24) == 0x02 && CurDstAddr == 0x04000400 && DstAddrInc == 0);
+
+ // TODO eventually: not stop if we're running code in ITCM
+
+ //if (SubblockTimer & 0xFFFF)
+ // printf("TODO! NDMA SUBBLOCK TIMER: %08X\n", SubblockTimer);
+
+ if (NDS::DMAsRunning(CPU))
+ Running = 1;
+ else
+ Running = 2;
+
+ InProgress = true;
+ NDS::StopCPU(CPU, 1<<(Num+4));
+}
+
+void DSi_NDMA::Run()
+{
+ if (!Running) return;
+ if (CPU == 0) return Run9();
+ else return Run7();
+}
+
+void DSi_NDMA::Run9()
+{
+ if (NDS::ARM9Timestamp >= NDS::ARM9Target) return;
+
+ Executing = true;
+
+ // add NS penalty for first accesses in burst
+ bool burststart = (Running == 2);
+ Running = 1;
+
+ s32 unitcycles;
+ //s32 lastcycles = cycles;
+
+ bool dofill = ((Cnt >> 13) & 0x3) == 3;
+
+ if ((CurSrcAddr >> 24) == 0x02 && (CurDstAddr >> 24) == 0x02)
+ {
+ unitcycles = NDS::ARM9MemTimings[CurSrcAddr >> 14][2] + NDS::ARM9MemTimings[CurDstAddr >> 14][2];
+ }
+ else
+ {
+ unitcycles = NDS::ARM9MemTimings[CurSrcAddr >> 14][3] + NDS::ARM9MemTimings[CurDstAddr >> 14][3];
+ if ((CurSrcAddr >> 24) == (CurDstAddr >> 24))
+ unitcycles++;
+ else if ((CurSrcAddr >> 24) == 0x02)
+ unitcycles--;
+
+ /*if (burststart)
+ {
+ cycles -= 2;
+ cycles -= (NDS::ARM9MemTimings[CurSrcAddr >> 14][2] + NDS::ARM9MemTimings[CurDstAddr >> 14][2]);
+ cycles += unitcycles;
+ }*/
+ }
+
+ while (IterCount > 0 && !Stall)
+ {
+ NDS::ARM9Timestamp += (unitcycles << NDS::ARM9ClockShift);
+
+ if (dofill)
+ DSi::ARM9Write32(CurDstAddr, FillData);
+ else
+ DSi::ARM9Write32(CurDstAddr, DSi::ARM9Read32(CurSrcAddr));
+
+ CurSrcAddr += SrcAddrInc<<2;
+ CurDstAddr += DstAddrInc<<2;
+ IterCount--;
+ RemCount--;
+ TotalRemCount--;
+
+ if (NDS::ARM9Timestamp >= NDS::ARM9Target) break;
+ }
+
+ Executing = false;
+ Stall = false;
+
+ if (RemCount)
+ {
+ if (IterCount == 0)
+ {
+ Running = 0;
+ NDS::ResumeCPU(0, 1<<(Num+4));
+
+ //if (StartMode == 0x07)
+ // GPU3D::CheckFIFODMA();
+ }
+
+ return;
+ }
+
+ if ((StartMode & 0x1F) == 0x10) // CHECKME
+ {
+ Cnt &= ~(1<<31);
+ if (Cnt & (1<<30)) NDS::SetIRQ(0, NDS::IRQ_DSi_NDMA0 + Num);
+ }
+ else if (!(Cnt & (1<<29)))
+ {
+ if (TotalRemCount == 0)
+ {
+ Cnt &= ~(1<<31);
+ if (Cnt & (1<<30)) NDS::SetIRQ(0, NDS::IRQ_DSi_NDMA0 + Num);
+ }
+ }
+
+ Running = 0;
+ InProgress = false;
+ NDS::ResumeCPU(0, 1<<(Num+4));
+}
+
+void DSi_NDMA::Run7()
+{
+ if (NDS::ARM7Timestamp >= NDS::ARM7Target) return;
+
+ Executing = true;
+
+ // add NS penalty for first accesses in burst
+ bool burststart = (Running == 2);
+ Running = 1;
+
+ s32 unitcycles;
+ //s32 lastcycles = cycles;
+
+ bool dofill = ((Cnt >> 13) & 0x3) == 3;
+
+ if ((CurSrcAddr >> 24) == 0x02 && (CurDstAddr >> 24) == 0x02)
+ {
+ unitcycles = NDS::ARM7MemTimings[CurSrcAddr >> 15][2] + NDS::ARM7MemTimings[CurDstAddr >> 15][2];
+ }
+ else
+ {
+ unitcycles = NDS::ARM7MemTimings[CurSrcAddr >> 15][3] + NDS::ARM7MemTimings[CurDstAddr >> 15][3];
+ if ((CurSrcAddr >> 23) == (CurDstAddr >> 23))
+ unitcycles++;
+ else if ((CurSrcAddr >> 24) == 0x02)
+ unitcycles--;
+
+ /*if (burststart)
+ {
+ cycles -= 2;
+ cycles -= (NDS::ARM7MemTimings[CurSrcAddr >> 15][2] + NDS::ARM7MemTimings[CurDstAddr >> 15][2]);
+ cycles += unitcycles;
+ }*/
+ }
+
+ while (IterCount > 0 && !Stall)
+ {
+ NDS::ARM7Timestamp += unitcycles;
+
+ if (dofill)
+ DSi::ARM7Write32(CurDstAddr, FillData);
+ else
+ DSi::ARM7Write32(CurDstAddr, DSi::ARM7Read32(CurSrcAddr));
+
+ CurSrcAddr += SrcAddrInc<<2;
+ CurDstAddr += DstAddrInc<<2;
+ IterCount--;
+ RemCount--;
+ TotalRemCount--;
+
+ if (NDS::ARM7Timestamp >= NDS::ARM7Target) break;
+ }
+
+ Executing = false;
+ Stall = false;
+
+ if (RemCount)
+ {
+ if (IterCount == 0)
+ {
+ Running = 0;
+ NDS::ResumeCPU(1, 1<<(Num+4));
+
+ DSi_AES::CheckInputDMA();
+ DSi_AES::CheckOutputDMA();
+ }
+
+ return;
+ }
+
+ if ((StartMode & 0x1F) == 0x10) // CHECKME
+ {
+ Cnt &= ~(1<<31);
+ if (Cnt & (1<<30)) NDS::SetIRQ(1, NDS::IRQ_DSi_NDMA0 + Num);
+ }
+ else if (!(Cnt & (1<<29)))
+ {
+ if (TotalRemCount == 0)
+ {
+ Cnt &= ~(1<<31);
+ if (Cnt & (1<<30)) NDS::SetIRQ(1, NDS::IRQ_DSi_NDMA0 + Num);
+ }
+ }
+
+ Running = 0;
+ InProgress = false;
+ NDS::ResumeCPU(1, 1<<(Num+4));
+
+ DSi_AES::CheckInputDMA();
+ DSi_AES::CheckOutputDMA();
+}
diff --git a/src/DSi_NDMA.h b/src/DSi_NDMA.h
new file mode 100644
index 0000000..d7b7483
--- /dev/null
+++ b/src/DSi_NDMA.h
@@ -0,0 +1,96 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef DSI_NDMA_H
+#define DSI_NDMA_H
+
+#include "types.h"
+
+class DSi_NDMA
+{
+public:
+ DSi_NDMA(u32 cpu, u32 num);
+ ~DSi_NDMA();
+
+ void Reset();
+
+ void DoSavestate(Savestate* file);
+
+ void WriteCnt(u32 val);
+ void Start();
+
+ void Run();
+
+ void Run9();
+ void Run7();
+
+ bool IsInMode(u32 mode)
+ {
+ return ((mode == StartMode) && (Cnt & 0x80000000));
+ }
+
+ bool IsRunning() { return Running!=0; }
+
+ void StartIfNeeded(u32 mode)
+ {
+ if ((mode == StartMode) && (Cnt & 0x80000000))
+ Start();
+ }
+
+ void StopIfNeeded(u32 mode)
+ {
+ if (mode == StartMode)
+ Cnt &= ~0x80000000;
+ }
+
+ void StallIfRunning()
+ {
+ if (Executing) Stall = true;
+ }
+
+ u32 SrcAddr;
+ u32 DstAddr;
+ u32 TotalLength; // total length, when transferring multiple blocks
+ u32 BlockLength; // length of one transfer
+ u32 SubblockTimer; // optional delay between subblocks (only in round-robin mode)
+ u32 FillData;
+ u32 Cnt;
+
+private:
+ u32 CPU, Num;
+
+ u32 StartMode;
+ u32 CurSrcAddr;
+ u32 CurDstAddr;
+ u32 SubblockLength; // length transferred per run when delay is used
+ u32 RemCount;
+ u32 IterCount;
+ u32 TotalRemCount;
+ u32 SrcAddrInc;
+ u32 DstAddrInc;
+
+ u32 Running;
+ bool InProgress;
+
+ bool Executing;
+ bool Stall;
+
+ bool IsGXFIFODMA;
+};
+
+#endif // DSI_NDMA_H
diff --git a/src/DSi_NWifi.cpp b/src/DSi_NWifi.cpp
new file mode 100644
index 0000000..79bc632
--- /dev/null
+++ b/src/DSi_NWifi.cpp
@@ -0,0 +1,881 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <string.h>
+#include <stdio.h>
+#include "DSi.h"
+#include "DSi_NWifi.h"
+#include "SPI.h"
+
+
+const u8 CIS0[256] =
+{
+ 0x01, 0x03, 0xD9, 0x01, 0xFF,
+ 0x20, 0x04, 0x71, 0x02, 0x00, 0x02,
+ 0x21, 0x02, 0x0C, 0x00,
+ 0x22, 0x04, 0x00, 0x00, 0x08, 0x32,
+ 0x1A, 0x05, 0x01, 0x01, 0x00, 0x02, 0x07,
+ 0x1B, 0x08, 0xC1, 0x41, 0x30, 0x30, 0xFF, 0xFF, 0x32, 0x00,
+ 0x14, 0x00,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00
+};
+
+const u8 CIS1[256] =
+{
+ 0x20, 0x04, 0x71, 0x02, 0x00, 0x02,
+ 0x21, 0x02, 0x0C, 0x00,
+ 0x22, 0x2A, 0x01,
+ 0x01, 0x11,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x08,
+ 0x00, 0x00, 0xFF, 0x80,
+ 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x0A,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x01, 0x00, 0x01,
+ 0x00, 0x01, 0x00, 0x01,
+ 0x80, 0x01, 0x06,
+ 0x81, 0x01, 0x07,
+ 0x82, 0x01, 0xDF,
+ 0xFF,
+ 0x01,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+
+// hax
+DSi_NWifi* hax_wifi;
+void triggerirq(u32 param)
+{
+ hax_wifi->SetIRQ_F1_Counter(0);
+}
+
+
+DSi_NWifi::DSi_NWifi(DSi_SDHost* host) : DSi_SDDevice(host)
+{
+ TransferCmd = 0xFFFFFFFF;
+ RemSize = 0;
+
+ F0_IRQEnable = 0;
+ F0_IRQStatus = 0;
+
+ F1_IRQEnable = 0; F1_IRQEnable_CPU = 0; F1_IRQEnable_Error = 0; F1_IRQEnable_Counter = 0;
+ F1_IRQStatus = 0; F1_IRQStatus_CPU = 0; F1_IRQStatus_Error = 0; F1_IRQStatus_Counter = 0;
+
+ WindowData = 0;
+ WindowReadAddr = 0;
+ WindowWriteAddr = 0;
+
+ // TODO: check the actual mailbox size (presumably 0x200)
+ for (int i = 0; i < 8; i++)
+ Mailbox[i] = new FIFO<u8>(0x200);
+
+ u8* mac = SPI_Firmware::GetWifiMAC();
+ printf("NWifi MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
+ mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
+
+ memset(EEPROM, 0, 0x400);
+
+ *(u32*)&EEPROM[0x000] = 0x300;
+ *(u16*)&EEPROM[0x008] = 0x8348; // TODO: determine properly (country code)
+ memcpy(&EEPROM[0x00A], mac, 6);
+ *(u32*)&EEPROM[0x010] = 0x60000000;
+
+ memset(&EEPROM[0x03C], 0xFF, 0x70);
+ memset(&EEPROM[0x140], 0xFF, 0x8);
+
+ u16 chk = 0xFFFF;
+ for (int i = 0; i < 0x300; i+=2)
+ chk ^= *(u16*)&EEPROM[i];
+
+ *(u16*)&EEPROM[0x004] = chk;
+
+ EEPROMReady = 0;
+
+ BootPhase = 0;
+}
+
+DSi_NWifi::~DSi_NWifi()
+{
+ for (int i = 0; i < 8; i++)
+ delete Mailbox[i];
+}
+
+
+// CHECKME
+// can IRQ status bits be set when the corresponding IRQs are disabled in the enable register?
+// otherwise, does disabling them clear the status register?
+
+void DSi_NWifi::UpdateIRQ()
+{
+ F0_IRQStatus = 0;
+ IRQ = false;
+
+ if (F1_IRQStatus & F1_IRQEnable)
+ F0_IRQStatus |= (1<<1);
+
+ if (F0_IRQEnable & (1<<0))
+ {
+ if (F0_IRQStatus & F0_IRQEnable)
+ IRQ = true;
+ }
+
+ Host->SetCardIRQ();
+}
+
+void DSi_NWifi::UpdateIRQ_F1()
+{
+ F1_IRQStatus = 0;
+
+ if (!Mailbox[4]->IsEmpty()) F1_IRQStatus |= (1<<0);
+ if (!Mailbox[5]->IsEmpty()) F1_IRQStatus |= (1<<1);
+ if (!Mailbox[6]->IsEmpty()) F1_IRQStatus |= (1<<2);
+ if (!Mailbox[7]->IsEmpty()) F1_IRQStatus |= (1<<3);
+ if (F1_IRQStatus_Counter & F1_IRQEnable_Counter) F1_IRQStatus |= (1<<4);
+ if (F1_IRQStatus_CPU & F1_IRQEnable_CPU) F1_IRQStatus |= (1<<6);
+ if (F1_IRQStatus_Error & F1_IRQEnable_Error) F1_IRQStatus |= (1<<7);
+
+ UpdateIRQ();
+}
+
+void DSi_NWifi::SetIRQ_F1_Counter(u32 n)
+{
+ F1_IRQStatus_Counter |= (1<<n);
+ UpdateIRQ_F1();
+}
+
+void DSi_NWifi::ClearIRQ_F1_Counter(u32 n)
+{
+ F1_IRQStatus_Counter &= ~(1<<n);
+ UpdateIRQ_F1();
+}
+
+void DSi_NWifi::SetIRQ_F1_CPU(u32 n)
+{
+ F1_IRQStatus_CPU |= (1<<n);
+ UpdateIRQ_F1();
+}
+
+
+u8 DSi_NWifi::F0_Read(u32 addr)
+{
+ switch (addr)
+ {
+ case 0x00000: return 0x11;
+ case 0x00001: return 0x00;
+
+ case 0x00002: return 0x02; // writable??
+ case 0x00003: return 0x02;
+
+ case 0x00004: return F0_IRQEnable;
+ case 0x00005: return F0_IRQStatus;
+
+ case 0x00008: return 0x17;
+
+ case 0x00009: return 0x00;
+ case 0x0000A: return 0x10;
+ case 0x0000B: return 0x00;
+
+ case 0x00012: return 0x03;
+
+ case 0x00109: return 0x00;
+ case 0x0010A: return 0x11;
+ case 0x0010B: return 0x00;
+ }
+
+ if (addr >= 0x01000 && addr < 0x01100)
+ {
+ return CIS0[addr & 0xFF];
+ }
+ if (addr >= 0x01100 && addr < 0x01200)
+ {
+ return CIS1[addr & 0xFF];
+ }
+
+ printf("NWIFI: unknown func0 read %05X\n", addr);
+ return 0;
+}
+
+void DSi_NWifi::F0_Write(u32 addr, u8 val)
+{
+ switch (addr)
+ {
+ case 0x00004:
+ F0_IRQEnable = val;
+ UpdateIRQ();
+ return;
+ }
+
+ printf("NWIFI: unknown func0 write %05X %02X\n", addr, val);
+}
+
+
+u8 DSi_NWifi::F1_Read(u32 addr)
+{
+ if (addr < 0x100)
+ {
+ u8 ret = Mailbox[4]->Read();
+ UpdateIRQ_F1();
+ return ret;
+ }
+ else if (addr < 0x200)
+ {
+ u8 ret = Mailbox[5]->Read();
+ UpdateIRQ_F1();
+ return ret;
+ }
+ else if (addr < 0x300)
+ {
+ u8 ret = Mailbox[6]->Read();
+ UpdateIRQ_F1();
+ return ret;
+ }
+ else if (addr < 0x400)
+ {
+ u8 ret = Mailbox[7]->Read();
+ UpdateIRQ_F1();
+ return ret;
+ }
+ else if (addr < 0x800)
+ {
+ switch (addr)
+ {
+ case 0x00400: return F1_IRQStatus;
+ case 0x00401: return F1_IRQStatus_CPU;
+ case 0x00402: return F1_IRQStatus_Error;
+ case 0x00403: return F1_IRQStatus_Counter;
+
+ case 0x00405:
+ {
+ u8 ret = 0;
+
+ if (Mailbox[4]->Level() >= 4) ret |= (1<<0);
+ if (Mailbox[5]->Level() >= 4) ret |= (1<<1);
+ if (Mailbox[6]->Level() >= 4) ret |= (1<<2);
+ if (Mailbox[7]->Level() >= 4) ret |= (1<<3);
+
+ return ret;
+ }
+
+ case 0x00408: return Mailbox[4]->Peek(0);
+ case 0x00409: return Mailbox[4]->Peek(1);
+ case 0x0040A: return Mailbox[4]->Peek(2);
+ case 0x0040B: return Mailbox[4]->Peek(3);
+
+ case 0x00418: return F1_IRQEnable;
+ case 0x00419: return F1_IRQEnable_CPU;
+ case 0x0041A: return F1_IRQEnable_Error;
+ case 0x0041B: return F1_IRQEnable_Counter;
+
+ // GROSS FUCKING HACK
+ case 0x00440: ClearIRQ_F1_Counter(0); return 0;
+ case 0x00450: return 1; // HAX!!
+
+ case 0x00474: return WindowData & 0xFF;
+ case 0x00475: return (WindowData >> 8) & 0xFF;
+ case 0x00476: return (WindowData >> 16) & 0xFF;
+ case 0x00477: return WindowData >> 24;
+ }
+ }
+ else if (addr < 0x1000)
+ {
+ u8 ret = Mailbox[4]->Read();
+ UpdateIRQ_F1();
+ return ret;
+ }
+ else if (addr < 0x1800)
+ {
+ u8 ret = Mailbox[5]->Read();
+ UpdateIRQ_F1();
+ return ret;
+ }
+ else if (addr < 0x2000)
+ {
+ u8 ret = Mailbox[6]->Read();
+ UpdateIRQ_F1();
+ return ret;
+ }
+ else if (addr < 0x2800)
+ {
+ u8 ret = Mailbox[7]->Read();
+ UpdateIRQ_F1();
+ return ret;
+ }
+ else
+ {
+ u8 ret = Mailbox[4]->Read();
+ UpdateIRQ_F1();
+ return ret;
+ }
+
+ printf("NWIFI: unknown func1 read %05X\n", addr);
+ return 0;
+}
+
+void DSi_NWifi::F1_Write(u32 addr, u8 val)
+{
+ if (addr < 0x100)
+ {
+ if (Mailbox[0]->IsFull()) printf("!!! NWIFI: MBOX0 FULL\n");
+ Mailbox[0]->Write(val);
+ if (addr == 0xFF) HandleCommand();
+ UpdateIRQ_F1();
+ return;
+ }
+ else if (addr < 0x200)
+ {
+ if (Mailbox[1]->IsFull()) printf("!!! NWIFI: MBOX1 FULL\n");
+ Mailbox[1]->Write(val);
+ UpdateIRQ_F1();
+ return;
+ }
+ else if (addr < 0x300)
+ {
+ if (Mailbox[2]->IsFull()) printf("!!! NWIFI: MBOX2 FULL\n");
+ Mailbox[2]->Write(val);
+ UpdateIRQ_F1();
+ return;
+ }
+ else if (addr < 0x400)
+ {
+ if (Mailbox[3]->IsFull()) printf("!!! NWIFI: MBOX3 FULL\n");
+ Mailbox[3]->Write(val);
+ UpdateIRQ_F1();
+ return;
+ }
+ else if (addr < 0x800)
+ {
+ switch (addr)
+ {
+ case 0x00418: F1_IRQEnable = val; UpdateIRQ_F1(); return;
+ case 0x00419: F1_IRQEnable_CPU = val; UpdateIRQ_F1(); return;
+ case 0x0041A: F1_IRQEnable_Error = val; UpdateIRQ_F1(); return;
+ case 0x0041B: F1_IRQEnable_Counter = val; UpdateIRQ_F1(); return;
+
+ // GROSS FUCKING HACK
+ case 0x00440: ClearIRQ_F1_Counter(0); return;
+
+ case 0x00474: WindowData = (WindowData & 0xFFFFFF00) | val; return;
+ case 0x00475: WindowData = (WindowData & 0xFFFF00FF) | (val << 8); return;
+ case 0x00476: WindowData = (WindowData & 0xFF00FFFF) | (val << 16); return;
+ case 0x00477: WindowData = (WindowData & 0x00FFFFFF) | (val << 24); return;
+
+ case 0x00478:
+ WindowWriteAddr = (WindowWriteAddr & 0xFFFFFF00) | val;
+ WindowWrite(WindowWriteAddr, WindowData);
+ return;
+ case 0x00479: WindowWriteAddr = (WindowWriteAddr & 0xFFFF00FF) | (val << 8); return;
+ case 0x0047A: WindowWriteAddr = (WindowWriteAddr & 0xFF00FFFF) | (val << 16); return;
+ case 0x0047B: WindowWriteAddr = (WindowWriteAddr & 0x00FFFFFF) | (val << 24); return;
+
+ case 0x0047C:
+ WindowReadAddr = (WindowReadAddr & 0xFFFFFF00) | val;
+ WindowData = WindowRead(WindowReadAddr);
+ return;
+ case 0x0047D: WindowReadAddr = (WindowReadAddr & 0xFFFF00FF) | (val << 8); return;
+ case 0x0047E: WindowReadAddr = (WindowReadAddr & 0xFF00FFFF) | (val << 16); return;
+ case 0x0047F: WindowReadAddr = (WindowReadAddr & 0x00FFFFFF) | (val << 24); return;
+ }
+ }
+ else if (addr < 0x1000)
+ {
+ if (Mailbox[0]->IsFull()) printf("!!! NWIFI: MBOX0 FULL\n");
+ Mailbox[0]->Write(val);
+ if (addr == 0xFFF) HandleCommand();
+ UpdateIRQ_F1();
+ return;
+ }
+ else if (addr < 0x1800)
+ {
+ if (Mailbox[1]->IsFull()) printf("!!! NWIFI: MBOX1 FULL\n");
+ Mailbox[1]->Write(val);
+ UpdateIRQ_F1();
+ return;
+ }
+ else if (addr < 0x2000)
+ {
+ if (Mailbox[2]->IsFull()) printf("!!! NWIFI: MBOX2 FULL\n");
+ Mailbox[2]->Write(val);
+ UpdateIRQ_F1();
+ return;
+ }
+ else if (addr < 0x2800)
+ {
+ if (Mailbox[3]->IsFull()) printf("!!! NWIFI: MBOX3 FULL\n");
+ Mailbox[3]->Write(val);
+ UpdateIRQ_F1();
+ return;
+ }
+ else
+ {
+ if (Mailbox[0]->IsFull()) printf("!!! NWIFI: MBOX0 FULL\n");
+ Mailbox[0]->Write(val);
+ if (addr == 0x3FFF) HandleCommand(); // CHECKME
+ UpdateIRQ_F1();
+ return;
+ }
+
+ printf("NWIFI: unknown func1 write %05X %02X\n", addr, val);
+}
+
+
+u8 DSi_NWifi::SDIO_Read(u32 func, u32 addr)
+{
+ switch (func)
+ {
+ case 0: return F0_Read(addr);
+ case 1: return F1_Read(addr);
+ }
+
+ printf("NWIFI: unknown SDIO read %d %05X\n", func, addr);
+ return 0;
+}
+
+void DSi_NWifi::SDIO_Write(u32 func, u32 addr, u8 val)
+{
+ switch (func)
+ {
+ case 0: return F0_Write(addr, val);
+ case 1: return F1_Write(addr, val);
+ }
+
+ printf("NWIFI: unknown SDIO write %d %05X %02X\n", func, addr, val);
+}
+
+
+void DSi_NWifi::SendCMD(u8 cmd, u32 param)
+{
+ switch (cmd)
+ {
+ case 12:
+ // stop command
+ // CHECKME: does the SDIO controller actually send those??
+ // DSi firmware sets it to send them
+ return;
+
+ case 52: // IO_RW_DIRECT
+ {
+ u32 func = (param >> 28) & 0x7;
+ u32 addr = (param >> 9) & 0x1FFFF;
+
+ if (param & (1<<31))
+ {
+ // write
+
+ u8 val = param & 0xFF;
+ SDIO_Write(func, addr, val);
+ if (param & (1<<27))
+ val = SDIO_Read(func, addr); // checkme
+ Host->SendResponse(val | 0x1000, true);
+ }
+ else
+ {
+ // read
+
+ u8 val = SDIO_Read(func, addr);
+ Host->SendResponse(val | 0x1000, true);
+ }
+ }
+ return;
+
+ case 53: // IO_RW_EXTENDED
+ {
+ u32 addr = (param >> 9) & 0x1FFFF;
+
+ TransferCmd = param;
+ TransferAddr = addr;
+ if (param & (1<<27))
+ {
+ RemSize = (param & 0x1FF) << 9; // checkme
+ }
+ else
+ {
+ RemSize = (param & 0x1FF);
+ if (!RemSize) RemSize = 0x200;
+ }
+
+ if (param & (1<<31))
+ {
+ // write
+
+ WriteBlock();
+ Host->SendResponse(0x1000, true);
+ }
+ else
+ {
+ // read
+
+ ReadBlock();
+ Host->SendResponse(0x1000, true);
+ }
+ }
+ return;
+ }
+
+ printf("NWIFI: unknown CMD %d %08X\n", cmd, param);
+}
+
+void DSi_NWifi::SendACMD(u8 cmd, u32 param)
+{
+ printf("NWIFI: unknown ACMD %d %08X\n", cmd, param);
+}
+
+void DSi_NWifi::ContinueTransfer()
+{
+ if (TransferCmd & (1<<31))
+ WriteBlock();
+ else
+ ReadBlock();
+}
+
+void DSi_NWifi::ReadBlock()
+{
+ u32 func = (TransferCmd >> 28) & 0x7;
+ u32 len = (TransferCmd & (1<<27)) ? 0x200 : RemSize;
+
+ len = Host->GetTransferrableLen(len);
+
+ u8 data[0x200];
+
+ for (u32 i = 0; i < len; i++)
+ {
+ data[i] = SDIO_Read(func, TransferAddr);
+ if (TransferCmd & (1<<26))
+ {
+ TransferAddr++;
+ TransferAddr &= 0x1FFFF; // checkme
+ }
+ }
+ len = Host->DataRX(data, len);
+
+ if (RemSize > 0)
+ {
+ RemSize -= len;
+ if (RemSize == 0)
+ {
+ // TODO?
+ }
+ }
+}
+
+void DSi_NWifi::WriteBlock()
+{
+ u32 func = (TransferCmd >> 28) & 0x7;
+ u32 len = (TransferCmd & (1<<27)) ? 0x200 : RemSize;
+
+ len = Host->GetTransferrableLen(len);
+
+ u8 data[0x200];
+ if (len = Host->DataTX(data, len))
+ {
+ for (u32 i = 0; i < len; i++)
+ {
+ SDIO_Write(func, TransferAddr, data[i]);
+ if (TransferCmd & (1<<26))
+ {
+ TransferAddr++;
+ TransferAddr &= 0x1FFFF; // checkme
+ }
+ }
+
+ if (RemSize > 0)
+ {
+ RemSize -= len;
+ if (RemSize == 0)
+ {
+ // TODO?
+ }
+ }
+ }
+}
+
+
+void DSi_NWifi::HandleCommand()
+{
+ switch (BootPhase)
+ {
+ case 0: return BMI_Command();
+ case 1: return WMI_Command();
+ }
+}
+
+void DSi_NWifi::BMI_Command()
+{
+ // HLE command handling stub
+ u32 cmd = MB_Read32(0);
+
+ switch (cmd)
+ {
+ case 0x01: // BMI_DONE
+ {
+ printf("BMI_DONE\n");
+ EEPROMReady = 1; // GROSS FUCKING HACK
+ u8 ready_msg[8] = {0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00};
+ SendWMIFrame(ready_msg, 8, 0, 0x00, 0x0000);
+ BootPhase = 1;
+ }
+ return;
+
+ case 0x03: // BMI_WRITE_MEMORY
+ {
+ u32 addr = MB_Read32(0);
+ u32 len = MB_Read32(0);
+ printf("BMI mem write %08X %08X\n", addr, len);
+
+ for (int i = 0; i < len; i++)
+ {
+ u8 val = Mailbox[0]->Read();
+
+ // TODO: do something with it!!
+ }
+ }
+ return;
+
+ case 0x04: // BMI_EXECUTE
+ {
+ u32 entry = MB_Read32(0);
+ u32 arg = MB_Read32(0);
+
+ printf("BMI_EXECUTE %08X %08X\n", entry, arg);
+ }
+ return;
+
+ case 0x06: // BMI_READ_SOC_REGISTER
+ {
+ u32 addr = MB_Read32(0);
+ u32 val = WindowRead(addr);
+ MB_Write32(4, val);
+ }
+ return;
+
+ case 0x07: // BMI_WRITE_SOC_REGISTER
+ {
+ u32 addr = MB_Read32(0);
+ u32 val = MB_Read32(0);
+ WindowWrite(addr, val);
+ }
+ return;
+
+ case 0x08: // BMI_GET_TARGET_ID
+ MB_Write32(4, 0xFFFFFFFF);
+ MB_Write32(4, 0x0000000C);
+ //MB_Write32(4, 0x20000118);
+ MB_Write32(4, 0x23000024); // ROM version (TODO: how to determine correct one?)
+ MB_Write32(4, 0x00000002);
+ return;
+
+ case 0x0D: // BMI_LZ_STREAM_START
+ {
+ u32 addr = MB_Read32(0);
+ printf("BMI_LZ_STREAM_START %08X\n", addr);
+ }
+ return;
+
+ case 0x0E: // BMI_LZ_DATA
+ {
+ u32 len = MB_Read32(0);
+ printf("BMI LZ write %08X\n", len);
+ //FILE* f = fopen("wififirm.bin", "ab");
+
+ for (int i = 0; i < len; i++)
+ {
+ u8 val = Mailbox[0]->Read();
+
+ // TODO: do something with it!!
+ //fwrite(&val, 1, 1, f);
+ }
+ //fclose(f);
+ }
+ return;
+
+ default:
+ printf("unknown BMI command %08X\n", cmd);
+ return;
+ }
+}
+
+void DSi_NWifi::WMI_Command()
+{
+ // HLE command handling stub
+ u16 h0 = MB_Read16(0);
+ u16 len = MB_Read16(0);
+ u16 h2 = MB_Read16(0);
+
+ u16 cmd = MB_Read16(0);
+ printf("WMI: cmd %04X\n", cmd);
+
+ switch (cmd)
+ {
+ case 0x0002: // service connect
+ {
+ u16 svc_id = MB_Read16(0);
+ u16 conn_flags = MB_Read16(0);
+
+ u8 svc_resp[10];
+ *(u16*)&svc_resp[0] = 0x0003;
+ *(u16*)&svc_resp[2] = svc_id;
+ svc_resp[4] = 0;
+ svc_resp[5] = (svc_id & 0xFF) + 1;
+ *(u16*)&svc_resp[6] = 0x0001;
+ *(u16*)&svc_resp[8] = 0x0001;
+ SendWMIFrame(svc_resp, 10, 0, 0x00, 0x0000);
+ }
+ break;
+
+ case 0x0004: // setup complete
+ {
+ u8 ready_evt[14];
+ memset(ready_evt, 0, 14);
+ *(u16*)&ready_evt[0] = 0x1001;
+ memcpy(&ready_evt[2], SPI_Firmware::GetWifiMAC(), 6);
+ ready_evt[8] = 0x02;
+ *(u32*)&ready_evt[10] = 0x23000024;
+ // ctrl[0] = trailer size
+ // trailer[1] = trailer extra size
+ // trailer[0] = trailer type???
+ SendWMIFrame(ready_evt, 14, 1, 0x00, 0x0000);
+ }
+ break;
+
+ default:
+ printf("unknown WMI command %04X\n", cmd);
+ break;
+ }
+
+ MB_Drain(0);
+}
+
+void DSi_NWifi::SendWMIFrame(u8* data, u32 len, u8 ep, u8 flags, u16 ctrl)
+{
+ u32 wlen = 0;
+
+ Mailbox[4]->Write(ep); // eid
+ Mailbox[4]->Write(flags); // flags
+ MB_Write16(4, len); // payload length
+ MB_Write16(4, ctrl); // ctrl
+ wlen += 6;
+
+ for (int i = 0; i < len; i++)
+ {
+ Mailbox[4]->Write(data[i]);
+ wlen++;
+ }
+
+ for (; wlen & 0x7F; wlen++)
+ Mailbox[4]->Write(0);
+}
+
+
+u32 DSi_NWifi::WindowRead(u32 addr)
+{
+ printf("NWifi: window read %08X\n", addr);
+
+ if ((addr & 0xFFFF00) == 0x520000)
+ {
+ // RAM host interest area
+ // TODO: different base based on hardware version
+
+ switch (addr & 0xFF)
+ {
+ case 0x54:
+ // base address of EEPROM data
+ // TODO find what the actual address is!
+ return 0x1FFC00;
+ case 0x58: return EEPROMReady; // hax
+ }
+
+ return 0;
+ }
+
+ // hax
+ if ((addr & 0x1FFC00) == 0x1FFC00)
+ {
+ return *(u32*)&EEPROM[addr & 0x3FF];
+ }
+
+ switch (addr)
+ {
+ case 0x40EC: // chip ID
+ // 0D000000 / 0D000001 == AR6013
+ // TODO: check firmware.bin to determine the correct value
+ return 0x0D000001;
+
+ // SOC_RESET_CAUSE
+ case 0x40C0: return 2;
+ }
+
+ return 0;
+}
+
+void DSi_NWifi::WindowWrite(u32 addr, u32 val)
+{
+ printf("NWifi: window write %08X %08X\n", addr, val);
+}
diff --git a/src/DSi_NWifi.h b/src/DSi_NWifi.h
new file mode 100644
index 0000000..e5fe637
--- /dev/null
+++ b/src/DSi_NWifi.h
@@ -0,0 +1,121 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef DSI_NWIFI_H
+#define DSI_NWIFI_H
+
+#include "DSi_SD.h"
+#include "FIFO.h"
+
+class DSi_NWifi : public DSi_SDDevice
+{
+public:
+ DSi_NWifi(DSi_SDHost* host);
+ ~DSi_NWifi();
+
+ void SendCMD(u8 cmd, u32 param);
+ void SendACMD(u8 cmd, u32 param);
+
+ void ContinueTransfer();
+
+ void SetIRQ_F1_Counter(u32 n);
+
+private:
+ u32 TransferCmd;
+ u32 TransferAddr;
+ u32 RemSize;
+
+ void UpdateIRQ();
+ void UpdateIRQ_F1();
+ //void SetIRQ_F1_Counter(u32 n);
+ void ClearIRQ_F1_Counter(u32 n);
+ void SetIRQ_F1_CPU(u32 n);
+
+ u8 F0_Read(u32 addr);
+ void F0_Write(u32 addr, u8 val);
+
+ u8 F1_Read(u32 addr);
+ void F1_Write(u32 addr, u8 val);
+
+ u8 SDIO_Read(u32 func, u32 addr);
+ void SDIO_Write(u32 func, u32 addr, u8 val);
+
+ void ReadBlock();
+ void WriteBlock();
+
+ void HandleCommand();
+ void BMI_Command();
+ void WMI_Command();
+
+ void SendWMIFrame(u8* data, u32 len, u8 ep, u8 flags, u16 ctrl);
+
+ u32 WindowRead(u32 addr);
+ void WindowWrite(u32 addr, u32 val);
+
+ u16 MB_Read16(int n)
+ {
+ u16 ret = Mailbox[n]->Read();
+ ret |= (Mailbox[n]->Read() << 8);
+ return ret;
+ }
+
+ void MB_Write16(int n, u16 val)
+ {
+ Mailbox[n]->Write(val & 0xFF); val >>= 8;
+ Mailbox[n]->Write(val & 0xFF);
+ }
+
+ u32 MB_Read32(int n)
+ {
+ u32 ret = Mailbox[n]->Read();
+ ret |= (Mailbox[n]->Read() << 8);
+ ret |= (Mailbox[n]->Read() << 16);
+ ret |= (Mailbox[n]->Read() << 24);
+ return ret;
+ }
+
+ void MB_Write32(int n, u32 val)
+ {
+ Mailbox[n]->Write(val & 0xFF); val >>= 8;
+ Mailbox[n]->Write(val & 0xFF); val >>= 8;
+ Mailbox[n]->Write(val & 0xFF); val >>= 8;
+ Mailbox[n]->Write(val & 0xFF);
+ }
+
+ void MB_Drain(int n)
+ {
+ while (!Mailbox[n]->IsEmpty()) Mailbox[n]->Read();
+ }
+
+ FIFO<u8>* Mailbox[8];
+
+ u8 F0_IRQEnable;
+ u8 F0_IRQStatus;
+
+ u8 F1_IRQEnable, F1_IRQEnable_CPU, F1_IRQEnable_Error, F1_IRQEnable_Counter;
+ u8 F1_IRQStatus, F1_IRQStatus_CPU, F1_IRQStatus_Error, F1_IRQStatus_Counter;
+
+ u32 WindowData, WindowReadAddr, WindowWriteAddr;
+
+ u8 EEPROM[0x400];
+ u32 EEPROMReady;
+
+ u32 BootPhase;
+};
+
+#endif // DSI_NWIFI_H
diff --git a/src/DSi_SD.cpp b/src/DSi_SD.cpp
new file mode 100644
index 0000000..751c64f
--- /dev/null
+++ b/src/DSi_SD.cpp
@@ -0,0 +1,934 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "DSi.h"
+#include "DSi_SD.h"
+#include "DSi_NWifi.h"
+#include "Platform.h"
+
+
+// observed IRQ behavior during transfers
+//
+// during reads:
+// * bit23 is cleared during the first block, always set otherwise. weird
+// * bit24 (RXRDY) gets set when the FIFO is full
+//
+// during reads with FIFO32:
+// * FIFO16 drains directly into FIFO32
+// * when bit24 is set, FIFO32 is already full (with contents from the other FIFO)
+// * reading from an empty FIFO just wraps around (and sets bit21)
+// * FIFO32 starts filling when bit24 would be set?
+//
+//
+// TX:
+// * when sending command, if current FIFO full
+// * upon ContinueTransfer(), if current FIFO full
+// * -> upon DataTX() if current FIFO full
+// * when filling FIFO
+
+
+#define SD_DESC Num?"SDIO":"SD/MMC"
+
+
+DSi_SDHost::DSi_SDHost(u32 num)
+{
+ Num = num;
+
+ DataFIFO[0] = new FIFO<u16>(0x100);
+ DataFIFO[1] = new FIFO<u16>(0x100);
+ DataFIFO32 = new FIFO<u32>(0x80);
+
+ Ports[0] = NULL;
+ Ports[1] = NULL;
+}
+
+DSi_SDHost::~DSi_SDHost()
+{
+ delete DataFIFO[0];
+ delete DataFIFO[1];
+ delete DataFIFO32;
+
+ if (Ports[0]) delete Ports[0];
+ if (Ports[1]) delete Ports[1];
+}
+
+void DSi_SDHost::Reset()
+{
+ if (Num == 0)
+ {
+ PortSelect = 0x0200; // CHECKME
+ }
+ else
+ {
+ PortSelect = 0x0100; // CHECKME
+ }
+
+ SoftReset = 0x0007; // CHECKME
+ SDClock = 0;
+ SDOption = 0;
+
+ Command = 0;
+ Param = 0;
+ memset(ResponseBuffer, 0, sizeof(ResponseBuffer));
+
+ DataFIFO[0]->Clear();
+ DataFIFO[1]->Clear();
+ CurFIFO = 0;
+ DataFIFO32->Clear();
+
+ IRQStatus = 0;
+ IRQMask = 0x8B7F031D;
+
+ CardIRQStatus = 0;
+ CardIRQMask = 0xC007;
+ CardIRQCtl = 0;
+
+ DataCtl = 0;
+ Data32IRQ = 0;
+ DataMode = 0;
+ BlockCount16 = 0; BlockCount32 = 0; BlockCountInternal = 0;
+ BlockLen16 = 0; BlockLen32 = 0;
+ StopAction = 0;
+
+ TXReq = false;
+
+ if (Ports[0]) delete Ports[0];
+ if (Ports[1]) delete Ports[1];
+ Ports[0] = NULL;
+ Ports[1] = NULL;
+
+ if (Num == 0)
+ {
+ // TODO: eventually pull from host filesystem
+ /*DSi_MMCStorage* sd = new DSi_MMCStorage(this, false, "sd.bin");
+ u8 sd_cid[16] = {0xBD, 0x12, 0x34, 0x56, 0x78, 0x03, 0x4D, 0x30, 0x30, 0x46, 0x50, 0x41, 0x00, 0x00, 0x15, 0x00};
+ sd->SetCID(sd_cid);*/
+ DSi_MMCStorage* sd = NULL;
+
+ DSi_MMCStorage* mmc = new DSi_MMCStorage(this, true, "nand.bin");
+ mmc->SetCID(DSi::eMMC_CID);
+
+ Ports[0] = sd;
+ Ports[1] = mmc;
+ }
+ else
+ {
+ DSi_NWifi* nwifi = new DSi_NWifi(this);
+
+ Ports[0] = nwifi;
+ }
+}
+
+void DSi_SDHost::DoSavestate(Savestate* file)
+{
+ // TODO!
+}
+
+
+void DSi_SDHost::UpdateData32IRQ()
+{
+ if (DataMode == 0) return;
+
+ u32 oldflags = ((Data32IRQ >> 8) & 0x1) | (((~Data32IRQ) >> 8) & 0x2);
+ oldflags &= (Data32IRQ >> 11);
+
+ Data32IRQ &= ~0x0300;
+ if (DataFIFO32->Level() >= (BlockLen32>>2)) Data32IRQ |= (1<<8);
+ if (!DataFIFO32->IsEmpty()) Data32IRQ |= (1<<9);
+
+ u32 newflags = ((Data32IRQ >> 8) & 0x1) | (((~Data32IRQ) >> 8) & 0x2);
+ newflags &= (Data32IRQ >> 11);
+
+ if ((oldflags == 0) && (newflags != 0))
+ NDS::SetIRQ2(Num ? NDS::IRQ2_DSi_SDIO : NDS::IRQ2_DSi_SDMMC);
+}
+
+void DSi_SDHost::ClearIRQ(u32 irq)
+{
+ IRQStatus &= ~(1<<irq);
+}
+
+void DSi_SDHost::SetIRQ(u32 irq)
+{
+ u32 oldflags = IRQStatus & ~IRQMask;
+
+ IRQStatus |= (1<<irq);
+ u32 newflags = IRQStatus & ~IRQMask;
+
+ if ((oldflags == 0) && (newflags != 0))
+ NDS::SetIRQ2(Num ? NDS::IRQ2_DSi_SDIO : NDS::IRQ2_DSi_SDMMC);
+}
+
+void DSi_SDHost::UpdateIRQ(u32 oldmask)
+{
+ u32 oldflags = IRQStatus & ~oldmask;
+ u32 newflags = IRQStatus & ~IRQMask;
+
+ if ((oldflags == 0) && (newflags != 0))
+ NDS::SetIRQ2(Num ? NDS::IRQ2_DSi_SDIO : NDS::IRQ2_DSi_SDMMC);
+}
+
+void DSi_SDHost::SetCardIRQ()
+{
+ if (!(CardIRQCtl & (1<<0))) return;
+
+ u16 oldflags = CardIRQStatus & ~CardIRQMask;
+ DSi_SDDevice* dev = Ports[PortSelect & 0x1];
+
+ if (dev->IRQ) CardIRQStatus |= (1<<0);
+ else CardIRQStatus &= ~(1<<0);
+
+ u16 newflags = CardIRQStatus & ~CardIRQMask;
+
+ if ((oldflags == 0) && (newflags != 0)) // checkme
+ {
+ NDS::SetIRQ2(Num ? NDS::IRQ2_DSi_SDIO : NDS::IRQ2_DSi_SDMMC);
+ NDS::SetIRQ2(Num ? NDS::IRQ2_DSi_SDIO_Data1 : NDS::IRQ2_DSi_SD_Data1);
+ }
+}
+
+void DSi_SDHost::SendResponse(u32 val, bool last)
+{
+ *(u32*)&ResponseBuffer[6] = *(u32*)&ResponseBuffer[4];
+ *(u32*)&ResponseBuffer[4] = *(u32*)&ResponseBuffer[2];
+ *(u32*)&ResponseBuffer[2] = *(u32*)&ResponseBuffer[0];
+ *(u32*)&ResponseBuffer[0] = val;
+
+ if (last) SetIRQ(0);
+}
+
+void DSi_SDHost::FinishRX(u32 param)
+{
+ DSi_SDHost* host = (param & 0x1) ? DSi::SDIO : DSi::SDMMC;
+
+ host->CheckSwapFIFO();
+
+ if (host->DataMode == 1)
+ host->UpdateFIFO32();
+ else
+ host->SetIRQ(24);
+}
+
+u32 DSi_SDHost::DataRX(u8* data, u32 len)
+{
+ if (len != BlockLen16) { printf("!! BAD BLOCKLEN\n"); len = BlockLen16; }
+
+ bool last = (BlockCountInternal == 0);
+
+ u32 f = CurFIFO ^ 1;
+ for (u32 i = 0; i < len; i += 2)
+ DataFIFO[f]->Write(*(u16*)&data[i]);
+
+ //CurFIFO = f;
+ //SetIRQ(24);
+ // TODO: determine what the delay should be!
+ // for now, this is a placeholder
+ // we need a delay because DSi boot2 will send a command and then wait for IRQ0
+ // but if IRQ24 is thrown instantly, the handler clears IRQ0 before the
+ // send-command function starts polling IRQ status
+ u32 param = Num | (last << 1);
+ NDS::ScheduleEvent(Num ? NDS::Event_DSi_SDIOTransfer : NDS::Event_DSi_SDMMCTransfer,
+ false, 512, FinishRX, param);
+
+ return len;
+}
+
+void DSi_SDHost::FinishTX(u32 param)
+{
+ DSi_SDHost* host = (param & 0x1) ? DSi::SDIO : DSi::SDMMC;
+ DSi_SDDevice* dev = host->Ports[host->PortSelect & 0x1];
+
+ if (host->BlockCountInternal == 0)
+ {
+ if (host->StopAction & (1<<8))
+ {
+ if (dev) dev->SendCMD(12, 0);
+ }
+
+ // CHECKME: presumably IRQ2 should not trigger here, but rather
+ // when the data transfer is done
+ //SetIRQ(0);
+ host->SetIRQ(2);
+ host->TXReq = false;
+ }
+ else
+ {
+ if (dev) dev->ContinueTransfer();
+ }
+}
+
+u32 DSi_SDHost::DataTX(u8* data, u32 len)
+{
+ TXReq = true;
+
+ u32 f = CurFIFO;
+
+ if (DataMode == 1)
+ {
+ if ((DataFIFO32->Level() << 2) < len)
+ {
+ if (DataFIFO32->IsEmpty())
+ {
+ SetIRQ(25);
+ DSi::CheckNDMAs(1, Num ? 0x29 : 0x28);
+ }
+ return 0;
+ }
+
+ // drain FIFO32 into FIFO16
+
+ if (!DataFIFO[f]->IsEmpty()) printf("VERY BAD!! TRYING TO DRAIN FIFO32 INTO FIFO16 BUT IT CONTAINS SHIT ALREADY\n");
+ for (;;)
+ {
+ u32 f = CurFIFO;
+ if ((DataFIFO[f]->Level() << 1) >= BlockLen16) break;
+ if (DataFIFO32->IsEmpty()) break;
+
+ u32 val = DataFIFO32->Read();
+ DataFIFO[f]->Write(val & 0xFFFF);
+ DataFIFO[f]->Write(val >> 16);
+ }
+
+ UpdateData32IRQ();
+
+ if (BlockCount32 > 1)
+ BlockCount32--;
+ }
+ else
+ {
+ if ((DataFIFO[f]->Level() << 1) < len)
+ {
+ if (DataFIFO[f]->IsEmpty()) SetIRQ(25);
+ return 0;
+ }
+ }
+
+ for (u32 i = 0; i < len; i += 2)
+ *(u16*)&data[i] = DataFIFO[f]->Read();
+
+ CurFIFO ^= 1;
+ BlockCountInternal--;
+
+ NDS::ScheduleEvent(Num ? NDS::Event_DSi_SDIOTransfer : NDS::Event_DSi_SDMMCTransfer,
+ false, 512, FinishTX, Num);
+
+ return len;
+}
+
+u32 DSi_SDHost::GetTransferrableLen(u32 len)
+{
+ if (len > BlockLen16) len = BlockLen16; // checkme
+ return len;
+}
+
+void DSi_SDHost::CheckRX()
+{
+ DSi_SDDevice* dev = Ports[PortSelect & 0x1];
+
+ CheckSwapFIFO();
+
+ if (BlockCountInternal <= 1)
+ {
+ if (StopAction & (1<<8))
+ {
+ if (dev) dev->SendCMD(12, 0);
+ }
+
+ // CHECKME: presumably IRQ2 should not trigger here, but rather
+ // when the data transfer is done
+ //SetIRQ(0);
+ SetIRQ(2);
+ }
+ else
+ {
+ BlockCountInternal--;
+
+ if (dev) dev->ContinueTransfer();
+ }
+}
+
+void DSi_SDHost::CheckTX()
+{
+ if (!TXReq) return;
+
+ if (DataMode == 1)
+ {
+ if ((DataFIFO32->Level() << 2) < BlockLen32)
+ return;
+ }
+ else
+ {
+ u32 f = CurFIFO;
+ if ((DataFIFO[f]->Level() << 1) < BlockLen16)
+ return;
+ }
+
+ DSi_SDDevice* dev = Ports[PortSelect & 0x1];
+ if (dev) dev->ContinueTransfer();
+}
+
+
+u16 DSi_SDHost::Read(u32 addr)
+{
+ switch (addr & 0x1FF)
+ {
+ case 0x000: return Command;
+ case 0x002: return PortSelect & 0x030F;
+ case 0x004: return Param & 0xFFFF;
+ case 0x006: return Param >> 16;
+
+ case 0x008: return StopAction;
+ case 0x00A: return BlockCount16;
+
+ case 0x00C: return ResponseBuffer[0];
+ case 0x00E: return ResponseBuffer[1];
+ case 0x010: return ResponseBuffer[2];
+ case 0x012: return ResponseBuffer[3];
+ case 0x014: return ResponseBuffer[4];
+ case 0x016: return ResponseBuffer[5];
+ case 0x018: return ResponseBuffer[6];
+ case 0x01A: return ResponseBuffer[7];
+
+ case 0x01C:
+ {
+ u16 ret = (IRQStatus & 0x031D);
+
+ if (!Num)
+ {
+ if (Ports[0]) // basic check of whether the SD card is inserted
+ ret |= 0x0030;
+ else
+ ret |= 0x0008;
+ }
+ else
+ {
+ // SDIO wifi is always inserted, I guess
+ ret |= 0x0030;
+ }
+ return ret;
+ }
+ case 0x01E: return ((IRQStatus >> 16) & 0x8B7F);
+ case 0x020: return IRQMask & 0x031D;
+ case 0x022: return (IRQMask >> 16) & 0x8B7F;
+
+ case 0x024: return SDClock;
+ case 0x026: return BlockLen16;
+ case 0x028: return SDOption;
+
+ case 0x02C: return 0; // TODO
+
+ case 0x034: return CardIRQCtl;
+ case 0x036: return CardIRQStatus;
+ case 0x038: return CardIRQMask;
+
+ case 0x030: return ReadFIFO16();
+
+ case 0x0D8: return DataCtl;
+
+ case 0x0E0: return SoftReset;
+
+ case 0x0F6: return 0; // MMC write protect (always 0)
+
+ case 0x100: return Data32IRQ;
+ case 0x104: return BlockLen32;
+ case 0x108: return BlockCount32;
+ }
+
+ printf("unknown %s read %08X @ %08X\n", SD_DESC, addr, NDS::GetPC(1));
+ return 0;
+}
+
+u16 DSi_SDHost::ReadFIFO16()
+{
+ u32 f = CurFIFO;
+ if (DataFIFO[f]->IsEmpty())
+ {
+ // TODO
+ // on hardware it seems to wrap around. underflow bit is set upon the first 'empty' read.
+ return 0;
+ }
+
+ DSi_SDDevice* dev = Ports[PortSelect & 0x1];
+ u16 ret = DataFIFO[f]->Read();
+
+ if (DataFIFO[f]->IsEmpty())
+ {
+ CheckRX();
+ }
+
+ return ret;
+}
+
+u32 DSi_SDHost::ReadFIFO32()
+{
+ if (DataMode != 1) return 0;
+
+ if (DataFIFO32->IsEmpty())
+ {
+ // TODO
+ return 0;
+ }
+
+ DSi_SDDevice* dev = Ports[PortSelect & 0x1];
+ u32 ret = DataFIFO32->Read();
+
+ if (DataFIFO32->IsEmpty())
+ {
+ CheckRX();
+ }
+
+ UpdateData32IRQ();
+
+ return ret;
+}
+
+void DSi_SDHost::Write(u32 addr, u16 val)
+{
+ switch (addr & 0x1FF)
+ {
+ case 0x000:
+ {
+ Command = val;
+ u8 cmd = Command & 0x3F;
+
+ DSi_SDDevice* dev = Ports[PortSelect & 0x1];
+ if (dev)
+ {
+ // CHECKME
+ // "Setting Command Type to "ACMD" is automatically sending an APP_CMD prefix prior to the command number"
+ // except DSi boot2 manually sends an APP_CMD prefix AND sets the next command to be ACMD
+ switch ((Command >> 6) & 0x3)
+ {
+ case 0: dev->SendCMD(cmd, Param); break;
+ case 1: /*dev->SendCMD(55, 0);*/ dev->SendCMD(cmd, Param); break;
+ default:
+ printf("%s: unknown command type %d, %02X %08X\n", SD_DESC, (Command>>6)&0x3, cmd, Param);
+ break;
+ }
+ }
+ else printf("%s: SENDING CMD %04X TO NULL DEVICE\n", SD_DESC, val);
+ }
+ return;
+
+ case 0x002: PortSelect = (val & 0x040F) | (PortSelect & 0x0300); return;
+ case 0x004: Param = (Param & 0xFFFF0000) | val; return;
+ case 0x006: Param = (Param & 0x0000FFFF) | (val << 16); return;
+
+ case 0x008: StopAction = val & 0x0101; return;
+ case 0x00A: BlockCount16 = val; BlockCountInternal = val; return;
+
+ case 0x01C: IRQStatus &= (val | 0xFFFF0000); return;
+ case 0x01E: IRQStatus &= ((val << 16) | 0xFFFF); return;
+ case 0x020:
+ {
+ u32 oldmask = IRQMask;
+ IRQMask = (IRQMask & 0x8B7F0000) | (val & 0x031D);
+ UpdateIRQ(oldmask);
+ }
+ return;
+ case 0x022:
+ {
+ u32 oldmask = IRQMask;
+ IRQMask = (IRQMask & 0x0000031D) | ((val & 0x8B7F) << 16);
+ UpdateIRQ(oldmask);
+ if (!DataFIFO[CurFIFO]->IsEmpty()) SetIRQ(24); // checkme
+ if (DataFIFO[CurFIFO]->IsEmpty()) SetIRQ(25); // checkme
+ }
+ return;
+
+ case 0x024: SDClock = val & 0x03FF; return;
+ case 0x026:
+ BlockLen16 = val & 0x03FF;
+ if (BlockLen16 > 0x200) BlockLen16 = 0x200;
+ return;
+ case 0x028: SDOption = val & 0xC1FF; return;
+
+ case 0x030: WriteFIFO16(val); return;
+
+ case 0x034:
+ CardIRQCtl = val & 0x0305;
+ SetCardIRQ();
+ return;
+ case 0x036:
+ CardIRQStatus &= val;
+ return;
+ case 0x038:
+ CardIRQMask = val & 0xC007;
+ SetCardIRQ();
+ return;
+
+ case 0x0D8:
+ DataCtl = (val & 0x0022);
+ DataMode = ((DataCtl >> 1) & 0x1) & ((Data32IRQ >> 1) & 0x1);
+ return;
+
+ case 0x0E0:
+ if ((SoftReset & 0x0001) && !(val & 0x0001))
+ {
+ printf("%s: RESET\n", SD_DESC);
+ StopAction = 0;
+ memset(ResponseBuffer, 0, sizeof(ResponseBuffer));
+ IRQStatus = 0;
+ // TODO: ERROR_DETAIL_STATUS
+ SDClock &= ~0x0500;
+ SDOption = 0x40EE;
+ // TODO: CARD_IRQ_STAT
+ // TODO: FIFO16 shit
+ }
+ SoftReset = 0x0006 | (val & 0x0001);
+ return;
+
+ case 0x100:
+ Data32IRQ = (val & 0x1802) | (Data32IRQ & 0x0300);
+ if (val & (1<<10)) DataFIFO32->Clear();
+ DataMode = ((DataCtl >> 1) & 0x1) & ((Data32IRQ >> 1) & 0x1);
+ return;
+ case 0x104: BlockLen32 = val & 0x03FF; return;
+ case 0x108: BlockCount32 = val; return;
+ }
+
+ printf("unknown %s write %08X %04X\n", SD_DESC, addr, val);
+}
+
+void DSi_SDHost::WriteFIFO16(u16 val)
+{
+ DSi_SDDevice* dev = Ports[PortSelect & 0x1];
+ u32 f = CurFIFO;
+ if (DataFIFO[f]->IsFull())
+ {
+ // TODO
+ printf("!!!! %s FIFO (16) FULL\n", SD_DESC);
+ return;
+ }
+
+ DataFIFO[f]->Write(val);
+
+ CheckTX();
+}
+
+void DSi_SDHost::WriteFIFO32(u32 val)
+{
+ if (DataMode != 1) return;
+
+ if (DataFIFO32->IsFull())
+ {
+ // TODO
+ printf("!!!! %s FIFO (32) FULL\n", SD_DESC);
+ return;
+ }
+
+ DataFIFO32->Write(val);
+
+ CheckTX();
+
+ UpdateData32IRQ();
+}
+
+void DSi_SDHost::UpdateFIFO32()
+{
+ // check whether we can drain FIFO32 into FIFO16, or vice versa
+
+ if (DataMode != 1) return;
+
+ if (!DataFIFO32->IsEmpty()) printf("VERY BAD!! TRYING TO DRAIN FIFO16 INTO FIFO32 BUT IT CONTAINS SHIT ALREADY\n");
+ for (;;)
+ {
+ u32 f = CurFIFO;
+ if ((DataFIFO32->Level() << 2) >= BlockLen32) break;
+ if (DataFIFO[f]->IsEmpty()) break;
+
+ u32 val = DataFIFO[f]->Read();
+ val |= (DataFIFO[f]->Read() << 16);
+ DataFIFO32->Write(val);
+ }
+
+ UpdateData32IRQ();
+
+ if ((DataFIFO32->Level() << 2) >= BlockLen32)
+ {
+ DSi::CheckNDMAs(1, Num ? 0x29 : 0x28);
+ }
+}
+
+void DSi_SDHost::CheckSwapFIFO()
+{
+ // check whether we can swap the FIFOs
+
+ u32 f = CurFIFO;
+ bool cur_empty = (DataMode == 1) ? DataFIFO32->IsEmpty() : DataFIFO[f]->IsEmpty();
+ if (cur_empty && ((DataFIFO[f^1]->Level() << 1) >= BlockLen16))
+ {
+ CurFIFO ^= 1;
+ }
+}
+
+
+#define MMC_DESC (Internal?"NAND":"SDcard")
+
+DSi_MMCStorage::DSi_MMCStorage(DSi_SDHost* host, bool internal, const char* path) : DSi_SDDevice(host)
+{
+ Internal = internal;
+ strncpy(FilePath, path, 1023); FilePath[1023] = '\0';
+
+ File = Platform::OpenLocalFile(path, "r+b");
+ if (!File)
+ {
+ if (internal)
+ {
+ // TODO: proper failure
+ printf("!! MMC file %s does not exist\n", path);
+ }
+ else
+ {
+ File = Platform::OpenLocalFile(path, "w+b");
+ }
+ }
+
+ CSR = 0x00000100; // checkme
+
+ // TODO: busy bit
+ // TODO: SDHC/SDXC bit
+ OCR = 0x80FF8000;
+
+ // TODO: customize based on card size etc
+ u8 csd_template[16] = {0x40, 0x40, 0x96, 0xE9, 0x7F, 0xDB, 0xF6, 0xDF, 0x01, 0x59, 0x0F, 0x2A, 0x01, 0x26, 0x90, 0x00};
+ memcpy(CSD, csd_template, 16);
+
+ // checkme
+ memset(SCR, 0, 8);
+ *(u32*)&SCR[0] = 0x012A0000;
+
+ memset(SSR, 0, 64);
+
+ BlockSize = 0;
+ RWAddress = 0;
+ RWCommand = 0;
+}
+
+DSi_MMCStorage::~DSi_MMCStorage()
+{
+ if (File) fclose(File);
+}
+
+void DSi_MMCStorage::SendCMD(u8 cmd, u32 param)
+{
+ if (CSR & (1<<5))
+ {
+ CSR &= ~(1<<5);
+ return SendACMD(cmd, param);
+ }
+
+ switch (cmd)
+ {
+ case 0: // reset/etc
+ Host->SendResponse(CSR, true);
+ return;
+
+ case 2:
+ case 10: // get CID
+ Host->SendResponse(*(u32*)&CID[12], false);
+ Host->SendResponse(*(u32*)&CID[8], false);
+ Host->SendResponse(*(u32*)&CID[4], false);
+ Host->SendResponse(*(u32*)&CID[0], true);
+ if (cmd == 2) SetState(0x02);
+ return;
+
+ case 3: // get/set RCA
+ if (Internal)
+ {
+ RCA = param >> 16;
+ Host->SendResponse(CSR|0x10000, true); // huh??
+ }
+ else
+ {
+ // TODO
+ printf("CMD3 on SD card: TODO\n");
+ Host->SendResponse((CSR & 0x1FFF) | ((CSR >> 6) & 0x2000) | ((CSR >> 8) & 0xC000) | (1 << 16), true);
+ }
+ return;
+
+ case 7: // select card (by RCA)
+ Host->SendResponse(CSR, true);
+ return;
+
+ case 8: // set voltage
+ Host->SendResponse(param, true);
+ return;
+
+ case 9: // get CSD
+ Host->SendResponse(*(u32*)&CSD[12], false);
+ Host->SendResponse(*(u32*)&CSD[8], false);
+ Host->SendResponse(*(u32*)&CSD[4], false);
+ Host->SendResponse(*(u32*)&CSD[0], true);
+ return;
+
+ case 12: // stop operation
+ SetState(0x04);
+ if (File) fflush(File);
+ RWCommand = 0;
+ Host->SendResponse(CSR, true);
+ return;
+
+ case 13: // get status
+ Host->SendResponse(CSR, true);
+ return;
+
+ case 16: // set block size
+ BlockSize = param;
+ if (BlockSize > 0x200)
+ {
+ // TODO! raise error
+ printf("!! SD/MMC: BAD BLOCK LEN %d\n", BlockSize);
+ BlockSize = 0x200;
+ }
+ SetState(0x04); // CHECKME
+ Host->SendResponse(CSR, true);
+ return;
+
+ case 18: // read multiple blocks
+ //printf("READ_MULTIPLE_BLOCKS addr=%08X size=%08X\n", param, BlockSize);
+ RWAddress = param;
+ if (OCR & (1<<30))
+ {
+ RWAddress <<= 9;
+ BlockSize = 512;
+ }
+ RWCommand = 18;
+ Host->SendResponse(CSR, true);
+ ReadBlock(RWAddress);
+ RWAddress += BlockSize;
+ SetState(0x05);
+ return;
+
+ case 25: // write multiple blocks
+ //printf("WRITE_MULTIPLE_BLOCKS addr=%08X size=%08X\n", param, BlockSize);
+ RWAddress = param;
+ if (OCR & (1<<30))
+ {
+ RWAddress <<= 9;
+ BlockSize = 512;
+ }
+ RWCommand = 25;
+ Host->SendResponse(CSR, true);
+ WriteBlock(RWAddress);
+ RWAddress += BlockSize;
+ SetState(0x04);
+ return;
+
+ case 55: // appcmd prefix
+ CSR |= (1<<5);
+ Host->SendResponse(CSR, true);
+ return;
+ }
+
+ printf("MMC: unknown CMD %d %08X\n", cmd, param);
+}
+
+void DSi_MMCStorage::SendACMD(u8 cmd, u32 param)
+{
+ switch (cmd)
+ {
+ case 6: // set bus width (TODO?)
+ //printf("SET BUS WIDTH %08X\n", param);
+ Host->SendResponse(CSR, true);
+ return;
+
+ case 13: // get SSR
+ Host->SendResponse(CSR, true);
+ Host->DataRX(SSR, 64);
+ return;
+
+ case 41: // set operating conditions
+ // CHECKME:
+ // DSi boot2 sets this to 0x40100000 (hardcoded)
+ // then has two codepaths depending on whether bit30 did get set
+ // is it settable at all on the MMC? probably not.
+ if (Internal) param &= ~(1<<30);
+ OCR &= 0xBF000000;
+ OCR |= (param & 0x40FFFFFF);
+ Host->SendResponse(OCR, true);
+ SetState(0x01);
+ return;
+
+ case 42: // ???
+ Host->SendResponse(CSR, true);
+ return;
+
+ case 51: // get SCR
+ Host->SendResponse(CSR, true);
+ Host->DataRX(SCR, 8);
+ return;
+ }
+
+ printf("MMC: unknown ACMD %d %08X\n", cmd, param);
+}
+
+void DSi_MMCStorage::ContinueTransfer()
+{
+ if (RWCommand == 0) return;
+
+ u32 len = 0;
+
+ switch (RWCommand)
+ {
+ case 18:
+ len = ReadBlock(RWAddress);
+ break;
+
+ case 25:
+ len = WriteBlock(RWAddress);
+ break;
+ }
+
+ RWAddress += len;
+}
+
+u32 DSi_MMCStorage::ReadBlock(u64 addr)
+{
+ u32 len = BlockSize;
+ len = Host->GetTransferrableLen(len);
+
+ u8 data[0x200];
+ if (File)
+ {
+ fseek(File, addr, SEEK_SET);
+ fread(data, 1, len, File);
+ }
+
+ return Host->DataRX(data, len);
+}
+
+u32 DSi_MMCStorage::WriteBlock(u64 addr)
+{
+ u32 len = BlockSize;
+ len = Host->GetTransferrableLen(len);
+
+ u8 data[0x200];
+ if (len = Host->DataTX(data, len))
+ {
+ if (File)
+ {
+ fseek(File, addr, SEEK_SET);
+ fwrite(data, 1, len, File);
+ }
+ }
+
+ return len;
+}
diff --git a/src/DSi_SD.h b/src/DSi_SD.h
new file mode 100644
index 0000000..2862173
--- /dev/null
+++ b/src/DSi_SD.h
@@ -0,0 +1,154 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef DSI_SD_H
+#define DSI_SD_H
+
+#include <string.h>
+#include "FIFO.h"
+
+
+class DSi_SDDevice;
+
+
+class DSi_SDHost
+{
+public:
+ DSi_SDHost(u32 num);
+ ~DSi_SDHost();
+
+ void Reset();
+
+ void DoSavestate(Savestate* file);
+
+ static void FinishRX(u32 param);
+ static void FinishTX(u32 param);
+ void SendResponse(u32 val, bool last);
+ u32 DataRX(u8* data, u32 len);
+ u32 DataTX(u8* data, u32 len);
+ u32 GetTransferrableLen(u32 len);
+
+ void CheckRX();
+ void CheckTX();
+ bool TXReq;
+
+ void SetCardIRQ();
+
+ u16 Read(u32 addr);
+ void Write(u32 addr, u16 val);
+ u16 ReadFIFO16();
+ void WriteFIFO16(u16 val);
+ u32 ReadFIFO32();
+ void WriteFIFO32(u32 val);
+
+ void UpdateFIFO32();
+ void CheckSwapFIFO();
+
+private:
+ u32 Num;
+
+ u16 PortSelect;
+ u16 SoftReset;
+ u16 SDClock;
+ u16 SDOption;
+
+ u32 IRQStatus; // IF
+ u32 IRQMask; // ~IE
+
+ u16 CardIRQStatus;
+ u16 CardIRQMask;
+ u16 CardIRQCtl;
+
+ u16 DataCtl;
+ u16 Data32IRQ;
+ u32 DataMode; // 0=16bit 1=32bit
+ u16 BlockCount16, BlockCount32, BlockCountInternal;
+ u16 BlockLen16, BlockLen32;
+ u16 StopAction;
+
+ u16 Command;
+ u32 Param;
+ u16 ResponseBuffer[8];
+
+ FIFO<u16>* DataFIFO[2];
+ u32 CurFIFO; // FIFO accessible for read/write
+ FIFO<u32>* DataFIFO32;
+
+ DSi_SDDevice* Ports[2];
+
+ void UpdateData32IRQ();
+ void ClearIRQ(u32 irq);
+ void SetIRQ(u32 irq);
+ void UpdateIRQ(u32 oldmask);
+};
+
+
+class DSi_SDDevice
+{
+public:
+ DSi_SDDevice(DSi_SDHost* host) { Host = host; IRQ = false; }
+ ~DSi_SDDevice() {}
+
+ virtual void SendCMD(u8 cmd, u32 param) = 0;
+ virtual void ContinueTransfer() = 0;
+
+ bool IRQ;
+
+protected:
+ DSi_SDHost* Host;
+};
+
+
+class DSi_MMCStorage : public DSi_SDDevice
+{
+public:
+ DSi_MMCStorage(DSi_SDHost* host, bool internal, const char* path);
+ ~DSi_MMCStorage();
+
+ void SetCID(u8* cid) { memcpy(CID, cid, 16); }
+
+ void SendCMD(u8 cmd, u32 param);
+ void SendACMD(u8 cmd, u32 param);
+
+ void ContinueTransfer();
+
+private:
+ bool Internal;
+ char FilePath[1024];
+ FILE* File;
+
+ u8 CID[16];
+ u8 CSD[16];
+
+ u32 CSR;
+ u32 OCR;
+ u32 RCA;
+ u8 SCR[8];
+ u8 SSR[64];
+
+ u32 BlockSize;
+ u64 RWAddress;
+ u32 RWCommand;
+
+ void SetState(u32 state) { CSR &= ~(0xF << 9); CSR |= (state << 9); }
+
+ u32 ReadBlock(u64 addr);
+ u32 WriteBlock(u64 addr);
+};
+
+#endif // DSI_SD_H
diff --git a/src/DSi_SPI_TSC.cpp b/src/DSi_SPI_TSC.cpp
new file mode 100644
index 0000000..507005b
--- /dev/null
+++ b/src/DSi_SPI_TSC.cpp
@@ -0,0 +1,231 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "DSi.h"
+#include "SPI.h"
+#include "DSi_SPI_TSC.h"
+
+
+namespace DSi_SPI_TSC
+{
+
+u32 DataPos;
+u8 Index;
+u8 Bank;
+u8 Data;
+
+u8 Bank3Regs[0x80];
+u8 TSCMode;
+
+u16 TouchX, TouchY;
+
+
+bool Init()
+{
+ return true;
+}
+
+void DeInit()
+{
+}
+
+void Reset()
+{
+ DataPos = 0;
+
+ Bank = 0;
+ Index = 0;
+ Data = 0;
+
+ memset(Bank3Regs, 0, 0x80);
+ Bank3Regs[0x02] = 0x18;
+ Bank3Regs[0x03] = 0x87;
+ Bank3Regs[0x04] = 0x22;
+ Bank3Regs[0x05] = 0x04;
+ Bank3Regs[0x06] = 0x20;
+ Bank3Regs[0x09] = 0x40;
+ Bank3Regs[0x0E] = 0xAD;
+ Bank3Regs[0x0F] = 0xA0;
+ Bank3Regs[0x10] = 0x88;
+ Bank3Regs[0x11] = 0x81;
+
+ TSCMode = 0x01; // DSi mode
+}
+
+void DoSavestate(Savestate* file)
+{
+ /*file->Section("SPTi");
+
+ file->Var32(&DataPos);
+ file->Var8(&ControlByte);
+ file->Var8(&Data);
+
+ file->Var16(&ConvResult);*/
+ // TODO!!
+}
+
+void SetTouchCoords(u16 x, u16 y)
+{
+ if (TSCMode == 0x00)
+ {
+ if (y == 0xFFF) NDS::KeyInput |= (1 << (16+6));
+ else NDS::KeyInput &= ~(1 << (16+6));
+ return SPI_TSC::SetTouchCoords(x, y);
+ }
+
+ TouchX = x;
+ TouchY = y;
+
+ u8 oldpress = Bank3Regs[0x0E] & 0x01;
+
+ if (y == 0xFFF)
+ {
+ // released
+
+ // TODO: GBAtek says it can also be 1000 or 3000??
+ TouchX = 0x7000;
+ TouchY = 0x7000;
+
+ Bank3Regs[0x09] = 0x40;
+ //Bank3Regs[0x09] &= ~0x80;
+ Bank3Regs[0x0E] |= 0x01;
+ }
+ else
+ {
+ // pressed
+
+ TouchX <<= 4;
+ TouchY <<= 4;
+
+ Bank3Regs[0x09] = 0x80;
+ //Bank3Regs[0x09] |= 0x80;
+ Bank3Regs[0x0E] &= ~0x01;
+ }
+
+ if (oldpress ^ (Bank3Regs[0x0E] & 0x01))
+ {
+ TouchX |= 0x8000;
+ TouchY |= 0x8000;
+ }
+}
+
+void MicInputFrame(s16* data, int samples)
+{
+ if (TSCMode == 0x00) return SPI_TSC::MicInputFrame(data, samples);
+
+ // otherwise we don't handle mic input
+ // TODO: handle it where it needs to be
+}
+
+u8 Read()
+{
+ if (TSCMode == 0x00) return SPI_TSC::Read();
+
+ return Data;
+}
+
+void Write(u8 val, u32 hold)
+{
+ if (TSCMode == 0x00) return SPI_TSC::Write(val, hold);
+
+#define READWRITE(var) { if (Index & 0x01) Data = var; else var = val; }
+
+ if (DataPos == 0)
+ {
+ Index = val;
+ }
+ else
+ {
+ u8 id = Index >> 1;
+
+ if (id == 0)
+ {
+ READWRITE(Bank);
+ }
+ else if (Bank == 0x03)
+ {
+ if (Index & 0x01) Data = Bank3Regs[id];
+ else
+ {
+ if (id == 0x0D || id == 0x0E)
+ Bank3Regs[id] = (Bank3Regs[id] & 0x03) | (val & 0xFC);
+ }
+ }
+ else if ((Bank == 0xFC) && (Index & 0x01))
+ {
+ if (id < 0x0B)
+ {
+ // X coordinates
+
+ if (id & 0x01) Data = TouchX >> 8;
+ else Data = TouchX & 0xFF;
+
+ TouchX &= 0x7FFF;
+ }
+ else if (id < 0x15)
+ {
+ // Y coordinates
+
+ if (id & 0x01) Data = TouchY >> 8;
+ else Data = TouchY & 0xFF;
+
+ TouchY &= 0x7FFF; // checkme
+ }
+ else
+ {
+ // whatever (TODO)
+ Data = 0;
+ }
+ }
+ else if (Bank == 0xFF)
+ {
+ if (id == 0x05)
+ {
+ // TSC mode register
+ // 01: normal (DSi) mode
+ // 00: compatibility (DS) mode
+
+ if (Index & 0x01) Data = TSCMode;
+ else
+ {
+ TSCMode = val;
+ if (TSCMode == 0x00)
+ {
+ printf("DSi_SPI_TSC: DS-compatibility mode\n");
+ DataPos = 0;
+ NDS::KeyInput |= (1 << (16+6));
+ return;
+ }
+ }
+ }
+ }
+ else
+ {
+ printf("DSi_SPI_TSC: unknown IO, bank=%02X, index=%02X (%02X %s)\n", Bank, Index, Index>>1, (Index&1)?"read":"write");
+ }
+
+ Index += (1<<1); // increment index
+ }
+
+ if (hold) DataPos++;
+ else DataPos = 0;
+}
+
+}
diff --git a/src/DSi_SPI_TSC.h b/src/DSi_SPI_TSC.h
new file mode 100644
index 0000000..f3ffc32
--- /dev/null
+++ b/src/DSi_SPI_TSC.h
@@ -0,0 +1,40 @@
+/*
+ Copyright 2016-2019 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef DSI_SPI_TSC
+#define DSI_SPI_TSC
+
+namespace DSi_SPI_TSC
+{
+
+extern u32 DataPos;
+
+bool Init();
+void DeInit();
+void Reset();
+void DoSavestate(Savestate* file);
+
+void SetTouchCoords(u16 x, u16 y);
+void MicInputFrame(s16* data, int samples);
+
+u8 Read();
+void Write(u8 val, u32 hold);
+
+}
+
+#endif // DSI_SPI_TSC
diff --git a/src/FIFO.h b/src/FIFO.h
index e2ea644..fe0b2aa 100644
--- a/src/FIFO.h
+++ b/src/FIFO.h
@@ -89,6 +89,15 @@ public:
return Entries[ReadPos];
}
+ T Peek(u32 offset)
+ {
+ u32 pos = ReadPos + offset;
+ if (pos >= NumEntries)
+ pos -= NumEntries;
+
+ return Entries[pos];
+ }
+
u32 Level() { return NumOccupied; }
bool IsEmpty() { return NumOccupied == 0; }
bool IsFull() { return NumOccupied >= NumEntries; }
diff --git a/src/GPU.cpp b/src/GPU.cpp
index 42bfc56..29867db 100644
--- a/src/GPU.cpp
+++ b/src/GPU.cpp
@@ -21,6 +21,7 @@
#include "NDS.h"
#include "GPU.h"
+
namespace GPU
{
@@ -78,6 +79,7 @@ u8* VRAMPtr_BOBJ[0x8];
int FrontBuffer;
u32* Framebuffer[2][2];
+int Renderer;
bool Accelerated;
GPU2D* GPU2D_A;
@@ -93,8 +95,8 @@ bool Init()
FrontBuffer = 0;
Framebuffer[0][0] = NULL; Framebuffer[0][1] = NULL;
Framebuffer[1][0] = NULL; Framebuffer[1][1] = NULL;
+ Renderer = 0;
Accelerated = false;
- SetDisplaySettings(false);
return true;
}
@@ -182,6 +184,8 @@ void Reset()
int backbuf = FrontBuffer ? 0 : 1;
GPU2D_A->SetFramebuffer(Framebuffer[backbuf][1]);
GPU2D_B->SetFramebuffer(Framebuffer[backbuf][0]);
+
+ ResetRenderer();
}
void Stop()
@@ -274,15 +278,72 @@ void AssignFramebuffers()
}
}
-void SetDisplaySettings(bool accel)
+void InitRenderer(int renderer)
+{
+ if (renderer == 1)
+ {
+ if (!GLCompositor::Init())
+ {
+ renderer = 0;
+ }
+ else if (!GPU3D::GLRenderer::Init())
+ {
+ GLCompositor::DeInit();
+ renderer = 0;
+ }
+ }
+
+ if (renderer == 0)
+ {
+ GPU3D::SoftRenderer::Init();
+ }
+
+ Renderer = renderer;
+ Accelerated = renderer != 0;
+}
+
+void DeInitRenderer()
+{
+ if (Renderer == 0)
+ {
+ GPU3D::SoftRenderer::DeInit();
+ }
+ else
+ {
+ GPU3D::GLRenderer::DeInit();
+ GLCompositor::DeInit();
+ }
+}
+
+void ResetRenderer()
{
+ if (Renderer == 0)
+ {
+ GPU3D::SoftRenderer::Reset();
+ }
+ else
+ {
+ GLCompositor::Reset();
+ GPU3D::GLRenderer::Reset();
+ }
+}
+
+void SetRenderSettings(int renderer, RenderSettings& settings)
+{
+ if (renderer != Renderer)
+ {
+ DeInitRenderer();
+ InitRenderer(renderer);
+ }
+
+ bool accel = Accelerated;
int fbsize;
if (accel) fbsize = (256*3 + 1) * 192;
else fbsize = 256 * 192;
- if (Framebuffer[0][0]) delete[] Framebuffer[0][0];
- if (Framebuffer[1][0]) delete[] Framebuffer[1][0];
- if (Framebuffer[0][1]) delete[] Framebuffer[0][1];
- if (Framebuffer[1][1]) delete[] Framebuffer[1][1];
+ if (Framebuffer[0][0]) { delete[] Framebuffer[0][0]; Framebuffer[0][0] = nullptr; }
+ if (Framebuffer[1][0]) { delete[] Framebuffer[1][0]; Framebuffer[1][0] = nullptr; }
+ if (Framebuffer[0][1]) { delete[] Framebuffer[0][1]; Framebuffer[0][1] = nullptr; }
+ if (Framebuffer[1][1]) { delete[] Framebuffer[1][1]; Framebuffer[1][1] = nullptr; }
Framebuffer[0][0] = new u32[fbsize];
Framebuffer[1][0] = new u32[fbsize];
@@ -296,10 +357,18 @@ void SetDisplaySettings(bool accel)
AssignFramebuffers();
- GPU2D_A->SetDisplaySettings(accel);
- GPU2D_B->SetDisplaySettings(accel);
+ GPU2D_A->SetRenderSettings(accel);
+ GPU2D_B->SetRenderSettings(accel);
- Accelerated = accel;
+ if (Renderer == 0)
+ {
+ GPU3D::SoftRenderer::SetRenderSettings(settings);
+ }
+ else
+ {
+ GLCompositor::SetRenderSettings(settings);
+ GPU3D::GLRenderer::SetRenderSettings(settings);
+ }
}
@@ -985,6 +1054,8 @@ void StartScanline(u32 line)
GPU2D_A->VBlank();
GPU2D_B->VBlank();
GPU3D::VBlank();
+
+ if (Accelerated) GLCompositor::RenderFrame();
}
else if (VCount == 144)
{
diff --git a/src/GPU.h b/src/GPU.h
index 661a7d9..039e065 100644
--- a/src/GPU.h
+++ b/src/GPU.h
@@ -20,7 +20,6 @@
#define GPU_H
#include "GPU2D.h"
-#include "GPU3D.h"
namespace GPU
{
@@ -72,6 +71,17 @@ extern u32* Framebuffer[2][2];
extern GPU2D* GPU2D_A;
extern GPU2D* GPU2D_B;
+extern int Renderer;
+
+
+typedef struct
+{
+ bool Soft_Threaded;
+
+ int GL_ScaleFactor;
+
+} RenderSettings;
+
bool Init();
void DeInit();
@@ -80,7 +90,11 @@ void Stop();
void DoSavestate(Savestate* file);
-void SetDisplaySettings(bool accel);
+void InitRenderer(int renderer);
+void DeInitRenderer();
+void ResetRenderer();
+
+void SetRenderSettings(int renderer, RenderSettings& settings);
u8* GetUniqueBankPtr(u32 mask, u32 offset);
@@ -422,6 +436,22 @@ void SetDispStat(u32 cpu, u16 val);
void SetVCount(u16 val);
+namespace GLCompositor
+{
+
+bool Init();
+void DeInit();
+void Reset();
+
+void SetRenderSettings(RenderSettings& settings);
+
+void RenderFrame();
+void BindOutputTexture();
+
+}
+
}
+#include "GPU3D.h"
+
#endif
diff --git a/src/GPU2D.cpp b/src/GPU2D.cpp
index 1c6cf0c..604a4ee 100644
--- a/src/GPU2D.cpp
+++ b/src/GPU2D.cpp
@@ -202,16 +202,8 @@ void GPU2D::DoSavestate(Savestate* file)
file->Var32(&CaptureCnt);
}
- if (file->IsAtleastVersion(2, 1))
- {
- file->Var32(&Win0Active);
- file->Var32(&Win1Active);
- }
- else
- {
- Win0Active = 0;
- Win1Active = 0;
- }
+ file->Var32(&Win0Active);
+ file->Var32(&Win1Active);
if (!file->Saving)
{
@@ -232,7 +224,7 @@ void GPU2D::SetFramebuffer(u32* buf)
Framebuffer = buf;
}
-void GPU2D::SetDisplaySettings(bool accel)
+void GPU2D::SetRenderSettings(bool accel)
{
Accelerated = accel;
@@ -728,6 +720,8 @@ u32 GPU2D::ColorComposite(int i, u32 val1, u32 val2)
case 3: return ColorBrightnessDown(val1, EVY);
case 4: return ColorBlend5(val1, val2);
}
+
+ return val1;
}
diff --git a/src/GPU2D.h b/src/GPU2D.h
index c4bd2f9..521adf0 100644
--- a/src/GPU2D.h
+++ b/src/GPU2D.h
@@ -31,7 +31,7 @@ public:
void SetEnabled(bool enable) { Enabled = enable; }
void SetFramebuffer(u32* buf);
- void SetDisplaySettings(bool accel);
+ void SetRenderSettings(bool accel);
u8 Read8(u32 addr);
u16 Read16(u32 addr);
diff --git a/src/GPU3D.cpp b/src/GPU3D.cpp
index 4f146ae..bd27783 100644
--- a/src/GPU3D.cpp
+++ b/src/GPU3D.cpp
@@ -157,8 +157,6 @@ u32 NumCommands, CurCommand, ParamCount, TotalParams;
bool GeometryEnabled;
bool RenderingEnabled;
-int Renderer;
-
u32 DispCnt;
u8 AlphaRefVal, AlphaRef;
@@ -280,17 +278,11 @@ bool Init()
CmdStallQueue = new FIFO<CmdFIFOEntry>(64);
- Renderer = -1;
- // SetRenderer() will be called to set it up later
-
return true;
}
void DeInit()
{
- if (Renderer == 0) SoftRenderer::DeInit();
- else GLRenderer::DeInit();
-
delete CmdFIFO;
delete CmdPIPE;
@@ -391,8 +383,6 @@ void Reset()
FlushAttributes = 0;
ResetRenderingState();
- if (Renderer == 0) SoftRenderer::Reset();
- else GLRenderer::Reset();
}
void DoSavestate(Savestate* file)
@@ -607,43 +597,6 @@ void SetEnabled(bool geometry, bool rendering)
}
-int InitRenderer(bool hasGL)
-{
- int renderer = hasGL ? Config::_3DRenderer : 0;
-
- if (renderer == 1)
- {
- if (!GLRenderer::Init())
- renderer = 0;
- }
-
- if (renderer == 0) SoftRenderer::Init();
-
- Renderer = renderer;
- UpdateRendererConfig();
- GPU::SetDisplaySettings(Renderer != 0);
- return renderer;
-}
-
-void DeInitRenderer()
-{
- if (Renderer == 0) SoftRenderer::DeInit();
- else GLRenderer::DeInit();
-}
-
-void UpdateRendererConfig()
-{
- if (Renderer == 0)
- {
- SoftRenderer::SetupRenderThread();
- }
- else
- {
- GLRenderer::UpdateDisplaySettings();
- }
-}
-
-
void MatrixLoadIdentity(s32* m)
{
@@ -2470,7 +2423,7 @@ void CheckFIFODMA()
void VCount144()
{
- if (Renderer == 0) SoftRenderer::VCount144();
+ if (GPU::Renderer == 0) SoftRenderer::VCount144();
}
@@ -2552,14 +2505,14 @@ void VBlank()
void VCount215()
{
- if (Renderer == 0) SoftRenderer::RenderFrame();
- else GLRenderer::RenderFrame();
+ if (GPU::Renderer == 0) SoftRenderer::RenderFrame();
+ else GLRenderer::RenderFrame();
}
u32* GetLine(int line)
{
- if (Renderer == 0) return SoftRenderer::GetLine(line);
- else return GLRenderer::GetLine(line);
+ if (GPU::Renderer == 0) return SoftRenderer::GetLine(line);
+ else return GLRenderer::GetLine(line);
}
diff --git a/src/GPU3D.h b/src/GPU3D.h
index 1fd3383..71f069d 100644
--- a/src/GPU3D.h
+++ b/src/GPU3D.h
@@ -102,10 +102,6 @@ void DoSavestate(Savestate* file);
void SetEnabled(bool geometry, bool rendering);
-int InitRenderer(bool hasGL);
-void DeInitRenderer();
-void UpdateRendererConfig();
-
void ExecuteCommand();
s32 CyclesToRunFor();
@@ -134,6 +130,7 @@ bool Init();
void DeInit();
void Reset();
+void SetRenderSettings(GPU::RenderSettings& settings);
void SetupRenderThread();
void VCount144();
@@ -149,7 +146,7 @@ bool Init();
void DeInit();
void Reset();
-void UpdateDisplaySettings();
+void SetRenderSettings(GPU::RenderSettings& settings);
void RenderFrame();
void PrepareCaptureFrame();
diff --git a/src/GPU3D_OpenGL.cpp b/src/GPU3D_OpenGL.cpp
index b1bcaa1..8a06874 100644
--- a/src/GPU3D_OpenGL.cpp
+++ b/src/GPU3D_OpenGL.cpp
@@ -29,6 +29,8 @@ namespace GPU3D
namespace GLRenderer
{
+using namespace OpenGL;
+
// GL version requirements
// * texelFetch: 3.0 (GLSL 1.30) (3.2/1.50 for MS)
// * UBO: 3.1
@@ -142,7 +144,7 @@ bool BuildRenderShader(u32 flags, const char* vs, const char* fs)
strcpy(&fsbuf[headerlen], kRenderFSCommon);
strcpy(&fsbuf[headerlen + fsclen], fs);
- bool ret = OpenGL_BuildShaderProgram(vsbuf, fsbuf, RenderShader[flags], shadername);
+ bool ret = OpenGL::BuildShaderProgram(vsbuf, fsbuf, RenderShader[flags], shadername);
delete[] vsbuf;
delete[] fsbuf;
@@ -158,7 +160,7 @@ bool BuildRenderShader(u32 flags, const char* vs, const char* fs)
glBindFragDataLocation(prog, 0, "oColor");
glBindFragDataLocation(prog, 1, "oAttr");
- if (!OpenGL_LinkShaderProgram(RenderShader[flags]))
+ if (!OpenGL::LinkShaderProgram(RenderShader[flags]))
return false;
GLint uni_id = glGetUniformBlockIndex(prog, "uConfig");
@@ -197,19 +199,18 @@ bool Init()
glEnable(GL_DEPTH_TEST);
glEnable(GL_STENCIL_TEST);
-
glDepthRange(0, 1);
glClearDepth(1.0);
- if (!OpenGL_BuildShaderProgram(kClearVS, kClearFS, ClearShaderPlain, "ClearShader"))
+ if (!OpenGL::BuildShaderProgram(kClearVS, kClearFS, ClearShaderPlain, "ClearShader"))
return false;
glBindAttribLocation(ClearShaderPlain[2], 0, "vPosition");
glBindFragDataLocation(ClearShaderPlain[2], 0, "oColor");
glBindFragDataLocation(ClearShaderPlain[2], 1, "oAttr");
- if (!OpenGL_LinkShaderProgram(ClearShaderPlain))
+ if (!OpenGL::LinkShaderProgram(ClearShaderPlain))
return false;
ClearUniformLoc[0] = glGetUniformLocation(ClearShaderPlain[2], "uColor");
@@ -237,15 +238,15 @@ bool Init()
kRenderVS_W, kRenderFS_WSM)) return false;
- if (!OpenGL_BuildShaderProgram(kFinalPassVS, kFinalPassEdgeFS, FinalPassEdgeShader, "FinalPassEdgeShader"))
+ if (!OpenGL::BuildShaderProgram(kFinalPassVS, kFinalPassEdgeFS, FinalPassEdgeShader, "FinalPassEdgeShader"))
return false;
- if (!OpenGL_BuildShaderProgram(kFinalPassVS, kFinalPassFogFS, FinalPassFogShader, "FinalPassFogShader"))
+ if (!OpenGL::BuildShaderProgram(kFinalPassVS, kFinalPassFogFS, FinalPassFogShader, "FinalPassFogShader"))
return false;
glBindAttribLocation(FinalPassEdgeShader[2], 0, "vPosition");
glBindFragDataLocation(FinalPassEdgeShader[2], 0, "oColor");
- if (!OpenGL_LinkShaderProgram(FinalPassEdgeShader))
+ if (!OpenGL::LinkShaderProgram(FinalPassEdgeShader))
return false;
uni_id = glGetUniformBlockIndex(FinalPassEdgeShader[2], "uConfig");
@@ -261,7 +262,7 @@ bool Init()
glBindAttribLocation(FinalPassFogShader[2], 0, "vPosition");
glBindFragDataLocation(FinalPassFogShader[2], 0, "oColor");
- if (!OpenGL_LinkShaderProgram(FinalPassFogShader))
+ if (!OpenGL::LinkShaderProgram(FinalPassFogShader))
return false;
uni_id = glGetUniformBlockIndex(FinalPassFogShader[2], "uConfig");
@@ -392,7 +393,7 @@ void DeInit()
for (int i = 0; i < 16; i++)
{
if (!RenderShader[i][2]) continue;
- OpenGL_DeleteShaderProgram(RenderShader[i]);
+ OpenGL::DeleteShaderProgram(RenderShader[i]);
}
}
@@ -400,10 +401,10 @@ void Reset()
{
}
-void UpdateDisplaySettings()
+void SetRenderSettings(GPU::RenderSettings& settings)
{
- int scale = Config::GL_ScaleFactor;
- bool antialias = false; //Config::GL_Antialias;
+ int scale = settings.GL_ScaleFactor;
+ bool antialias = false; // REMOVE ME!
if (antialias) scale *= 2;
@@ -1224,7 +1225,7 @@ void RenderFrame()
glBlitFramebuffer(0, 0, ScreenW, ScreenH, 0, 0, ScreenW/2, ScreenH/2, GL_COLOR_BUFFER_BIT, GL_LINEAR);
}
- glBindFramebuffer(GL_FRAMEBUFFER, FramebufferID[FrontBuffer]);
+ //glBindFramebuffer(GL_FRAMEBUFFER, FramebufferID[FrontBuffer]);
FrontBuffer = FrontBuffer ? 0 : 1;
}
diff --git a/src/GPU3D_Soft.cpp b/src/GPU3D_Soft.cpp
index 8397898..e9d8e75 100644
--- a/src/GPU3D_Soft.cpp
+++ b/src/GPU3D_Soft.cpp
@@ -60,6 +60,7 @@ bool Enabled;
// threading
+bool Threaded;
void* RenderThread;
bool RenderThreadRunning;
bool RenderThreadRendering;
@@ -83,7 +84,7 @@ void StopRenderThread()
void SetupRenderThread()
{
- if (Config::Threaded3D)
+ if (Threaded)
{
if (!RenderThreadRunning)
{
@@ -112,6 +113,7 @@ bool Init()
Sema_RenderDone = Platform::Semaphore_Create();
Sema_ScanlineCount = Platform::Semaphore_Create();
+ Threaded = false;
RenderThreadRunning = false;
RenderThreadRendering = false;
@@ -138,6 +140,12 @@ void Reset()
SetupRenderThread();
}
+void SetRenderSettings(GPU::RenderSettings& settings)
+{
+ Threaded = settings.Soft_Threaded;
+ SetupRenderThread();
+}
+
// Notes on the interpolator:
diff --git a/src/GPU_OpenGL.cpp b/src/GPU_OpenGL.cpp
new file mode 100644
index 0000000..1cb6864
--- /dev/null
+++ b/src/GPU_OpenGL.cpp
@@ -0,0 +1,206 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include "NDS.h"
+#include "GPU.h"
+#include "Config.h"
+#include "OpenGLSupport.h"
+#include "GPU_OpenGL_shaders.h"
+
+namespace GPU
+{
+namespace GLCompositor
+{
+
+using namespace OpenGL;
+
+int Scale;
+int ScreenH, ScreenW;
+
+GLuint CompShader[1][3];
+GLuint CompScaleLoc[1];
+
+GLuint CompVertexBufferID;
+GLuint CompVertexArrayID;
+float CompVertices[2 * 3*2 * 2]; // position
+
+GLuint CompScreenInputTex;
+GLuint CompScreenOutputTex;
+GLuint CompScreenOutputFB;
+
+
+bool Init()
+{
+ if (!OpenGL::BuildShaderProgram(kCompositorVS, kCompositorFS_Nearest, CompShader[0], "CompositorShader"))
+ //if (!OpenGL::BuildShaderProgram(kCompositorVS, kCompositorFS_Linear, CompShader[0], "CompositorShader"))
+ //if (!OpenGL::BuildShaderProgram(kCompositorVS_xBRZ, kCompositorFS_xBRZ, CompShader[0], "CompositorShader"))
+ return false;
+
+ for (int i = 0; i < 1; i++)
+ {
+ GLint uni_id;
+
+ glBindAttribLocation(CompShader[i][2], 0, "vPosition");
+ glBindFragDataLocation(CompShader[i][2], 0, "oColor");
+
+ if (!OpenGL::LinkShaderProgram(CompShader[i]))
+ return false;
+
+ CompScaleLoc[i] = glGetUniformLocation(CompShader[i][2], "u3DScale");
+
+ glUseProgram(CompShader[i][2]);
+ uni_id = glGetUniformLocation(CompShader[i][2], "ScreenTex");
+ glUniform1i(uni_id, 0);
+ uni_id = glGetUniformLocation(CompShader[i][2], "_3DTex");
+ glUniform1i(uni_id, 1);
+ }
+
+#define SETVERTEX(i, x, y) \
+ CompVertices[2*(i) + 0] = x; \
+ CompVertices[2*(i) + 1] = y;
+
+ // top screen
+ SETVERTEX(0, -1, 1);
+ SETVERTEX(1, 1, 0);
+ SETVERTEX(2, 1, 1);
+ SETVERTEX(3, -1, 1);
+ SETVERTEX(4, -1, 0);
+ SETVERTEX(5, 1, 0);
+
+ // bottom screen
+ SETVERTEX(6, -1, 0);
+ SETVERTEX(7, 1, -1);
+ SETVERTEX(8, 1, 0);
+ SETVERTEX(9, -1, 0);
+ SETVERTEX(10, -1, -1);
+ SETVERTEX(11, 1, -1);
+
+#undef SETVERTEX
+
+ glGenBuffers(1, &CompVertexBufferID);
+ glBindBuffer(GL_ARRAY_BUFFER, CompVertexBufferID);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(CompVertices), CompVertices, GL_STATIC_DRAW);
+
+ glGenVertexArrays(1, &CompVertexArrayID);
+ glBindVertexArray(CompVertexArrayID);
+ glEnableVertexAttribArray(0); // position
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 2*4, (void*)(0));
+
+ glGenFramebuffers(1, &CompScreenOutputFB);
+
+ glGenTextures(1, &CompScreenInputTex);
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, CompScreenInputTex);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8UI, 256*3 + 1, 192*2, 0, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE, NULL);
+
+ glGenTextures(1, &CompScreenOutputTex);
+ glBindTexture(GL_TEXTURE_2D, CompScreenOutputTex);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+
+ return true;
+}
+
+void DeInit()
+{
+ glDeleteFramebuffers(1, &CompScreenOutputFB);
+ glDeleteTextures(1, &CompScreenInputTex);
+ glDeleteTextures(1, &CompScreenOutputTex);
+
+ glDeleteVertexArrays(1, &CompVertexArrayID);
+ glDeleteBuffers(1, &CompVertexBufferID);
+
+ for (int i = 0; i < 1; i++)
+ OpenGL::DeleteShaderProgram(CompShader[i]);
+}
+
+void Reset()
+{
+}
+
+
+void SetRenderSettings(RenderSettings& settings)
+{
+ int scale = settings.GL_ScaleFactor;
+
+ Scale = scale;
+ ScreenW = 256 * scale;
+ ScreenH = 384 * scale;
+
+ glBindTexture(GL_TEXTURE_2D, CompScreenOutputTex);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, ScreenW, ScreenH, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+
+ GLenum fbassign[] = {GL_COLOR_ATTACHMENT0};
+ glBindFramebuffer(GL_FRAMEBUFFER, CompScreenOutputFB);
+ glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, CompScreenOutputTex, 0);
+ glDrawBuffers(1, fbassign);
+}
+
+
+void RenderFrame()
+{
+ glBindFramebuffer(GL_FRAMEBUFFER, CompScreenOutputFB);
+
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_STENCIL_TEST);
+ glDisable(GL_BLEND);
+ glColorMaski(0, GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+
+ glViewport(0, 0, ScreenW, ScreenH);
+
+ // TODO: select more shaders (filtering, etc)
+ OpenGL::UseShaderProgram(CompShader[0]);
+ glUniform1ui(CompScaleLoc[0], Scale);
+
+ int frontbuf = GPU::FrontBuffer;
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, CompScreenInputTex);
+
+ if (GPU::Framebuffer[frontbuf][0] && GPU::Framebuffer[frontbuf][1])
+ {
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256*3 + 1, 192, GL_RGBA_INTEGER,
+ GL_UNSIGNED_BYTE, GPU::Framebuffer[frontbuf][0]);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 192, 256*3 + 1, 192, GL_RGBA_INTEGER,
+ GL_UNSIGNED_BYTE, GPU::Framebuffer[frontbuf][1]);
+ }
+
+ glActiveTexture(GL_TEXTURE1);
+ GPU3D::GLRenderer::SetupAccelFrame();
+
+ glBindBuffer(GL_ARRAY_BUFFER, CompVertexBufferID);
+ glBindVertexArray(CompVertexArrayID);
+ glDrawArrays(GL_TRIANGLES, 0, 4*3);
+
+ glFlush();
+}
+
+void BindOutputTexture()
+{
+ glBindTexture(GL_TEXTURE_2D, CompScreenOutputTex);
+}
+
+}
+}
diff --git a/src/GPU_OpenGL_shaders.h b/src/GPU_OpenGL_shaders.h
new file mode 100644
index 0000000..20ac767
--- /dev/null
+++ b/src/GPU_OpenGL_shaders.h
@@ -0,0 +1,867 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef GPU_OPENGL_SHADERS_H
+#define GPU_OPENGL_SHADERS_H
+
+const char* kCompositorVS = R"(#version 140
+
+in vec2 vPosition;
+
+smooth out vec2 fTexcoord;
+
+void main()
+{
+ vec4 fpos;
+ fpos.xy = vPosition;
+ fpos.z = 0.0;
+ fpos.w = 1.0;
+
+ gl_Position = fpos;
+ fTexcoord = (vPosition + vec2(1.0, 1.0)) * (vec2(256.0, 384.0) / 2.0);
+}
+)";
+
+const char* kCompositorFS_Nearest = R"(#version 140
+
+uniform uint u3DScale;
+
+uniform usampler2D ScreenTex;
+uniform sampler2D _3DTex;
+
+smooth in vec2 fTexcoord;
+
+out vec4 oColor;
+
+void main()
+{
+ ivec4 pixel = ivec4(texelFetch(ScreenTex, ivec2(fTexcoord), 0));
+
+ ivec4 mbright = ivec4(texelFetch(ScreenTex, ivec2(256*3, int(fTexcoord.y)), 0));
+ int dispmode = mbright.b & 0x3;
+
+ if (dispmode == 1)
+ {
+ ivec4 val1 = pixel;
+ ivec4 val2 = ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(256,0), 0));
+ ivec4 val3 = ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(512,0), 0));
+
+ int compmode = val3.a & 0xF;
+ int eva, evb, evy;
+
+ if (compmode == 4)
+ {
+ // 3D on top, blending
+
+ float xpos = val3.r + fract(fTexcoord.x);
+ float ypos = mod(fTexcoord.y, 192);
+ ivec4 _3dpix = ivec4(texelFetch(_3DTex, ivec2(vec2(xpos, ypos)*u3DScale), 0).bgra
+ * vec4(63,63,63,31));
+
+ if (_3dpix.a > 0)
+ {
+ eva = (_3dpix.a & 0x1F) + 1;
+ evb = 32 - eva;
+
+ val1 = ((_3dpix * eva) + (val1 * evb)) >> 5;
+ if (eva <= 16) val1 += ivec4(1,1,1,0);
+ val1 = min(val1, 0x3F);
+ }
+ else
+ val1 = val2;
+ }
+ else if (compmode == 1)
+ {
+ // 3D on bottom, blending
+
+ float xpos = val3.r + fract(fTexcoord.x);
+ float ypos = mod(fTexcoord.y, 192);
+ ivec4 _3dpix = ivec4(texelFetch(_3DTex, ivec2(vec2(xpos, ypos)*u3DScale), 0).bgra
+ * vec4(63,63,63,31));
+
+ if (_3dpix.a > 0)
+ {
+ eva = val3.g;
+ evb = val3.b;
+
+ val1 = ((val1 * eva) + (_3dpix * evb)) >> 4;
+ val1 = min(val1, 0x3F);
+ }
+ else
+ val1 = val2;
+ }
+ else if (compmode <= 3)
+ {
+ // 3D on top, normal/fade
+
+ float xpos = val3.r + fract(fTexcoord.x);
+ float ypos = mod(fTexcoord.y, 192);
+ ivec4 _3dpix = ivec4(texelFetch(_3DTex, ivec2(vec2(xpos, ypos)*u3DScale), 0).bgra
+ * vec4(63,63,63,31));
+
+ if (_3dpix.a > 0)
+ {
+ evy = val3.g;
+
+ val1 = _3dpix;
+ if (compmode == 2) val1 += ((ivec4(0x3F,0x3F,0x3F,0) - val1) * evy) >> 4;
+ else if (compmode == 3) val1 -= (val1 * evy) >> 4;
+ }
+ else
+ val1 = val2;
+ }
+
+ pixel = val1;
+ }
+
+ if (dispmode != 0)
+ {
+ int brightmode = mbright.g >> 6;
+ if (brightmode == 1)
+ {
+ // up
+ int evy = mbright.r & 0x1F;
+ if (evy > 16) evy = 16;
+
+ pixel += ((ivec4(0x3F,0x3F,0x3F,0) - pixel) * evy) >> 4;
+ }
+ else if (brightmode == 2)
+ {
+ // down
+ int evy = mbright.r & 0x1F;
+ if (evy > 16) evy = 16;
+
+ pixel -= (pixel * evy) >> 4;
+ }
+ }
+
+ pixel.rgb <<= 2;
+ pixel.rgb |= (pixel.rgb >> 6);
+
+ // TODO: filters
+
+ oColor = vec4(vec3(pixel.bgr) / 255.0, 1.0);
+}
+)";
+
+
+
+const char* kCompositorFS_Linear = R"(#version 140
+
+uniform uint u3DScale;
+
+uniform usampler2D ScreenTex;
+uniform sampler2D _3DTex;
+
+smooth in vec2 fTexcoord;
+
+out vec4 oColor;
+
+ivec4 Get3DPixel(vec2 pos)
+{
+ return ivec4(texelFetch(_3DTex, ivec2(pos*u3DScale), 0).bgra
+ * vec4(63,63,63,31));
+}
+
+ivec4 GetFullPixel(ivec4 val1, ivec4 val2, ivec4 val3, ivec4 _3dpix)
+{
+ int compmode = val3.a & 0xF;
+ int eva, evb, evy;
+
+ if (compmode == 4)
+ {
+ // 3D on top, blending
+
+ if (_3dpix.a > 0)
+ {
+ eva = (_3dpix.a & 0x1F) + 1;
+ evb = 32 - eva;
+
+ val1 = ((_3dpix * eva) + (val1 * evb)) >> 5;
+ if (eva <= 16) val1 += ivec4(1,1,1,0);
+ val1 = min(val1, 0x3F);
+ }
+ else
+ val1 = val2;
+ }
+ else if (compmode == 1)
+ {
+ // 3D on bottom, blending
+
+ if (_3dpix.a > 0)
+ {
+ eva = val3.g;
+ evb = val3.b;
+
+ val1 = ((val1 * eva) + (_3dpix * evb)) >> 4;
+ val1 = min(val1, 0x3F);
+ }
+ else
+ val1 = val2;
+ }
+ else if (compmode <= 3)
+ {
+ // 3D on top, normal/fade
+
+ if (_3dpix.a > 0)
+ {
+ evy = val3.g;
+
+ val1 = _3dpix;
+ if (compmode == 2) val1 += ((ivec4(0x3F,0x3F,0x3F,0) - val1) * evy) >> 4;
+ else if (compmode == 3) val1 -= (val1 * evy) >> 4;
+ }
+ else
+ val1 = val2;
+ }
+
+ return val1;
+}
+
+ivec4 imix(ivec4 a, ivec4 b, float x)
+{
+ return ivec4(vec4(a)*(1-x) + vec4(b)*x);
+}
+
+void main()
+{
+ ivec4 pixel = ivec4(texelFetch(ScreenTex, ivec2(fTexcoord), 0));
+
+ ivec4 mbright = ivec4(texelFetch(ScreenTex, ivec2(256*3, int(fTexcoord.y)), 0));
+ int dispmode = mbright.b & 0x3;
+
+ if (dispmode == 1)
+ {
+ ivec4 val1 = pixel;
+ ivec4 val2 = ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(256,0), 0));
+ ivec4 val3 = ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(512,0), 0));
+
+ float xfract = fract(fTexcoord.x);
+ float yfract = fract(fTexcoord.y);
+
+ float xpos = val3.r + xfract;
+ float ypos = mod(fTexcoord.y, 192);
+ ivec4 _3dpix = Get3DPixel(vec2(xpos,ypos));
+
+ ivec4 p00 = GetFullPixel(val1, val2, val3, _3dpix);
+
+ int xdisp = 1 - int(step(255, fTexcoord.x));
+ int ydisp = 1 - int(step(191, ypos));
+
+ ivec4 p01 = GetFullPixel(ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(xdisp+0 ,0), 0)),
+ ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(xdisp+256,0), 0)),
+ ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(xdisp+512,0), 0)),
+ _3dpix);
+
+ ivec4 p10 = GetFullPixel(ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(0+0 ,ydisp), 0)),
+ ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(0+256,ydisp), 0)),
+ ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(0+512,ydisp), 0)),
+ _3dpix);
+
+ ivec4 p11 = GetFullPixel(ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(xdisp+0 ,ydisp), 0)),
+ ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(xdisp+256,ydisp), 0)),
+ ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(xdisp+512,ydisp), 0)),
+ _3dpix);
+
+ ivec4 pa = imix(p00, p01, xfract);
+ ivec4 pb = imix(p10, p11, xfract);
+
+ pixel = imix(pa, pb, yfract);
+ }
+
+ if (dispmode != 0)
+ {
+ int brightmode = mbright.g >> 6;
+ if (brightmode == 1)
+ {
+ // up
+ int evy = mbright.r & 0x1F;
+ if (evy > 16) evy = 16;
+
+ pixel += ((ivec4(0x3F,0x3F,0x3F,0) - pixel) * evy) >> 4;
+ }
+ else if (brightmode == 2)
+ {
+ // down
+ int evy = mbright.r & 0x1F;
+ if (evy > 16) evy = 16;
+
+ pixel -= (pixel * evy) >> 4;
+ }
+ }
+
+ pixel.rgb <<= 2;
+ pixel.rgb |= (pixel.rgb >> 6);
+
+ // TODO: filters
+
+ oColor = vec4(vec3(pixel.bgr) / 255.0, 1.0);
+}
+)";
+
+
+
+
+
+
+// HUGE TEST ZONE ARRLGD
+
+const char* kCompositorVS_xBRZ = R"(#version 140
+
+#define BLEND_NONE 0
+#define BLEND_NORMAL 1
+#define BLEND_DOMINANT 2
+#define LUMINANCE_WEIGHT 1.0
+#define EQUAL_COLOR_TOLERANCE 30.0/255.0
+#define STEEP_DIRECTION_THRESHOLD 2.2
+#define DOMINANT_DIRECTION_THRESHOLD 3.6
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+
+COMPAT_ATTRIBUTE vec2 vPosition;
+COMPAT_VARYING vec4 TEX0;
+COMPAT_VARYING vec4 t1;
+COMPAT_VARYING vec4 t2;
+COMPAT_VARYING vec4 t3;
+COMPAT_VARYING vec4 t4;
+COMPAT_VARYING vec4 t5;
+COMPAT_VARYING vec4 t6;
+COMPAT_VARYING vec4 t7;
+
+uniform COMPAT_PRECISION int FrameDirection;
+uniform COMPAT_PRECISION int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+
+// vertex compatibility #defines
+#define vTexCoord TEX0.xy
+#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
+#define outsize vec4(OutputSize, 1.0 / OutputSize)
+
+void main()
+{
+ vec4 fpos;
+ fpos.xy = vPosition;
+ fpos.z = 0.0;
+ fpos.w = 1.0;
+
+ gl_Position = fpos;
+ vec2 TexCoord = (vPosition + vec2(1.0, 1.0)) * (vec2(256.0, 384.0) / 2.0);
+
+
+ //gl_Position = MVPMatrix * VertexCoord;
+ //COL0 = COLOR;
+ TEX0.xy = TexCoord.xy;
+ vec2 ps = vec2(1,1);//vec2(SourceSize.z, SourceSize.w);
+ float dx = ps.x;
+ float dy = ps.y;
+
+ // A1 B1 C1
+ // A0 A B C C4
+ // D0 D E F F4
+ // G0 G H I I4
+ // G5 H5 I5
+
+ t1 = vTexCoord.xxxy + vec4( -dx, 0.0, dx,-2.0*dy); // A1 B1 C1
+ t2 = vTexCoord.xxxy + vec4( -dx, 0.0, dx, -dy); // A B C
+ t3 = vTexCoord.xxxy + vec4( -dx, 0.0, dx, 0.0); // D E F
+ t4 = vTexCoord.xxxy + vec4( -dx, 0.0, dx, dy); // G H I
+ t5 = vTexCoord.xxxy + vec4( -dx, 0.0, dx, 2.0*dy); // G5 H5 I5
+ t6 = vTexCoord.xyyy + vec4(-2.0*dx,-dy, 0.0, dy); // A0 D0 G0
+ t7 = vTexCoord.xyyy + vec4( 2.0*dx,-dy, 0.0, dy); // C4 F4 I4
+}
+)";
+
+const char* kCompositorFS_xBRZ = R"(#version 140
+
+#define BLEND_NONE 0
+#define BLEND_NORMAL 1
+#define BLEND_DOMINANT 2
+#define LUMINANCE_WEIGHT 1.0
+#define EQUAL_COLOR_TOLERANCE 30.0/255.0
+#define STEEP_DIRECTION_THRESHOLD 2.2
+#define DOMINANT_DIRECTION_THRESHOLD 3.6
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+//#define COMPAT_TEXTURE texture
+#define FragColor oColor
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+//#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+
+uniform uint u3DScale;
+
+uniform usampler2D ScreenTex;
+uniform sampler2D _3DTex;
+
+smooth in vec2 fTexcoord;
+
+out vec4 oColor;
+
+//uniform COMPAT_PRECISION vec2 OutputSize;
+//uniform COMPAT_PRECISION vec2 TextureSize;
+#define TextureSize vec2(256,384)
+//uniform COMPAT_PRECISION vec2 InputSize;
+//uniform sampler2D Texture;
+#define Texture 1312
+COMPAT_VARYING vec4 TEX0;
+COMPAT_VARYING vec4 t1;
+COMPAT_VARYING vec4 t2;
+COMPAT_VARYING vec4 t3;
+COMPAT_VARYING vec4 t4;
+COMPAT_VARYING vec4 t5;
+COMPAT_VARYING vec4 t6;
+COMPAT_VARYING vec4 t7;
+
+// fragment compatibility #defines
+#define Source Texture
+#define vTexCoord TEX0.xy
+
+#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
+#define outsize vec4(OutputSize, 1.0 / OutputSize)
+
+ const float one_sixth = 1.0 / 6.0;
+ const float two_sixth = 2.0 / 6.0;
+ const float four_sixth = 4.0 / 6.0;
+ const float five_sixth = 5.0 / 6.0;
+
+vec4 Get2DPixel(vec2 texcoord, int level)
+{
+ ivec4 pixel = ivec4(texelFetch(ScreenTex, ivec2(texcoord) + ivec2(level*256,0), 0));
+
+ return vec4(pixel) / vec4(63.0, 63.0, 63.0, 31.0);
+}
+
+ivec4 Get3DPixel(vec2 pos)
+{
+ return ivec4(texelFetch(_3DTex, ivec2(pos*u3DScale), 0).bgra
+ * vec4(63,63,63,31));
+}
+
+float reduce(const vec3 color)
+{
+ return dot(color, vec3(65536.0, 256.0, 1.0));
+}
+
+float DistYCbCr(const vec3 pixA, const vec3 pixB)
+{
+ const vec3 w = vec3(0.2627, 0.6780, 0.0593);
+ const float scaleB = 0.5 / (1.0 - w.b);
+ const float scaleR = 0.5 / (1.0 - w.r);
+ vec3 diff = pixA - pixB;
+ float Y = dot(diff, w);
+ float Cb = scaleB * (diff.b - Y);
+ float Cr = scaleR * (diff.r - Y);
+
+ return sqrt( ((LUMINANCE_WEIGHT * Y) * (LUMINANCE_WEIGHT * Y)) + (Cb * Cb) + (Cr * Cr) );
+}
+
+bool IsPixEqual(const vec3 pixA, const vec3 pixB)
+{
+ return (DistYCbCr(pixA, pixB) < EQUAL_COLOR_TOLERANCE);
+}
+
+bool IsBlendingNeeded(const ivec4 blend)
+{
+ return any(notEqual(blend, ivec4(BLEND_NONE)));
+}
+
+//---------------------------------------
+// Input Pixel Mapping: --|21|22|23|--
+// 19|06|07|08|09
+// 18|05|00|01|10
+// 17|04|03|02|11
+// --|15|14|13|--
+//
+// Output Pixel Mapping: 20|21|22|23|24|25
+// 19|06|07|08|09|26
+// 18|05|00|01|10|27
+// 17|04|03|02|11|28
+// 16|15|14|13|12|29
+// 35|34|33|32|31|30
+
+ivec4 GetFiltered2DPixel(int level)
+{
+ vec2 f = fract(vTexCoord.xy);// * SourceSize.xy);
+
+ //---------------------------------------
+ // Input Pixel Mapping: 20|21|22|23|24
+ // 19|06|07|08|09
+ // 18|05|00|01|10
+ // 17|04|03|02|11
+ // 16|15|14|13|12
+
+ vec3 src[25];
+
+ src[21] = Get2DPixel(t1.xw, level).rgb;
+ src[22] = Get2DPixel(t1.yw, level).rgb;
+ src[23] = Get2DPixel(t1.zw, level).rgb;
+ src[ 6] = Get2DPixel(t2.xw, level).rgb;
+ src[ 7] = Get2DPixel(t2.yw, level).rgb;
+ src[ 8] = Get2DPixel(t2.zw, level).rgb;
+ src[ 5] = Get2DPixel(t3.xw, level).rgb;
+ src[ 0] = Get2DPixel(t3.yw, level).rgb;
+ src[ 1] = Get2DPixel(t3.zw, level).rgb;
+ src[ 4] = Get2DPixel(t4.xw, level).rgb;
+ src[ 3] = Get2DPixel(t4.yw, level).rgb;
+ src[ 2] = Get2DPixel(t4.zw, level).rgb;
+ src[15] = Get2DPixel(t5.xw, level).rgb;
+ src[14] = Get2DPixel(t5.yw, level).rgb;
+ src[13] = Get2DPixel(t5.zw, level).rgb;
+ src[19] = Get2DPixel(t6.xy, level).rgb;
+ src[18] = Get2DPixel(t6.xz, level).rgb;
+ src[17] = Get2DPixel(t6.xw, level).rgb;
+ src[ 9] = Get2DPixel(t7.xy, level).rgb;
+ src[10] = Get2DPixel(t7.xz, level).rgb;
+ src[11] = Get2DPixel(t7.xw, level).rgb;
+
+ float v[9];
+ v[0] = reduce(src[0]);
+ v[1] = reduce(src[1]);
+ v[2] = reduce(src[2]);
+ v[3] = reduce(src[3]);
+ v[4] = reduce(src[4]);
+ v[5] = reduce(src[5]);
+ v[6] = reduce(src[6]);
+ v[7] = reduce(src[7]);
+ v[8] = reduce(src[8]);
+
+ ivec4 blendResult = ivec4(BLEND_NONE);
+
+ // Preprocess corners
+ // Pixel Tap Mapping: --|--|--|--|--
+ // --|--|07|08|--
+ // --|05|00|01|10
+ // --|04|03|02|11
+ // --|--|14|13|--
+ // Corner (1, 1)
+ if ( ((v[0] == v[1] && v[3] == v[2]) || (v[0] == v[3] && v[1] == v[2])) == false)
+ {
+ float dist_03_01 = DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + DistYCbCr(src[14], src[ 2]) + DistYCbCr(src[ 2], src[10]) + (4.0 * DistYCbCr(src[ 3], src[ 1]));
+ float dist_00_02 = DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[ 3], src[13]) + DistYCbCr(src[ 7], src[ 1]) + DistYCbCr(src[ 1], src[11]) + (4.0 * DistYCbCr(src[ 0], src[ 2]));
+ bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_03_01) < dist_00_02;
+ blendResult[2] = ((dist_03_01 < dist_00_02) && (v[0] != v[1]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
+ }
+
+ // Pixel Tap Mapping: --|--|--|--|--
+ // --|06|07|--|--
+ // 18|05|00|01|--
+ // 17|04|03|02|--
+ // --|15|14|--|--
+ // Corner (0, 1)
+ if ( ((v[5] == v[0] && v[4] == v[3]) || (v[5] == v[4] && v[0] == v[3])) == false)
+ {
+ float dist_04_00 = DistYCbCr(src[17], src[ 5]) + DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[15], src[ 3]) + DistYCbCr(src[ 3], src[ 1]) + (4.0 * DistYCbCr(src[ 4], src[ 0]));
+ float dist_05_03 = DistYCbCr(src[18], src[ 4]) + DistYCbCr(src[ 4], src[14]) + DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + (4.0 * DistYCbCr(src[ 5], src[ 3]));
+ bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_03) < dist_04_00;
+ blendResult[3] = ((dist_04_00 > dist_05_03) && (v[0] != v[5]) && (v[0] != v[3])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
+ }
+
+ // Pixel Tap Mapping: --|--|22|23|--
+ // --|06|07|08|09
+ // --|05|00|01|10
+ // --|--|03|02|--
+ // --|--|--|--|--
+ // Corner (1, 0)
+ if ( ((v[7] == v[8] && v[0] == v[1]) || (v[7] == v[0] && v[8] == v[1])) == false)
+ {
+ float dist_00_08 = DistYCbCr(src[ 5], src[ 7]) + DistYCbCr(src[ 7], src[23]) + DistYCbCr(src[ 3], src[ 1]) + DistYCbCr(src[ 1], src[ 9]) + (4.0 * DistYCbCr(src[ 0], src[ 8]));
+ float dist_07_01 = DistYCbCr(src[ 6], src[ 0]) + DistYCbCr(src[ 0], src[ 2]) + DistYCbCr(src[22], src[ 8]) + DistYCbCr(src[ 8], src[10]) + (4.0 * DistYCbCr(src[ 7], src[ 1]));
+ bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_07_01) < dist_00_08;
+ blendResult[1] = ((dist_00_08 > dist_07_01) && (v[0] != v[7]) && (v[0] != v[1])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
+ }
+
+ // Pixel Tap Mapping: --|21|22|--|--
+ // 19|06|07|08|--
+ // 18|05|00|01|--
+ // --|04|03|--|--
+ // --|--|--|--|--
+ // Corner (0, 0)
+ if ( ((v[6] == v[7] && v[5] == v[0]) || (v[6] == v[5] && v[7] == v[0])) == false)
+ {
+ float dist_05_07 = DistYCbCr(src[18], src[ 6]) + DistYCbCr(src[ 6], src[22]) + DistYCbCr(src[ 4], src[ 0]) + DistYCbCr(src[ 0], src[ 8]) + (4.0 * DistYCbCr(src[ 5], src[ 7]));
+ float dist_06_00 = DistYCbCr(src[19], src[ 5]) + DistYCbCr(src[ 5], src[ 3]) + DistYCbCr(src[21], src[ 7]) + DistYCbCr(src[ 7], src[ 1]) + (4.0 * DistYCbCr(src[ 6], src[ 0]));
+ bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_05_07) < dist_06_00;
+ blendResult[0] = ((dist_05_07 < dist_06_00) && (v[0] != v[5]) && (v[0] != v[7])) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
+ }
+
+ vec3 dst[16];
+ dst[ 0] = src[0];
+ dst[ 1] = src[0];
+ dst[ 2] = src[0];
+ dst[ 3] = src[0];
+ dst[ 4] = src[0];
+ dst[ 5] = src[0];
+ dst[ 6] = src[0];
+ dst[ 7] = src[0];
+ dst[ 8] = src[0];
+ dst[ 9] = src[0];
+ dst[10] = src[0];
+ dst[11] = src[0];
+ dst[12] = src[0];
+ dst[13] = src[0];
+ dst[14] = src[0];
+ dst[15] = src[0];
+
+ // Scale pixel
+ if (IsBlendingNeeded(blendResult) == true)
+ {
+ float dist_01_04 = DistYCbCr(src[1], src[4]);
+ float dist_03_08 = DistYCbCr(src[3], src[8]);
+ bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[4]) && (v[5] != v[4]);
+ bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[8]) && (v[7] != v[8]);
+ bool needBlend = (blendResult[2] != BLEND_NONE);
+ bool doLineBlend = ( blendResult[2] >= BLEND_DOMINANT ||
+ ((blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
+ (blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
+ (IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[0], src[2]) == false) ) == false );
+
+ vec3 blendPix = ( DistYCbCr(src[0], src[1]) <= DistYCbCr(src[0], src[3]) ) ? src[1] : src[3];
+ dst[ 2] = mix(dst[ 2], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
+ dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
+ dst[10] = mix(dst[10], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
+ dst[11] = mix(dst[11], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
+ dst[12] = mix(dst[12], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
+ dst[13] = mix(dst[13], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
+ dst[14] = mix(dst[14], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
+ dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
+
+ dist_01_04 = DistYCbCr(src[7], src[2]);
+ dist_03_08 = DistYCbCr(src[1], src[6]);
+ haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[2]) && (v[3] != v[2]);
+ haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[6]) && (v[5] != v[6]);
+ needBlend = (blendResult[1] != BLEND_NONE);
+ doLineBlend = ( blendResult[1] >= BLEND_DOMINANT ||
+ !((blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
+ (blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
+ (IsPixEqual(src[2], src[1]) && IsPixEqual(src[1], src[8]) && IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && !IsPixEqual(src[0], src[8])) ) );
+
+ blendPix = ( DistYCbCr(src[0], src[7]) <= DistYCbCr(src[0], src[1]) ) ? src[7] : src[1];
+ dst[ 1] = mix(dst[ 1], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
+ dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
+ dst[ 7] = mix(dst[ 7], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
+ dst[ 8] = mix(dst[ 8], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
+ dst[ 9] = mix(dst[ 9], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
+ dst[10] = mix(dst[10], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
+ dst[11] = mix(dst[11], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
+ dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
+
+ dist_01_04 = DistYCbCr(src[5], src[8]);
+ dist_03_08 = DistYCbCr(src[7], src[4]);
+ haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[8]) && (v[1] != v[8]);
+ haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[4]) && (v[3] != v[4]);
+ needBlend = (blendResult[0] != BLEND_NONE);
+ doLineBlend = ( blendResult[0] >= BLEND_DOMINANT ||
+ !((blendResult[3] != BLEND_NONE && !IsPixEqual(src[0], src[8])) ||
+ (blendResult[1] != BLEND_NONE && !IsPixEqual(src[0], src[4])) ||
+ (IsPixEqual(src[8], src[7]) && IsPixEqual(src[7], src[6]) && IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && !IsPixEqual(src[0], src[6])) ) );
+
+ blendPix = ( DistYCbCr(src[0], src[5]) <= DistYCbCr(src[0], src[7]) ) ? src[5] : src[7];
+ dst[ 0] = mix(dst[ 0], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
+ dst[15] = mix(dst[15], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
+ dst[ 4] = mix(dst[ 4], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
+ dst[ 5] = mix(dst[ 5], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
+ dst[ 6] = mix(dst[ 6], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
+ dst[ 7] = mix(dst[ 7], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
+ dst[ 8] = mix(dst[ 8], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
+ dst[ 9] = mix(dst[ 9], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
+
+
+ dist_01_04 = DistYCbCr(src[3], src[6]);
+ dist_03_08 = DistYCbCr(src[5], src[2]);
+ haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_01_04 <= dist_03_08) && (v[0] != v[6]) && (v[7] != v[6]);
+ haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_03_08 <= dist_01_04) && (v[0] != v[2]) && (v[1] != v[2]);
+ needBlend = (blendResult[3] != BLEND_NONE);
+ doLineBlend = ( blendResult[3] >= BLEND_DOMINANT ||
+ !((blendResult[2] != BLEND_NONE && !IsPixEqual(src[0], src[6])) ||
+ (blendResult[0] != BLEND_NONE && !IsPixEqual(src[0], src[2])) ||
+ (IsPixEqual(src[6], src[5]) && IsPixEqual(src[5], src[4]) && IsPixEqual(src[4], src[3]) && IsPixEqual(src[3], src[2]) && !IsPixEqual(src[0], src[4])) ) );
+
+ blendPix = ( DistYCbCr(src[0], src[3]) <= DistYCbCr(src[0], src[5]) ) ? src[3] : src[5];
+ dst[ 3] = mix(dst[ 3], blendPix, (needBlend && doLineBlend) ? ((haveShallowLine) ? ((haveSteepLine) ? 1.0/3.0 : 0.25) : ((haveSteepLine) ? 0.25 : 0.00)) : 0.00);
+ dst[12] = mix(dst[12], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.25 : 0.00);
+ dst[13] = mix(dst[13], blendPix, (needBlend && doLineBlend && haveSteepLine) ? 0.75 : 0.00);
+ dst[14] = mix(dst[14], blendPix, (needBlend) ? ((doLineBlend) ? ((haveSteepLine) ? 1.00 : ((haveShallowLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
+ dst[15] = mix(dst[15], blendPix, (needBlend) ? ((doLineBlend) ? 1.00 : 0.6848532563) : 0.00);
+ dst[ 4] = mix(dst[ 4], blendPix, (needBlend) ? ((doLineBlend) ? ((haveShallowLine) ? 1.00 : ((haveSteepLine) ? 0.75 : 0.50)) : 0.08677704501) : 0.00);
+ dst[ 5] = mix(dst[ 5], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.75 : 0.00);
+ dst[ 6] = mix(dst[ 6], blendPix, (needBlend && doLineBlend && haveShallowLine) ? 0.25 : 0.00);
+ }
+
+ vec3 res = mix( mix( mix( mix(dst[ 6], dst[ 7], step(0.25, f.x)), mix(dst[ 8], dst[ 9], step(0.75, f.x)), step(0.50, f.x)),
+ mix( mix(dst[ 5], dst[ 0], step(0.25, f.x)), mix(dst[ 1], dst[10], step(0.75, f.x)), step(0.50, f.x)), step(0.25, f.y)),
+ mix( mix( mix(dst[ 4], dst[ 3], step(0.25, f.x)), mix(dst[ 2], dst[11], step(0.75, f.x)), step(0.50, f.x)),
+ mix( mix(dst[15], dst[14], step(0.25, f.x)), mix(dst[13], dst[12], step(0.75, f.x)), step(0.50, f.x)), step(0.75, f.y)),
+ step(0.50, f.y));
+
+ return ivec4(res * vec3(63,63,63), 0);
+}
+
+
+void main()
+{
+ vec2 fTexcoord = vTexCoord.xy;
+
+ ivec4 pixel;// = ivec4(texelFetch(ScreenTex, ivec2(fTexcoord), 0));
+
+ ivec4 mbright = ivec4(texelFetch(ScreenTex, ivec2(256*3, int(fTexcoord.y)), 0));
+ int dispmode = mbright.b & 0x3;
+
+ if (dispmode == 1)
+ {
+ ivec4 val1;// = pixel;
+ //ivec4 val2 = ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(256,0), 0));
+ ivec4 val3 = ivec4(texelFetch(ScreenTex, ivec2(fTexcoord) + ivec2(512,0), 0));
+
+ int compmode = val3.a & 0xF;
+ int eva, evb, evy;
+
+ float xpos = val3.r + fract(fTexcoord.x);
+ float ypos = mod(fTexcoord.y, 192);
+ ivec4 _3dpix = Get3DPixel(vec2(xpos, ypos));
+
+ if (compmode == 4)
+ {
+ // 3D on top, blending
+
+ if (_3dpix.a > 0)
+ {
+ eva = (_3dpix.a & 0x1F) + 1;
+ if (eva == 32)
+ {
+ val1 = _3dpix;
+ }
+ else
+ {
+ evb = 32 - eva;
+
+ val1 = GetFiltered2DPixel(0);
+
+ val1 = ((_3dpix * eva) + (val1 * evb)) >> 5;
+ if (eva <= 16) val1 += ivec4(1,1,1,0);
+ val1 = min(val1, 0x3F);
+ }
+ }
+ else
+ val1 = GetFiltered2DPixel(1);
+ }
+ else if (compmode == 1)
+ {
+ // 3D on bottom, blending
+
+ if (_3dpix.a > 0)
+ {
+ eva = val3.g;
+ evb = val3.b;
+
+ val1 = GetFiltered2DPixel(0);
+
+ val1 = ((val1 * eva) + (_3dpix * evb)) >> 4;
+ val1 = min(val1, 0x3F);
+ }
+ else
+ val1 = GetFiltered2DPixel(1);
+ }
+ else if (compmode <= 3)
+ {
+ // 3D on top, normal/fade
+
+ if (_3dpix.a > 0)
+ {
+ evy = val3.g;
+
+ val1 = _3dpix;
+ if (compmode == 2) val1 += ((ivec4(0x3F,0x3F,0x3F,0) - val1) * evy) >> 4;
+ else if (compmode == 3) val1 -= (val1 * evy) >> 4;
+ }
+ else
+ val1 = GetFiltered2DPixel(1);
+ }
+ else
+ val1 = GetFiltered2DPixel(0);
+
+ pixel = val1;
+ }
+ else
+ {
+ pixel = GetFiltered2DPixel(0);
+ }
+
+ if (dispmode != 0)
+ {
+ int brightmode = mbright.g >> 6;
+ if (brightmode == 1)
+ {
+ // up
+ int evy = mbright.r & 0x1F;
+ if (evy > 16) evy = 16;
+
+ pixel += ((ivec4(0x3F,0x3F,0x3F,0) - pixel) * evy) >> 4;
+ }
+ else if (brightmode == 2)
+ {
+ // down
+ int evy = mbright.r & 0x1F;
+ if (evy > 16) evy = 16;
+
+ pixel -= (pixel * evy) >> 4;
+ }
+ }
+
+ pixel.rgb <<= 2;
+ pixel.rgb |= (pixel.rgb >> 6);
+
+ FragColor = vec4(vec3(pixel.bgr) / 255.0, 1.0);
+}
+)";
+
+
+
+
+
+
+#endif // GPU_OPENGL_SHADERS_H
diff --git a/src/NDS.cpp b/src/NDS.cpp
index a2ab6ce..22368ae 100644
--- a/src/NDS.cpp
+++ b/src/NDS.cpp
@@ -33,6 +33,9 @@
#include "AREngine.h"
#include "Platform.h"
+#include "DSi.h"
+#include "DSi_SPI_TSC.h"
+
namespace NDS
{
@@ -59,6 +62,8 @@ namespace NDS
//
// timings for GBA slot and wifi are set up at runtime
+int ConsoleType;
+
u8 ARM9MemTimings[0x40000][4];
u8 ARM7MemTimings[0x20000][4];
@@ -88,7 +93,8 @@ u32 CPUStop;
u8 ARM9BIOS[0x1000];
u8 ARM7BIOS[0x4000];
-u8 MainRAM[MAIN_RAM_SIZE];
+u8 MainRAM[0x1000000];
+u32 MainRAMMask;
u8 SharedWRAM[0x8000];
u8 WRAMCnt;
@@ -108,6 +114,7 @@ u8 ROMSeed1[2*8];
// IO shit
u32 IME[2];
u32 IE[2], IF[2];
+u32 IE2, IF2;
u8 PostFlag9;
u8 PostFlag7;
@@ -181,6 +188,8 @@ bool Init()
if (!RTC::Init()) return false;
if (!Wifi::Init()) return false;
+ if (!DSi::Init()) return false;
+
if (!AREngine::Init()) return false;
return true;
@@ -205,6 +214,8 @@ void DeInit()
RTC::DeInit();
Wifi::DeInit();
+ DSi::DeInit();
+
AREngine::DeInit();
}
@@ -238,7 +249,11 @@ void SetARM9RegionTimings(u32 addrstart, u32 addrend, int buswidth, int nonseq,
ARM9MemTimings[i][3] = S32;
}
- ARM9->UpdateRegionTimings(addrstart<<14, addrend<<14);
+ addrstart <<= 14;
+ addrend <<= 14;
+ if (!addrend) addrend = 0xFFFFFFFF;
+
+ ARM9->UpdateRegionTimings(addrstart, addrend);
}
void SetARM7RegionTimings(u32 addrstart, u32 addrend, int buswidth, int nonseq, int seq)
@@ -283,6 +298,8 @@ void InitTimings()
// TODO: +3c nonseq waitstate doesn't apply to DMA!
// but of course mainRAM always gets 8c nonseq waitstate
+ // TODO: DSi-specific timings!!
+
SetARM9RegionTimings(0x00000000, 0xFFFFFFFF, 32, 1 + 3, 1); // void
SetARM9RegionTimings(0xFFFF0000, 0xFFFFFFFF, 32, 1 + 3, 1); // BIOS
@@ -308,6 +325,12 @@ void InitTimings()
void SetupDirectBoot()
{
+ if (ConsoleType == 1)
+ {
+ printf("!! DIRECT BOOT NOT SUPPORTED IN DSI MODE\n");
+ return;
+ }
+
u32 bootparams[8];
memcpy(bootparams, &NDSCart::CartROM[0x20], 8*4);
@@ -416,7 +439,13 @@ void Reset()
RunningGame = false;
LastSysClockCycles = 0;
- f = Platform::OpenLocalFile("bios9.bin", "rb");
+ memset(ARM9BIOS, 0, 0x1000);
+ memset(ARM7BIOS, 0, 0x4000);
+
+ // DS BIOSes are always loaded, even in DSi mode
+ // we need them for DS-compatible mode
+
+ f = Platform::OpenLocalFile(Config::BIOS9Path, "rb");
if (!f)
{
printf("ARM9 BIOS not found\n");
@@ -433,7 +462,7 @@ void Reset()
fclose(f);
}
- f = Platform::OpenLocalFile("bios7.bin", "rb");
+ f = Platform::OpenLocalFile(Config::BIOS7Path, "rb");
if (!f)
{
printf("ARM7 BIOS not found\n");
@@ -450,8 +479,19 @@ void Reset()
fclose(f);
}
- // TODO for later: configure this when emulating a DSi
- ARM9ClockShift = 1;
+ if (ConsoleType == 1)
+ {
+ DSi::LoadBIOS();
+ DSi::LoadNAND();
+
+ ARM9ClockShift = 2;
+ MainRAMMask = 0xFFFFFF;
+ }
+ else
+ {
+ ARM9ClockShift = 1;
+ MainRAMMask = 0x3FFFFF;
+ }
ARM9Timestamp = 0; ARM9Target = 0;
ARM7Timestamp = 0; ARM7Target = 0;
@@ -459,14 +499,14 @@ void Reset()
InitTimings();
- memset(MainRAM, 0, MAIN_RAM_SIZE);
+ memset(MainRAM, 0, 0x1000000);
memset(SharedWRAM, 0, 0x8000);
memset(ARM7WRAM, 0, 0x10000);
MapSharedWRAM(0);
- ExMemCnt[0] = 0;
- ExMemCnt[1] = 0;
+ ExMemCnt[0] = 0x4000;
+ ExMemCnt[1] = 0x4000;
memset(ROMSeed0, 0, 2*8);
memset(ROMSeed1, 0, 2*8);
SetGBASlotTimings();
@@ -477,6 +517,8 @@ void Reset()
IME[1] = 0;
IE[1] = 0;
IF[1] = 0;
+ IE2 = 0;
+ IF2 = 0;
PostFlag9 = 0x00;
PostFlag7 = 0x00;
@@ -527,6 +569,12 @@ void Reset()
RTC::Reset();
Wifi::Reset();
+ if (ConsoleType == 1)
+ {
+ DSi::Reset();
+ KeyInput &= ~(1 << (16+6));
+ }
+
AREngine::Reset();
}
@@ -587,7 +635,7 @@ bool DoSavestate_Scheduler(Savestate* file)
}
if (funcid == -1)
{
- printf("savestate: VERY BAD!!!!! FUNCTION POINTER FOR EVENT %d NOT IN HACKY LIST. CANNOT SAVE. SMACK STAPLEBUTTER.\n", i);
+ printf("savestate: VERY BAD!!!!! FUNCTION POINTER FOR EVENT %d NOT IN HACKY LIST. CANNOT SAVE. SMACK ARISOTURA.\n", i);
return false;
}
}
@@ -635,6 +683,11 @@ bool DoSavestate(Savestate* file)
{
file->Section("NDSG");
+ // TODO:
+ // * do something for bool's (sizeof=1)
+ // * do something for 'loading DSi-mode savestate in DS mode' and vice-versa
+ // * add IE2/IF2 there
+
file->VarArray(MainRAM, 0x400000);
file->VarArray(SharedWRAM, 0x8000);
file->VarArray(ARM7WRAM, 0x10000);
@@ -737,6 +790,11 @@ bool DoSavestate(Savestate* file)
return true;
}
+void SetConsoleType(int type)
+{
+ ConsoleType = type;
+}
+
bool LoadROM(const char* path, const char* sram, bool direct)
{
if (NDSCart::LoadROM(path, sram, direct))
@@ -848,6 +906,7 @@ u32 RunFrame()
if (!(CPUStop & 0x80000000)) DMAs[1]->Run();
if (!(CPUStop & 0x80000000)) DMAs[2]->Run();
if (!(CPUStop & 0x80000000)) DMAs[3]->Run();
+ if (ConsoleType == 1) DSi::RunNDMAs(0);
}
else
{
@@ -870,6 +929,7 @@ u32 RunFrame()
DMAs[5]->Run();
DMAs[6]->Run();
DMAs[7]->Run();
+ if (ConsoleType == 1) DSi::RunNDMAs(1);
}
else
{
@@ -951,24 +1011,30 @@ void CancelEvent(u32 id)
}
-void PressKey(u32 key)
-{
- KeyInput &= ~(1 << key);
-}
-
-void ReleaseKey(u32 key)
-{
- KeyInput |= (1 << key);
-}
-
void TouchScreen(u16 x, u16 y)
{
- SPI_TSC::SetTouchCoords(x, y);
+ if (ConsoleType == 1)
+ {
+ DSi_SPI_TSC::SetTouchCoords(x, y);
+ }
+ else
+ {
+ SPI_TSC::SetTouchCoords(x, y);
+ KeyInput &= ~(1 << (16+6));
+ }
}
void ReleaseScreen()
{
- SPI_TSC::SetTouchCoords(0x000, 0xFFF);
+ if (ConsoleType == 1)
+ {
+ DSi_SPI_TSC::SetTouchCoords(0x000, 0xFFF);
+ }
+ else
+ {
+ SPI_TSC::SetTouchCoords(0x000, 0xFFF);
+ KeyInput |= (1 << (16+6));
+ }
}
@@ -981,6 +1047,12 @@ void SetKeyMask(u32 mask)
KeyInput |= key_lo | (key_hi << 16);
}
+bool IsLidClosed()
+{
+ if (KeyInput & (1<<23)) return true;
+ return false;
+}
+
void SetLidClosed(bool closed)
{
if (closed)
@@ -1095,6 +1167,8 @@ void UpdateIRQ(u32 cpu)
if (IME[cpu] & 0x1)
{
arm->IRQ = IE[cpu] & IF[cpu];
+ if ((ConsoleType == 1) && cpu)
+ arm->IRQ |= (IE2 & IF2);
}
else
{
@@ -1114,6 +1188,18 @@ void ClearIRQ(u32 cpu, u32 irq)
UpdateIRQ(cpu);
}
+void SetIRQ2(u32 irq)
+{
+ IF2 |= (1 << irq);
+ UpdateIRQ(1);
+}
+
+void ClearIRQ2(u32 irq)
+{
+ IF2 &= ~(1 << irq);
+ UpdateIRQ(1);
+}
+
bool HaltInterrupted(u32 cpu)
{
if (cpu == 0)
@@ -1161,6 +1247,7 @@ void GXFIFOStall()
DMAs[1]->StallIfRunning();
DMAs[2]->StallIfRunning();
DMAs[3]->StallIfRunning();
+ if (ConsoleType == 1) DSi::StallNDMAs();
}
}
@@ -1298,6 +1385,7 @@ void NocashPrint(u32 ncpu, u32 addr)
void MonitorARM9Jump(u32 addr)
{
// checkme: can the entrypoint addr be THUMB?
+ // also TODO: make it work in DSi mode
if ((!RunningGame) && NDSCart::CartROM)
{
@@ -1374,6 +1462,29 @@ void RunTimers(u32 cpu)
+// matching NDMA modes for DSi
+const u32 NDMAModes[] =
+{
+ // ARM9
+
+ 0x10, // immediate
+ 0x06, // VBlank
+ 0x07, // HBlank
+ 0x08, // scanline start
+ 0x09, // mainmem FIFO
+ 0x04, // DS cart slot
+ 0xFF, // GBA cart slot
+ 0x0A, // GX FIFO
+ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
+
+ // ARM7
+
+ 0x30, // immediate
+ 0x26, // VBlank
+ 0x24, // DS cart slot
+ 0xFF, // wifi / GBA cart slot (TODO)
+};
+
bool DMAsInMode(u32 cpu, u32 mode)
{
cpu <<= 2;
@@ -1381,6 +1492,13 @@ bool DMAsInMode(u32 cpu, u32 mode)
if (DMAs[cpu+1]->IsInMode(mode)) return true;
if (DMAs[cpu+2]->IsInMode(mode)) return true;
if (DMAs[cpu+3]->IsInMode(mode)) return true;
+
+ if (ConsoleType == 1)
+ {
+ cpu >>= 2;
+ return DSi::NDMAsInMode(cpu, NDMAModes[mode]);
+ }
+
return false;
}
@@ -1391,6 +1509,10 @@ bool DMAsRunning(u32 cpu)
if (DMAs[cpu+1]->IsRunning()) return true;
if (DMAs[cpu+2]->IsRunning()) return true;
if (DMAs[cpu+3]->IsRunning()) return true;
+ if (ConsoleType == 1)
+ {
+ if (DSi::NDMAsRunning(cpu>>2)) return true;
+ }
return false;
}
@@ -1401,6 +1523,12 @@ void CheckDMAs(u32 cpu, u32 mode)
DMAs[cpu+1]->StartIfNeeded(mode);
DMAs[cpu+2]->StartIfNeeded(mode);
DMAs[cpu+3]->StartIfNeeded(mode);
+
+ if (ConsoleType == 1)
+ {
+ cpu >>= 2;
+ DSi::CheckNDMAs(cpu, NDMAModes[mode]);
+ }
}
void StopDMAs(u32 cpu, u32 mode)
@@ -1410,6 +1538,12 @@ void StopDMAs(u32 cpu, u32 mode)
DMAs[cpu+1]->StopIfNeeded(mode);
DMAs[cpu+2]->StopIfNeeded(mode);
DMAs[cpu+3]->StopIfNeeded(mode);
+
+ if (ConsoleType == 1)
+ {
+ cpu >>= 2;
+ DSi::StopNDMAs(cpu, NDMAModes[mode]);
+ }
}
@@ -1602,12 +1736,12 @@ void debug(u32 param)
printf("ARM7 PC=%08X LR=%08X %08X\n", ARM7->R[15], ARM7->R[14], ARM7->R_IRQ[1]);
printf("ARM9 IME=%08X IE=%08X IF=%08X\n", IME[0], IE[0], IF[0]);
- printf("ARM7 IME=%08X IE=%08X IF=%08X\n", IME[1], IE[1], IF[1]);
+ printf("ARM7 IME=%08X IE=%08X IF=%08X IE2=%04X IF2=%04X\n", IME[1], IE[1], IF[1], IE2, IF2);
//for (int i = 0; i < 9; i++)
// printf("VRAM %c: %02X\n", 'A'+i, GPU::VRAMCNT[i]);
- FILE*
+ /*FILE*
shit = fopen("debug/party.bin", "wb");
fwrite(ARM9->ITCM, 0x8000, 1, shit);
for (u32 i = 0x02000000; i < 0x02400000; i+=4)
@@ -1620,6 +1754,21 @@ void debug(u32 param)
u32 val = ARM7Read32(i);
fwrite(&val, 4, 1, shit);
}
+ fclose(shit);*/
+ FILE*
+ /*shit = fopen("debug/dump9.bin", "wb");
+ for (u32 i = 0x02000000; i < 0x04000000; i+=4)
+ {
+ u32 val = DSi::ARM9Read32(i);
+ fwrite(&val, 4, 1, shit);
+ }
+ fclose(shit);*/
+ shit = fopen("debug/dump7_2.bin", "wb");
+ for (u32 i = 0x02000000; i < 0x04000000; i+=4)
+ {
+ u32 val = DSi::ARM7Read32(i);
+ fwrite(&val, 4, 1, shit);
+ }
fclose(shit);
}
@@ -1635,7 +1784,7 @@ u8 ARM9Read8(u32 addr)
switch (addr & 0xFF000000)
{
case 0x02000000:
- return *(u8*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)];
+ return *(u8*)&MainRAM[addr & MainRAMMask];
case 0x03000000:
if (SWRAM_ARM9)
@@ -1700,7 +1849,7 @@ u16 ARM9Read16(u32 addr)
switch (addr & 0xFF000000)
{
case 0x02000000:
- return *(u16*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)];
+ return *(u16*)&MainRAM[addr & MainRAMMask];
case 0x03000000:
if (SWRAM_ARM9)
@@ -1765,7 +1914,7 @@ u32 ARM9Read32(u32 addr)
switch (addr & 0xFF000000)
{
case 0x02000000:
- return *(u32*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)];
+ return *(u32*)&MainRAM[addr & MainRAMMask];
case 0x03000000:
if (SWRAM_ARM9)
@@ -1825,7 +1974,7 @@ void ARM9Write8(u32 addr, u8 val)
switch (addr & 0xFF000000)
{
case 0x02000000:
- *(u8*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)] = val;
+ *(u8*)&MainRAM[addr & MainRAMMask] = val;
return;
case 0x03000000:
@@ -1875,7 +2024,7 @@ void ARM9Write16(u32 addr, u16 val)
switch (addr & 0xFF000000)
{
case 0x02000000:
- *(u16*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)] = val;
+ *(u16*)&MainRAM[addr & MainRAMMask] = val;
return;
case 0x03000000:
@@ -1941,7 +2090,7 @@ void ARM9Write32(u32 addr, u32 val)
switch (addr & 0xFF000000)
{
case 0x02000000:
- *(u32*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)] = val;
+ *(u32*)&MainRAM[addr & MainRAMMask] = val;
return ;
case 0x03000000:
@@ -2009,7 +2158,7 @@ bool ARM9GetMemRegion(u32 addr, bool write, MemRegion* region)
{
case 0x02000000:
region->Mem = MainRAM;
- region->Mask = MAIN_RAM_SIZE-1;
+ region->Mask = MainRAMMask;
return true;
case 0x03000000:
@@ -2039,7 +2188,8 @@ u8 ARM7Read8(u32 addr)
{
if (addr < 0x00004000)
{
- if (ARM7->R[15] >= 0x4000)
+ // TODO: check the boundary? is it 4000 or higher on regular DS?
+ if (ARM7->R[15] >= 0x00004000)
return 0xFF;
if (addr < ARM7BIOSProt && ARM7->R[15] >= ARM7BIOSProt)
return 0xFF;
@@ -2051,7 +2201,7 @@ u8 ARM7Read8(u32 addr)
{
case 0x02000000:
case 0x02800000:
- return *(u8*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)];
+ return *(u8*)&MainRAM[addr & MainRAMMask];
case 0x03000000:
if (SWRAM_ARM7)
@@ -2099,7 +2249,7 @@ u16 ARM7Read16(u32 addr)
{
if (addr < 0x00004000)
{
- if (ARM7->R[15] >= 0x4000)
+ if (ARM7->R[15] >= 0x00004000)
return 0xFFFF;
if (addr < ARM7BIOSProt && ARM7->R[15] >= ARM7BIOSProt)
return 0xFFFF;
@@ -2111,7 +2261,7 @@ u16 ARM7Read16(u32 addr)
{
case 0x02000000:
case 0x02800000:
- return *(u16*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)];
+ return *(u16*)&MainRAM[addr & MainRAMMask];
case 0x03000000:
if (SWRAM_ARM7)
@@ -2166,7 +2316,7 @@ u32 ARM7Read32(u32 addr)
{
if (addr < 0x00004000)
{
- if (ARM7->R[15] >= 0x4000)
+ if (ARM7->R[15] >= 0x00004000)
return 0xFFFFFFFF;
if (addr < ARM7BIOSProt && ARM7->R[15] >= ARM7BIOSProt)
return 0xFFFFFFFF;
@@ -2178,7 +2328,7 @@ u32 ARM7Read32(u32 addr)
{
case 0x02000000:
case 0x02800000:
- return *(u32*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)];
+ return *(u32*)&MainRAM[addr & MainRAMMask];
case 0x03000000:
if (SWRAM_ARM7)
@@ -2235,7 +2385,7 @@ void ARM7Write8(u32 addr, u8 val)
{
case 0x02000000:
case 0x02800000:
- *(u8*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)] = val;
+ *(u8*)&MainRAM[addr & MainRAMMask] = val;
return;
case 0x03000000:
@@ -2294,7 +2444,7 @@ void ARM7Write16(u32 addr, u16 val)
{
case 0x02000000:
case 0x02800000:
- *(u16*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)] = val;
+ *(u16*)&MainRAM[addr & MainRAMMask] = val;
return;
case 0x03000000:
@@ -2363,7 +2513,7 @@ void ARM7Write32(u32 addr, u32 val)
{
case 0x02000000:
case 0x02800000:
- *(u32*)&MainRAM[addr & (MAIN_RAM_SIZE - 1)] = val;
+ *(u32*)&MainRAM[addr & MainRAMMask] = val;
return;
case 0x03000000:
@@ -2435,7 +2585,7 @@ bool ARM7GetMemRegion(u32 addr, bool write, MemRegion* region)
case 0x02000000:
case 0x02800000:
region->Mem = MainRAM;
- region->Mask = MAIN_RAM_SIZE-1;
+ region->Mask = MainRAMMask;
return true;
case 0x03000000:
diff --git a/src/NDS.h b/src/NDS.h
index c7b455e..9c5fe3d 100644
--- a/src/NDS.h
+++ b/src/NDS.h
@@ -42,6 +42,11 @@ enum
Event_Div,
Event_Sqrt,
+ // DSi
+ Event_DSi_SDMMCTransfer,
+ Event_DSi_SDIOTransfer,
+ Event_DSi_NWifi,
+
Event_MAX
};
@@ -74,12 +79,42 @@ enum
IRQ_IPCSync,
IRQ_IPCSendDone,
IRQ_IPCRecv,
- IRQ_CartSendDone,
- IRQ_CartIREQMC,
+ IRQ_CartSendDone, // TODO: less misleading name
+ IRQ_CartIREQMC, // IRQ triggered by game cart (example: Pokémon Typing Adventure, BT controller)
IRQ_GXFIFO,
IRQ_LidOpen,
IRQ_SPI,
- IRQ_Wifi
+ IRQ_Wifi,
+
+ // DSi IRQs
+ IRQ_DSi_DSP = 24,
+ IRQ_DSi_Camera,
+ IRQ_DSi_Unk26,
+ IRQ_DSi_Unk27,
+ IRQ_DSi_NDMA0,
+ IRQ_DSi_NDMA1,
+ IRQ_DSi_NDMA2,
+ IRQ_DSi_NDMA3,
+};
+
+enum
+{
+ // DSi ARM7-side IE2/IF2
+ IRQ2_DSi_GPIO18_0 = 0,
+ IRQ2_DSi_GPIO18_1,
+ IRQ2_DSi_GPIO18_2,
+ IRQ2_DSi_Unused3,
+ IRQ2_DSi_GPIO33_0,
+ IRQ2_DSi_Headphone,
+ IRQ2_DSi_PowerButton,
+ IRQ2_DSi_GPIO33_3, // "sound enable input"
+ IRQ2_DSi_SDMMC,
+ IRQ2_DSi_SD_Data1,
+ IRQ2_DSi_SDIO,
+ IRQ2_DSi_SDIO_Data1,
+ IRQ2_DSi_AES,
+ IRQ2_DSi_I2C,
+ IRQ2_DSi_MicExt
};
typedef struct
@@ -98,6 +133,8 @@ typedef struct
} MemRegion;
+extern int ConsoleType;
+
extern u8 ARM9MemTimings[0x40000][4];
extern u8 ARM7MemTimings[0x20000][4];
@@ -105,12 +142,15 @@ extern u64 ARM9Timestamp, ARM9Target;
extern u64 ARM7Timestamp, ARM7Target;
extern u32 ARM9ClockShift;
-// hax
extern u32 IME[2];
extern u32 IE[2];
extern u32 IF[2];
+extern u32 IE2;
+extern u32 IF2;
extern Timer Timers[8];
+extern u32 CPUStop;
+
extern u16 PowerControl9;
extern u16 ExMemCnt[2];
@@ -119,10 +159,12 @@ extern u8 ROMSeed1[2*8];
extern u8 ARM9BIOS[0x1000];
extern u8 ARM7BIOS[0x4000];
+extern u16 ARM7BIOSProt;
-#define MAIN_RAM_SIZE 0x400000
+extern u8 MainRAM[0x1000000];
+extern u32 MainRAMMask;
-extern u8 MainRAM[MAIN_RAM_SIZE];
+extern u32 KeyInput;
bool Init();
void DeInit();
@@ -134,6 +176,9 @@ bool DoSavestate(Savestate* file);
void SetARM9RegionTimings(u32 addrstart, u32 addrend, int buswidth, int nonseq, int seq);
void SetARM7RegionTimings(u32 addrstart, u32 addrend, int buswidth, int nonseq, int seq);
+// 0=DS 1=DSi
+void SetConsoleType(int type);
+
bool LoadROM(const char* path, const char* sram, bool direct);
bool LoadGBAROM(const char* path, const char* sram);
void LoadBIOS();
@@ -142,13 +187,12 @@ void RelocateSave(const char* path, bool write);
u32 RunFrame();
-void PressKey(u32 key);
-void ReleaseKey(u32 key);
void TouchScreen(u16 x, u16 y);
void ReleaseScreen();
void SetKeyMask(u32 mask);
+bool IsLidClosed();
void SetLidClosed(bool closed);
void MicInputFrame(s16* data, int samples);
@@ -162,8 +206,11 @@ void Halt();
void MapSharedWRAM(u8 val);
+void UpdateIRQ(u32 cpu);
void SetIRQ(u32 cpu, u32 irq);
void ClearIRQ(u32 cpu, u32 irq);
+void SetIRQ2(u32 irq);
+void ClearIRQ2(u32 irq);
bool HaltInterrupted(u32 cpu);
void StopCPU(u32 cpu, u32 mask);
void ResumeCPU(u32 cpu, u32 mask);
diff --git a/src/NDSCart.cpp b/src/NDSCart.cpp
index 5a2a0d0..a5e0f41 100644
--- a/src/NDSCart.cpp
+++ b/src/NDSCart.cpp
@@ -19,10 +19,13 @@
#include <stdio.h>
#include <string.h>
#include "NDS.h"
+#include "DSi.h"
#include "NDSCart.h"
#include "ARM.h"
#include "CRC32.h"
+#include "DSi_AES.h"
#include "Platform.h"
+#include "ROMList.h"
namespace NDSCart_SRAM
@@ -473,6 +476,7 @@ u32 CartROMSize;
u32 CartCRC;
u32 CartID;
bool CartIsHomebrew;
+bool CartIsDSi;
u32 CmdEncMode;
u32 DataEncMode;
@@ -555,9 +559,13 @@ void Key1_ApplyKeycode(u32* keycode, u32 mod)
}
}
-void Key1_InitKeycode(u32 idcode, u32 level, u32 mod)
+void Key1_InitKeycode(bool dsi, u32 idcode, u32 level, u32 mod)
{
- memcpy(Key1_KeyBuf, &NDS::ARM7BIOS[0x30], 0x1048); // hax
+ // TODO: source the key data from different possible places
+ if (dsi && NDS::ConsoleType==1)
+ memcpy(Key1_KeyBuf, &DSi::ARM7iBIOS[0xC6D0], 0x1048); // hax
+ else
+ memcpy(Key1_KeyBuf, &NDS::ARM7BIOS[0x30], 0x1048); // hax
u32 keycode[3] = {idcode, idcode>>1, idcode<<1};
if (level >= 1) Key1_ApplyKeycode(keycode, mod);
@@ -592,6 +600,15 @@ void Key2_Encrypt(u8* data, u32 len)
}
+void ApplyModcrypt(u32 addr, u32 len, u8* iv)
+{return;
+ u8 key[16];
+
+ DSi_AES::GetModcryptKey(&CartROM[0], key);
+ DSi_AES::ApplyModcrypt(&CartROM[addr], len, key, iv);
+}
+
+
bool Init()
{
if (!NDSCart_SRAM::Init()) return false;
@@ -610,32 +627,19 @@ void DeInit()
void Reset()
{
- SPICnt = 0;
- ROMCnt = 0;
-
- memset(ROMCommand, 0, 8);
- ROMDataOut = 0;
-
- Key2_X = 0;
- Key2_Y = 0;
-
- memset(DataOut, 0, 0x4000);
- DataOutPos = 0;
- DataOutLen = 0;
-
CartInserted = false;
if (CartROM) delete[] CartROM;
CartROM = NULL;
CartROMSize = 0;
CartID = 0;
CartIsHomebrew = false;
+ CartIsDSi = false;
ROMCommandHandler = NULL;
- CmdEncMode = 0;
- DataEncMode = 0;
-
NDSCart_SRAM::Reset();
+
+ ResetCart();
}
void DoSavestate(Savestate* file)
@@ -808,34 +812,21 @@ void ApplyDLDIPatch()
}
-bool ReadROMParams(u32 gamecode, u32* params)
+bool ReadROMParams(u32 gamecode, ROMListEntry* params)
{
- // format for romlist.bin:
- // [gamecode] [ROM size] [save type] [reserved]
- // list must be sorted by gamecode
-
- FILE* f = Platform::OpenDataFile("romlist.bin");
- if (!f) return false;
-
- fseek(f, 0, SEEK_END);
- u32 len = (u32)ftell(f);
- u32 maxlen = len;
- len >>= 4; // 16 bytes per entry
+ u32 len = sizeof(ROMList) / sizeof(ROMListEntry);
u32 offset = 0;
u32 chk_size = len >> 1;
for (;;)
{
u32 key = 0;
- fseek(f, offset + (chk_size << 4), SEEK_SET);
- fread(&key, 4, 1, f);
-
- printf("chk_size=%d, key=%08X, wanted=%08X, offset=%08X\n", chk_size, key, gamecode, offset);
+ ROMListEntry* curentry = &ROMList[offset + chk_size];
+ key = curentry->GameCode;
if (key == gamecode)
{
- fread(params, 4, 3, f);
- fclose(f);
+ memcpy(params, curentry, sizeof(ROMListEntry));
return true;
}
else
@@ -843,22 +834,20 @@ bool ReadROMParams(u32 gamecode, u32* params)
if (key < gamecode)
{
if (chk_size == 0)
- offset += 0x10;
+ offset++;
else
- offset += (chk_size << 4);
+ offset += chk_size;
}
else if (chk_size == 0)
{
- fclose(f);
return false;
}
chk_size >>= 1;
}
- if (offset >= maxlen)
+ if (offset >= len)
{
- fclose(f);
return false;
}
}
@@ -867,15 +856,20 @@ bool ReadROMParams(u32 gamecode, u32* params)
void DecryptSecureArea(u8* out)
{
+ // TODO: source decryption data from different possible sources
+ // * original DS-mode ARM7 BIOS has the key data at 0x30
+ // * .srl ROMs (VC dumps) have encrypted secure areas but have precomputed
+ // decryption data at 0x1000 (and at the beginning of the DSi region if any)
+
u32 gamecode = *(u32*)&CartROM[0x0C];
u32 arm9base = *(u32*)&CartROM[0x20];
memcpy(out, &CartROM[arm9base], 0x800);
- Key1_InitKeycode(gamecode, 2, 2);
+ Key1_InitKeycode(false, gamecode, 2, 2);
Key1_Decrypt((u32*)&out[0]);
- Key1_InitKeycode(gamecode, 3, 2);
+ Key1_InitKeycode(false, gamecode, 3, 2);
for (u32 i = 0; i < 0x800; i += 8)
Key1_Decrypt((u32*)&out[i]);
@@ -898,6 +892,7 @@ bool LoadROM(const char* path, const char* sram, bool direct)
{
// TODO: streaming mode? for really big ROMs or systems with limited RAM
// for now we're lazy
+ // also TODO: validate what we're loading!!
FILE* f = Platform::OpenFile(path, "rb");
if (!f)
@@ -919,6 +914,11 @@ bool LoadROM(const char* path, const char* sram, bool direct)
fread(&gamecode, 4, 1, f);
printf("Game code: %c%c%c%c\n", gamecode&0xFF, (gamecode>>8)&0xFF, (gamecode>>16)&0xFF, gamecode>>24);
+ u8 unitcode;
+ fseek(f, 0x12, SEEK_SET);
+ fread(&unitcode, 1, 1, f);
+ CartIsDSi = (unitcode & 0x02) != 0;
+
CartROM = new u8[CartROMSize];
memset(CartROM, 0, CartROMSize);
fseek(f, 0, SEEK_SET);
@@ -930,22 +930,23 @@ bool LoadROM(const char* path, const char* sram, bool direct)
CartCRC = CRC32(CartROM, CartROMSize);
printf("ROM CRC32: %08X\n", CartCRC);
- u32 romparams[3];
- if (!ReadROMParams(gamecode, romparams))
+ ROMListEntry romparams;
+ if (!ReadROMParams(gamecode, &romparams))
{
// set defaults
printf("ROM entry not found\n");
- romparams[0] = CartROMSize;
+ romparams.GameCode = gamecode;
+ romparams.ROMSize = CartROMSize;
if (*(u32*)&CartROM[0x20] < 0x4000)
- romparams[1] = 0; // no saveRAM for homebrew
+ romparams.SaveMemType = 0; // no saveRAM for homebrew
else
- romparams[1] = 2; // assume EEPROM 64k (TODO FIXME)
+ romparams.SaveMemType = 2; // assume EEPROM 64k (TODO FIXME)
}
else
- printf("ROM entry: %08X %08X %08X\n", romparams[0], romparams[1], romparams[2]);
+ printf("ROM entry: %08X %08X\n", romparams.ROMSize, romparams.SaveMemType);
- if (romparams[0] != len) printf("!! bad ROM size %d (expected %d) rounded to %d\n", len, romparams[0], CartROMSize);
+ if (romparams.ROMSize != len) printf("!! bad ROM size %d (expected %d) rounded to %d\n", len, romparams.ROMSize, CartROMSize);
// generate a ROM ID
// note: most games don't check the actual value
@@ -957,9 +958,12 @@ bool LoadROM(const char* path, const char* sram, bool direct)
else
CartID |= (0x100 - (CartROMSize >> 28)) << 8;
- if (romparams[1] == 8)
+ if (romparams.SaveMemType == 8)
CartID |= 0x08000000; // NAND flag
+ if (CartIsDSi)
+ CartID |= 0x40000000;
+
printf("Cart ID: %08X\n", CartID);
u32 arm9base = *(u32*)&CartROM[0x20];
@@ -975,11 +979,11 @@ bool LoadROM(const char* path, const char* sram, bool direct)
strncpy((char*)&CartROM[arm9base], "encryObj", 8);
- Key1_InitKeycode(gamecode, 3, 2);
+ Key1_InitKeycode(false, gamecode, 3, 2);
for (u32 i = 0; i < 0x800; i += 8)
Key1_Encrypt((u32*)&CartROM[arm9base + i]);
- Key1_InitKeycode(gamecode, 2, 2);
+ Key1_InitKeycode(false, gamecode, 2, 2);
Key1_Encrypt((u32*)&CartROM[arm9base]);
}
}
@@ -1007,12 +1011,11 @@ bool LoadROM(const char* path, const char* sram, bool direct)
ROMCommandHandler = ROMCommand_Retail;
// encryption
- Key1_InitKeycode(gamecode, 2, 2);
-
+ Key1_InitKeycode(false, gamecode, 2, 2);
// save
printf("Save file: %s\n", sram);
- NDSCart_SRAM::LoadSave(sram, romparams[1]);
+ NDSCart_SRAM::LoadSave(sram, romparams.SaveMemType);
return true;
}
@@ -1023,6 +1026,27 @@ void RelocateSave(const char* path, bool write)
NDSCart_SRAM::RelocateSave(path, write);
}
+void ResetCart()
+{
+ // CHECKME: what if there is a transfer in progress?
+
+ SPICnt = 0;
+ ROMCnt = 0;
+
+ memset(ROMCommand, 0, 8);
+ ROMDataOut = 0;
+
+ Key2_X = 0;
+ Key2_Y = 0;
+
+ memset(DataOut, 0, 0x4000);
+ DataOutPos = 0;
+ DataOutLen = 0;
+
+ CmdEncMode = 0;
+ DataEncMode = 0;
+}
+
void ReadROM(u32 addr, u32 len, u32 offset)
{
if (!CartInserted) return;
@@ -1197,7 +1221,7 @@ void WriteROMCnt(u32 val)
// handle KEY1 encryption as needed.
// KEY2 encryption is implemented in hardware and doesn't need to be handled.
u8 cmd[8];
- if (CmdEncMode == 1)
+ if (CmdEncMode == 1 || CmdEncMode == 11)
{
*(u32*)&cmd[0] = ByteSwap(*(u32*)&ROMCommand[4]);
*(u32*)&cmd[4] = ByteSwap(*(u32*)&ROMCommand[0]);
@@ -1243,11 +1267,23 @@ void WriteROMCnt(u32 val)
break;
case 0x3C:
- if (CartInserted) CmdEncMode = 1;
+ if (CartInserted)
+ {
+ CmdEncMode = 1;
+ Key1_InitKeycode(false, *(u32*)&CartROM[0xC], 2, 2);
+ }
+ break;
+
+ case 0x3D:
+ if (CartInserted && CartIsDSi)
+ {
+ CmdEncMode = 11;
+ Key1_InitKeycode(true, *(u32*)&CartROM[0xC], 1, 2);
+ }
break;
default:
- if (CmdEncMode == 1)
+ if (CmdEncMode == 1 || CmdEncMode == 11)
{
switch (cmd[0] & 0xF0)
{
@@ -1263,6 +1299,12 @@ void WriteROMCnt(u32 val)
case 0x20:
{
u32 addr = (cmd[2] & 0xF0) << 8;
+ if (CmdEncMode == 11)
+ {
+ u32 arm9i_base = *(u32*)&CartROM[0x1C0];
+ addr -= 0x4000;
+ addr += arm9i_base;
+ }
ReadROM(addr, 0x1000, 0);
}
break;
diff --git a/src/NDSCart.h b/src/NDSCart.h
index f19aea1..adc821f 100644
--- a/src/NDSCart.h
+++ b/src/NDSCart.h
@@ -48,6 +48,8 @@ void DecryptSecureArea(u8* out);
bool LoadROM(const char* path, const char* sram, bool direct);
void RelocateSave(const char* path, bool write);
+void ResetCart();
+
void WriteROMCnt(u32 val);
u32 ReadROMData();
diff --git a/src/OpenGLSupport.cpp b/src/OpenGLSupport.cpp
index f91af9b..27b1480 100644
--- a/src/OpenGLSupport.cpp
+++ b/src/OpenGLSupport.cpp
@@ -19,18 +19,20 @@
#include "OpenGLSupport.h"
+namespace OpenGL
+{
DO_PROCLIST(DECLPROC);
-bool OpenGL_Init()
+bool Init()
{
DO_PROCLIST(LOADPROC);
return true;
}
-bool OpenGL_BuildShaderProgram(const char* vs, const char* fs, GLuint* ids, const char* name)
+bool BuildShaderProgram(const char* vs, const char* fs, GLuint* ids, const char* name)
{
int len;
int res;
@@ -89,7 +91,7 @@ bool OpenGL_BuildShaderProgram(const char* vs, const char* fs, GLuint* ids, cons
return true;
}
-bool OpenGL_LinkShaderProgram(GLuint* ids)
+bool LinkShaderProgram(GLuint* ids)
{
int res;
@@ -115,14 +117,16 @@ bool OpenGL_LinkShaderProgram(GLuint* ids)
return true;
}
-void OpenGL_DeleteShaderProgram(GLuint* ids)
+void DeleteShaderProgram(GLuint* ids)
{
glDeleteShader(ids[0]);
glDeleteShader(ids[1]);
glDeleteProgram(ids[2]);
}
-void OpenGL_UseShaderProgram(GLuint* ids)
+void UseShaderProgram(GLuint* ids)
{
glUseProgram(ids[2]);
}
+
+}
diff --git a/src/OpenGLSupport.h b/src/OpenGLSupport.h
index 5f92580..925c0ad 100644
--- a/src/OpenGLSupport.h
+++ b/src/OpenGLSupport.h
@@ -21,6 +21,8 @@
#include <stdio.h>
#include <string.h>
+
+// TODO: different includes for each platform
#include <GL/gl.h>
#include <GL/glext.h>
@@ -45,18 +47,18 @@
// if you need more OpenGL functions, add them to the macronator here
-// TODO: handle conditionally loading certain functions for different GL versions
-#ifndef __WIN32__
-#define DO_PROCLIST_1_3(func)
-
-#else
+#ifdef __WIN32__
#define DO_PROCLIST_1_3(func) \
func(GLACTIVETEXTURE, glActiveTexture); \
func(GLBLENDCOLOR, glBlendColor); \
+#else
+
+#define DO_PROCLIST_1_3(func)
+
#endif
@@ -112,6 +114,11 @@
func(GLGETUNIFORMLOCATION, glGetUniformLocation); \
func(GLGETUNIFORMBLOCKINDEX, glGetUniformBlockIndex); \
\
+ func(GLFENCESYNC, glFenceSync); \
+ func(GLDELETESYNC, glDeleteSync); \
+ func(GLWAITSYNC, glWaitSync); \
+ func(GLCLIENTWAITSYNC, glClientWaitSync); \
+ \
func(GLDRAWBUFFERS, glDrawBuffers); \
\
func(GLBLENDFUNCSEPARATE, glBlendFuncSeparate); \
@@ -122,14 +129,18 @@
func(GLGETSTRINGI, glGetStringi); \
+namespace OpenGL
+{
+
DO_PROCLIST(DECLPROC_EXT);
+bool Init();
-bool OpenGL_Init();
+bool BuildShaderProgram(const char* vs, const char* fs, GLuint* ids, const char* name);
+bool LinkShaderProgram(GLuint* ids);
+void DeleteShaderProgram(GLuint* ids);
+void UseShaderProgram(GLuint* ids);
-bool OpenGL_BuildShaderProgram(const char* vs, const char* fs, GLuint* ids, const char* name);
-bool OpenGL_LinkShaderProgram(GLuint* ids);
-void OpenGL_DeleteShaderProgram(GLuint* ids);
-void OpenGL_UseShaderProgram(GLuint* ids);
+}
#endif // OPENGLSUPPORT_H
diff --git a/src/Platform.h b/src/Platform.h
index b6effdc..fea98dd 100644
--- a/src/Platform.h
+++ b/src/Platform.h
@@ -24,6 +24,9 @@
namespace Platform
{
+void Init(int argc, char** argv);
+void DeInit();
+
void StopEmu();
// fopen() wrappers
diff --git a/src/ROMList.h b/src/ROMList.h
new file mode 100644
index 0000000..ead3ee4
--- /dev/null
+++ b/src/ROMList.h
@@ -0,0 +1,6809 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef ROMLIST_H
+#define ROMLIST_H
+
+typedef struct
+{
+ u32 GameCode;
+ u32 ROMSize;
+ u32 SaveMemType;
+
+} ROMListEntry;
+
+
+ROMListEntry ROMList[] =
+{
+ {0x41464141, 0x00800000, 0x00000004},
+ {0x414D4155, 0x00800000, 0x00000008},
+ {0x43363341, 0x02000000, 0x00000008},
+ {0x43443241, 0x02000000, 0x00000002},
+ {0x43495941, 0x01000000, 0x00000001},
+ {0x434D5341, 0x01000000, 0x00000002},
+ {0x434E5341, 0x00800000, 0x00000002},
+ {0x43575A41, 0x02000000, 0x00000002},
+ {0x44323643, 0x04000000, 0x00000001},
+ {0x44324254, 0x04000000, 0x00000002},
+ {0x44324C43, 0x00800000, 0x00000001},
+ {0x44325542, 0x01000000, 0x00000002},
+ {0x44325942, 0x00800000, 0x00000001},
+ {0x44334444, 0x02000000, 0x00000001},
+ {0x44334542, 0x04000000, 0x00000001},
+ {0x44334754, 0x00800000, 0x00000002},
+ {0x44334756, 0x02000000, 0x00000002},
+ {0x44335141, 0x04000000, 0x00000002},
+ {0x44335159, 0x04000000, 0x00000002},
+ {0x44335254, 0x02000000, 0x00000001},
+ {0x44335742, 0x08000000, 0x00000002},
+ {0x44335942, 0x00800000, 0x00000001},
+ {0x44343642, 0x00800000, 0x00000001},
+ {0x44344259, 0x02000000, 0x00000001},
+ {0x44344443, 0x00800000, 0x00000001},
+ {0x44345254, 0x02000000, 0x00000001},
+ {0x44345542, 0x00800000, 0x00000002},
+ {0x44345942, 0x00800000, 0x00000001},
+ {0x44353243, 0x02000000, 0x00000002},
+ {0x44353642, 0x00800000, 0x00000001},
+ {0x44353842, 0x01000000, 0x00000001},
+ {0x44354259, 0x02000000, 0x00000002},
+ {0x44354442, 0x01000000, 0x00000002},
+ {0x44354659, 0x01000000, 0x00000001},
+ {0x44354841, 0x02000000, 0x00000002},
+ {0x44354C42, 0x01000000, 0x00000002},
+ {0x44354C43, 0x00000000, 0x00000001},
+ {0x44355342, 0x01000000, 0x00000001},
+ {0x44355542, 0x02000000, 0x00000002},
+ {0x44355942, 0x00800000, 0x00000001},
+ {0x44363243, 0x01000000, 0x00000002},
+ {0x44364142, 0x02000000, 0x00000002},
+ {0x44364341, 0x01000000, 0x00000002},
+ {0x44364843, 0x04000000, 0x00000001},
+ {0x44364B43, 0x02000000, 0x00000002},
+ {0x44364C42, 0x01000000, 0x00000002},
+ {0x44365542, 0x01000000, 0x00000002},
+ {0x44374543, 0x02000000, 0x00000002},
+ {0x44374959, 0x04000000, 0x00000002},
+ {0x44375359, 0x02000000, 0x00000001},
+ {0x44384243, 0x02000000, 0x00000001},
+ {0x44384A59, 0x01000000, 0x00000002},
+ {0x44384F42, 0x01000000, 0x00000001},
+ {0x44394259, 0x02000000, 0x00000003},
+ {0x44394341, 0x04000000, 0x00000001},
+ {0x44394543, 0x01000000, 0x00000003},
+ {0x44414441, 0x04000000, 0x00000006},
+ {0x44414A42, 0x01000000, 0x00000003},
+ {0x44414C59, 0x00800000, 0x00000002},
+ {0x44414D56, 0x02000000, 0x00000001},
+ {0x44414E43, 0x04000000, 0x00000001},
+ {0x44415041, 0x04000000, 0x00000006},
+ {0x44415249, 0x10000000, 0x00000006},
+ {0x44423542, 0x04000000, 0x00000002},
+ {0x44424242, 0x00000000, 0x00000001},
+ {0x44424354, 0x08000000, 0x00000001},
+ {0x44424542, 0x10000000, 0x00000003},
+ {0x44424A42, 0x04000000, 0x00000001},
+ {0x44424B42, 0x01000000, 0x00000001},
+ {0x44424C54, 0x02000000, 0x00000001},
+ {0x44425249, 0x10000000, 0x00000006},
+ {0x44425642, 0x02000000, 0x00000002},
+ {0x44434343, 0x02000000, 0x00000002},
+ {0x44434643, 0x02000000, 0x00000002},
+ {0x44434842, 0x01000000, 0x00000001},
+ {0x44434A42, 0x04000000, 0x00000002},
+ {0x44434C54, 0x01000000, 0x00000001},
+ {0x44435159, 0x01000000, 0x00000001},
+ {0x44435342, 0x08000000, 0x00000002},
+ {0x44435359, 0x01000000, 0x00000001},
+ {0x44435559, 0x04000000, 0x00000002},
+ {0x44435943, 0x02000000, 0x00000002},
+ {0x44444254, 0x04000000, 0x00000002},
+ {0x44444842, 0x04000000, 0x00000001},
+ {0x44444856, 0x02000000, 0x00000002},
+ {0x44445054, 0x08000000, 0x00000001},
+ {0x44445249, 0x20000000, 0x00000006},
+ {0x44445443, 0x00000000, 0x00000002},
+ {0x44445459, 0x02000000, 0x00000002},
+ {0x44445641, 0x01000000, 0x00000002},
+ {0x44454242, 0x01000000, 0x00000001},
+ {0x44454542, 0x10000000, 0x00000003},
+ {0x44454559, 0x10000000, 0x00000003},
+ {0x44454756, 0x02000000, 0x00000002},
+ {0x44454842, 0x02000000, 0x00000002},
+ {0x44454D54, 0x00800000, 0x00000002},
+ {0x44454E42, 0x02000000, 0x00000001},
+ {0x44454E59, 0x02000000, 0x00000002},
+ {0x44455143, 0x04000000, 0x00000002},
+ {0x44455249, 0x20000000, 0x00000006},
+ {0x44455342, 0x01000000, 0x00000001},
+ {0x44455642, 0x00800000, 0x00000002},
+ {0x44464242, 0x02000000, 0x00000001},
+ {0x44464B42, 0x04000000, 0x00000002},
+ {0x44464B59, 0x02000000, 0x00000001},
+ {0x44464C42, 0x10000000, 0x00000003},
+ {0x44465343, 0x00800000, 0x00000001},
+ {0x44465359, 0x04000000, 0x00000001},
+ {0x44465442, 0x01000000, 0x00000002},
+ {0x44473242, 0x04000000, 0x00000001},
+ {0x44474B42, 0x00800000, 0x00000002},
+ {0x44474C43, 0x04000000, 0x00000001},
+ {0x44474D41, 0x01000000, 0x00000001},
+ {0x44474D43, 0x04000000, 0x00000001},
+ {0x44475049, 0x08000000, 0x00000006},
+ {0x44475759, 0x01000000, 0x00000001},
+ {0x44483842, 0x04000000, 0x00000002},
+ {0x44485142, 0x00800000, 0x00000002},
+ {0x44485442, 0x01000000, 0x00000002},
+ {0x44493643, 0x00800000, 0x00000001},
+ {0x44494243, 0x02000000, 0x00000001},
+ {0x44494442, 0x04000000, 0x00000001},
+ {0x44494C43, 0x04000000, 0x00000001},
+ {0x44495443, 0x00000000, 0x00000002},
+ {0x44495742, 0x01000000, 0x00000002},
+ {0x444A3343, 0x10000000, 0x00000003},
+ {0x444A3443, 0x00800000, 0x00000001},
+ {0x444A4542, 0x04000000, 0x00000001},
+ {0x444A4742, 0x02000000, 0x00000002},
+ {0x444A4F42, 0x04000000, 0x00000002},
+ {0x444A5543, 0x00000000, 0x00000002},
+ {0x444A5641, 0x04000000, 0x00000002},
+ {0x444B3842, 0x02000000, 0x00000002},
+ {0x444B4159, 0x08000000, 0x00000002},
+ {0x444B4356, 0x08000000, 0x00000002},
+ {0x444B4C42, 0x04000000, 0x00000001},
+ {0x444B5049, 0x08000000, 0x00000006},
+ {0x444C3643, 0x01000000, 0x00000001},
+ {0x444C4254, 0x00800000, 0x00000001},
+ {0x444C4842, 0x04000000, 0x00000002},
+ {0x444C5059, 0x00800000, 0x00000001},
+ {0x444C5941, 0x01000000, 0x00000002},
+ {0x444D3442, 0x02000000, 0x00000001},
+ {0x444D4359, 0x02000000, 0x00000001},
+ {0x444D4C54, 0x08000000, 0x00000001},
+ {0x444D5642, 0x02000000, 0x00000001},
+ {0x444E4242, 0x00800000, 0x00000002},
+ {0x444E4259, 0x04000000, 0x00000007},
+ {0x444E4641, 0x02000000, 0x00000002},
+ {0x444E4C54, 0x00800000, 0x00000002},
+ {0x444E4D42, 0x01000000, 0x00000001},
+ {0x444F4142, 0x04000000, 0x00000001},
+ {0x444F4359, 0x04000000, 0x00000001},
+ {0x444F4543, 0x02000000, 0x00000002},
+ {0x444F4642, 0x00800000, 0x00000001},
+ {0x444F4656, 0x02000000, 0x00000002},
+ {0x444F5056, 0x02000000, 0x00000002},
+ {0x444F5143, 0x02000000, 0x00000001},
+ {0x44504C43, 0x04000000, 0x00000003},
+ {0x44505041, 0x01000000, 0x00000002},
+ {0x44505342, 0x01000000, 0x00000002},
+ {0x44505542, 0x01000000, 0x00000001},
+ {0x44505A55, 0x08000000, 0x00000003},
+ {0x44513343, 0x04000000, 0x00000002},
+ {0x44513443, 0x04000000, 0x00000002},
+ {0x44513743, 0x02000000, 0x00000002},
+ {0x44514543, 0x04000000, 0x00000002},
+ {0x44514A59, 0x01000000, 0x00000001},
+ {0x44514C54, 0x00800000, 0x00000002},
+ {0x44515142, 0x01000000, 0x00000002},
+ {0x44515543, 0x04000000, 0x00000002},
+ {0x44515642, 0x02000000, 0x00000002},
+ {0x44524642, 0x08000000, 0x00000002},
+ {0x44524842, 0x02000000, 0x00000001},
+ {0x44525359, 0x00000000, 0x00000005},
+ {0x44525642, 0x04000000, 0x00000001},
+ {0x44533341, 0x02000000, 0x00000001},
+ {0x44534F41, 0x08000000, 0x00000005},
+ {0x44535143, 0x02000000, 0x00000001},
+ {0x44535342, 0x01000000, 0x00000002},
+ {0x44535541, 0x04000000, 0x00000001},
+ {0x44535642, 0x02000000, 0x00000002},
+ {0x44544442, 0x00800000, 0x00000001},
+ {0x44544C59, 0x08000000, 0x00000002},
+ {0x44545659, 0x02000000, 0x00000001},
+ {0x44545759, 0x01000000, 0x00000001},
+ {0x44553243, 0x04000000, 0x00000002},
+ {0x44553642, 0x00800000, 0x00000001},
+ {0x44554254, 0x02000000, 0x00000001},
+ {0x44554259, 0x08000000, 0x00000003},
+ {0x44554959, 0x04000000, 0x00000001},
+ {0x44554D59, 0x04000000, 0x00000002},
+ {0x44555043, 0x08000000, 0x00000006},
+ {0x44563442, 0x02000000, 0x00000001},
+ {0x44564159, 0x04000000, 0x00000002},
+ {0x44564643, 0x02000000, 0x00000002},
+ {0x44564859, 0x04000000, 0x00000001},
+ {0x44564A59, 0x01000000, 0x00000002},
+ {0x44564B43, 0x01000000, 0x00000002},
+ {0x44564C42, 0x01000000, 0x00000001},
+ {0x44564E43, 0x10000000, 0x00000005},
+ {0x44565042, 0x00800000, 0x00000002},
+ {0x44565841, 0x04000000, 0x00000003},
+ {0x44573742, 0x01000000, 0x00000002},
+ {0x44574242, 0x01000000, 0x00000002},
+ {0x44574642, 0x00800000, 0x00000001},
+ {0x44574943, 0x08000000, 0x00000002},
+ {0x44574C41, 0x02000000, 0x00000001},
+ {0x44574C42, 0x02000000, 0x00000001},
+ {0x44575343, 0x04000000, 0x00000001},
+ {0x44584D59, 0x00800000, 0x00000001},
+ {0x44593443, 0x00000000, 0x00000001},
+ {0x44593642, 0x02000000, 0x00000002},
+ {0x44594159, 0x02000000, 0x00000001},
+ {0x44594442, 0x04000000, 0x00000002},
+ {0x44594641, 0x04000000, 0x00000001},
+ {0x44594842, 0x01000000, 0x00000001},
+ {0x44594A42, 0x04000000, 0x00000001},
+ {0x44594A43, 0x04000000, 0x00000001},
+ {0x44594A59, 0x00800000, 0x00000001},
+ {0x44594C41, 0x04000000, 0x00000001},
+ {0x44594D42, 0x01000000, 0x00000002},
+ {0x44595143, 0x01000000, 0x00000001},
+ {0x445A3643, 0x01000000, 0x00000001},
+ {0x445A3659, 0x08000000, 0x00000000},
+ {0x445A4341, 0x01000000, 0x00000001},
+ {0x445A4641, 0x04000000, 0x00000001},
+ {0x445A5054, 0x04000000, 0x00000002},
+ {0x445A5142, 0x00000000, 0x00000002},
+ {0x445A5359, 0x08000000, 0x00000001},
+ {0x445A5442, 0x02000000, 0x00000001},
+ {0x445A5443, 0x02000000, 0x00000003},
+ {0x445A5942, 0x02000000, 0x00000002},
+ {0x45323241, 0x01000000, 0x00000002},
+ {0x45323341, 0x04000000, 0x00000008},
+ {0x45323343, 0x04000000, 0x00000003},
+ {0x45323542, 0x01000000, 0x00000001},
+ {0x45323559, 0x08000000, 0x00000008},
+ {0x45323643, 0x04000000, 0x00000001},
+ {0x45323741, 0x01000000, 0x00000000},
+ {0x45323859, 0x00800000, 0x00000000},
+ {0x45324142, 0x04000000, 0x00000001},
+ {0x45324143, 0x08000000, 0x00000003},
+ {0x45324241, 0x02000000, 0x00000002},
+ {0x45324242, 0x04000000, 0x00000002},
+ {0x45324259, 0x02000000, 0x00000002},
+ {0x45324341, 0x04000000, 0x00000001},
+ {0x45324343, 0x01000000, 0x00000001},
+ {0x45324354, 0x00800000, 0x00000001},
+ {0x45324356, 0x02000000, 0x00000001},
+ {0x45324359, 0x04000000, 0x00000006},
+ {0x45324441, 0x02000000, 0x00000005},
+ {0x45324442, 0x01000000, 0x00000002},
+ {0x45324456, 0x04000000, 0x00000001},
+ {0x45324459, 0x01000000, 0x00000003},
+ {0x45324542, 0x00800000, 0x00000003},
+ {0x45324643, 0x01000000, 0x00000001},
+ {0x45324654, 0x04000000, 0x00000000},
+ {0x45324741, 0x04000000, 0x00000001},
+ {0x45324759, 0x01000000, 0x00000001},
+ {0x45324842, 0x02000000, 0x00000003},
+ {0x45324854, 0x01000000, 0x00000001},
+ {0x45324859, 0x02000000, 0x00000003},
+ {0x45324941, 0x04000000, 0x00000002},
+ {0x45324A42, 0x04000000, 0x00000001},
+ {0x45324A59, 0x02000000, 0x00000002},
+ {0x45324B41, 0x02000000, 0x00000001},
+ {0x45324C41, 0x04000000, 0x00000002},
+ {0x45324C59, 0x08000000, 0x00000003},
+ {0x45324D56, 0x04000000, 0x00000002},
+ {0x45324D59, 0x01000000, 0x00000001},
+ {0x45325041, 0x02000000, 0x00000001},
+ {0x45325042, 0x02000000, 0x00000001},
+ {0x45325043, 0x04000000, 0x00000003},
+ {0x45325059, 0x04000000, 0x00000005},
+ {0x45325141, 0x02000000, 0x00000002},
+ {0x45325242, 0x02000000, 0x00000001},
+ {0x45325254, 0x02000000, 0x00000002},
+ {0x45325341, 0x01000000, 0x00000001},
+ {0x45325342, 0x02000000, 0x00000005},
+ {0x45325343, 0x00800000, 0x00000001},
+ {0x45325359, 0x04000000, 0x00000005},
+ {0x45325442, 0x04000000, 0x00000003},
+ {0x45325459, 0x00800000, 0x00000001},
+ {0x45325642, 0x02000000, 0x00000001},
+ {0x45325741, 0x02000000, 0x00000003},
+ {0x45325742, 0x01000000, 0x00000002},
+ {0x45325759, 0x04000000, 0x00000005},
+ {0x45325841, 0x00800000, 0x00000001},
+ {0x45325A43, 0x01000000, 0x00000003},
+ {0x45333241, 0x01000000, 0x00000008},
+ {0x45333259, 0x04000000, 0x00000008},
+ {0x45333441, 0x00800000, 0x00000008},
+ {0x45333641, 0x02000000, 0x00000008},
+ {0x45333759, 0x08000000, 0x00000008},
+ {0x45333842, 0x08000000, 0x00000001},
+ {0x45333859, 0x00800000, 0x00000000},
+ {0x45334159, 0x00800000, 0x00000001},
+ {0x45334241, 0x04000000, 0x00000003},
+ {0x45334242, 0x08000000, 0x00000001},
+ {0x45334259, 0x04000000, 0x00000005},
+ {0x45334341, 0x04000000, 0x00000005},
+ {0x45334441, 0x02000000, 0x00000005},
+ {0x45334442, 0x04000000, 0x00000001},
+ {0x45334443, 0x04000000, 0x00000001},
+ {0x45334541, 0x04000000, 0x00000001},
+ {0x45334641, 0x00800000, 0x00000001},
+ {0x45334643, 0x00800000, 0x00000001},
+ {0x45334659, 0x02000000, 0x00000002},
+ {0x45334741, 0x02000000, 0x00000005},
+ {0x45334743, 0x02000000, 0x00000002},
+ {0x45334759, 0x02000000, 0x00000003},
+ {0x45334841, 0x04000000, 0x00000003},
+ {0x45334943, 0x04000000, 0x00000001},
+ {0x45334959, 0x04000000, 0x00000002},
+ {0x45334A42, 0x04000000, 0x00000005},
+ {0x45334A43, 0x00800000, 0x00000001},
+ {0x45334A56, 0x02000000, 0x00000001},
+ {0x45334B41, 0x02000000, 0x00000002},
+ {0x45334C41, 0x02000000, 0x00000001},
+ {0x45334C59, 0x04000000, 0x00000002},
+ {0x45334D43, 0x08000000, 0x00000003},
+ {0x45334D54, 0x02000000, 0x00000001},
+ {0x45334F41, 0x02000000, 0x00000001},
+ {0x45335043, 0x08000000, 0x00000005},
+ {0x45335141, 0x04000000, 0x00000002},
+ {0x45335159, 0x04000000, 0x00000002},
+ {0x45335341, 0x02000000, 0x00000001},
+ {0x45335342, 0x01000000, 0x00000001},
+ {0x45335343, 0x04000000, 0x00000003},
+ {0x45335356, 0x08000000, 0x00000005},
+ {0x45335359, 0x00800000, 0x00000001},
+ {0x45335456, 0x04000000, 0x00000002},
+ {0x45335459, 0x04000000, 0x00000003},
+ {0x45335541, 0x02000000, 0x00000002},
+ {0x45335543, 0x02000000, 0x00000001},
+ {0x45335741, 0x04000000, 0x00000001},
+ {0x45335743, 0x08000000, 0x00000002},
+ {0x45335759, 0x01000000, 0x00000001},
+ {0x45343243, 0x08000000, 0x00000003},
+ {0x45343459, 0x00800000, 0x00000000},
+ {0x45343543, 0x02000000, 0x00000003},
+ {0x45343559, 0x01000000, 0x00000000},
+ {0x45343842, 0x02000000, 0x00000001},
+ {0x45344241, 0x04000000, 0x00000005},
+ {0x45344259, 0x02000000, 0x00000001},
+ {0x45344341, 0x04000000, 0x00000001},
+ {0x45344441, 0x02000000, 0x00000005},
+ {0x45344643, 0x00800000, 0x00000001},
+ {0x45344659, 0x08000000, 0x00000003},
+ {0x45344759, 0x10000000, 0x00000003},
+ {0x45344842, 0x00800000, 0x00000001},
+ {0x45344843, 0x04000000, 0x00000002},
+ {0x45344943, 0x04000000, 0x00000002},
+ {0x45344A42, 0x00800000, 0x00000001},
+ {0x45344A43, 0x01000000, 0x00000001},
+ {0x45344A56, 0x02000000, 0x00000001},
+ {0x45344C41, 0x00800000, 0x00000001},
+ {0x45344D41, 0x00800000, 0x00000000},
+ {0x45344D43, 0x01000000, 0x00000003},
+ {0x45344D56, 0x02000000, 0x00000002},
+ {0x45344E41, 0x04000000, 0x00000001},
+ {0x45345059, 0x04000000, 0x00000002},
+ {0x45345141, 0x02000000, 0x00000001},
+ {0x45345341, 0x02000000, 0x00000003},
+ {0x45345342, 0x01000000, 0x00000001},
+ {0x45345456, 0x04000000, 0x00000003},
+ {0x45345459, 0x02000000, 0x00000001},
+ {0x45345642, 0x01000000, 0x00000001},
+ {0x45345643, 0x04000000, 0x00000001},
+ {0x45345659, 0x08000000, 0x00000003},
+ {0x45345741, 0x02000000, 0x00000002},
+ {0x45345742, 0x02000000, 0x00000002},
+ {0x45345759, 0x04000000, 0x00000003},
+ {0x45345A43, 0x04000000, 0x00000001},
+ {0x45353541, 0x01000000, 0x00000008},
+ {0x45353542, 0x00800000, 0x00000001},
+ {0x45353841, 0x02000000, 0x00000008},
+ {0x45353941, 0x04000000, 0x00000008},
+ {0x45354143, 0x08000000, 0x00000003},
+ {0x45354259, 0x02000000, 0x00000002},
+ {0x45354359, 0x00800000, 0x00000008},
+ {0x45354441, 0x02000000, 0x00000005},
+ {0x45354443, 0x02000000, 0x00000001},
+ {0x45354643, 0x00800000, 0x00000002},
+ {0x45354741, 0x01000000, 0x00000001},
+ {0x45354743, 0x04000000, 0x00000001},
+ {0x45354841, 0x02000000, 0x00000002},
+ {0x45354943, 0x01000000, 0x00000001},
+ {0x45354959, 0x04000000, 0x00000002},
+ {0x45354B41, 0x02000000, 0x00000001},
+ {0x45354B43, 0x04000000, 0x00000005},
+ {0x45354C41, 0x04000000, 0x00000001},
+ {0x45354D43, 0x04000000, 0x00000001},
+ {0x45354E59, 0x04000000, 0x00000002},
+ {0x45354F42, 0x10000000, 0x00000005},
+ {0x45355043, 0x02000000, 0x00000001},
+ {0x45355059, 0x01000000, 0x00000001},
+ {0x45355141, 0x00800000, 0x00000001},
+ {0x45355241, 0x02000000, 0x00000001},
+ {0x45355243, 0x08000000, 0x00000001},
+ {0x45355259, 0x02000000, 0x00000002},
+ {0x45355341, 0x01000000, 0x00000001},
+ {0x45355342, 0x01000000, 0x00000001},
+ {0x45355343, 0x04000000, 0x00000001},
+ {0x45355356, 0x02000000, 0x00000002},
+ {0x45355359, 0x04000000, 0x00000001},
+ {0x45355541, 0x00800000, 0x00000001},
+ {0x45355643, 0x02000000, 0x00000001},
+ {0x45355659, 0x08000000, 0x00000003},
+ {0x45355843, 0x01000000, 0x00000001},
+ {0x45355941, 0x08000000, 0x00000003},
+ {0x45363241, 0x02000000, 0x00000008},
+ {0x45363341, 0x02000000, 0x00000008},
+ {0x45363359, 0x01000000, 0x00000008},
+ {0x45363442, 0x01000000, 0x00000001},
+ {0x45363543, 0x02000000, 0x00000002},
+ {0x45363559, 0x04000000, 0x00000008},
+ {0x45363642, 0x01000000, 0x00000001},
+ {0x45363741, 0x04000000, 0x00000008},
+ {0x45363742, 0x02000000, 0x00000001},
+ {0x45363842, 0x00800000, 0x00000001},
+ {0x45364241, 0x02000000, 0x00000001},
+ {0x45364243, 0x02000000, 0x00000002},
+ {0x45364254, 0x02000000, 0x00000001},
+ {0x45364341, 0x01000000, 0x00000002},
+ {0x45364356, 0x02000000, 0x00000002},
+ {0x45364542, 0x02000000, 0x00000002},
+ {0x45364641, 0x02000000, 0x00000002},
+ {0x45364643, 0x04000000, 0x00000002},
+ {0x45364742, 0x02000000, 0x00000002},
+ {0x45364743, 0x08000000, 0x00000002},
+ {0x45364759, 0x04000000, 0x00000002},
+ {0x45364841, 0x01000000, 0x00000001},
+ {0x45364843, 0x04000000, 0x00000001},
+ {0x45364A56, 0x02000000, 0x00000001},
+ {0x45364B41, 0x01000000, 0x00000001},
+ {0x45364B59, 0x00800000, 0x00000008},
+ {0x45364C41, 0x01000000, 0x00000001},
+ {0x45364C43, 0x02000000, 0x00000001},
+ {0x45364D41, 0x02000000, 0x00000005},
+ {0x45364D43, 0x08000000, 0x00000002},
+ {0x45364D54, 0x01000000, 0x00000001},
+ {0x45364E41, 0x02000000, 0x00000001},
+ {0x45364F41, 0x08000000, 0x00000001},
+ {0x45365042, 0x01000000, 0x00000001},
+ {0x45365241, 0x00800000, 0x00000002},
+ {0x45365242, 0x02000000, 0x00000002},
+ {0x45365259, 0x02000000, 0x00000002},
+ {0x45365342, 0x01000000, 0xFFFFFFFF},
+ {0x45365343, 0x04000000, 0x00000002},
+ {0x45365359, 0x04000000, 0x00000005},
+ {0x45365541, 0x00800000, 0x00000002},
+ {0x45365559, 0x02000000, 0x00000002},
+ {0x45365642, 0x01000000, 0x00000001},
+ {0x45365742, 0x01000000, 0x00000001},
+ {0x45365743, 0x04000000, 0x00000002},
+ {0x45365941, 0x00800000, 0x00000005},
+ {0x45365A42, 0x04000000, 0x00000002},
+ {0x45373243, 0x08000000, 0x00000003},
+ {0x45373359, 0x01000000, 0x00000001},
+ {0x45373442, 0x01000000, 0x00000001},
+ {0x45373541, 0x01000000, 0x00000008},
+ {0x45373542, 0x00800000, 0xFFFFFFFF},
+ {0x45373643, 0x00800000, 0x00000001},
+ {0x45374143, 0x02000000, 0x00000002},
+ {0x45374159, 0x02000000, 0x00000002},
+ {0x45374241, 0x00800000, 0x00000001},
+ {0x45374242, 0x02000000, 0x00000002},
+ {0x45374243, 0x02000000, 0x00000002},
+ {0x45374259, 0x04000000, 0x00000002},
+ {0x45374341, 0x00800000, 0x00000002},
+ {0x45374342, 0x01000000, 0x00000001},
+ {0x45374441, 0x04000000, 0x00000005},
+ {0x45374442, 0x00800000, 0x00000001},
+ {0x45374542, 0x04000000, 0x00000002},
+ {0x45374641, 0x02000000, 0x00000002},
+ {0x45374659, 0x01000000, 0x00000002},
+ {0x45374741, 0x02000000, 0x00000002},
+ {0x45374742, 0x04000000, 0x00000001},
+ {0x45374842, 0x00800000, 0x00000001},
+ {0x45374943, 0x04000000, 0x00000002},
+ {0x45374A42, 0x00800000, 0x00000001},
+ {0x45374A43, 0x04000000, 0x00000001},
+ {0x45374C41, 0x02000000, 0x00000001},
+ {0x45374C43, 0x01000000, 0x00000002},
+ {0x45374D41, 0x02000000, 0x00000002},
+ {0x45374D43, 0x02000000, 0x00000008},
+ {0x45374D59, 0x04000000, 0x00000002},
+ {0x45374E41, 0x02000000, 0x00000002},
+ {0x45375043, 0x04000000, 0x00000002},
+ {0x45375141, 0x00800000, 0x00000002},
+ {0x45375143, 0x04000000, 0x00000001},
+ {0x45375242, 0x02000000, 0x00000002},
+ {0x45375341, 0x08000000, 0x00000003},
+ {0x45375359, 0x02000000, 0x00000001},
+ {0x45375459, 0x04000000, 0x00000002},
+ {0x45375541, 0x02000000, 0x00000002},
+ {0x45375643, 0x00800000, 0x00000001},
+ {0x45375742, 0x02000000, 0x00000002},
+ {0x45375759, 0x04000000, 0x00000001},
+ {0x45375842, 0x01000000, 0x00000001},
+ {0x45375941, 0x08000000, 0x00000005},
+ {0x45375943, 0x04000000, 0x00000002},
+ {0x45375A42, 0x00800000, 0x00000001},
+ {0x45383259, 0x02000000, 0x00000008},
+ {0x45383342, 0x00800000, 0x00000001},
+ {0x45383343, 0x04000000, 0x00000005},
+ {0x45383541, 0x02000000, 0x00000008},
+ {0x45383542, 0x00800000, 0x00000001},
+ {0x45383559, 0x00800000, 0x00000000},
+ {0x45384142, 0x00800000, 0x00000001},
+ {0x45384159, 0x01000000, 0x00000002},
+ {0x45384241, 0x02000000, 0x00000001},
+ {0x45384242, 0x04000000, 0x00000002},
+ {0x45384243, 0x02000000, 0x00000001},
+ {0x45384342, 0x00800000, 0x00000001},
+ {0x45384359, 0x01000000, 0x00000002},
+ {0x45384443, 0x02000000, 0x00000002},
+ {0x45384643, 0x04000000, 0x00000002},
+ {0x45384659, 0x02000000, 0x00000003},
+ {0x45384741, 0x04000000, 0x00000003},
+ {0x45384759, 0x08000000, 0x00000005},
+ {0x45384841, 0x02000000, 0x00000001},
+ {0x45384842, 0x01000000, 0x00000001},
+ {0x45384941, 0x02000000, 0x00000002},
+ {0x45384959, 0x04000000, 0x00000001},
+ {0x45384C41, 0x04000000, 0x00000001},
+ {0x45384C43, 0x04000000, 0x00000002},
+ {0x45384C59, 0x01000000, 0x00000001},
+ {0x45384D41, 0x01000000, 0x00000001},
+ {0x45384D42, 0x04000000, 0x00000001},
+ {0x45384D43, 0x02000000, 0x00000002},
+ {0x45384E41, 0x00800000, 0x00000001},
+ {0x45384E42, 0x01000000, 0x00000001},
+ {0x45384F41, 0x04000000, 0x00000003},
+ {0x45384F59, 0x08000000, 0x00000003},
+ {0x45385043, 0x02000000, 0x00000002},
+ {0x45385059, 0x01000000, 0x00000001},
+ {0x45385141, 0x00800000, 0x00000002},
+ {0x45385142, 0x04000000, 0x00000002},
+ {0x45385143, 0x01000000, 0x00000001},
+ {0x45385243, 0x04000000, 0x00000002},
+ {0x45385259, 0x02000000, 0x00000002},
+ {0x45385342, 0x04000000, 0x00000002},
+ {0x45385359, 0x04000000, 0x00000001},
+ {0x45385442, 0x08000000, 0x00000001},
+ {0x45385459, 0x02000000, 0x00000002},
+ {0x45385542, 0x04000000, 0x00000001},
+ {0x45385641, 0x01000000, 0x00000001},
+ {0x45385643, 0x04000000, 0x00000002},
+ {0x45385741, 0x04000000, 0x00000001},
+ {0x45385743, 0x02000000, 0x00000002},
+ {0x45385759, 0x08000000, 0x00000005},
+ {0x45385841, 0x00800000, 0x00000001},
+ {0x45385859, 0x08000000, 0x00000001},
+ {0x45385941, 0x01000000, 0x00000001},
+ {0x45385942, 0x00800000, 0x00000001},
+ {0x45385943, 0x10000000, 0x00000003},
+ {0x45385A42, 0x00800000, 0x00000001},
+ {0x45393241, 0x00800000, 0x00000008},
+ {0x45393341, 0x01000000, 0x00000008},
+ {0x45393343, 0x02000000, 0x00000002},
+ {0x45393443, 0x04000000, 0x00000005},
+ {0x45393459, 0x04000000, 0x00000008},
+ {0x45393541, 0x04000000, 0x00000008},
+ {0x45393643, 0x04000000, 0x00000002},
+ {0x45394241, 0x01000000, 0x00000001},
+ {0x45394242, 0x02000000, 0x00000001},
+ {0x45394243, 0x08000000, 0x00000005},
+ {0x45394259, 0x02000000, 0x00000003},
+ {0x45394341, 0x04000000, 0x00000001},
+ {0x45394441, 0x02000000, 0x00000003},
+ {0x45394542, 0x04000000, 0x00000002},
+ {0x45394543, 0x01000000, 0x00000003},
+ {0x45394641, 0x00800000, 0x00000001},
+ {0x45394643, 0x02000000, 0x00000003},
+ {0x45394659, 0x02000000, 0x00000001},
+ {0x45394841, 0x04000000, 0x00000005},
+ {0x45394856, 0x04000000, 0x00000002},
+ {0x45394943, 0x01000000, 0x00000002},
+ {0x45394A59, 0x00800000, 0x00000005},
+ {0x45394B42, 0x10000000, 0x00000003},
+ {0x45394C41, 0x02000000, 0x00000002},
+ {0x45394C42, 0x08000000, 0x00000001},
+ {0x45394D41, 0x01000000, 0x00000002},
+ {0x45394D43, 0x01000000, 0x00000001},
+ {0x45394D59, 0x01000000, 0x00000001},
+ {0x45394E41, 0x01000000, 0x00000001},
+ {0x45395042, 0x04000000, 0x00000002},
+ {0x45395056, 0x04000000, 0x00000001},
+ {0x45395059, 0x04000000, 0x00000003},
+ {0x45395141, 0x04000000, 0x00000001},
+ {0x45395259, 0x04000000, 0x00000002},
+ {0x45395341, 0x02000000, 0x00000001},
+ {0x45395343, 0x02000000, 0x00000001},
+ {0x45395459, 0x04000000, 0x00000003},
+ {0x45395643, 0x01000000, 0x00000001},
+ {0x45395742, 0x08000000, 0x00000002},
+ {0x45395743, 0x08000000, 0x00000001},
+ {0x45395941, 0x08000000, 0x00000003},
+ {0x45395943, 0x04000000, 0x00000002},
+ {0x45395A43, 0x04000000, 0x00000002},
+ {0x45413541, 0x04000000, 0x00000001},
+ {0x45413543, 0x02000000, 0x00000002},
+ {0x45413641, 0x02000000, 0x00000005},
+ {0x45413642, 0x04000000, 0x00000001},
+ {0x45413741, 0x01000000, 0x00000001},
+ {0x45413956, 0x02000000, 0x00000000},
+ {0x45414143, 0x04000000, 0x00000002},
+ {0x45414156, 0x02000000, 0x00000007},
+ {0x45414159, 0x04000000, 0x00000002},
+ {0x45414241, 0x02000000, 0x00000001},
+ {0x45414242, 0x02000000, 0x00000002},
+ {0x45414243, 0x02000000, 0x00000001},
+ {0x45414254, 0x01000000, 0x00000001},
+ {0x45414256, 0x02000000, 0x00000001},
+ {0x45414341, 0x00800000, 0x00000001},
+ {0x45414356, 0x04000000, 0x00000001},
+ {0x45414441, 0x04000000, 0x00000006},
+ {0x45414442, 0x04000000, 0x00000001},
+ {0x45414443, 0x04000000, 0x00000002},
+ {0x45414541, 0x08000000, 0x00000001},
+ {0x45414559, 0x02000000, 0x00000003},
+ {0x45414641, 0x04000000, 0x00000003},
+ {0x45414642, 0x02000000, 0x00000003},
+ {0x45414643, 0x08000000, 0x00000002},
+ {0x45414941, 0x04000000, 0x00000001},
+ {0x45414959, 0x02000000, 0x00000001},
+ {0x45414A42, 0x01000000, 0x00000002},
+ {0x45414A43, 0x04000000, 0x00000003},
+ {0x45414A59, 0x04000000, 0x00000002},
+ {0x45414B41, 0x08000000, 0x00000005},
+ {0x45414C42, 0x04000000, 0x00000002},
+ {0x45414C56, 0x04000000, 0x00000002},
+ {0x45414E42, 0x02000000, 0x00000001},
+ {0x45414E43, 0x04000000, 0x00000001},
+ {0x45415041, 0x04000000, 0x00000006},
+ {0x45415042, 0x02000000, 0x00000002},
+ {0x45415043, 0x02000000, 0x00000001},
+ {0x45415054, 0x02000000, 0x00000001},
+ {0x45415141, 0x02000000, 0x00000001},
+ {0x45415143, 0x01000000, 0x00000002},
+ {0x45415241, 0x02000000, 0x00000001},
+ {0x45415243, 0x00800000, 0x00000001},
+ {0x45415259, 0x01000000, 0x00000001},
+ {0x45415343, 0x01000000, 0x00000001},
+ {0x45415359, 0x01000000, 0x00000002},
+ {0x45415441, 0x01000000, 0x00000001},
+ {0x45415443, 0x04000000, 0x00000001},
+ {0x45415543, 0x04000000, 0x00000001},
+ {0x45415641, 0x04000000, 0x00000002},
+ {0x45415643, 0x01000000, 0x00000001},
+ {0x45415741, 0x04000000, 0x00000002},
+ {0x45415743, 0x00800000, 0x00000001},
+ {0x45415941, 0x00800000, 0x00000002},
+ {0x45415942, 0x02000000, 0x00000001},
+ {0x45415A42, 0x08000000, 0x00000001},
+ {0x45415A43, 0x02000000, 0x00000002},
+ {0x45423243, 0x02000000, 0x00000001},
+ {0x45423342, 0x04000000, 0x00000001},
+ {0x45423343, 0x00800000, 0x00000001},
+ {0x45423442, 0x04000000, 0x00000002},
+ {0x45423443, 0x02000000, 0x00000003},
+ {0x45423542, 0x04000000, 0x00000002},
+ {0x45423543, 0x01000000, 0x00000002},
+ {0x45423641, 0x02000000, 0x00000005},
+ {0x45423642, 0x04000000, 0x00000001},
+ {0x45423741, 0x01000000, 0x00000001},
+ {0x45423743, 0x02000000, 0x00000002},
+ {0x45424143, 0x01000000, 0x00000001},
+ {0x45424159, 0x00800000, 0x00000001},
+ {0x45424243, 0x01000000, 0x00000002},
+ {0x45424341, 0x04000000, 0x00000003},
+ {0x45424354, 0x08000000, 0x00000001},
+ {0x45424442, 0x04000000, 0x00000002},
+ {0x45424443, 0x04000000, 0x00000001},
+ {0x45424541, 0x00800000, 0x00000008},
+ {0x45424641, 0x00800000, 0x00000001},
+ {0x45424642, 0x01000000, 0x00000002},
+ {0x45424654, 0x01000000, 0x00000001},
+ {0x45424656, 0x02000000, 0x00000001},
+ {0x45424743, 0x02000000, 0x00000001},
+ {0x45424841, 0x02000000, 0x00000002},
+ {0x45424842, 0x00800000, 0x00000001},
+ {0x45424942, 0x01000000, 0x00000003},
+ {0x45424959, 0x02000000, 0x00000001},
+ {0x45424A41, 0x04000000, 0x00000005},
+ {0x45424A42, 0x04000000, 0x00000001},
+ {0x45424A43, 0x01000000, 0x00000001},
+ {0x45424A59, 0x04000000, 0x00000001},
+ {0x45424B41, 0x02000000, 0x00000003},
+ {0x45424B43, 0x02000000, 0x00000002},
+ {0x45424B59, 0x04000000, 0x00000003},
+ {0x45424C42, 0x04000000, 0x00000002},
+ {0x45424C43, 0x08000000, 0x00000003},
+ {0x45424C59, 0x04000000, 0x00000002},
+ {0x45424E43, 0x04000000, 0x00000003},
+ {0x45425141, 0x00800000, 0x00000001},
+ {0x45425143, 0x01000000, 0x00000002},
+ {0x45425159, 0x00800000, 0x00000001},
+ {0x45425241, 0x02000000, 0x00000001},
+ {0x45425243, 0x02000000, 0x00000005},
+ {0x45425259, 0x08000000, 0x00000003},
+ {0x45425341, 0x04000000, 0x00000002},
+ {0x45425442, 0x04000000, 0x00000002},
+ {0x45425443, 0x08000000, 0x00000005},
+ {0x45425543, 0x04000000, 0x00000003},
+ {0x45425559, 0x04000000, 0x00000002},
+ {0x45425641, 0x01000000, 0x00000001},
+ {0x45425741, 0x00800000, 0x00000001},
+ {0x45425742, 0x04000000, 0x00000002},
+ {0x45425759, 0x02000000, 0x00000002},
+ {0x45425942, 0x01000000, 0x00000001},
+ {0x45425943, 0x04000000, 0x00000001},
+ {0x45425959, 0x04000000, 0x00000005},
+ {0x45433342, 0x04000000, 0x00000002},
+ {0x45433441, 0x02000000, 0x00000003},
+ {0x45433459, 0x04000000, 0x00000008},
+ {0x45433542, 0x00800000, 0x00000001},
+ {0x45433641, 0x02000000, 0x00000005},
+ {0x45433642, 0x08000000, 0x00000002},
+ {0x45433643, 0x10000000, 0x00000005},
+ {0x45433741, 0x02000000, 0x00000001},
+ {0x45433841, 0x02000000, 0x00000002},
+ {0x45433859, 0x00800000, 0x00000008},
+ {0x45434156, 0x04000000, 0x00000002},
+ {0x45434241, 0x04000000, 0x00000005},
+ {0x45434259, 0x02000000, 0x00000002},
+ {0x45434341, 0x02000000, 0x00000001},
+ {0x45434343, 0x01000000, 0x00000001},
+ {0x45434354, 0x00800000, 0x00000001},
+ {0x45434441, 0x01000000, 0x00000001},
+ {0x45434442, 0x02000000, 0x00000001},
+ {0x45434443, 0x04000000, 0x00000003},
+ {0x45434459, 0x08000000, 0x00000003},
+ {0x45434541, 0x00800000, 0x00000001},
+ {0x45434559, 0x02000000, 0x00000001},
+ {0x45434642, 0x02000000, 0x00000001},
+ {0x45434659, 0x08000000, 0x00000002},
+ {0x45434741, 0x04000000, 0x00000003},
+ {0x45434759, 0x02000000, 0x00000002},
+ {0x45434843, 0x01000000, 0x00000001},
+ {0x45434941, 0x01000000, 0x00000001},
+ {0x45434943, 0x04000000, 0x00000003},
+ {0x45434956, 0x04000000, 0x00000002},
+ {0x45434959, 0x04000000, 0x00000002},
+ {0x45434A42, 0x03E8823C, 0x00000002},
+ {0x45434A43, 0x04000000, 0x00000002},
+ {0x45434A56, 0x04000000, 0x00000001},
+ {0x45434A59, 0x04000000, 0x00000002},
+ {0x45434B42, 0x10000000, 0x00000006},
+ {0x45434B43, 0x01000000, 0x00000001},
+ {0x45434C42, 0x04000000, 0x00000002},
+ {0x45434C56, 0x04000000, 0x00000002},
+ {0x45434D41, 0x02000000, 0x00000005},
+ {0x45434D56, 0x02000000, 0x00000001},
+ {0x45434F43, 0x01000000, 0x00000001},
+ {0x45435041, 0x01000000, 0x00000001},
+ {0x45435043, 0x00800000, 0x00000002},
+ {0x45435159, 0x01000000, 0x00000001},
+ {0x45435241, 0x02000000, 0x00000002},
+ {0x45435243, 0x02000000, 0x00000001},
+ {0x45435341, 0x04000000, 0x00000002},
+ {0x45435343, 0x04000000, 0x00000001},
+ {0x45435359, 0x01000000, 0x00000001},
+ {0x45435441, 0x04000000, 0x00000005},
+ {0x45435442, 0x01000000, 0x00000001},
+ {0x45435641, 0x04000000, 0x00000005},
+ {0x45435741, 0x04000000, 0x00000002},
+ {0x45435759, 0x02000000, 0x00000002},
+ {0x45435842, 0x01000000, 0x00000001},
+ {0x45435943, 0x02000000, 0x00000002},
+ {0x45435959, 0x02000000, 0x00000001},
+ {0x45443241, 0x02000000, 0x00000002},
+ {0x45443343, 0x01000000, 0x00000001},
+ {0x45443442, 0x00800000, 0x00000001},
+ {0x45443643, 0x02000000, 0x00000001},
+ {0x45443659, 0x00800000, 0x00000008},
+ {0x45443741, 0x02000000, 0x00000001},
+ {0x45443759, 0x08000000, 0x00000008},
+ {0x45444154, 0x08000000, 0x00000005},
+ {0x45444241, 0x01000000, 0x00000001},
+ {0x45444243, 0x04000000, 0x00000002},
+ {0x45444343, 0x00800000, 0x00000003},
+ {0x45444354, 0x02000000, 0x00000001},
+ {0x45444356, 0x04000000, 0x00000002},
+ {0x45444441, 0x01000000, 0x00000001},
+ {0x45444459, 0x01000000, 0x00000001},
+ {0x45444559, 0x00800000, 0x00000001},
+ {0x45444641, 0x04000000, 0x00000002},
+ {0x45444642, 0x00800000, 0x00000001},
+ {0x45444643, 0x08000000, 0x00000002},
+ {0x45444743, 0x00800000, 0x00000001},
+ {0x45444759, 0x00800000, 0x00000003},
+ {0x45444841, 0x04000000, 0x00000002},
+ {0x45444842, 0x04000000, 0x00000001},
+ {0x45444859, 0x04000000, 0x00000001},
+ {0x45444943, 0x02000000, 0x00000003},
+ {0x45444956, 0x02000000, 0x00000002},
+ {0x45444959, 0x02000000, 0x00000005},
+ {0x45444A42, 0x01000000, 0x00000002},
+ {0x45444A59, 0x02000000, 0x00000002},
+ {0x45444B41, 0x01000000, 0x00000002},
+ {0x45444C41, 0x04000000, 0x00000003},
+ {0x45444C42, 0x04000000, 0x00000002},
+ {0x45444C59, 0x04000000, 0x00000005},
+ {0x45444D41, 0x01000000, 0x00000005},
+ {0x45444D42, 0x04000000, 0x00000001},
+ {0x45444D43, 0x02000000, 0x00000005},
+ {0x45444D44, 0x20000000, 0x00000000},
+ {0x45444E41, 0x01000000, 0x00000005},
+ {0x45444E42, 0x02000000, 0x00000001},
+ {0x45444E43, 0x04000000, 0x00000002},
+ {0x45444E59, 0x02000000, 0x00000001},
+ {0x45445041, 0x01000000, 0x00000002},
+ {0x45445042, 0x04000000, 0xFFFFFFFF},
+ {0x45445043, 0x02000000, 0x00000001},
+ {0x45445054, 0x08000000, 0x00000001},
+ {0x45445241, 0x02000000, 0x00000001},
+ {0x45445243, 0x01000000, 0x00000001},
+ {0x45445341, 0x01000000, 0x00000001},
+ {0x45445342, 0x04000000, 0x00000002},
+ {0x45445343, 0x01000000, 0x00000001},
+ {0x45445441, 0x01000000, 0x00000002},
+ {0x45445442, 0x01000000, 0x00000001},
+ {0x45445443, 0x04000000, 0x00000002},
+ {0x45445542, 0x01000000, 0x00000001},
+ {0x45445641, 0x01000000, 0x00000002},
+ {0x45445642, 0x00800000, 0x00000001},
+ {0x45445741, 0x02000000, 0x00000005},
+ {0x45445742, 0x04000000, 0x00000001},
+ {0x45445759, 0x01000000, 0x00000002},
+ {0x45445842, 0x01000000, 0x00000001},
+ {0x45445A41, 0x00800000, 0x00000008},
+ {0x45445A42, 0x08000000, 0x00000001},
+ {0x45453242, 0x00800000, 0x00000001},
+ {0x45453341, 0x00800000, 0x00000002},
+ {0x45453442, 0x01000000, 0x00000001},
+ {0x45453559, 0x04000000, 0x00000000},
+ {0x45453642, 0x02000000, 0x00000001},
+ {0x45453741, 0x01000000, 0x00000001},
+ {0x45453742, 0x02000000, 0x00000001},
+ {0x45454241, 0x00800000, 0x00000001},
+ {0x45454254, 0x02000000, 0x00000001},
+ {0x45454343, 0x01000000, 0x00000005},
+ {0x45454359, 0x02000000, 0x00000002},
+ {0x45454442, 0x04000000, 0x00000002},
+ {0x45454456, 0x10000000, 0x00000006},
+ {0x45454641, 0x04000000, 0x00000003},
+ {0x45454659, 0x04000000, 0x00000005},
+ {0x45454741, 0x01000000, 0x00000001},
+ {0x45454742, 0x04000000, 0x00000001},
+ {0x45454743, 0x02000000, 0x00000002},
+ {0x45454841, 0x08000000, 0x00000005},
+ {0x45454943, 0x04000000, 0x00000002},
+ {0x45454A59, 0x01000000, 0x00000001},
+ {0x45454B42, 0x04000000, 0x00000002},
+ {0x45454C59, 0x02000000, 0x00000001},
+ {0x45454D44, 0x20000000, 0x00000000},
+ {0x45454D56, 0x02000000, 0x00000001},
+ {0x45454F59, 0x01000000, 0x00000005},
+ {0x45455056, 0x04000000, 0x00000001},
+ {0x45455141, 0x00800000, 0x00000002},
+ {0x45455143, 0x04000000, 0x00000002},
+ {0x45455241, 0x04000000, 0x00000001},
+ {0x45455243, 0x04000000, 0x00000001},
+ {0x45455341, 0x04000000, 0x00000002},
+ {0x45455456, 0x04000000, 0x00000002},
+ {0x45455459, 0x02000000, 0x00000003},
+ {0x45455641, 0x01000000, 0x00000001},
+ {0x45455642, 0x00800000, 0x00000002},
+ {0x45455741, 0x04000000, 0x00000005},
+ {0x45455742, 0x04000000, 0x00000001},
+ {0x45455743, 0x01000000, 0x00000002},
+ {0x45455842, 0x04000000, 0x00000001},
+ {0x45455943, 0x08000000, 0x00000002},
+ {0x45455A41, 0x04000000, 0x00000006},
+ {0x45455A42, 0x00800000, 0x00000001},
+ {0x45463242, 0x00800000, 0x00000001},
+ {0x45463541, 0x04000000, 0x00000002},
+ {0x45463641, 0x08000000, 0x00000003},
+ {0x45463642, 0x08000000, 0x00000001},
+ {0x45463659, 0x02000000, 0x00000000},
+ {0x45463742, 0x01000000, 0xFFFFFFFF},
+ {0x45463743, 0x01000000, 0x00000003},
+ {0x45463859, 0x08000000, 0x00000008},
+ {0x45464159, 0x02000000, 0x00000002},
+ {0x45464243, 0x08000000, 0x00000003},
+ {0x45464341, 0x04000000, 0x00000002},
+ {0x45464343, 0x00800000, 0x00000001},
+ {0x45464441, 0x01000000, 0x00000001},
+ {0x45464443, 0x04000000, 0x00000002},
+ {0x45464541, 0x00800000, 0x00000001},
+ {0x45464542, 0x00800000, 0x00000001},
+ {0x45464543, 0x01000000, 0x00000001},
+ {0x45464641, 0x08000000, 0x00000003},
+ {0x45464741, 0x04000000, 0x00000002},
+ {0x45464743, 0x00800000, 0x00000001},
+ {0x45464759, 0x01000000, 0x00000001},
+ {0x45464841, 0x02000000, 0x00000001},
+ {0x45464843, 0x02000000, 0x00000002},
+ {0x45464859, 0x00800000, 0x00000002},
+ {0x45464956, 0x02000000, 0x00000002},
+ {0x45464959, 0x04000000, 0x00000002},
+ {0x45464B43, 0x02000000, 0x00000001},
+ {0x45464B59, 0x02000000, 0x00000001},
+ {0x45464C42, 0x10000000, 0x00000003},
+ {0x45464C43, 0x02000000, 0x00000001},
+ {0x45464D41, 0x01000000, 0x00000001},
+ {0x45464D44, 0x02000000, 0xFFFFFFFF},
+ {0x45464D59, 0x04000000, 0x00000003},
+ {0x45464E41, 0x02000000, 0x00000005},
+ {0x45465042, 0x04000000, 0x00000002},
+ {0x45465043, 0x00800000, 0x00000002},
+ {0x45465054, 0x02000000, 0x00000001},
+ {0x45465056, 0x04000000, 0x00000002},
+ {0x45465241, 0x08000000, 0x00000003},
+ {0x45465242, 0x08000000, 0x00000003},
+ {0x45465243, 0x02000000, 0x00000002},
+ {0x45465259, 0x02000000, 0x00000002},
+ {0x45465341, 0x02000000, 0x00000005},
+ {0x45465359, 0x04000000, 0x00000001},
+ {0x45465443, 0x04000000, 0x00000001},
+ {0x45465541, 0x04000000, 0x00000002},
+ {0x45465542, 0x01000000, 0x00000002},
+ {0x45465742, 0x04000000, 0x00000001},
+ {0x45465743, 0x02000000, 0x00000002},
+ {0x45465841, 0x08000000, 0x00000003},
+ {0x45465842, 0x04000000, 0x00000001},
+ {0x45473241, 0x02000000, 0x00000003},
+ {0x45473256, 0x02000000, 0x00000006},
+ {0x45473459, 0x01000000, 0x00000008},
+ {0x45473541, 0x01000000, 0x00000001},
+ {0x45473642, 0x00800000, 0x00000001},
+ {0x45473741, 0x02000000, 0x00000001},
+ {0x45473743, 0x01000000, 0x00000001},
+ {0x45473759, 0x08000000, 0x00000000},
+ {0x45473859, 0x02000000, 0x00000000},
+ {0x45474142, 0x01000000, 0x00000001},
+ {0x45474159, 0x01000000, 0x00000001},
+ {0x45474243, 0x02000000, 0x00000005},
+ {0x45474254, 0x00800000, 0x00000001},
+ {0x45474341, 0x00800000, 0x00000002},
+ {0x45474342, 0x04000000, 0x00000002},
+ {0x45474354, 0x04000000, 0x00000001},
+ {0x45474356, 0x04000000, 0x00000002},
+ {0x45474359, 0x00800000, 0x00000001},
+ {0x45474441, 0x02000000, 0x00000005},
+ {0x45474443, 0x04000000, 0x00000006},
+ {0x45474541, 0x04000000, 0x00000001},
+ {0x45474542, 0x00800000, 0x00000001},
+ {0x45474641, 0x04000000, 0x00000001},
+ {0x45474642, 0x04000000, 0x00000003},
+ {0x45474742, 0x02000000, 0x00000005},
+ {0x45474754, 0x00800000, 0x00000001},
+ {0x45474842, 0x02000000, 0x00000001},
+ {0x45474942, 0x02000000, 0x00000001},
+ {0x45474A59, 0x02000000, 0x00000002},
+ {0x45474B41, 0x02000000, 0x00000002},
+ {0x45474B56, 0x02000000, 0x00000005},
+ {0x45474B59, 0x10000000, 0x00000003},
+ {0x45474C43, 0x04000000, 0x00000001},
+ {0x45474C59, 0x04000000, 0x00000001},
+ {0x45474D41, 0x01000000, 0x00000001},
+ {0x45474D42, 0x02000000, 0x00000001},
+ {0x45474D43, 0x04000000, 0x00000001},
+ {0x45474D56, 0x02000000, 0x00000002},
+ {0x45474E43, 0x02000000, 0x00000002},
+ {0x45474E59, 0x08000000, 0x00000003},
+ {0x45474F59, 0x08000000, 0x00000003},
+ {0x45475041, 0x01000000, 0x00000001},
+ {0x45475049, 0x08000000, 0x00000006},
+ {0x45475059, 0x04000000, 0x00000002},
+ {0x45475142, 0x04000000, 0x00000001},
+ {0x45475241, 0x02000000, 0x00000005},
+ {0x45475256, 0x02000000, 0x00000002},
+ {0x45475356, 0x02000000, 0x00000001},
+ {0x45475541, 0x02000000, 0x00000002},
+ {0x45475542, 0x00800000, 0x00000001},
+ {0x45475642, 0x01000000, 0x00000002},
+ {0x45475842, 0x04000000, 0x00000002},
+ {0x45475843, 0x00800000, 0x00000001},
+ {0x45475941, 0x04000000, 0x00000002},
+ {0x45475A42, 0x02000000, 0x00000001},
+ {0x45483241, 0x01000000, 0x00000001},
+ {0x45483341, 0x02000000, 0x00000001},
+ {0x45483343, 0x00800000, 0x00000001},
+ {0x45483442, 0x02000000, 0x00000001},
+ {0x45483541, 0x01000000, 0x00000001},
+ {0x45483542, 0x01000000, 0x00000001},
+ {0x45483559, 0x02000000, 0x00000000},
+ {0x45483741, 0x02000000, 0x00000001},
+ {0x45483742, 0x04000000, 0x00000002},
+ {0x45483842, 0x04000000, 0x00000002},
+ {0x45483959, 0x00800000, 0x00000008},
+ {0x45484142, 0x04000000, 0x00000001},
+ {0x45484159, 0x04000000, 0x00000002},
+ {0x45484241, 0x08000000, 0x00000002},
+ {0x45484254, 0x01000000, 0x00000001},
+ {0x45484342, 0x00800000, 0x00000001},
+ {0x45484459, 0x02000000, 0x00000005},
+ {0x45484541, 0x04000000, 0x00000002},
+ {0x45484542, 0x01000000, 0x00000002},
+ {0x45484659, 0x04000000, 0x00000002},
+ {0x45484742, 0x10000000, 0x00000001},
+ {0x45484743, 0x02000000, 0x00000002},
+ {0x45484759, 0x08000000, 0x00000001},
+ {0x45484841, 0x04000000, 0x00000001},
+ {0x45484942, 0x04000000, 0x00000002},
+ {0x45484943, 0x04000000, 0x00000002},
+ {0x45484959, 0x02000000, 0x00000002},
+ {0x45484B43, 0x02000000, 0x00000002},
+ {0x45484B56, 0x02000000, 0x00000002},
+ {0x45484B59, 0x08000000, 0x00000005},
+ {0x45484C41, 0x02000000, 0x00000001},
+ {0x45484C42, 0x08000000, 0x00000001},
+ {0x45484C43, 0x01000000, 0x00000002},
+ {0x45484C59, 0x04000000, 0x00000002},
+ {0x45484D41, 0x04000000, 0x00000005},
+ {0x45484D54, 0x00800000, 0x00000001},
+ {0x45485041, 0x02000000, 0x00000005},
+ {0x45485043, 0x04000000, 0x00000001},
+ {0x45485059, 0x00800000, 0x00000002},
+ {0x45485341, 0x02000000, 0x00000002},
+ {0x45485342, 0x02000000, 0x00000001},
+ {0x45485359, 0x02000000, 0x00000001},
+ {0x45485441, 0x02000000, 0x00000001},
+ {0x45485442, 0x01000000, 0x00000002},
+ {0x45485559, 0x01000000, 0x00000002},
+ {0x45485641, 0x04000000, 0x00000002},
+ {0x45485642, 0x01000000, 0x00000001},
+ {0x45485741, 0x01000000, 0x00000001},
+ {0x45485843, 0x02000000, 0x00000001},
+ {0x45485942, 0x02000000, 0x00000002},
+ {0x45485943, 0x04000000, 0x00000002},
+ {0x45485A42, 0x00800000, 0x00000001},
+ {0x45485A59, 0x04000000, 0x00000001},
+ {0x45493241, 0x01000000, 0x00000001},
+ {0x45493242, 0x04000000, 0x00000001},
+ {0x45493341, 0x08000000, 0x00000002},
+ {0x45493441, 0x02000000, 0x00000001},
+ {0x45493459, 0x04000000, 0x00000008},
+ {0x45493541, 0x01000000, 0x00000001},
+ {0x45493642, 0x04000000, 0x00000002},
+ {0x45493741, 0x02000000, 0x00000001},
+ {0x45493842, 0x04000000, 0x00000001},
+ {0x45493859, 0x01000000, 0x00000000},
+ {0x45494159, 0x04000000, 0x00000001},
+ {0x45494341, 0x02000000, 0x00000002},
+ {0x45494342, 0x02000000, 0x00000002},
+ {0x45494359, 0x01000000, 0x00000001},
+ {0x45494442, 0x04000000, 0x00000001},
+ {0x45494459, 0x04000000, 0x00000002},
+ {0x45494643, 0x08000000, 0x00000003},
+ {0x45494659, 0x04000000, 0x00000001},
+ {0x45494742, 0x04000000, 0x00000001},
+ {0x45494942, 0x00800000, 0x00000001},
+ {0x45494959, 0x00800000, 0x00000001},
+ {0x45494B42, 0x08000000, 0x00000007},
+ {0x45494C43, 0x04000000, 0x00000001},
+ {0x45494C59, 0x04000000, 0x00000002},
+ {0x45494D43, 0x00800000, 0x00000001},
+ {0x45494E41, 0x08000000, 0x00000005},
+ {0x45494E59, 0x08000000, 0x00000002},
+ {0x45495056, 0x02000000, 0x00000002},
+ {0x45495059, 0x02000000, 0x00000003},
+ {0x45495141, 0x02000000, 0x00000005},
+ {0x45495241, 0x01000000, 0x00000001},
+ {0x45495243, 0x02000000, 0x00000002},
+ {0x45495256, 0x02000000, 0x00000001},
+ {0x45495259, 0x04000000, 0x00000002},
+ {0x45495341, 0x02000000, 0x00000002},
+ {0x45495342, 0x04000000, 0x00000001},
+ {0x45495343, 0x01000000, 0x00000002},
+ {0x45495441, 0x01000000, 0x00000008},
+ {0x45495442, 0x01000000, 0x00000001},
+ {0x45495456, 0x02000000, 0x00000001},
+ {0x45495541, 0x01000000, 0x00000001},
+ {0x45495542, 0x01000000, 0x00000001},
+ {0x45495543, 0x02000000, 0x00000002},
+ {0x45495559, 0x04000000, 0x00000002},
+ {0x45495643, 0x04000000, 0x00000002},
+ {0x45495659, 0x08000000, 0x00000003},
+ {0x45495741, 0x08000000, 0x00000005},
+ {0x45495742, 0x01000000, 0x00000002},
+ {0x45495743, 0x01000000, 0x00000001},
+ {0x45495941, 0x01000000, 0x00000001},
+ {0x45495943, 0x02000000, 0x00000002},
+ {0x45495A42, 0x00800000, 0x00000001},
+ {0x454A3259, 0x02000000, 0x00000008},
+ {0x454A3342, 0x08000000, 0x00000002},
+ {0x454A3343, 0x10000000, 0x00000003},
+ {0x454A3442, 0x00800000, 0x00000001},
+ {0x454A3542, 0x00800000, 0x00000001},
+ {0x454A3559, 0x08000000, 0x00000000},
+ {0x454A3642, 0x00800000, 0x00000001},
+ {0x454A3741, 0x02000000, 0x00000001},
+ {0x454A4142, 0x01000000, 0x00000001},
+ {0x454A4143, 0x01000000, 0x00000001},
+ {0x454A4159, 0x01000000, 0x00000002},
+ {0x454A4241, 0x04000000, 0x00000005},
+ {0x454A4341, 0x04000000, 0x00000001},
+ {0x454A4454, 0x00800000, 0x00000001},
+ {0x454A4459, 0x01000000, 0x00000001},
+ {0x454A4543, 0x01000000, 0x00000001},
+ {0x454A4642, 0x01000000, 0x00000002},
+ {0x454A4643, 0x02000000, 0x00000002},
+ {0x454A4759, 0x02000000, 0x00000001},
+ {0x454A4841, 0x01000000, 0x00000002},
+ {0x454A4943, 0x00800000, 0x00000001},
+ {0x454A4956, 0x04000000, 0x00000003},
+ {0x454A4A42, 0x01000000, 0x00000001},
+ {0x454A4A43, 0x00800000, 0x00000001},
+ {0x454A4C41, 0x01000000, 0x00000001},
+ {0x454A4C42, 0x04000000, 0x00000001},
+ {0x454A4C43, 0x08000000, 0x00000002},
+ {0x454A4C54, 0x08000000, 0x00000002},
+ {0x454A4C59, 0x04000000, 0x00000001},
+ {0x454A4D42, 0x00800000, 0x00000001},
+ {0x454A4D59, 0x04000000, 0x00000001},
+ {0x454A4E41, 0x02000000, 0x00000001},
+ {0x454A4E43, 0x02000000, 0x00000001},
+ {0x454A4E59, 0x02000000, 0x00000001},
+ {0x454A4F41, 0x02000000, 0x00000002},
+ {0x454A5043, 0x04000000, 0x00000002},
+ {0x454A5141, 0x08000000, 0x00000001},
+ {0x454A5143, 0x00800000, 0x00000001},
+ {0x454A5242, 0x08000000, 0x00000003},
+ {0x454A5243, 0x02000000, 0x00000001},
+ {0x454A5341, 0x04000000, 0x00000005},
+ {0x454A5342, 0x00800000, 0x00000001},
+ {0x454A5441, 0x01000000, 0x00000002},
+ {0x454A5442, 0x01000000, 0x00000002},
+ {0x454A5459, 0x04000000, 0x00000002},
+ {0x454A5541, 0x04000000, 0x00000001},
+ {0x454A5542, 0x08000000, 0x00000001},
+ {0x454A5641, 0x04000000, 0x00000002},
+ {0x454A5642, 0x01000000, 0x00000001},
+ {0x454A5659, 0x01000000, 0x00000001},
+ {0x454A5743, 0x00800000, 0x00000001},
+ {0x454A5759, 0x00800000, 0x00000002},
+ {0x454A5841, 0x04000000, 0x00000003},
+ {0x454A5959, 0x01000000, 0x00000002},
+ {0x454A5A42, 0x02000000, 0x00000001},
+ {0x454B3243, 0x00800000, 0x00000003},
+ {0x454B3342, 0x01000000, 0x00000001},
+ {0x454B3641, 0x08000000, 0x00000003},
+ {0x454B3741, 0x02000000, 0x00000001},
+ {0x454B3842, 0x02000000, 0x00000002},
+ {0x454B4143, 0x01000000, 0x00000002},
+ {0x454B4241, 0x00800000, 0x00000001},
+ {0x454B4242, 0x02000000, 0x00000002},
+ {0x454B4243, 0x04000000, 0x00000002},
+ {0x454B4343, 0x04000000, 0x00000001},
+ {0x454B4356, 0x08000000, 0x00000002},
+ {0x454B4541, 0x04000000, 0x00000002},
+ {0x454B4559, 0x08000000, 0x00000005},
+ {0x454B4841, 0x04000000, 0x00000003},
+ {0x454B4843, 0x01000000, 0x00000001},
+ {0x454B4959, 0x02000000, 0x00000005},
+ {0x454B4A43, 0x08000000, 0x00000003},
+ {0x454B4A59, 0x08000000, 0x00000002},
+ {0x454B4B41, 0x01000000, 0x00000003},
+ {0x454B4C41, 0x08000000, 0x00000003},
+ {0x454B4C54, 0x08000000, 0x00000002},
+ {0x454B4C59, 0x02000000, 0x00000002},
+ {0x454B4D42, 0x04000000, 0x00000001},
+ {0x454B4E41, 0x00800000, 0x00000001},
+ {0x454B4E59, 0x04000000, 0x00000002},
+ {0x454B5049, 0x08000000, 0x00000006},
+ {0x454B5142, 0x01000000, 0x00000001},
+ {0x454B5159, 0x02000000, 0x00000001},
+ {0x454B5243, 0x04000000, 0x00000001},
+ {0x454B5341, 0x04000000, 0x00000002},
+ {0x454B5342, 0x08000000, 0x00000003},
+ {0x454B5356, 0x04000000, 0x00000001},
+ {0x454B5441, 0x04000000, 0x00000002},
+ {0x454B5559, 0x04000000, 0x00000001},
+ {0x454B5641, 0x01000000, 0x00000001},
+ {0x454B5741, 0x04000000, 0x00000003},
+ {0x454B5759, 0x04000000, 0x00000002},
+ {0x454B5943, 0x02000000, 0x00000002},
+ {0x454B5959, 0x04000000, 0x00000002},
+ {0x454B5A41, 0x00800000, 0x00000002},
+ {0x454C3241, 0x01000000, 0x00000003},
+ {0x454C3259, 0x04000000, 0x00000005},
+ {0x454C3541, 0x08000000, 0x00000002},
+ {0x454C3642, 0x08000000, 0x00000002},
+ {0x454C3741, 0x02000000, 0x00000001},
+ {0x454C3742, 0x00800000, 0x00000001},
+ {0x454C3859, 0x08000000, 0x00000000},
+ {0x454C4143, 0x04000000, 0x00000001},
+ {0x454C4156, 0x04000000, 0x00000002},
+ {0x454C4241, 0x08000000, 0x00000002},
+ {0x454C4242, 0x02000000, 0x00000001},
+ {0x454C4243, 0x00800000, 0x00000002},
+ {0x454C4256, 0x02000000, 0x00000002},
+ {0x454C4259, 0x00800000, 0x00000001},
+ {0x454C4341, 0x04000000, 0x00000003},
+ {0x454C4342, 0x01000000, 0x00000002},
+ {0x454C4354, 0x02000000, 0x00000001},
+ {0x454C4441, 0x04000000, 0x00000003},
+ {0x454C4442, 0x01000000, 0x00000001},
+ {0x454C4443, 0x02000000, 0x00000005},
+ {0x454C4459, 0x01000000, 0x00000008},
+ {0x454C4556, 0x02000000, 0x00000003},
+ {0x454C4641, 0x00800000, 0x00000001},
+ {0x454C4642, 0x04000000, 0x00000002},
+ {0x454C4741, 0x02000000, 0x00000001},
+ {0x454C4742, 0x01000000, 0x00000001},
+ {0x454C4759, 0x04000000, 0x00000002},
+ {0x454C4859, 0x08000000, 0x00000003},
+ {0x454C4A41, 0x04000000, 0x00000001},
+ {0x454C4A42, 0x02000000, 0x00000002},
+ {0x454C4A59, 0x01000000, 0x00000002},
+ {0x454C4B54, 0x02000000, 0x00000002},
+ {0x454C4C42, 0x01000000, 0x00000003},
+ {0x454C4C54, 0x04000000, 0x00000001},
+ {0x454C4D41, 0x02000000, 0x00000002},
+ {0x454C4D42, 0x00800000, 0x00000001},
+ {0x454C4D43, 0x04000000, 0x00000002},
+ {0x454C4D54, 0x04000000, 0x00000002},
+ {0x454C4E41, 0x04000000, 0x00000001},
+ {0x454C4E42, 0x01000000, 0x00000001},
+ {0x454C4E59, 0x04000000, 0x00000001},
+ {0x454C4F43, 0x08000000, 0x00000003},
+ {0x454C5041, 0x00800000, 0x00000002},
+ {0x454C5043, 0x01000000, 0x00000001},
+ {0x454C5059, 0x00800000, 0x00000001},
+ {0x454C5141, 0x00800000, 0x00000001},
+ {0x454C5142, 0x00800000, 0x00000003},
+ {0x454C5159, 0x08000000, 0x00000002},
+ {0x454C5242, 0x01000000, 0x00000001},
+ {0x454C5243, 0x02000000, 0x00000001},
+ {0x454C5259, 0x02000000, 0x00000001},
+ {0x454C5341, 0x01000000, 0x00000001},
+ {0x454C5342, 0x02000000, 0x00000003},
+ {0x454C5343, 0x00800000, 0x00000002},
+ {0x454C5359, 0x10000000, 0x00000005},
+ {0x454C5441, 0x01000000, 0x00000001},
+ {0x454C5459, 0x00800000, 0x00000002},
+ {0x454C5541, 0x00800000, 0x00000002},
+ {0x454C5741, 0x08000000, 0x00000003},
+ {0x454C5759, 0x02000000, 0x00000001},
+ {0x454C5841, 0x04000000, 0x00000001},
+ {0x454C5942, 0x02000000, 0x00000001},
+ {0x454C5A41, 0x08000000, 0x00000007},
+ {0x454D3241, 0x00800000, 0x00000001},
+ {0x454D3243, 0x02000000, 0x00000002},
+ {0x454D3259, 0x02000000, 0x00000008},
+ {0x454D3341, 0x08000000, 0x00000002},
+ {0x454D3342, 0x04000000, 0x00000002},
+ {0x454D3442, 0x02000000, 0x00000001},
+ {0x454D3443, 0x04000000, 0x00000001},
+ {0x454D3542, 0x01000000, 0x00000001},
+ {0x454D3543, 0x01000000, 0x00000001},
+ {0x454D3643, 0x04000000, 0x00000002},
+ {0x454D3741, 0x02000000, 0x00000001},
+ {0x454D3742, 0x01000000, 0x00000001},
+ {0x454D3743, 0x01000000, 0x00000003},
+ {0x454D4143, 0x01000000, 0x00000002},
+ {0x454D4154, 0x02000000, 0x00000001},
+ {0x454D4159, 0x00800000, 0x00000001},
+ {0x454D4241, 0x00800000, 0x00000001},
+ {0x454D4242, 0x00800000, 0x00000001},
+ {0x454D4243, 0x02000000, 0x00000002},
+ {0x454D4341, 0x01000000, 0x00000001},
+ {0x454D4342, 0x04000000, 0x00000001},
+ {0x454D4343, 0x04000000, 0x00000002},
+ {0x454D4354, 0x04000000, 0x00000002},
+ {0x454D4356, 0x04000000, 0x00000002},
+ {0x454D4359, 0x02000000, 0x00000001},
+ {0x454D4441, 0x02000000, 0x00000005},
+ {0x454D4459, 0x02000000, 0x00000002},
+ {0x454D4643, 0x04000000, 0x00000003},
+ {0x454D4659, 0x04000000, 0x00000003},
+ {0x454D4742, 0x04000000, 0x00000003},
+ {0x454D4843, 0x04000000, 0x00000002},
+ {0x454D4943, 0x01000000, 0x00000002},
+ {0x454D4959, 0x04000000, 0x00000001},
+ {0x454D4A42, 0x04000000, 0x00000002},
+ {0x454D4A59, 0x00800000, 0x00000002},
+ {0x454D4C54, 0x08000000, 0x00000001},
+ {0x454D4D42, 0x00800000, 0x00000001},
+ {0x454D4D59, 0x02000000, 0x00000001},
+ {0x454D4E41, 0x02000000, 0x00000005},
+ {0x454D4E42, 0x04000000, 0x00000001},
+ {0x454D4E43, 0x04000000, 0x00000001},
+ {0x454D4E59, 0x01000000, 0x00000002},
+ {0x454D5042, 0x02000000, 0x00000001},
+ {0x454D5043, 0x04000000, 0x00000002},
+ {0x454D5141, 0x00800000, 0x00000001},
+ {0x454D5241, 0x04000000, 0x00000002},
+ {0x454D5242, 0x01000000, 0x00000002},
+ {0x454D5259, 0x02000000, 0x00000003},
+ {0x454D5341, 0x01000000, 0x00000002},
+ {0x454D5342, 0x01000000, 0x00000002},
+ {0x454D5459, 0x04000000, 0x00000002},
+ {0x454D5642, 0x02000000, 0x00000001},
+ {0x454D5643, 0x02000000, 0x00000002},
+ {0x454D5741, 0x00800000, 0x00000001},
+ {0x454D5842, 0x04000000, 0x00000002},
+ {0x454D5843, 0x04000000, 0x00000003},
+ {0x454D5A43, 0x02000000, 0x00000001},
+ {0x454E3242, 0x02000000, 0x00000001},
+ {0x454E3243, 0x01000000, 0x00000002},
+ {0x454E3342, 0x02000000, 0x00000001},
+ {0x454E3542, 0x01000000, 0x00000001},
+ {0x454E3543, 0x01000000, 0x00000001},
+ {0x454E3641, 0x08000000, 0x00000003},
+ {0x454E3741, 0x02000000, 0x00000001},
+ {0x454E3742, 0x08000000, 0x00000003},
+ {0x454E3841, 0x02000000, 0x00000005},
+ {0x454E4143, 0x02000000, 0x00000005},
+ {0x454E4259, 0x04000000, 0x00000007},
+ {0x454E4341, 0x01000000, 0x00000002},
+ {0x454E4354, 0x01000000, 0x00000001},
+ {0x454E4441, 0x04000000, 0x00000003},
+ {0x454E4443, 0x08000000, 0x00000001},
+ {0x454E4541, 0x04000000, 0x00000002},
+ {0x454E4543, 0x02000000, 0x00000003},
+ {0x454E4641, 0x02000000, 0x00000002},
+ {0x454E4654, 0x04000000, 0x00000002},
+ {0x454E4656, 0x02000000, 0x00000002},
+ {0x454E4741, 0x02000000, 0x00000001},
+ {0x454E4743, 0x04000000, 0x00000002},
+ {0x454E4759, 0x04000000, 0x00000002},
+ {0x454E4841, 0x04000000, 0x00000001},
+ {0x454E4843, 0x02000000, 0x00000002},
+ {0x454E4859, 0x04000000, 0x00000003},
+ {0x454E4942, 0x00800000, 0x00000001},
+ {0x454E4A41, 0x02000000, 0x00000002},
+ {0x454E4A43, 0x01000000, 0x00000001},
+ {0x454E4B43, 0x08000000, 0x00000002},
+ {0x454E4C41, 0x02000000, 0x00000002},
+ {0x454E4C59, 0x08000000, 0x00000002},
+ {0x454E4D54, 0x01000000, 0x00000002},
+ {0x454E4E42, 0x04000000, 0x00000002},
+ {0x454E4E59, 0x08000000, 0x00000003},
+ {0x454E5041, 0x02000000, 0x00000001},
+ {0x454E5042, 0x01000000, 0x00000002},
+ {0x454E5059, 0x00800000, 0x00000001},
+ {0x454E5142, 0x04000000, 0x00000001},
+ {0x454E5159, 0x04000000, 0x00000002},
+ {0x454E5241, 0x01000000, 0x00000001},
+ {0x454E5341, 0x00800000, 0x00000002},
+ {0x454E5342, 0x02000000, 0x00000001},
+ {0x454E5356, 0x04000000, 0x00000002},
+ {0x454E5442, 0x04000000, 0x00000002},
+ {0x454E5642, 0x04000000, 0x00000001},
+ {0x454E5643, 0x04000000, 0x00000001},
+ {0x454E5842, 0x01000000, 0x00000001},
+ {0x454E5A41, 0x01000000, 0x00000002},
+ {0x454E5A43, 0x04000000, 0x00000002},
+ {0x454F3241, 0x04000000, 0x00000003},
+ {0x454F3341, 0x00800000, 0x00000001},
+ {0x454F3441, 0x02000000, 0x00000005},
+ {0x454F3541, 0x01000000, 0x00000001},
+ {0x454F3542, 0x00800000, 0x00000001},
+ {0x454F3559, 0x08000000, 0x00000000},
+ {0x454F3642, 0x02000000, 0x00000001},
+ {0x454F3659, 0x00800000, 0x00000000},
+ {0x454F3741, 0x02000000, 0x00000001},
+ {0x454F3743, 0x04000000, 0x00000002},
+ {0x454F3842, 0x01000000, 0x00000001},
+ {0x454F3959, 0x00800000, 0x00000000},
+ {0x454F4142, 0x04000000, 0x00000001},
+ {0x454F4143, 0x01000000, 0x00000001},
+ {0x454F4156, 0x04000000, 0x00000001},
+ {0x454F4241, 0x02000000, 0x00000001},
+ {0x454F4259, 0x08000000, 0x00000003},
+ {0x454F4341, 0x04000000, 0x00000005},
+ {0x454F4359, 0x04000000, 0x00000001},
+ {0x454F4641, 0x04000000, 0x00000003},
+ {0x454F4842, 0x04000000, 0x00000001},
+ {0x454F4843, 0x02000000, 0x00000001},
+ {0x454F4942, 0x02000000, 0x00000001},
+ {0x454F4943, 0x01000000, 0x00000008},
+ {0x454F4A42, 0x04000000, 0x00000001},
+ {0x454F4A43, 0x04000000, 0x00000002},
+ {0x454F4B42, 0x04000000, 0x00000003},
+ {0x454F4D41, 0x04000000, 0x00000002},
+ {0x454F4D56, 0x02000000, 0x00000003},
+ {0x454F4D59, 0x04000000, 0x00000001},
+ {0x454F4E41, 0x02000000, 0x00000002},
+ {0x454F4F42, 0x08000000, 0x00000002},
+ {0x454F4F43, 0x04000000, 0x00000002},
+ {0x454F5043, 0x01000000, 0x00000002},
+ {0x454F5059, 0x04000000, 0x00000003},
+ {0x454F5259, 0x04000000, 0x00000002},
+ {0x454F5342, 0x02000000, 0x00000001},
+ {0x454F5356, 0x04000000, 0x00000003},
+ {0x454F5541, 0x00800000, 0x00000001},
+ {0x454F5741, 0x02000000, 0x00000002},
+ {0x454F5742, 0x02000000, 0x00000001},
+ {0x454F5743, 0x00800000, 0x00000001},
+ {0x454F5843, 0x04000000, 0x00000001},
+ {0x454F5A42, 0x04000000, 0x00000003},
+ {0x454F5A43, 0x02000000, 0x00000001},
+ {0x45503342, 0x04000000, 0x00000001},
+ {0x45503343, 0x04000000, 0x00000002},
+ {0x45503441, 0x02000000, 0x00000002},
+ {0x45503541, 0x04000000, 0x00000001},
+ {0x45503643, 0x04000000, 0x00000007},
+ {0x45503659, 0x04000000, 0x00000000},
+ {0x45503741, 0x02000000, 0x00000001},
+ {0x45503743, 0x04000000, 0x00000002},
+ {0x45503859, 0x00800000, 0x00000008},
+ {0x45504143, 0x02000000, 0x00000003},
+ {0x45504243, 0x01000000, 0x00000002},
+ {0x45504259, 0x02000000, 0x00000001},
+ {0x45504341, 0x00800000, 0x00000002},
+ {0x45504342, 0x04000000, 0x00000002},
+ {0x45504442, 0x00800000, 0x00000001},
+ {0x45504443, 0x01000000, 0x00000002},
+ {0x45504542, 0x01000000, 0x00000002},
+ {0x45504543, 0x08000000, 0x00000002},
+ {0x45504643, 0x04000000, 0x00000002},
+ {0x45504659, 0x01000000, 0x00000001},
+ {0x45504741, 0x04000000, 0x00000002},
+ {0x45504743, 0x02000000, 0x00000001},
+ {0x45504754, 0x02000000, 0x00000001},
+ {0x45504841, 0x04000000, 0x00000001},
+ {0x45504941, 0x00800000, 0x00000008},
+ {0x45504A41, 0x00800000, 0x00000001},
+ {0x45504A43, 0x04000000, 0x00000002},
+ {0x45504B41, 0x01000000, 0x00000001},
+ {0x45504C41, 0x00800000, 0x00000001},
+ {0x45504C42, 0x04000000, 0x00000002},
+ {0x45504C43, 0x04000000, 0x00000003},
+ {0x45504C54, 0x02000000, 0x00000001},
+ {0x45504C59, 0x00800000, 0x00000002},
+ {0x45504D41, 0x02000000, 0x00000002},
+ {0x45504D43, 0x04000000, 0x00000001},
+ {0x45504E41, 0x01000000, 0x00000001},
+ {0x45504E59, 0x04000000, 0x00000002},
+ {0x45504F41, 0x00800000, 0x00000001},
+ {0x45504F43, 0x01000000, 0x00000003},
+ {0x45504F59, 0x01000000, 0x00000001},
+ {0x45505041, 0x001A68C8, 0x00000002},
+ {0x45505043, 0x04000000, 0x00000005},
+ {0x45505056, 0x02000000, 0x00000001},
+ {0x45505141, 0x02000000, 0x00000002},
+ {0x45505143, 0x01000000, 0x00000001},
+ {0x45505159, 0x04000000, 0x00000002},
+ {0x45505241, 0x04000000, 0x00000001},
+ {0x45505242, 0x08000000, 0x00000002},
+ {0x45505243, 0x02000000, 0x00000001},
+ {0x45505256, 0x02000000, 0x00000001},
+ {0x45505341, 0x02000000, 0x00000003},
+ {0x45505342, 0x01000000, 0x00000002},
+ {0x45505343, 0x10000000, 0x00000003},
+ {0x45505356, 0x02000000, 0x00000002},
+ {0x45505359, 0x02000000, 0x00000005},
+ {0x45505442, 0x04000000, 0x00000002},
+ {0x45505642, 0x08000000, 0x00000006},
+ {0x45505659, 0x08000000, 0x00000003},
+ {0x45505741, 0x01000000, 0x00000001},
+ {0x45505742, 0x00800000, 0x00000001},
+ {0x45505743, 0x02000000, 0x00000002},
+ {0x45505841, 0x02000000, 0x00000005},
+ {0x45505843, 0x02000000, 0x00000001},
+ {0x45513543, 0x01000000, 0x00000002},
+ {0x45513643, 0x08000000, 0x00000001},
+ {0x45513741, 0x02000000, 0x00000001},
+ {0x45513841, 0x02000000, 0x00000005},
+ {0x45514141, 0x00800000, 0x00000000},
+ {0x45514242, 0x00800000, 0x00000001},
+ {0x45514243, 0x02000000, 0x00000002},
+ {0x45514342, 0x01000000, 0x00000001},
+ {0x45514359, 0x04000000, 0x00000002},
+ {0x45514441, 0x04000000, 0x00000002},
+ {0x45514459, 0x10000000, 0x00000003},
+ {0x45514559, 0x00800000, 0x00000001},
+ {0x45514641, 0x04000000, 0x00000002},
+ {0x45514643, 0x01000000, 0x00000001},
+ {0x45514741, 0x02000000, 0x00000003},
+ {0x45514742, 0x02000000, 0x00000002},
+ {0x45514743, 0x04000000, 0x00000003},
+ {0x45514759, 0x04000000, 0x00000002},
+ {0x45514841, 0x02000000, 0x00000001},
+ {0x45514943, 0x02000000, 0x00000002},
+ {0x45514A41, 0x01000000, 0x00000002},
+ {0x45514A43, 0x00800000, 0x00000002},
+ {0x45514A59, 0x01000000, 0x00000001},
+ {0x45514B41, 0x02000000, 0x00000001},
+ {0x45514B42, 0x04000000, 0x00000001},
+ {0x45514B43, 0x02000000, 0x00000001},
+ {0x45514C43, 0x04000000, 0x00000001},
+ {0x45514D41, 0x04000000, 0x00000005},
+ {0x45514E41, 0x00800000, 0x00000002},
+ {0x45514E42, 0x02000000, 0x00000001},
+ {0x45514F43, 0x04000000, 0x00000002},
+ {0x45515042, 0x02000000, 0x00000001},
+ {0x45515043, 0x02000000, 0x00000001},
+ {0x45515141, 0x02000000, 0x00000002},
+ {0x45515242, 0x01000000, 0x00000001},
+ {0x45515243, 0x02000000, 0x00000001},
+ {0x45515259, 0x02000000, 0x00000001},
+ {0x45515341, 0x00800000, 0x00000002},
+ {0x45515343, 0x01000000, 0x00000001},
+ {0x45515359, 0x02000000, 0x00000002},
+ {0x45515442, 0x01000000, 0x00000001},
+ {0x45515641, 0x02000000, 0x00000002},
+ {0x45515742, 0x01000000, 0x00000001},
+ {0x45515743, 0x02000000, 0x00000001},
+ {0x45515759, 0x00800000, 0x00000001},
+ {0x45515842, 0x02000000, 0x00000001},
+ {0x45515941, 0x00800000, 0x00000002},
+ {0x45515943, 0x04000000, 0x00000001},
+ {0x45515A43, 0x01000000, 0x00000001},
+ {0x45523342, 0x08000000, 0x00000005},
+ {0x45523442, 0x02000000, 0x00000001},
+ {0x45523443, 0x02000000, 0x00000001},
+ {0x45523459, 0x04000000, 0x00000008},
+ {0x45523542, 0x10000000, 0x00000001},
+ {0x45523559, 0x04000000, 0x00000008},
+ {0x45523641, 0x04000000, 0x00000003},
+ {0x45523642, 0x08000000, 0x00000002},
+ {0x45523659, 0x04000000, 0x00000008},
+ {0x45523741, 0x02000000, 0x00000001},
+ {0x45524141, 0x00800000, 0x00000008},
+ {0x45524143, 0x01000000, 0x00000002},
+ {0x45524159, 0x01000000, 0x00000001},
+ {0x45524241, 0x04000000, 0x00000002},
+ {0x45524254, 0x04000000, 0x00000001},
+ {0x45524256, 0x02000000, 0x00000001},
+ {0x45524259, 0x04000000, 0x00000001},
+ {0x45524341, 0x02000000, 0x00000001},
+ {0x45524343, 0x00800000, 0x00000002},
+ {0x45524354, 0x00800000, 0x00000001},
+ {0x45524441, 0x01000000, 0x00000002},
+ {0x45524442, 0x04000000, 0x00000005},
+ {0x45524443, 0x00800000, 0x00000001},
+ {0x45524459, 0x00800000, 0x00000001},
+ {0x45524541, 0x01000000, 0x00000002},
+ {0x45524542, 0x02000000, 0x00000001},
+ {0x45524543, 0x02000000, 0x00000003},
+ {0x45524559, 0x04000000, 0x00000003},
+ {0x45524641, 0x04000000, 0x00000001},
+ {0x45524643, 0x08000000, 0x00000002},
+ {0x45524659, 0x01000000, 0x00000001},
+ {0x45524756, 0x04000000, 0x00000001},
+ {0x45524841, 0x02000000, 0x00000002},
+ {0x45524842, 0x02000000, 0x00000001},
+ {0x45524859, 0x01000000, 0x00000002},
+ {0x45524942, 0x01000000, 0x00000001},
+ {0x45524943, 0x04000000, 0x00000002},
+ {0x45524959, 0x04000000, 0x00000001},
+ {0x45524A41, 0x08000000, 0x00000005},
+ {0x45524A42, 0x01000000, 0x00000001},
+ {0x45524A43, 0x08000000, 0x00000003},
+ {0x45524B42, 0x02000000, 0x00000001},
+ {0x45524C42, 0x10000000, 0x00000001},
+ {0x45524C43, 0x04000000, 0x00000003},
+ {0x45524C54, 0x08000000, 0x00000001},
+ {0x45524C59, 0x01000000, 0x00000002},
+ {0x45524D43, 0x02000000, 0x00000002},
+ {0x45524E42, 0x04000000, 0x00000003},
+ {0x45524E43, 0x04000000, 0x00000002},
+ {0x45524F55, 0x08000000, 0x00000008},
+ {0x45525041, 0x02000000, 0x00000002},
+ {0x45525042, 0x00800000, 0x00000001},
+ {0x45525043, 0x04000000, 0x00000002},
+ {0x45525059, 0x02000000, 0x00000002},
+ {0x45525143, 0x04000000, 0x00000002},
+ {0x45525241, 0x02000000, 0x00000002},
+ {0x45525243, 0x02000000, 0x00000005},
+ {0x45525254, 0x01000000, 0x00000001},
+ {0x45525259, 0x02000000, 0x00000002},
+ {0x45525342, 0x01000000, 0x00000001},
+ {0x45525359, 0x01000000, 0x00000005},
+ {0x45525441, 0x01000000, 0x00000002},
+ {0x45525443, 0x02000000, 0x00000003},
+ {0x45525459, 0x04000000, 0x00000001},
+ {0x45525542, 0x01000000, 0x00000001},
+ {0x45525741, 0x02000000, 0x00000005},
+ {0x45525759, 0x04000000, 0x00000001},
+ {0x45525843, 0x04000000, 0x00000001},
+ {0x45525942, 0x08000000, 0x00000001},
+ {0x45525959, 0x04000000, 0x00000001},
+ {0x45525A42, 0x00800000, 0x00000001},
+ {0x45525A43, 0x02000000, 0x00000001},
+ {0x45533241, 0x04000000, 0x00000002},
+ {0x45533242, 0x08000000, 0x00000002},
+ {0x45533243, 0x08000000, 0x00000004},
+ {0x45533341, 0x02000000, 0x00000001},
+ {0x45533459, 0x08000000, 0x00000008},
+ {0x45533543, 0x08000000, 0x00000001},
+ {0x45533559, 0x04000000, 0x00000008},
+ {0x45533641, 0x04000000, 0x00000001},
+ {0x45533642, 0x04000000, 0x00000001},
+ {0x45533741, 0x02000000, 0x00000001},
+ {0x45533759, 0x04000000, 0x00000008},
+ {0x45533842, 0x04000000, 0x00000002},
+ {0x45533859, 0x00800000, 0x00000000},
+ {0x45534143, 0x02000000, 0x00000001},
+ {0x45534154, 0x01000000, 0x00000001},
+ {0x45534242, 0x02000000, 0x00000001},
+ {0x45534243, 0x01000000, 0x00000002},
+ {0x45534256, 0x02000000, 0x00000001},
+ {0x45534342, 0x04000000, 0x00000002},
+ {0x45534354, 0x04000000, 0x00000005},
+ {0x45534359, 0x00800000, 0x00000001},
+ {0x45534443, 0x08000000, 0x00000001},
+ {0x45534542, 0x04000000, 0x00000001},
+ {0x45534556, 0x04000000, 0x00000001},
+ {0x45534641, 0x02000000, 0x00000002},
+ {0x45534656, 0x08000000, 0x00000003},
+ {0x45534743, 0x08000000, 0x00000001},
+ {0x45534754, 0x02000000, 0x00000001},
+ {0x45534759, 0x04000000, 0x00000003},
+ {0x45534841, 0x02000000, 0x00000002},
+ {0x45534844, 0x02000000, 0xFFFFFFFF},
+ {0x45534859, 0x02000000, 0x00000003},
+ {0x45534941, 0x01000000, 0x00000001},
+ {0x45534959, 0x04000000, 0x00000002},
+ {0x45534A42, 0x04000000, 0x00000003},
+ {0x45534A56, 0x04000000, 0x00000003},
+ {0x45534B54, 0x02000000, 0x00000002},
+ {0x45534C42, 0x04000000, 0x00000001},
+ {0x45534C54, 0x01000000, 0x00000001},
+ {0x45534D43, 0x02000000, 0x00000003},
+ {0x45534D54, 0x01000000, 0x00000001},
+ {0x45534E41, 0x01000000, 0x00000001},
+ {0x45534E42, 0x01000000, 0x00000001},
+ {0x45534E43, 0x04000000, 0x00000002},
+ {0x45534F41, 0x08000000, 0x00000005},
+ {0x45534F43, 0x02000000, 0x00000001},
+ {0x45535043, 0x04000000, 0x00000002},
+ {0x45535143, 0x02000000, 0x00000001},
+ {0x45535243, 0x00800000, 0x00000001},
+ {0x45535341, 0x04000000, 0x00000002},
+ {0x45535342, 0x01000000, 0x00000002},
+ {0x45535359, 0x04000000, 0x00000003},
+ {0x45535541, 0x04000000, 0x00000001},
+ {0x45535543, 0x02000000, 0x00000001},
+ {0x45535559, 0x00800000, 0x00000001},
+ {0x45535641, 0x02000000, 0x00000002},
+ {0x45535643, 0x02000000, 0x00000001},
+ {0x45535659, 0x02000000, 0x00000003},
+ {0x45535741, 0x01000000, 0x00000002},
+ {0x45535759, 0x08000000, 0x00000003},
+ {0x45535842, 0x04000000, 0x00000003},
+ {0x45535843, 0x01000000, 0x00000001},
+ {0x45535943, 0x04000000, 0x00000002},
+ {0x45535A42, 0x00800000, 0x00000001},
+ {0x45543241, 0x02000000, 0x00000001},
+ {0x45543341, 0x02000000, 0x00000002},
+ {0x45543343, 0x04000000, 0x00000003},
+ {0x45543442, 0x01000000, 0x00000002},
+ {0x45543541, 0x02000000, 0x00000005},
+ {0x45543542, 0x00800000, 0x00000001},
+ {0x45543543, 0x02000000, 0x00000005},
+ {0x45543559, 0x00800000, 0x00000008},
+ {0x45543641, 0x04000000, 0x00000001},
+ {0x45543642, 0x04000000, 0x00000002},
+ {0x45543643, 0x01000000, 0x00000002},
+ {0x45543741, 0x02000000, 0x00000001},
+ {0x45543841, 0x02000000, 0x00000002},
+ {0x45544142, 0x04000000, 0x00000002},
+ {0x45544143, 0x02000000, 0x00000002},
+ {0x45544154, 0x02000000, 0x00000001},
+ {0x45544156, 0x02000000, 0x00000001},
+ {0x45544159, 0x01000000, 0x00000002},
+ {0x45544241, 0x02000000, 0x00000001},
+ {0x45544254, 0x01000000, 0x00000001},
+ {0x45544256, 0x02000000, 0x00000002},
+ {0x45544259, 0x08000000, 0x00000003},
+ {0x45544341, 0x02000000, 0x00000001},
+ {0x45544359, 0x02000000, 0x00000001},
+ {0x45544454, 0x10000000, 0x00000008},
+ {0x45544459, 0x04000000, 0x00000003},
+ {0x45544559, 0x01000000, 0x00000001},
+ {0x45544641, 0x00800000, 0x00000001},
+ {0x45544659, 0x04000000, 0x00000005},
+ {0x45544742, 0x08000000, 0x00000002},
+ {0x45544759, 0x02000000, 0x00000001},
+ {0x45544941, 0x00800000, 0x00000001},
+ {0x45544943, 0x01000000, 0x00000001},
+ {0x45544959, 0x01000000, 0x00000001},
+ {0x45544A41, 0x02000000, 0x00000001},
+ {0x45544A56, 0x04000000, 0x00000001},
+ {0x45544B43, 0x04000000, 0x00000002},
+ {0x45544C41, 0x00800000, 0x00000001},
+ {0x45544C42, 0x00800000, 0x00000001},
+ {0x45544C59, 0x08000000, 0x00000002},
+ {0x45544D41, 0x04000000, 0x00000002},
+ {0x45544D42, 0x08000000, 0x00000003},
+ {0x45544D43, 0x02000000, 0x00000001},
+ {0x45544D54, 0x04000000, 0x00000002},
+ {0x45544E41, 0x04000000, 0x00000002},
+ {0x45545041, 0x01000000, 0x00000002},
+ {0x45545054, 0x08000000, 0x00000001},
+ {0x45545059, 0x02000000, 0x00000005},
+ {0x45545141, 0x01000000, 0x00000002},
+ {0x45545143, 0x04000000, 0x00000003},
+ {0x45545259, 0x02000000, 0x00000002},
+ {0x45545341, 0x02000000, 0x00000001},
+ {0x45545343, 0x04000000, 0x00000001},
+ {0x45545359, 0x04000000, 0x00000001},
+ {0x45545541, 0x01000000, 0x00000001},
+ {0x45545543, 0x01000000, 0x00000001},
+ {0x45545559, 0x04000000, 0x00000002},
+ {0x45545659, 0x02000000, 0x00000001},
+ {0x45545741, 0x00800000, 0x00000001},
+ {0x45545743, 0x02000000, 0x00000001},
+ {0x45545841, 0x00800000, 0x00000001},
+ {0x45545942, 0x08000000, 0x00000002},
+ {0x45545959, 0x01000000, 0x00000002},
+ {0x45545A41, 0x01000000, 0x00000005},
+ {0x45545A59, 0x01000000, 0x00000005},
+ {0x45553242, 0x02000000, 0x00000001},
+ {0x45553342, 0x02000000, 0x00000002},
+ {0x45553459, 0x02000000, 0x00000008},
+ {0x45553541, 0x02000000, 0x00000005},
+ {0x45553542, 0x04000000, 0x00000002},
+ {0x45553543, 0x02000000, 0x00000002},
+ {0x45553559, 0x01000000, 0x00000000},
+ {0x45553659, 0x01000000, 0x00000000},
+ {0x45553743, 0x02000000, 0x00000001},
+ {0x45554159, 0x04000000, 0x00000003},
+ {0x45554241, 0x04000000, 0x00000005},
+ {0x45554242, 0x04000000, 0x00000003},
+ {0x45554259, 0x08000000, 0x00000003},
+ {0x45554341, 0x04000000, 0x00000005},
+ {0x45554342, 0x01000000, 0x00000001},
+ {0x45554359, 0x00400000, 0x00000003},
+ {0x45554442, 0x02000000, 0x00000001},
+ {0x45554443, 0x01000000, 0x00000003},
+ {0x45554454, 0x00800000, 0x00000001},
+ {0x45554543, 0x04000000, 0x00000002},
+ {0x45554641, 0x01000000, 0x00000003},
+ {0x45554642, 0x01000000, 0x00000001},
+ {0x45554854, 0x02000000, 0x00000001},
+ {0x45554859, 0x00800000, 0x00000001},
+ {0x45554942, 0x01000000, 0x00000001},
+ {0x45554943, 0x04000000, 0x00000002},
+ {0x45554A59, 0x04000000, 0x00000002},
+ {0x45554B41, 0x04000000, 0x00000001},
+ {0x45554B42, 0x08000000, 0x00000005},
+ {0x45554B56, 0x04000000, 0x00000001},
+ {0x45554C54, 0x04000000, 0x00000001},
+ {0x45554D41, 0x00800000, 0x00000001},
+ {0x45554D42, 0x04000000, 0x00000001},
+ {0x45554D43, 0x01000000, 0x00000003},
+ {0x45554D59, 0x04000000, 0x00000002},
+ {0x45554E41, 0x01000000, 0x00000001},
+ {0x45554F43, 0x00800000, 0x00000003},
+ {0x45555043, 0x08000000, 0x00000006},
+ {0x45555054, 0x01000000, 0x00000001},
+ {0x45555159, 0x08000000, 0x00000003},
+ {0x45555242, 0x01000000, 0x00000001},
+ {0x45555341, 0x04000000, 0x00000003},
+ {0x45555343, 0x02000000, 0x00000001},
+ {0x45555442, 0x04000000, 0x00000002},
+ {0x45555741, 0x02000000, 0x00000001},
+ {0x45555742, 0x01000000, 0x00000002},
+ {0x45555743, 0x04000000, 0x00000001},
+ {0x45555841, 0x02000000, 0x00000001},
+ {0x45555843, 0x08000000, 0x00000002},
+ {0x45555943, 0x01000000, 0x00000002},
+ {0x45555959, 0x04000000, 0x00000001},
+ {0x45555A42, 0x02000000, 0x00000002},
+ {0x45555A56, 0x02000000, 0x00000002},
+ {0x45563241, 0x00800000, 0x00000001},
+ {0x45563242, 0x01000000, 0x00000001},
+ {0x45563341, 0x04000000, 0x00000003},
+ {0x45563342, 0x02000000, 0x00000001},
+ {0x45563542, 0x04000000, 0x00000001},
+ {0x45563559, 0x00800000, 0x00000008},
+ {0x45563642, 0x00800000, 0x00000001},
+ {0x45563643, 0x02000000, 0x00000001},
+ {0x45563742, 0x00800000, 0x00000001},
+ {0x45564142, 0x04000000, 0x00000001},
+ {0x45564143, 0x02000000, 0x00000002},
+ {0x45564156, 0x04000000, 0x00000001},
+ {0x45564159, 0x04000000, 0x00000002},
+ {0x45564242, 0x00800000, 0x00000001},
+ {0x45564256, 0x02000000, 0x00000001},
+ {0x45564259, 0x02000000, 0x00000002},
+ {0x45564341, 0x04000000, 0x00000002},
+ {0x45564359, 0x01000000, 0x00000003},
+ {0x45564441, 0x01000000, 0x00000001},
+ {0x45564442, 0x02000000, 0x00000001},
+ {0x45564443, 0x01000000, 0x00000001},
+ {0x45564454, 0x08000000, 0x00000003},
+ {0x45564459, 0x00800000, 0x00000002},
+ {0x45564641, 0x04000000, 0x00000001},
+ {0x45564643, 0x02000000, 0x00000002},
+ {0x45564741, 0x02000000, 0x00000002},
+ {0x45564841, 0x01000000, 0x00000001},
+ {0x45564842, 0x02000000, 0x00000001},
+ {0x45564843, 0x02000000, 0x00000003},
+ {0x45564854, 0x04000000, 0x00000001},
+ {0x45564942, 0x00800000, 0x00000001},
+ {0x45564959, 0x08000000, 0x00000003},
+ {0x45564A59, 0x01000000, 0x00000002},
+ {0x45564C41, 0x01000000, 0x00000002},
+ {0x45564C54, 0x02000000, 0x00000002},
+ {0x45564D41, 0x04000000, 0x00000001},
+ {0x45564D42, 0x00800000, 0x00000001},
+ {0x45564D43, 0x00800000, 0x00000001},
+ {0x45564D59, 0x00800000, 0x00000001},
+ {0x45564E43, 0x10000000, 0x00000005},
+ {0x45564F59, 0x00800000, 0x00000001},
+ {0x45565041, 0x00800000, 0x00000002},
+ {0x45565042, 0x00800000, 0x00000004},
+ {0x45565043, 0x04000000, 0x00000002},
+ {0x45565056, 0x04000000, 0x00000002},
+ {0x45565059, 0x04000000, 0x00000001},
+ {0x45565141, 0x01000000, 0x00000002},
+ {0x45565143, 0x04000000, 0x00000001},
+ {0x45565159, 0x01000000, 0x00000001},
+ {0x45565241, 0x02000000, 0x00000003},
+ {0x45565242, 0x01000000, 0x00000002},
+ {0x45565259, 0x02000000, 0x00000005},
+ {0x45565341, 0x00800000, 0x00000001},
+ {0x45565342, 0x02000000, 0x00000001},
+ {0x45565343, 0x02000000, 0x00000005},
+ {0x45565441, 0x01000000, 0x00000001},
+ {0x45565442, 0x02000000, 0x00000002},
+ {0x45565459, 0x08000000, 0x00000003},
+ {0x45565642, 0x01000000, 0x00000002},
+ {0x45565741, 0x01000000, 0x00000001},
+ {0x45565742, 0x02000000, 0x00000001},
+ {0x45565756, 0x04000000, 0x00000001},
+ {0x45565841, 0x04000000, 0x00000003},
+ {0x45565842, 0x02000000, 0x00000001},
+ {0x45565A41, 0x00800000, 0x00000001},
+ {0x45565A42, 0x04000000, 0x00000002},
+ {0x45565A43, 0x02000000, 0x00000001},
+ {0x45573241, 0x04000000, 0x00000001},
+ {0x45573259, 0x04000000, 0x00000008},
+ {0x45573341, 0x04000000, 0x00000002},
+ {0x45573342, 0x04000000, 0x00000002},
+ {0x45573543, 0x01000000, 0x00000002},
+ {0x45573641, 0x02000000, 0x00000002},
+ {0x45573642, 0x08000000, 0x00000002},
+ {0x45573643, 0x02000000, 0x00000002},
+ {0x45573742, 0x01000000, 0x00000002},
+ {0x45573759, 0x00800000, 0x00000001},
+ {0x45574159, 0x04000000, 0x00000002},
+ {0x45574259, 0x01000000, 0x00000002},
+ {0x45574343, 0x02000000, 0x00000002},
+ {0x45574354, 0x02000000, 0x00000001},
+ {0x45574356, 0x02000000, 0x00000002},
+ {0x45574442, 0x02000000, 0x00000001},
+ {0x45574459, 0x02000000, 0x00000005},
+ {0x45574542, 0x04000000, 0x00000002},
+ {0x45574641, 0x01000000, 0x00000001},
+ {0x45574643, 0x01000000, 0x00000001},
+ {0x45574659, 0x00800000, 0x00000001},
+ {0x45574741, 0x01000000, 0x00000002},
+ {0x45574743, 0x00800000, 0x00000001},
+ {0x45574759, 0x00800000, 0x00000001},
+ {0x45574842, 0x00800000, 0x00000001},
+ {0x45574856, 0x04000000, 0x00000002},
+ {0x45574859, 0x02000000, 0x00000001},
+ {0x45574942, 0x02000000, 0x00000002},
+ {0x45574A43, 0x00800000, 0x00000001},
+ {0x45574A56, 0x02000000, 0x00000003},
+ {0x45574B41, 0x04000000, 0x00000002},
+ {0x45574B42, 0x00800000, 0x00000002},
+ {0x45574B59, 0x08000000, 0x00000003},
+ {0x45574C41, 0x02000000, 0x00000001},
+ {0x45574C43, 0x10000000, 0x00000002},
+ {0x45574D41, 0x04000000, 0x00000002},
+ {0x45574D49, 0x04000000, 0x00000007},
+ {0x45574E41, 0x02000000, 0x00000002},
+ {0x45574E59, 0x02000000, 0x00000001},
+ {0x45574F41, 0x00800000, 0x00000001},
+ {0x45575041, 0x02000000, 0x00000001},
+ {0x45575042, 0x01000000, 0x00000001},
+ {0x45575043, 0x04000000, 0x00000002},
+ {0x45575141, 0x01000000, 0x00000001},
+ {0x45575243, 0x02000000, 0x00000002},
+ {0x45575254, 0x02000000, 0x00000002},
+ {0x45575259, 0x02000000, 0x00000005},
+ {0x45575341, 0x02000000, 0x00000001},
+ {0x45575343, 0x04000000, 0x00000001},
+ {0x45575359, 0x00800000, 0x00000001},
+ {0x45575441, 0x02000000, 0x00000002},
+ {0x45575442, 0x02000000, 0x00000001},
+ {0x45575443, 0x08000000, 0x00000001},
+ {0x45575641, 0x02000000, 0x00000002},
+ {0x45575741, 0x02000000, 0x00000001},
+ {0x45575842, 0x00800000, 0x00000001},
+ {0x45575941, 0x02000000, 0x00000002},
+ {0x45575943, 0x01000000, 0x00000001},
+ {0x45575959, 0x02000000, 0x00000001},
+ {0x45575A41, 0x02000000, 0x00000002},
+ {0x45583242, 0x02000000, 0x00000002},
+ {0x45583341, 0x04000000, 0x00000001},
+ {0x45583342, 0x01000000, 0x00000001},
+ {0x45583659, 0x00800000, 0x00000000},
+ {0x45584154, 0x00800000, 0x00000001},
+ {0x45584241, 0x02000000, 0x00000002},
+ {0x45584242, 0x00800000, 0x00000001},
+ {0x45584243, 0x01000000, 0x00000003},
+ {0x45584259, 0x00800000, 0x00000001},
+ {0x45584341, 0x01000000, 0x00000003},
+ {0x45584343, 0x01000000, 0x00000003},
+ {0x45584359, 0x02000000, 0x00000002},
+ {0x45584456, 0x04000000, 0x00000001},
+ {0x45584542, 0x01000000, 0x00000001},
+ {0x45584559, 0x02000000, 0x00000002},
+ {0x45584641, 0x08000000, 0x00000003},
+ {0x45584642, 0x04000000, 0x00000002},
+ {0x45584643, 0x01000000, 0x00000001},
+ {0x45584659, 0x02000000, 0x00000001},
+ {0x45584741, 0x08000000, 0x00000003},
+ {0x45584759, 0x08000000, 0x00000002},
+ {0x45584841, 0x00800000, 0x00000001},
+ {0x45584843, 0x02000000, 0x00000003},
+ {0x45584859, 0x01000000, 0x00000001},
+ {0x45584A43, 0x01000000, 0x00000001},
+ {0x45584B43, 0x01000000, 0x00000001},
+ {0x45584C41, 0x02000000, 0x00000001},
+ {0x45584C59, 0x00800000, 0x00000001},
+ {0x45584D41, 0x01000000, 0x00000001},
+ {0x45584D42, 0x02000000, 0x00000001},
+ {0x45584D43, 0x01000000, 0x00000001},
+ {0x45584D59, 0x00800000, 0x00000001},
+ {0x45584E41, 0x02000000, 0x00000001},
+ {0x45584E42, 0x04000000, 0x00000002},
+ {0x45584E59, 0x00800000, 0x00000002},
+ {0x45585159, 0x01000000, 0x00000001},
+ {0x45585343, 0x01000000, 0x00000001},
+ {0x45585359, 0x01000000, 0x00000001},
+ {0x45585441, 0x01000000, 0x00000002},
+ {0x45585442, 0x04000000, 0x00000001},
+ {0x45585443, 0x01000000, 0x00000001},
+ {0x45585543, 0x04000000, 0x00000001},
+ {0x45585559, 0x04000000, 0x00000003},
+ {0x45585641, 0x01000000, 0x00000001},
+ {0x45585643, 0x04000000, 0x00000002},
+ {0x45585741, 0x01000000, 0x00000002},
+ {0x45585842, 0x02000000, 0x00000001},
+ {0x45585859, 0x04000000, 0x00000002},
+ {0x45585941, 0x08000000, 0x00000005},
+ {0x45585942, 0x10000000, 0x00000003},
+ {0x45585943, 0x02000000, 0x00000001},
+ {0x45585A42, 0x02000000, 0x00000001},
+ {0x45585A59, 0x04000000, 0x00000002},
+ {0x45593341, 0x04000000, 0x00000003},
+ {0x45593342, 0x02000000, 0x00000001},
+ {0x45593459, 0x01000000, 0x00000008},
+ {0x45593559, 0x01000000, 0x00000008},
+ {0x45593641, 0x01000000, 0x00000002},
+ {0x45593742, 0x01000000, 0x00000002},
+ {0x45593759, 0x00800000, 0x00000008},
+ {0x45594143, 0x02000000, 0x00000001},
+ {0x45594159, 0x02000000, 0x00000001},
+ {0x45594242, 0x00800000, 0x00000001},
+ {0x45594243, 0x02000000, 0x00000001},
+ {0x45594259, 0x02000000, 0x00000001},
+ {0x45594343, 0x01000000, 0x00000001},
+ {0x45594354, 0x04000000, 0x00000002},
+ {0x45594359, 0x00800000, 0x00000001},
+ {0x45594442, 0x04000000, 0x00000002},
+ {0x45594542, 0x01000000, 0x00000001},
+ {0x45594543, 0x02000000, 0x00000001},
+ {0x45594641, 0x04000000, 0x00000001},
+ {0x45594659, 0x04000000, 0x00000005},
+ {0x45594741, 0x04000000, 0x00000005},
+ {0x45594756, 0x02000000, 0x00000002},
+ {0x45594842, 0x01000000, 0x00000001},
+ {0x45594843, 0x01000000, 0x00000001},
+ {0x45594941, 0x02000000, 0x00000001},
+ {0x45594943, 0x04000000, 0x00000002},
+ {0x45594959, 0x01000000, 0x00000001},
+ {0x45594B41, 0x01000000, 0x00000003},
+ {0x45594B42, 0x02000000, 0x00000002},
+ {0x45594C41, 0x04000000, 0x00000001},
+ {0x45594C59, 0x02000000, 0x00000002},
+ {0x45594D42, 0x01000000, 0x00000002},
+ {0x45594D56, 0x04000000, 0x00000001},
+ {0x45594D59, 0x08000000, 0x00000002},
+ {0x45594E41, 0x04000000, 0x00000003},
+ {0x45594E42, 0x04000000, 0x00000001},
+ {0x45594E43, 0x04000000, 0x00000002},
+ {0x45594E59, 0x00800000, 0x00000001},
+ {0x45594F41, 0x01000000, 0x00000002},
+ {0x45594F43, 0x04000000, 0x00000002},
+ {0x45595041, 0x02000000, 0x00000002},
+ {0x45595042, 0x00800000, 0x00000001},
+ {0x45595142, 0x04000000, 0x00000001},
+ {0x45595241, 0x02000000, 0x00000002},
+ {0x45595243, 0x01000000, 0x00000001},
+ {0x45595254, 0x02000000, 0x00000001},
+ {0x45595342, 0x02000000, 0x00000002},
+ {0x45595343, 0x01000000, 0x00000001},
+ {0x45595344, 0x02000000, 0x00000001},
+ {0x45595359, 0x01000000, 0x00000001},
+ {0x45595543, 0x02000000, 0x00000001},
+ {0x45595642, 0x08000000, 0x00000001},
+ {0x45595842, 0x04000000, 0x00000002},
+ {0x45595859, 0x00800000, 0x00000001},
+ {0x45595941, 0x01000000, 0x00000002},
+ {0x45595942, 0x08000000, 0x00000003},
+ {0x45595A41, 0x04000000, 0x00000002},
+ {0x45595A42, 0x00800000, 0x00000001},
+ {0x45595A59, 0x01000000, 0x00000002},
+ {0x455A3441, 0x00800000, 0x00000001},
+ {0x455A3443, 0x04000000, 0x00000002},
+ {0x455A3541, 0x04000000, 0x00000001},
+ {0x455A3542, 0x00800000, 0x00000001},
+ {0x455A3543, 0x00800000, 0x00000001},
+ {0x455A3642, 0x04000000, 0x00000003},
+ {0x455A3659, 0x08000000, 0x00000000},
+ {0x455A3742, 0x04000000, 0x00000001},
+ {0x455A4159, 0x01000000, 0x00000001},
+ {0x455A4241, 0x08000000, 0x00000003},
+ {0x455A4242, 0x01000000, 0x00000001},
+ {0x455A4259, 0x01000000, 0x00000001},
+ {0x455A4341, 0x01000000, 0x00000001},
+ {0x455A4343, 0x00800000, 0x00000001},
+ {0x455A4354, 0x04000000, 0x00000002},
+ {0x455A4441, 0x02000000, 0x00000002},
+ {0x455A4442, 0x04000000, 0x00000003},
+ {0x455A4443, 0x04000000, 0x00000002},
+ {0x455A4641, 0x04000000, 0x00000001},
+ {0x455A4642, 0x00800000, 0x00000001},
+ {0x455A4656, 0x02000000, 0x00000001},
+ {0x455A4742, 0x01000000, 0x00000002},
+ {0x455A4841, 0x04000000, 0x00000001},
+ {0x455A4842, 0x02000000, 0x00000003},
+ {0x455A4859, 0x04000000, 0x00000002},
+ {0x455A4941, 0x01000000, 0x00000002},
+ {0x455A4943, 0x02000000, 0x00000001},
+ {0x455A4959, 0x04000000, 0x00000002},
+ {0x455A4A59, 0x04000000, 0x00000005},
+ {0x455A4B43, 0x01000000, 0x00000005},
+ {0x455A4C43, 0x04000000, 0x00000001},
+ {0x455A4C59, 0x08000000, 0x00000002},
+ {0x455A4D56, 0x04000000, 0x00000001},
+ {0x455A4D59, 0x01000000, 0x00000001},
+ {0x455A4E41, 0x01000000, 0x00000001},
+ {0x455A4E59, 0x04000000, 0x00000002},
+ {0x455A4F41, 0x01000000, 0x00000002},
+ {0x455A4F42, 0x02000000, 0x00000001},
+ {0x455A4F43, 0x08000000, 0x00000002},
+ {0x455A5042, 0x00800000, 0x00000001},
+ {0x455A5043, 0x02000000, 0x00000002},
+ {0x455A5143, 0x02000000, 0x00000001},
+ {0x455A5241, 0x04000000, 0x00000002},
+ {0x455A5242, 0x04000000, 0x00000003},
+ {0x455A5243, 0x00800000, 0x00000002},
+ {0x455A5254, 0x02000000, 0x00000002},
+ {0x455A5341, 0x01000000, 0x00000001},
+ {0x455A5343, 0x02000000, 0x00000005},
+ {0x455A5359, 0x08000000, 0x00000001},
+ {0x455A5442, 0x02000000, 0x00000001},
+ {0x455A5443, 0x02000000, 0x00000003},
+ {0x455A5459, 0x02000000, 0x00000001},
+ {0x455A5541, 0x04000000, 0x00000005},
+ {0x455A5543, 0x04000000, 0x00000001},
+ {0x455A5759, 0x04000000, 0x00000001},
+ {0x455A5A42, 0x00800000, 0x00000001},
+ {0x46323643, 0x04000000, 0x00000001},
+ {0x46324543, 0x02000000, 0x00000001},
+ {0x46324C42, 0x01000000, 0x00000001},
+ {0x46324E42, 0x01000000, 0x00000002},
+ {0x46325959, 0x00800000, 0x00000001},
+ {0x46334343, 0x01000000, 0x00000001},
+ {0x46334E42, 0x01000000, 0x00000002},
+ {0x46335141, 0x04000000, 0x00000002},
+ {0x46335159, 0x04000000, 0x00000002},
+ {0x46335742, 0x08000000, 0x00000002},
+ {0x46344259, 0x02000000, 0x00000001},
+ {0x46344559, 0x02000000, 0x00000001},
+ {0x46344E42, 0x01000000, 0x00000002},
+ {0x46354243, 0x01000000, 0x00000001},
+ {0x46354841, 0x02000000, 0x00000002},
+ {0x46354E42, 0x01000000, 0x00000002},
+ {0x46363443, 0x00800000, 0x00000001},
+ {0x46364E42, 0x01000000, 0x00000002},
+ {0x46373343, 0x02000000, 0x00000001},
+ {0x46373443, 0x02000000, 0x00000001},
+ {0x46373543, 0x02000000, 0x00000001},
+ {0x46373742, 0x00800000, 0x00000001},
+ {0x46374559, 0x00800000, 0x00000001},
+ {0x46375443, 0x00800000, 0x00000002},
+ {0x46375959, 0x01000000, 0x00000001},
+ {0x46383643, 0x02000000, 0x00000001},
+ {0x46383742, 0x00800000, 0x00000001},
+ {0x46384343, 0x02000000, 0x00000001},
+ {0x46384543, 0x02000000, 0x00000001},
+ {0x46384C59, 0x01000000, 0x00000001},
+ {0x46394341, 0x04000000, 0x00000001},
+ {0x46394343, 0x02000000, 0x00000001},
+ {0x46394943, 0x01000000, 0x00000002},
+ {0x46395342, 0x00800000, 0x00000001},
+ {0x46395942, 0x00800000, 0x00000001},
+ {0x46413343, 0x00800000, 0x00000001},
+ {0x46414441, 0x04000000, 0x00000006},
+ {0x46414759, 0x01000000, 0x00000001},
+ {0x46414C59, 0x00800000, 0x00000002},
+ {0x46414E43, 0x02000000, 0x00000001},
+ {0x46414F43, 0x00800000, 0x00000001},
+ {0x46415041, 0x04000000, 0x00000006},
+ {0x46415249, 0x10000000, 0x00000006},
+ {0x46415843, 0x00800000, 0x00000001},
+ {0x46423542, 0x04000000, 0x00000002},
+ {0x46424354, 0x08000000, 0x00000001},
+ {0x46424542, 0x10000000, 0x00000003},
+ {0x46424659, 0x01000000, 0x00000001},
+ {0x46424A42, 0x04000000, 0x00000001},
+ {0x46424D43, 0x01000000, 0x00000001},
+ {0x46424F43, 0x00800000, 0x00000001},
+ {0x46425042, 0x01000000, 0x00000001},
+ {0x46425043, 0x01000000, 0x00000001},
+ {0x46425249, 0x10000000, 0x00000006},
+ {0x46425254, 0x00800000, 0x00000001},
+ {0x46425843, 0x00800000, 0x00000001},
+ {0x46433243, 0x00800000, 0x00000001},
+ {0x46434143, 0x01000000, 0x00000002},
+ {0x46434A42, 0x04000000, 0x00000002},
+ {0x46435843, 0x00800000, 0x00000001},
+ {0x46435943, 0x02000000, 0x00000002},
+ {0x46444143, 0x01000000, 0x00000002},
+ {0x46444359, 0x02000000, 0x00000001},
+ {0x46445054, 0x08000000, 0x00000001},
+ {0x46445249, 0x20000000, 0x00000006},
+ {0x46445443, 0x04000000, 0x00000002},
+ {0x46445641, 0x01000000, 0x00000002},
+ {0x46445843, 0x00800000, 0x00000001},
+ {0x46454143, 0x01000000, 0x00000002},
+ {0x46454542, 0x10000000, 0x00000003},
+ {0x46454543, 0x00800000, 0x00000001},
+ {0x46454559, 0x10000000, 0x00000003},
+ {0x46454741, 0x01000000, 0x00000001},
+ {0x46454959, 0x02000000, 0x00000002},
+ {0x46455249, 0x20000000, 0x00000006},
+ {0x46455542, 0x02000000, 0x00000001},
+ {0x46455843, 0x00800000, 0x00000001},
+ {0x46464143, 0x01000000, 0x00000001},
+ {0x46464459, 0x01000000, 0x00000001},
+ {0x46464A43, 0x01000000, 0x00000001},
+ {0x46464B59, 0x02000000, 0x00000001},
+ {0x46464C42, 0x10000000, 0x00000003},
+ {0x46464D43, 0x00800000, 0x00000001},
+ {0x46465059, 0x02000000, 0x00000001},
+ {0x46465359, 0x04000000, 0x00000001},
+ {0x46465843, 0x00800000, 0x00000001},
+ {0x46465959, 0x00800000, 0x00000001},
+ {0x46474D41, 0x01000000, 0x00000001},
+ {0x46474D43, 0x04000000, 0x00000001},
+ {0x46475049, 0x08000000, 0x00000006},
+ {0x46483842, 0x04000000, 0x00000002},
+ {0x46484143, 0x00800000, 0x00000001},
+ {0x46484259, 0x02000000, 0x00000002},
+ {0x46484A42, 0x01000000, 0x00000001},
+ {0x46495443, 0x02000000, 0x00000002},
+ {0x464A3343, 0x10000000, 0x00000003},
+ {0x464A3743, 0x00800000, 0x00000001},
+ {0x464A4754, 0x00800000, 0x00000001},
+ {0x464A4959, 0x04000000, 0x00000002},
+ {0x464A4F41, 0x02000000, 0x00000002},
+ {0x464A4F42, 0x04000000, 0x00000002},
+ {0x464A4F43, 0x00800000, 0x00000001},
+ {0x464A5641, 0x04000000, 0x00000002},
+ {0x464A5759, 0x00800000, 0x00000002},
+ {0x464B4159, 0x08000000, 0x00000002},
+ {0x464B4356, 0x08000000, 0x00000002},
+ {0x464B4841, 0x04000000, 0x00000003},
+ {0x464B5049, 0x08000000, 0x00000006},
+ {0x464C4343, 0x02000000, 0x00000002},
+ {0x464C4359, 0x01000000, 0x00000002},
+ {0x464C4842, 0x04000000, 0x00000002},
+ {0x464C4D59, 0x00800000, 0x00000001},
+ {0x464C4F41, 0x00800000, 0x00000001},
+ {0x464D4443, 0x00800000, 0x00000001},
+ {0x464D4C54, 0x08000000, 0x00000001},
+ {0x464D5141, 0x00800000, 0x00000001},
+ {0x464E4243, 0x02000000, 0x00000001},
+ {0x464E4259, 0x04000000, 0x00000007},
+ {0x464E5243, 0x01000000, 0x00000001},
+ {0x464E5759, 0x02000000, 0x00000001},
+ {0x464F4359, 0x04000000, 0x00000001},
+ {0x46504242, 0x00800000, 0x00000001},
+ {0x46504A59, 0x01000000, 0x00000001},
+ {0x46504B43, 0x02000000, 0x00000001},
+ {0x46504C43, 0x04000000, 0x00000003},
+ {0x46504F42, 0x01000000, 0x00000001},
+ {0x46505041, 0x01000000, 0x00000002},
+ {0x46505942, 0x02000000, 0x00000001},
+ {0x46505A55, 0x08000000, 0x00000003},
+ {0x46514343, 0x02000000, 0x00000001},
+ {0x46514C59, 0x04000000, 0x00000001},
+ {0x46514D43, 0x02000000, 0x00000001},
+ {0x46524359, 0x02000000, 0x00000001},
+ {0x46525141, 0x01000000, 0x00000002},
+ {0x46525359, 0x01000000, 0x00000005},
+ {0x46533341, 0x02000000, 0x00000001},
+ {0x46534343, 0x02000000, 0x00000001},
+ {0x46534959, 0x02000000, 0x00000002},
+ {0x46534F41, 0x08000000, 0x00000005},
+ {0x46535541, 0x04000000, 0x00000001},
+ {0x46543242, 0x00800000, 0x00000001},
+ {0x46543743, 0x01000000, 0x00000002},
+ {0x46544159, 0x01000000, 0x00000002},
+ {0x46544443, 0x02000000, 0x00000001},
+ {0x46544C43, 0x00800000, 0x00000001},
+ {0x46544C59, 0x08000000, 0x00000002},
+ {0x46545643, 0x02000000, 0x00000001},
+ {0x46554243, 0x01000000, 0x00000001},
+ {0x46554259, 0x08000000, 0x00000003},
+ {0x46554559, 0x01000000, 0x00000001},
+ {0x46554743, 0x01000000, 0x00000002},
+ {0x46554F59, 0x02000000, 0x00000001},
+ {0x46555043, 0x08000000, 0x00000006},
+ {0x46555643, 0x01000000, 0x00000001},
+ {0x46563742, 0x01000000, 0x00000001},
+ {0x46564559, 0x01000000, 0x00000001},
+ {0x46564643, 0x02000000, 0x00000002},
+ {0x46564859, 0x04000000, 0x00000001},
+ {0x46564E43, 0x10000000, 0x00000005},
+ {0x46565841, 0x04000000, 0x00000003},
+ {0x46573743, 0x00800000, 0x00000001},
+ {0x46574243, 0x02000000, 0x00000001},
+ {0x46574356, 0x02000000, 0x00000002},
+ {0x46574959, 0x04000000, 0x00000001},
+ {0x46575959, 0x02000000, 0x00000001},
+ {0x46583543, 0x02000000, 0x00000001},
+ {0x46583743, 0x00800000, 0x00000001},
+ {0x46585059, 0x00800000, 0x00000003},
+ {0x46585441, 0x01000000, 0x00000002},
+ {0x46585959, 0x01000000, 0x00000001},
+ {0x46593743, 0x00800000, 0x00000001},
+ {0x46594342, 0x04000000, 0x00000001},
+ {0x46594442, 0x04000000, 0x00000002},
+ {0x46594443, 0x02000000, 0x00000002},
+ {0x46594641, 0x04000000, 0x00000001},
+ {0x46594642, 0x01000000, 0x00000001},
+ {0x46594A59, 0x00800000, 0x00000001},
+ {0x46594C41, 0x04000000, 0x00000001},
+ {0x46595559, 0x00800000, 0x00000001},
+ {0x46595A41, 0x04000000, 0x00000002},
+ {0x465A3659, 0x08000000, 0x00000008},
+ {0x465A3743, 0x00800000, 0x00000001},
+ {0x465A4142, 0x04000000, 0x00000001},
+ {0x465A4641, 0x04000000, 0x00000001},
+ {0x465A4F41, 0x01000000, 0x00000002},
+ {0x465A5359, 0x08000000, 0x00000001},
+ {0x474C4443, 0x02000000, 0x00000004},
+ {0x47595543, 0x02000000, 0x00000001},
+ {0x48334B54, 0x01000000, 0x00000001},
+ {0x48335159, 0x04000000, 0x00000002},
+ {0x48344259, 0x02000000, 0x00000001},
+ {0x48344559, 0x02000000, 0x00000001},
+ {0x48354841, 0x02000000, 0x00000002},
+ {0x48373642, 0x01000000, 0x00000002},
+ {0x48374E43, 0x01000000, 0x00000002},
+ {0x48384C59, 0x01000000, 0x00000001},
+ {0x48414B54, 0x02000000, 0x00000001},
+ {0x48414C59, 0x00800000, 0x00000002},
+ {0x48434842, 0x01000000, 0x00000001},
+ {0x48435943, 0x02000000, 0x00000002},
+ {0x48454E42, 0x02000000, 0x00000001},
+ {0x48455142, 0x02000000, 0x00000002},
+ {0x48464B59, 0x02000000, 0x00000001},
+ {0x48464C42, 0x10000000, 0x00000003},
+ {0x48464E42, 0x02000000, 0x00000001},
+ {0x48474D41, 0x01000000, 0x00000001},
+ {0x48474D43, 0x04000000, 0x00000001},
+ {0x48494759, 0x00800000, 0x00000002},
+ {0x48495959, 0x01000000, 0x00000001},
+ {0x484A3343, 0x10000000, 0x00000003},
+ {0x484A4D43, 0x01000000, 0x00000002},
+ {0x484B5242, 0x00800000, 0x00000002},
+ {0x484C3542, 0x01000000, 0x00000001},
+ {0x484C4842, 0x04000000, 0x00000002},
+ {0x484C5143, 0x00800000, 0x00000002},
+ {0x484C5442, 0x00800000, 0x00000002},
+ {0x484C5459, 0x00800000, 0x00000002},
+ {0x484D5742, 0x01000000, 0x00000001},
+ {0x484E4242, 0x00800000, 0x00000002},
+ {0x48504A59, 0x01000000, 0x00000001},
+ {0x48505443, 0x00800000, 0x00000002},
+ {0x48515443, 0x00800000, 0x00000001},
+ {0x48533341, 0x02000000, 0x00000001},
+ {0x48544C59, 0x08000000, 0x00000002},
+ {0x48565742, 0x02000000, 0x00000001},
+ {0x48565841, 0x04000000, 0x00000003},
+ {0x48575143, 0x02000000, 0x00000008},
+ {0x48594559, 0x01000000, 0x00000001},
+ {0x48595759, 0x04000000, 0x00000002},
+ {0x485A3243, 0x00800000, 0x00000002},
+ {0x485A4841, 0x04000000, 0x00000001},
+ {0x485A4942, 0x01000000, 0x00000001},
+ {0x49323643, 0x04000000, 0x00000001},
+ {0x49334943, 0x04000000, 0x00000001},
+ {0x49335141, 0x04000000, 0x00000002},
+ {0x49335159, 0x04000000, 0x00000002},
+ {0x49335742, 0x08000000, 0x00000002},
+ {0x49344259, 0x02000000, 0x00000001},
+ {0x49354841, 0x02000000, 0x00000002},
+ {0x49364959, 0x04000000, 0x00000002},
+ {0x49384C59, 0x01000000, 0x00000001},
+ {0x49394341, 0x04000000, 0x00000001},
+ {0x49413643, 0x00800000, 0x00000001},
+ {0x49414441, 0x04000000, 0x00000006},
+ {0x49414C59, 0x00800000, 0x00000002},
+ {0x49415041, 0x04000000, 0x00000006},
+ {0x49415249, 0x10000000, 0x00000006},
+ {0x49424542, 0x10000000, 0x00000003},
+ {0x49425249, 0x10000000, 0x00000006},
+ {0x49434A42, 0x04000000, 0x00000002},
+ {0x49434D43, 0x02000000, 0x00000002},
+ {0x49435141, 0x02000000, 0x00000002},
+ {0x49435943, 0x02000000, 0x00000002},
+ {0x49445249, 0x20000000, 0x00000006},
+ {0x49445641, 0x01000000, 0x00000002},
+ {0x49454542, 0x10000000, 0x00000003},
+ {0x49454559, 0x10000000, 0x00000003},
+ {0x49455249, 0x20000000, 0x00000006},
+ {0x49464B59, 0x02000000, 0x00000001},
+ {0x49464C42, 0x10000000, 0x00000003},
+ {0x49465359, 0x04000000, 0x00000001},
+ {0x49474354, 0x04000000, 0x00000001},
+ {0x49474D41, 0x01000000, 0x00000001},
+ {0x49474D43, 0x04000000, 0x00000001},
+ {0x49475049, 0x08000000, 0x00000006},
+ {0x49483642, 0x02000000, 0x00000001},
+ {0x494A3343, 0x10000000, 0x00000003},
+ {0x494A4D54, 0x02000000, 0x00000001},
+ {0x494A4F41, 0x02000000, 0x00000002},
+ {0x494A5641, 0x04000000, 0x00000002},
+ {0x494B4356, 0x08000000, 0x00000002},
+ {0x494B5049, 0x08000000, 0x00000006},
+ {0x494B5356, 0x04000000, 0x00000001},
+ {0x494C4C43, 0x00800000, 0x00000002},
+ {0x494C5842, 0x01000000, 0x00000002},
+ {0x494D4359, 0x02000000, 0x00000001},
+ {0x494E5243, 0x01000000, 0x00000001},
+ {0x494F4359, 0x04000000, 0x00000001},
+ {0x49505A55, 0x08000000, 0xFFFFFFFF},
+ {0x49525359, 0x01000000, 0x00000005},
+ {0x49525643, 0x00800000, 0x00000001},
+ {0x49533341, 0x02000000, 0x00000001},
+ {0x49534F41, 0x08000000, 0x00000005},
+ {0x49535541, 0x04000000, 0x00000001},
+ {0x49544C59, 0x08000000, 0x00000002},
+ {0x49554259, 0x08000000, 0x00000003},
+ {0x49555043, 0x08000000, 0x00000006},
+ {0x49564E43, 0x10000000, 0x00000005},
+ {0x49565841, 0x04000000, 0x00000003},
+ {0x49574342, 0x01000000, 0x00000001},
+ {0x49585059, 0x00800000, 0x00000003},
+ {0x49594641, 0x04000000, 0x00000001},
+ {0x49594C41, 0x04000000, 0x00000001},
+ {0x49595543, 0x02000000, 0x00000001},
+ {0x495A3659, 0x08000000, 0x00000008},
+ {0x495A4341, 0x01000000, 0x00000001},
+ {0x495A4641, 0x04000000, 0x00000001},
+ {0x495A4F41, 0x01000000, 0x00000002},
+ {0x495A5359, 0x08000000, 0x00000001},
+ {0x4A323242, 0x08000000, 0x00000003},
+ {0x4A323243, 0x04000000, 0x00000002},
+ {0x4A323342, 0x04000000, 0x00000001},
+ {0x4A323343, 0x04000000, 0x00000003},
+ {0x4A323442, 0x04000000, 0x00000002},
+ {0x4A323443, 0x04000000, 0x00000002},
+ {0x4A323543, 0x04000000, 0x00000002},
+ {0x4A323642, 0x04000000, 0x00000005},
+ {0x4A323742, 0x01000000, 0x00000001},
+ {0x4A324143, 0x08000000, 0x00000003},
+ {0x4A324159, 0x08000000, 0x00000001},
+ {0x4A324243, 0x02000000, 0x00000002},
+ {0x4A324259, 0x02000000, 0x00000002},
+ {0x4A324341, 0x04000000, 0x00000001},
+ {0x4A324359, 0x04000000, 0x00000006},
+ {0x4A324441, 0x02000000, 0x00000005},
+ {0x4A324442, 0x01000000, 0x00000002},
+ {0x4A324443, 0x04000000, 0x00000002},
+ {0x4A324541, 0x08000000, 0x00000001},
+ {0x4A324559, 0x04000000, 0x00000002},
+ {0x4A324641, 0x01000000, 0x00000002},
+ {0x4A324642, 0x04000000, 0x00000005},
+ {0x4A324659, 0x10000000, 0x00000003},
+ {0x4A324742, 0x08000000, 0x00000005},
+ {0x4A324759, 0x01000000, 0x00000001},
+ {0x4A324841, 0x00800000, 0x00000003},
+ {0x4A324842, 0x02000000, 0x00000003},
+ {0x4A324843, 0x04000000, 0x00000002},
+ {0x4A324956, 0x08000000, 0x00000005},
+ {0x4A324A43, 0x01000000, 0x00000002},
+ {0x4A324B41, 0x02000000, 0x00000001},
+ {0x4A324B54, 0x04000000, 0x00000001},
+ {0x4A324B59, 0x02000000, 0x00000003},
+ {0x4A324C41, 0x04000000, 0x00000002},
+ {0x4A324C59, 0x08000000, 0x00000003},
+ {0x4A324D41, 0x04000000, 0x00000005},
+ {0x4A324D42, 0x02000000, 0x00000003},
+ {0x4A324E41, 0x02000000, 0x00000002},
+ {0x4A324E43, 0x04000000, 0x00000005},
+ {0x4A324F41, 0x08000000, 0x00000005},
+ {0x4A324F42, 0x04000000, 0x00000002},
+ {0x4A324F43, 0x10000000, 0x00000001},
+ {0x4A324F59, 0x02000000, 0x00000002},
+ {0x4A325041, 0x02000000, 0x00000001},
+ {0x4A325043, 0x04000000, 0x00000003},
+ {0x4A325054, 0x08000000, 0x00000002},
+ {0x4A325059, 0x04000000, 0x00000005},
+ {0x4A325142, 0x10000000, 0x00000003},
+ {0x4A325143, 0x01000000, 0x00000003},
+ {0x4A325159, 0x04000000, 0x00000002},
+ {0x4A325241, 0x02000000, 0x00000005},
+ {0x4A325243, 0x04000000, 0x00000002},
+ {0x4A325341, 0x01000000, 0x00000001},
+ {0x4A325359, 0x04000000, 0x00000005},
+ {0x4A325443, 0x04000000, 0x00000002},
+ {0x4A325541, 0x04000000, 0x00000001},
+ {0x4A325543, 0x01000000, 0x00000002},
+ {0x4A325559, 0x01000000, 0x00000005},
+ {0x4A325641, 0x02000000, 0x00000001},
+ {0x4A325659, 0x02000000, 0x00000002},
+ {0x4A325743, 0x01000000, 0x00000001},
+ {0x4A325843, 0x04000000, 0x00000003},
+ {0x4A325859, 0x00800000, 0x00000002},
+ {0x4A325943, 0x04000000, 0x00000001},
+ {0x4A325A41, 0x02000000, 0x00000002},
+ {0x4A325A42, 0x04000000, 0x00000002},
+ {0x4A325A59, 0x00800000, 0x00000002},
+ {0x4A333242, 0x04000000, 0x00000005},
+ {0x4A333243, 0x02000000, 0x00000002},
+ {0x4A333342, 0x04000000, 0x00000002},
+ {0x4A333343, 0x04000000, 0x00000001},
+ {0x4A333441, 0x00800000, 0x00000000},
+ {0x4A333442, 0x04000000, 0x00000003},
+ {0x4A333542, 0x02000000, 0x00000003},
+ {0x4A333643, 0x02000000, 0x00000002},
+ {0x4A334241, 0x04000000, 0x00000003},
+ {0x4A334259, 0x04000000, 0x00000005},
+ {0x4A334341, 0x02000000, 0x00000005},
+ {0x4A334441, 0x02000000, 0x00000005},
+ {0x4A334543, 0x10000000, 0x00000003},
+ {0x4A334559, 0x02000000, 0x00000002},
+ {0x4A334741, 0x02000000, 0x00000005},
+ {0x4A334742, 0x04000000, 0x00000002},
+ {0x4A334743, 0x02000000, 0x00000002},
+ {0x4A334759, 0x02000000, 0x00000003},
+ {0x4A334841, 0x02000000, 0x00000003},
+ {0x4A334843, 0x04000000, 0x00000002},
+ {0x4A334854, 0x20000000, 0x00000002},
+ {0x4A334859, 0x10000000, 0x00000002},
+ {0x4A334A42, 0x02000000, 0x00000005},
+ {0x4A334A59, 0x04000000, 0x00000002},
+ {0x4A334B41, 0x02000000, 0x00000002},
+ {0x4A334B42, 0x02000000, 0x00000003},
+ {0x4A334B59, 0x02000000, 0x00000003},
+ {0x4A334C41, 0x02000000, 0x00000001},
+ {0x4A334C42, 0x08000000, 0x00000002},
+ {0x4A334C56, 0x08000000, 0x00000005},
+ {0x4A334C59, 0x04000000, 0x00000002},
+ {0x4A334D42, 0x08000000, 0x00000003},
+ {0x4A334D43, 0x08000000, 0x00000003},
+ {0x4A334D59, 0x02000000, 0x00000002},
+ {0x4A334E43, 0x08000000, 0x00000002},
+ {0x4A334E54, 0x20000000, 0x00000005},
+ {0x4A334F43, 0x10000000, 0x00000001},
+ {0x4A334F59, 0x02000000, 0x00000001},
+ {0x4A335141, 0x04000000, 0x00000001},
+ {0x4A335142, 0x04000000, 0x00000002},
+ {0x4A335143, 0x01000000, 0x00000003},
+ {0x4A335241, 0x04000000, 0x00000003},
+ {0x4A335242, 0x08000000, 0x00000002},
+ {0x4A335243, 0x08000000, 0x00000002},
+ {0x4A335259, 0x10000000, 0x00000003},
+ {0x4A335442, 0x00800000, 0x00000003},
+ {0x4A335443, 0x04000000, 0x00000003},
+ {0x4A335456, 0x04000000, 0x00000001},
+ {0x4A335459, 0x04000000, 0x00000003},
+ {0x4A335559, 0x01000000, 0x00000001},
+ {0x4A335641, 0x02000000, 0x00000001},
+ {0x4A335642, 0x01000000, 0x00000002},
+ {0x4A335643, 0x01000000, 0x00000001},
+ {0x4A335741, 0x04000000, 0x00000001},
+ {0x4A335759, 0x01000000, 0x00000001},
+ {0x4A335841, 0x08000000, 0x00000001},
+ {0x4A335843, 0x02000000, 0x00000002},
+ {0x4A335941, 0x04000000, 0x00000002},
+ {0x4A335959, 0x02000000, 0x00000002},
+ {0x4A335A41, 0x02000000, 0x00000002},
+ {0x4A335A42, 0x08000000, 0x00000003},
+ {0x4A335A43, 0x02000000, 0x00000003},
+ {0x4A335A59, 0x02000000, 0x00000002},
+ {0x4A343243, 0x08000000, 0x00000003},
+ {0x4A343342, 0x02000000, 0x00000001},
+ {0x4A343343, 0x04000000, 0x00000003},
+ {0x4A343442, 0x01000000, 0x00000002},
+ {0x4A343443, 0x08000000, 0x00000002},
+ {0x4A343541, 0x02000000, 0x00000000},
+ {0x4A343542, 0x01000000, 0x00000002},
+ {0x4A343559, 0x00400000, 0x00000000},
+ {0x4A343643, 0x04000000, 0x00000003},
+ {0x4A343742, 0x04000000, 0x00000002},
+ {0x4A344142, 0x01000000, 0x00000002},
+ {0x4A344241, 0x04000000, 0x00000005},
+ {0x4A344242, 0x04000000, 0x00000002},
+ {0x4A344254, 0x10000000, 0x00000006},
+ {0x4A344341, 0x04000000, 0x00000001},
+ {0x4A344342, 0x10000000, 0x00000002},
+ {0x4A344343, 0x04000000, 0x00000003},
+ {0x4A344354, 0x04000000, 0x00000007},
+ {0x4A344359, 0x02000000, 0x00000003},
+ {0x4A344454, 0x02000000, 0x00000001},
+ {0x4A344541, 0x04000000, 0x00000002},
+ {0x4A344543, 0x01000000, 0x00000003},
+ {0x4A344642, 0x10000000, 0x00000002},
+ {0x4A344654, 0x04000000, 0x00000005},
+ {0x4A344659, 0x08000000, 0x00000003},
+ {0x4A344742, 0x08000000, 0x00000002},
+ {0x4A344743, 0x04000000, 0x00000003},
+ {0x4A344754, 0x04000000, 0x00000003},
+ {0x4A344759, 0x10000000, 0x00000003},
+ {0x4A344841, 0x00800000, 0x00000001},
+ {0x4A344859, 0x04000000, 0x00000001},
+ {0x4A344941, 0x01000000, 0x00000003},
+ {0x4A344A59, 0x01000000, 0x00000002},
+ {0x4A344B41, 0x02000000, 0x00000003},
+ {0x4A344B42, 0x08000000, 0x00000002},
+ {0x4A344B43, 0x04000000, 0x00000003},
+ {0x4A344B59, 0x04000000, 0x00000002},
+ {0x4A344C41, 0x00800000, 0x00000001},
+ {0x4A344C42, 0x04000000, 0x00000002},
+ {0x4A344C43, 0x08000000, 0x00000002},
+ {0x4A344C59, 0x00800000, 0x00000002},
+ {0x4A344D54, 0x04000000, 0x00000002},
+ {0x4A344D59, 0x04000000, 0x00000002},
+ {0x4A344E41, 0x04000000, 0x00000001},
+ {0x4A344F41, 0x02000000, 0x00000002},
+ {0x4A344F42, 0x04000000, 0x00000003},
+ {0x4A344F43, 0x00800000, 0x00000006},
+ {0x4A344F59, 0x08000000, 0x00000002},
+ {0x4A345043, 0x08000000, 0x00000002},
+ {0x4A345054, 0x04000000, 0x00000002},
+ {0x4A345056, 0x08000000, 0x00000006},
+ {0x4A345059, 0x04000000, 0x00000002},
+ {0x4A345142, 0x04000000, 0x00000002},
+ {0x4A345159, 0x00800000, 0x00000002},
+ {0x4A345241, 0x01000000, 0x00000002},
+ {0x4A345259, 0x01000000, 0x00000003},
+ {0x4A345343, 0x08000000, 0x00000003},
+ {0x4A345359, 0x04000000, 0x00000002},
+ {0x4A345541, 0x01000000, 0x00000001},
+ {0x4A345559, 0x02000000, 0x00000003},
+ {0x4A345641, 0x02000000, 0x00000001},
+ {0x4A345659, 0x08000000, 0x00000003},
+ {0x4A345743, 0x10000000, 0x00000003},
+ {0x4A345759, 0x04000000, 0x00000003},
+ {0x4A345841, 0x08000000, 0x00000001},
+ {0x4A345843, 0x04000000, 0x00000005},
+ {0x4A345941, 0x08000000, 0x00000001},
+ {0x4A345959, 0x04000000, 0x00000003},
+ {0x4A345A41, 0x00800000, 0x00000002},
+ {0x4A345A59, 0x02000000, 0x00000001},
+ {0x4A353342, 0x04000000, 0x00000005},
+ {0x4A353443, 0x01000000, 0x00000002},
+ {0x4A353543, 0x04000000, 0x00000003},
+ {0x4A353742, 0x01000000, 0x00000002},
+ {0x4A354143, 0x08000000, 0x00000003},
+ {0x4A354241, 0x02000000, 0x00000001},
+ {0x4A354341, 0x02000000, 0x00000005},
+ {0x4A354354, 0x02000000, 0x00000002},
+ {0x4A354459, 0x00800000, 0x00000002},
+ {0x4A354541, 0x01000000, 0x00000003},
+ {0x4A354542, 0x04000000, 0x00000002},
+ {0x4A354742, 0x04000000, 0x00000002},
+ {0x4A354843, 0x04000000, 0x00000002},
+ {0x4A354859, 0x04000000, 0x00000002},
+ {0x4A354941, 0x04000000, 0x00000002},
+ {0x4A354A43, 0x02000000, 0x00000002},
+ {0x4A354B41, 0x01000000, 0x00000001},
+ {0x4A354B43, 0x04000000, 0x00000005},
+ {0x4A354B54, 0x00800000, 0x00000003},
+ {0x4A354B56, 0x04000000, 0x00000003},
+ {0x4A354C59, 0x08000000, 0x00000003},
+ {0x4A354D41, 0x04000000, 0x00000005},
+ {0x4A354E41, 0x01000000, 0x00000003},
+ {0x4A354E43, 0x04000000, 0x00000003},
+ {0x4A354F41, 0x02000000, 0x00000005},
+ {0x4A354F42, 0x10000000, 0x00000005},
+ {0x4A354F59, 0x04000000, 0x00000003},
+ {0x4A355154, 0x04000000, 0xFFFFFFFF},
+ {0x4A355159, 0x01000000, 0x00000002},
+ {0x4A355442, 0x08000000, 0x00000002},
+ {0x4A355543, 0x04000000, 0x00000002},
+ {0x4A355559, 0x08000000, 0x00000002},
+ {0x4A355641, 0x02000000, 0x00000001},
+ {0x4A355643, 0x02000000, 0x00000001},
+ {0x4A355659, 0x08000000, 0x00000003},
+ {0x4A355741, 0x01000000, 0x00000003},
+ {0x4A355841, 0x08000000, 0x00000001},
+ {0x4A355941, 0x08000000, 0x00000003},
+ {0x4A355959, 0x04000000, 0x00000003},
+ {0x4A355A43, 0x02000000, 0x00000003},
+ {0x4A355A59, 0x02000000, 0x00000002},
+ {0x4A363243, 0x00800000, 0x00000002},
+ {0x4A363341, 0x02000000, 0x00000000},
+ {0x4A363343, 0x04000000, 0x00000001},
+ {0x4A363542, 0x04000000, 0x00000005},
+ {0x4A363643, 0x04000000, 0x00000002},
+ {0x4A364143, 0x04000000, 0x00000002},
+ {0x4A364241, 0x02000000, 0x00000001},
+ {0x4A364243, 0x01000000, 0x00000002},
+ {0x4A364259, 0x01000000, 0x00000002},
+ {0x4A364359, 0x01000000, 0x00000003},
+ {0x4A364443, 0x08000000, 0x00000003},
+ {0x4A364541, 0x04000000, 0x00000003},
+ {0x4A364543, 0x01000000, 0x00000002},
+ {0x4A364559, 0x04000000, 0x00000003},
+ {0x4A364659, 0x04000000, 0x00000003},
+ {0x4A364741, 0x02000000, 0x00000002},
+ {0x4A364841, 0x01000000, 0x00000001},
+ {0x4A364842, 0x04000000, 0x00000002},
+ {0x4A364843, 0x04000000, 0x00000001},
+ {0x4A364859, 0x04000000, 0x00000001},
+ {0x4A364943, 0x02000000, 0x00000003},
+ {0x4A364A43, 0x08000000, 0x00000002},
+ {0x4A364B42, 0x02000000, 0x00000002},
+ {0x4A364B59, 0x00800000, 0x00000003},
+ {0x4A364C59, 0x04000000, 0x00000001},
+ {0x4A364D43, 0x08000000, 0x00000002},
+ {0x4A364E43, 0x04000000, 0x00000002},
+ {0x4A364F41, 0x08000000, 0x00000001},
+ {0x4A364F42, 0x01000000, 0x00000002},
+ {0x4A364F43, 0x04000000, 0x00000002},
+ {0x4A364F59, 0x02000000, 0x00000001},
+ {0x4A365141, 0x00800000, 0x00000002},
+ {0x4A365142, 0x02000000, 0x00000003},
+ {0x4A365241, 0x00800000, 0x00000002},
+ {0x4A365243, 0x04000000, 0x00000002},
+ {0x4A365341, 0x04000000, 0x00000005},
+ {0x4A365359, 0x04000000, 0x00000005},
+ {0x4A365443, 0x04000000, 0x00000002},
+ {0x4A365459, 0x01000000, 0x00000003},
+ {0x4A365559, 0x02000000, 0x00000002},
+ {0x4A365641, 0x02000000, 0x00000001},
+ {0x4A365659, 0x00800000, 0x00000001},
+ {0x4A365759, 0x02000000, 0x00000002},
+ {0x4A365841, 0x08000000, 0x00000001},
+ {0x4A365843, 0x08000000, 0x00000002},
+ {0x4A365941, 0x00800000, 0x00000005},
+ {0x4A365A41, 0x01000000, 0x00000005},
+ {0x4A365A59, 0x02000000, 0x00000002},
+ {0x4A373243, 0x08000000, 0x00000003},
+ {0x4A374142, 0x02000000, 0x00000002},
+ {0x4A374341, 0x00800000, 0x00000002},
+ {0x4A374359, 0x02000000, 0x00000002},
+ {0x4A374459, 0x04000000, 0x00000002},
+ {0x4A374541, 0x08000000, 0x00000002},
+ {0x4A374741, 0x02000000, 0x00000002},
+ {0x4A374743, 0x04000000, 0x00000002},
+ {0x4A374759, 0x04000000, 0x00000002},
+ {0x4A374841, 0x04000000, 0x00000002},
+ {0x4A374843, 0x10000000, 0x00000003},
+ {0x4A374859, 0x08000000, 0x00000001},
+ {0x4A374A43, 0x04000000, 0x00000001},
+ {0x4A374A54, 0x04000000, 0x00000002},
+ {0x4A374A59, 0x01000000, 0x00000002},
+ {0x4A374B41, 0x02000000, 0x00000005},
+ {0x4A374B59, 0x01000000, 0x00000002},
+ {0x4A374C41, 0x02000000, 0x00000001},
+ {0x4A374C59, 0x04000000, 0x00000003},
+ {0x4A374D41, 0x02000000, 0x00000002},
+ {0x4A374D42, 0x04000000, 0x00000003},
+ {0x4A374D59, 0x04000000, 0x00000002},
+ {0x4A374E54, 0x20000000, 0x00000005},
+ {0x4A374F41, 0x04000000, 0x00000002},
+ {0x4A374F42, 0x01000000, 0x00000005},
+ {0x4A374F59, 0x01000000, 0x00000002},
+ {0x4A375141, 0x00800000, 0x00000002},
+ {0x4A375241, 0x04000000, 0x00000002},
+ {0x4A375259, 0x04000000, 0x00000002},
+ {0x4A375341, 0x08000000, 0x00000003},
+ {0x4A375342, 0x04000000, 0x00000001},
+ {0x4A375343, 0x10000000, 0x00000003},
+ {0x4A375541, 0x02000000, 0x00000002},
+ {0x4A375641, 0x02000000, 0x00000002},
+ {0x4A375659, 0x00800000, 0x00000001},
+ {0x4A375741, 0x02000000, 0x00000002},
+ {0x4A375841, 0x08000000, 0x00000003},
+ {0x4A375859, 0x01000000, 0x00000003},
+ {0x4A375941, 0x08000000, 0x00000005},
+ {0x4A375A41, 0x01000000, 0x00000002},
+ {0x4A375A59, 0x02000000, 0x00000001},
+ {0x4A383343, 0x04000000, 0x00000005},
+ {0x4A383442, 0x00800000, 0x00000002},
+ {0x4A384154, 0x01000000, 0x00000001},
+ {0x4A384259, 0x02000000, 0x00000003},
+ {0x4A384359, 0x01000000, 0x00000002},
+ {0x4A384441, 0x01000000, 0x00000002},
+ {0x4A384443, 0x02000000, 0x00000002},
+ {0x4A384459, 0x04000000, 0x00000003},
+ {0x4A384541, 0x04000000, 0x00000002},
+ {0x4A384542, 0x20000000, 0x00000003},
+ {0x4A384641, 0x01000000, 0x00000002},
+ {0x4A384741, 0x04000000, 0x00000003},
+ {0x4A384742, 0x01000000, 0x00000003},
+ {0x4A384743, 0x02000000, 0x00000002},
+ {0x4A384759, 0x08000000, 0x00000005},
+ {0x4A384841, 0x02000000, 0x00000001},
+ {0x4A384943, 0x04000000, 0x00000002},
+ {0x4A384A43, 0x04000000, 0x00000002},
+ {0x4A384A54, 0x04000000, 0x00000002},
+ {0x4A384B43, 0x02000000, 0x00000003},
+ {0x4A384B59, 0x04000000, 0x00000003},
+ {0x4A384D41, 0x01000000, 0x00000001},
+ {0x4A384D43, 0x02000000, 0x00000002},
+ {0x4A384D59, 0x01000000, 0x00000002},
+ {0x4A384E43, 0x10000000, 0x00000003},
+ {0x4A385041, 0x02000000, 0x00000005},
+ {0x4A385043, 0x02000000, 0x00000002},
+ {0x4A385141, 0x00800000, 0x00000002},
+ {0x4A385142, 0x04000000, 0x00000002},
+ {0x4A385154, 0x04000000, 0x00000003},
+ {0x4A385159, 0x04000000, 0x00000003},
+ {0x4A385241, 0x04000000, 0x00000002},
+ {0x4A385242, 0x01000000, 0x00000001},
+ {0x4A385341, 0x00800000, 0x00000002},
+ {0x4A385443, 0x04000000, 0x00000003},
+ {0x4A385541, 0x04000000, 0x00000002},
+ {0x4A385641, 0x01000000, 0x00000001},
+ {0x4A385643, 0x04000000, 0x00000002},
+ {0x4A385659, 0x00800000, 0x00000001},
+ {0x4A385759, 0x08000000, 0x00000005},
+ {0x4A385843, 0x02000000, 0x00000002},
+ {0x4A385943, 0x10000000, 0x00000003},
+ {0x4A385959, 0x04000000, 0x00000002},
+ {0x4A385A41, 0x00800000, 0x00000002},
+ {0x4A385A59, 0x02000000, 0x00000002},
+ {0x4A393243, 0x04000000, 0x00000005},
+ {0x4A393256, 0x02000000, 0x00000005},
+ {0x4A393341, 0x02000000, 0x00000000},
+ {0x4A393342, 0x08000000, 0x00000002},
+ {0x4A393441, 0x02000000, 0x00000000},
+ {0x4A393443, 0x04000000, 0x00000005},
+ {0x4A393542, 0x01000000, 0x00000002},
+ {0x4A393543, 0x04000000, 0x00000002},
+ {0x4A393741, 0x02000000, 0x00000000},
+ {0x4A393842, 0x04000000, 0x00000005},
+ {0x4A394142, 0x04000000, 0x00000002},
+ {0x4A394154, 0x01000000, 0x00000001},
+ {0x4A394241, 0x01000000, 0x00000001},
+ {0x4A394243, 0x08000000, 0x00000005},
+ {0x4A394441, 0x02000000, 0x00000003},
+ {0x4A394443, 0x04000000, 0x00000003},
+ {0x4A394541, 0x04000000, 0x00000002},
+ {0x4A394559, 0x04000000, 0x00000003},
+ {0x4A394741, 0x02000000, 0x00000003},
+ {0x4A394742, 0x04000000, 0x00000005},
+ {0x4A394743, 0x01000000, 0x00000002},
+ {0x4A394842, 0x20000000, 0x00000002},
+ {0x4A394843, 0x02000000, 0x00000003},
+ {0x4A394859, 0x02000000, 0x00000002},
+ {0x4A394941, 0x04000000, 0x00000002},
+ {0x4A394A42, 0x01000000, 0x00000002},
+ {0x4A394A54, 0x04000000, 0x00000002},
+ {0x4A394A59, 0x00800000, 0x00000005},
+ {0x4A394B41, 0x01000000, 0x00000002},
+ {0x4A394B42, 0x10000000, 0x00000003},
+ {0x4A394B43, 0x04000000, 0x00000005},
+ {0x4A394B54, 0x08000000, 0x00000002},
+ {0x4A394B59, 0x08000000, 0x00000002},
+ {0x4A394C59, 0x04000000, 0x00000003},
+ {0x4A394D41, 0x01000000, 0x00000002},
+ {0x4A394D42, 0x04000000, 0x00000003},
+ {0x4A394E41, 0x01000000, 0x00000001},
+ {0x4A394E59, 0x02000000, 0x00000002},
+ {0x4A394F41, 0x04000000, 0x00000002},
+ {0x4A394F42, 0x04000000, 0x00000003},
+ {0x4A394F59, 0x02000000, 0x00000003},
+ {0x4A395041, 0x01000000, 0x00000002},
+ {0x4A395059, 0x04000000, 0x00000003},
+ {0x4A395141, 0x04000000, 0x00000001},
+ {0x4A395142, 0x00800000, 0x00000002},
+ {0x4A395143, 0x00800000, 0x00000002},
+ {0x4A395241, 0x02000000, 0x00000002},
+ {0x4A395243, 0x01000000, 0x00000002},
+ {0x4A395259, 0x04000000, 0x00000002},
+ {0x4A395359, 0x04000000, 0x00000003},
+ {0x4A395541, 0x01000000, 0x00000002},
+ {0x4A395559, 0x04000000, 0x00000002},
+ {0x4A395659, 0x00800000, 0x00000001},
+ {0x4A395841, 0x04000000, 0x00000002},
+ {0x4A395843, 0x08000000, 0x00000003},
+ {0x4A395859, 0x01000000, 0x00000003},
+ {0x4A395941, 0x08000000, 0x00000003},
+ {0x4A395959, 0x02000000, 0x00000002},
+ {0x4A395A41, 0x02000000, 0x00000003},
+ {0x4A395A42, 0x04000000, 0x00000002},
+ {0x4A395A59, 0x02000000, 0x00000002},
+ {0x4A413241, 0x04000000, 0x00000002},
+ {0x4A413243, 0x08000000, 0x00000002},
+ {0x4A413341, 0x04000000, 0x00000006},
+ {0x4A413442, 0x01000000, 0x00000002},
+ {0x4A413443, 0x04000000, 0x00000001},
+ {0x4A413541, 0x04000000, 0x00000001},
+ {0x4A413641, 0x02000000, 0x00000005},
+ {0x4A413841, 0x00800000, 0x00000001},
+ {0x4A414154, 0x02000000, 0x00000004},
+ {0x4A414156, 0x02000000, 0x00000008},
+ {0x4A414159, 0x04000000, 0x00000002},
+ {0x4A414259, 0x02000000, 0x00000002},
+ {0x4A414356, 0x04000000, 0x00000001},
+ {0x4A414441, 0x04000000, 0x00000006},
+ {0x4A414459, 0x02000000, 0x00000003},
+ {0x4A414543, 0x02000000, 0x00000003},
+ {0x4A414559, 0x02000000, 0x00000003},
+ {0x4A414641, 0x04000000, 0x00000003},
+ {0x4A414659, 0x02000000, 0x00000003},
+ {0x4A414843, 0x04000000, 0x00000003},
+ {0x4A414859, 0x01000000, 0x00000003},
+ {0x4A414941, 0x04000000, 0x00000001},
+ {0x4A414943, 0x08000000, 0x00000003},
+ {0x4A414A41, 0x08000000, 0x00000003},
+ {0x4A414A59, 0x04000000, 0x00000002},
+ {0x4A414B41, 0x08000000, 0x00000005},
+ {0x4A414B42, 0x08000000, 0x00000003},
+ {0x4A414B59, 0x04000000, 0x00000003},
+ {0x4A414C41, 0x04000000, 0x00000005},
+ {0x4A414D41, 0x01000000, 0x00000002},
+ {0x4A414D43, 0x08000000, 0x00000002},
+ {0x4A414D59, 0x02000000, 0x00000002},
+ {0x4A414E41, 0x02000000, 0x00000002},
+ {0x4A414E59, 0x04000000, 0x00000002},
+ {0x4A414F59, 0x02000000, 0x00000002},
+ {0x4A415041, 0x04000000, 0x00000006},
+ {0x4A415142, 0x01000000, 0x00000005},
+ {0x4A415154, 0x08000000, 0x00000004},
+ {0x4A415242, 0x04000000, 0x00000002},
+ {0x4A415249, 0x10000000, 0x00000006},
+ {0x4A415342, 0x04000000, 0x00000003},
+ {0x4A415441, 0x01000000, 0x00000001},
+ {0x4A415442, 0x08000000, 0x00000003},
+ {0x4A415541, 0x04000000, 0x00000005},
+ {0x4A415559, 0x04000000, 0x00000001},
+ {0x4A415643, 0x04000000, 0x00000002},
+ {0x4A415741, 0x04000000, 0x00000002},
+ {0x4A415841, 0x08000000, 0x00000002},
+ {0x4A415859, 0x04000000, 0x00000003},
+ {0x4A415941, 0x00800000, 0x00000002},
+ {0x4A415943, 0x04000000, 0x00000006},
+ {0x4A415959, 0x02000000, 0x00000003},
+ {0x4A415A41, 0x02000000, 0x00000002},
+ {0x4A415A59, 0x01000000, 0x00000002},
+ {0x4A423241, 0x01000000, 0x00000001},
+ {0x4A423242, 0x08000000, 0x00000002},
+ {0x4A423341, 0x08000000, 0x00000002},
+ {0x4A423442, 0x04000000, 0x00000002},
+ {0x4A423443, 0x01000000, 0x00000003},
+ {0x4A423541, 0x04000000, 0x00000002},
+ {0x4A423641, 0x02000000, 0x00000005},
+ {0x4A424241, 0x01000000, 0x00000005},
+ {0x4A424341, 0x04000000, 0x00000003},
+ {0x4A424359, 0x04000000, 0x00000001},
+ {0x4A424441, 0x04000000, 0x00000002},
+ {0x4A424442, 0x04000000, 0x00000002},
+ {0x4A424454, 0x04000000, 0x00000002},
+ {0x4A424542, 0x10000000, 0x00000003},
+ {0x4A424543, 0x02000000, 0x00000003},
+ {0x4A424556, 0x02000000, 0x00000007},
+ {0x4A424559, 0x02000000, 0x00000002},
+ {0x4A424754, 0x08000000, 0x00000002},
+ {0x4A424759, 0x01000000, 0x00000002},
+ {0x4A424843, 0x04000000, 0x00000001},
+ {0x4A424859, 0x04000000, 0x00000003},
+ {0x4A424941, 0x08000000, 0x00000002},
+ {0x4A424943, 0x01000000, 0x00000002},
+ {0x4A424A41, 0x04000000, 0x00000005},
+ {0x4A424A59, 0x04000000, 0x00000001},
+ {0x4A424B41, 0x02000000, 0x00000003},
+ {0x4A424B59, 0x04000000, 0x00000003},
+ {0x4A424C41, 0x08000000, 0x00000003},
+ {0x4A424C43, 0x04000000, 0x00000003},
+ {0x4A424D41, 0x04000000, 0x00000002},
+ {0x4A424E41, 0x04000000, 0x00000005},
+ {0x4A424E42, 0x04000000, 0x00000003},
+ {0x4A424E59, 0x04000000, 0x00000002},
+ {0x4A424F42, 0x02000000, 0x00000001},
+ {0x4A425041, 0x02000000, 0x00000001},
+ {0x4A425059, 0x08000000, 0x00000003},
+ {0x4A425141, 0x01000000, 0x00000001},
+ {0x4A425142, 0x04000000, 0x00000002},
+ {0x4A425154, 0x02000000, 0x00000003},
+ {0x4A425241, 0x02000000, 0x00000001},
+ {0x4A425243, 0x02000000, 0x00000005},
+ {0x4A425249, 0x10000000, 0x00000006},
+ {0x4A425259, 0x08000000, 0x00000003},
+ {0x4A425341, 0x04000000, 0x00000002},
+ {0x4A425441, 0x04000000, 0x00000002},
+ {0x4A425442, 0x04000000, 0x00000002},
+ {0x4A425459, 0x08000000, 0x00000003},
+ {0x4A425541, 0x04000000, 0x00000005},
+ {0x4A425643, 0x02000000, 0x00000003},
+ {0x4A425659, 0x08000000, 0x00000002},
+ {0x4A425841, 0x04000000, 0x00000008},
+ {0x4A425859, 0x08000000, 0x00000003},
+ {0x4A425941, 0x02000000, 0x00000002},
+ {0x4A425959, 0x04000000, 0x00000005},
+ {0x4A425A41, 0x00800000, 0x00000001},
+ {0x4A425A42, 0x02000000, 0x00000003},
+ {0x4A425A59, 0x02000000, 0x00000002},
+ {0x4A433342, 0x04000000, 0x00000002},
+ {0x4A433343, 0x02000000, 0x00000001},
+ {0x4A433441, 0x01000000, 0x00000003},
+ {0x4A433442, 0x08000000, 0x00000002},
+ {0x4A433443, 0x01000000, 0x00000002},
+ {0x4A433541, 0x01000000, 0x00000001},
+ {0x4A433641, 0x02000000, 0x00000005},
+ {0x4A433643, 0x10000000, 0x00000005},
+ {0x4A433841, 0x02000000, 0x00000002},
+ {0x4A434154, 0x02000000, 0x00000002},
+ {0x4A434159, 0x04000000, 0x00000003},
+ {0x4A434241, 0x02000000, 0x00000005},
+ {0x4A434254, 0x00800000, 0x00000001},
+ {0x4A434341, 0x02000000, 0x00000001},
+ {0x4A434441, 0x01000000, 0x00000001},
+ {0x4A434459, 0x08000000, 0x00000003},
+ {0x4A434541, 0x00800000, 0x00000001},
+ {0x4A434554, 0x08000000, 0x00000005},
+ {0x4A434559, 0x02000000, 0x00000001},
+ {0x4A434741, 0x04000000, 0x00000003},
+ {0x4A434743, 0x04000000, 0x00000002},
+ {0x4A434754, 0x04000000, 0x00000003},
+ {0x4A434941, 0x01000000, 0x00000001},
+ {0x4A434A41, 0x00800000, 0x00000002},
+ {0x4A434B59, 0x02000000, 0x00000002},
+ {0x4A434C56, 0x04000000, 0x00000002},
+ {0x4A434D41, 0x02000000, 0x00000005},
+ {0x4A434E41, 0x04000000, 0x00000002},
+ {0x4A434E42, 0x08000000, 0x00000002},
+ {0x4A434E43, 0x04000000, 0x00000002},
+ {0x4A434F41, 0x01000000, 0x00000003},
+ {0x4A434F42, 0x00800000, 0x00000003},
+ {0x4A434F59, 0x02000000, 0x00000002},
+ {0x4A435041, 0x01000000, 0x00000001},
+ {0x4A435054, 0x08000000, 0x00000002},
+ {0x4A435141, 0x04000000, 0x00000002},
+ {0x4A435154, 0x08000000, 0x00000004},
+ {0x4A435259, 0x08000000, 0x00000002},
+ {0x4A435341, 0x04000000, 0x00000002},
+ {0x4A435459, 0x08000000, 0x00000003},
+ {0x4A435541, 0x04000000, 0x00000005},
+ {0x4A435542, 0x04000000, 0x00000002},
+ {0x4A435641, 0x04000000, 0x00000005},
+ {0x4A435643, 0x02000000, 0x00000001},
+ {0x4A435741, 0x04000000, 0x00000002},
+ {0x4A435742, 0x02000000, 0x00000002},
+ {0x4A435743, 0x02000000, 0x00000001},
+ {0x4A435841, 0x02000000, 0x00000003},
+ {0x4A435859, 0x04000000, 0x00000003},
+ {0x4A435941, 0x04000000, 0x00000003},
+ {0x4A435A41, 0x00800000, 0x00000001},
+ {0x4A435A42, 0x02000000, 0x00000003},
+ {0x4A435A43, 0x02000000, 0x00000002},
+ {0x4A435A55, 0x08000000, 0xFFFFFFFF},
+ {0x4A435A59, 0x01000000, 0x00000002},
+ {0x4A443241, 0x02000000, 0x00000002},
+ {0x4A443243, 0x04000000, 0x00000002},
+ {0x4A443341, 0x08000000, 0x00000003},
+ {0x4A443342, 0x04000000, 0x00000002},
+ {0x4A443441, 0x04000000, 0x00000003},
+ {0x4A443443, 0x04000000, 0x00000002},
+ {0x4A443541, 0x00800000, 0x00000002},
+ {0x4A443542, 0x04000000, 0x00000002},
+ {0x4A443543, 0x02000000, 0x00000001},
+ {0x4A443641, 0x04000000, 0x00000002},
+ {0x4A443841, 0x04000000, 0x00000002},
+ {0x4A444154, 0x08000000, 0x00000005},
+ {0x4A444259, 0x08000000, 0x00000002},
+ {0x4A444342, 0x04000000, 0x00000002},
+ {0x4A444356, 0x04000000, 0x00000002},
+ {0x4A444441, 0x01000000, 0x00000001},
+ {0x4A444443, 0x04000000, 0x00000002},
+ {0x4A444459, 0x01000000, 0x00000001},
+ {0x4A444543, 0x04000000, 0x00000002},
+ {0x4A444554, 0x02000000, 0x00000003},
+ {0x4A444741, 0x02000000, 0x00000003},
+ {0x4A444754, 0x10000000, 0x00000002},
+ {0x4A444841, 0x04000000, 0x00000002},
+ {0x4A444843, 0x08000000, 0x00000002},
+ {0x4A444941, 0x02000000, 0x00000002},
+ {0x4A444942, 0x08000000, 0x00000003},
+ {0x4A444A41, 0x00800000, 0x00000002},
+ {0x4A444A43, 0x00800000, 0x00000001},
+ {0x4A444B41, 0x01000000, 0x00000002},
+ {0x4A444B43, 0x02000000, 0x00000002},
+ {0x4A444B54, 0x02000000, 0x00000002},
+ {0x4A444B59, 0x08000000, 0x00000005},
+ {0x4A444C41, 0x04000000, 0x00000005},
+ {0x4A444C59, 0x04000000, 0x00000005},
+ {0x4A444D59, 0x02000000, 0x00000003},
+ {0x4A444E41, 0x01000000, 0x00000005},
+ {0x4A444F41, 0x02000000, 0x00000003},
+ {0x4A444F59, 0x04000000, 0x00000002},
+ {0x4A445041, 0x01000000, 0x00000002},
+ {0x4A445059, 0x02000000, 0x00000005},
+ {0x4A445141, 0x02000000, 0x00000003},
+ {0x4A445142, 0x04000000, 0x00000002},
+ {0x4A445143, 0x01000000, 0x00000002},
+ {0x4A445154, 0x02000000, 0x00000003},
+ {0x4A445159, 0x02000000, 0x00000002},
+ {0x4A445249, 0x20000000, 0x00000006},
+ {0x4A445342, 0x04000000, 0x00000002},
+ {0x4A445359, 0x04000000, 0x00000005},
+ {0x4A445441, 0x01000000, 0x00000002},
+ {0x4A445541, 0x04000000, 0x00000005},
+ {0x4A445542, 0x01000000, 0x00000001},
+ {0x4A445559, 0x01000000, 0x00000005},
+ {0x4A445841, 0x01000000, 0x00000002},
+ {0x4A445859, 0x02000000, 0x00000003},
+ {0x4A445941, 0x04000000, 0x00000002},
+ {0x4A445A43, 0x02000000, 0x00000002},
+ {0x4A445A59, 0x04000000, 0x00000002},
+ {0x4A453243, 0x02000000, 0x00000003},
+ {0x4A453343, 0x02000000, 0x00000002},
+ {0x4A453541, 0x04000000, 0x00000001},
+ {0x4A453542, 0x10000000, 0x00000003},
+ {0x4A453543, 0x02000000, 0x00000005},
+ {0x4A453641, 0x04000000, 0x00000003},
+ {0x4A453841, 0x00800000, 0x00000001},
+ {0x4A454159, 0x08000000, 0x00000002},
+ {0x4A454243, 0x02000000, 0x00000001},
+ {0x4A454341, 0x01000000, 0x00000002},
+ {0x4A454441, 0x08000000, 0x00000003},
+ {0x4A454442, 0x04000000, 0x00000002},
+ {0x4A454456, 0x10000000, 0x00000006},
+ {0x4A454541, 0x04000000, 0x00000003},
+ {0x4A454542, 0x10000000, 0x00000003},
+ {0x4A454559, 0x08000000, 0x00000003},
+ {0x4A454641, 0x04000000, 0x00000003},
+ {0x4A454643, 0x02000000, 0x00000001},
+ {0x4A454659, 0x04000000, 0x00000005},
+ {0x4A454741, 0x01000000, 0x00000001},
+ {0x4A454759, 0x04000000, 0x00000002},
+ {0x4A454841, 0x08000000, 0x00000005},
+ {0x4A454859, 0x08000000, 0x00000003},
+ {0x4A454A41, 0x08000000, 0x00000003},
+ {0x4A454A42, 0x02000000, 0x00000003},
+ {0x4A454A43, 0x02000000, 0x00000003},
+ {0x4A454B41, 0x04000000, 0x00000002},
+ {0x4A454B43, 0x01000000, 0x00000002},
+ {0x4A454B59, 0x04000000, 0x00000002},
+ {0x4A454C41, 0x08000000, 0x00000002},
+ {0x4A454C42, 0x04000000, 0x00000003},
+ {0x4A454C59, 0x02000000, 0x00000001},
+ {0x4A454D41, 0x02000000, 0x00000002},
+ {0x4A454D42, 0x10000000, 0x00000003},
+ {0x4A454D43, 0x04000000, 0x00000002},
+ {0x4A454D59, 0x00800000, 0x00000002},
+ {0x4A454E41, 0x04000000, 0x00000002},
+ {0x4A454E43, 0x02000000, 0x00000002},
+ {0x4A454F41, 0x04000000, 0x00000003},
+ {0x4A454F42, 0x20000000, 0x00000003},
+ {0x4A454F43, 0x01000000, 0x00000002},
+ {0x4A455041, 0x04000000, 0x00000001},
+ {0x4A455043, 0x02000000, 0x00000002},
+ {0x4A455059, 0x04000000, 0x00000002},
+ {0x4A455241, 0x02000000, 0x00000001},
+ {0x4A455249, 0x20000000, 0x00000006},
+ {0x4A455259, 0x02000000, 0x00000002},
+ {0x4A455341, 0x04000000, 0x00000002},
+ {0x4A455343, 0x04000000, 0x00000002},
+ {0x4A455441, 0x02000000, 0x00000001},
+ {0x4A455541, 0x04000000, 0x00000005},
+ {0x4A455643, 0x04000000, 0x00000002},
+ {0x4A455741, 0x04000000, 0x00000005},
+ {0x4A455759, 0x01000000, 0x00000002},
+ {0x4A455841, 0x00800000, 0x00000002},
+ {0x4A455859, 0x02000000, 0x00000003},
+ {0x4A455941, 0x04000000, 0x00000002},
+ {0x4A455A41, 0x04000000, 0x00000006},
+ {0x4A455A59, 0x02000000, 0x00000003},
+ {0x4A463241, 0x08000000, 0x00000003},
+ {0x4A463243, 0x08000000, 0x00000002},
+ {0x4A463341, 0x04000000, 0x00000005},
+ {0x4A463442, 0x04000000, 0x00000003},
+ {0x4A463443, 0x01000000, 0x00000003},
+ {0x4A463541, 0x04000000, 0x00000003},
+ {0x4A463542, 0x04000000, 0x00000005},
+ {0x4A463543, 0x04000000, 0x00000002},
+ {0x4A463641, 0x08000000, 0x00000003},
+ {0x4A463643, 0x10000000, 0x00000002},
+ {0x4A463841, 0x00800000, 0x00000001},
+ {0x4A464241, 0x01000000, 0x00000005},
+ {0x4A464254, 0x04000000, 0x00000003},
+ {0x4A464259, 0x08000000, 0x00000003},
+ {0x4A464341, 0x04000000, 0x00000002},
+ {0x4A464443, 0x04000000, 0x00000002},
+ {0x4A464641, 0x08000000, 0x00000003},
+ {0x4A464741, 0x04000000, 0x00000002},
+ {0x4A464842, 0x10000000, 0x00000003},
+ {0x4A464941, 0x04000000, 0x00000002},
+ {0x4A464B41, 0x00800000, 0x00000001},
+ {0x4A464B54, 0x04000000, 0x00000005},
+ {0x4A464B59, 0x02000000, 0x00000001},
+ {0x4A464C42, 0x10000000, 0x00000003},
+ {0x4A464D44, 0x02000000, 0xFFFFFFFF},
+ {0x4A464F41, 0x02000000, 0x00000003},
+ {0x4A464F59, 0x02000000, 0x00000003},
+ {0x4A465041, 0x04000000, 0x00000002},
+ {0x4A465141, 0x04000000, 0x00000002},
+ {0x4A465142, 0x04000000, 0x00000002},
+ {0x4A465143, 0x02000000, 0x00000008},
+ {0x4A465154, 0x02000000, 0x00000003},
+ {0x4A465241, 0x08000000, 0x00000003},
+ {0x4A465242, 0x08000000, 0x00000003},
+ {0x4A465341, 0x02000000, 0x00000005},
+ {0x4A465459, 0x08000000, 0x00000003},
+ {0x4A465541, 0x04000000, 0x00000002},
+ {0x4A465559, 0x04000000, 0x00000002},
+ {0x4A465641, 0x01000000, 0x00000002},
+ {0x4A465759, 0x02000000, 0x00000003},
+ {0x4A465841, 0x08000000, 0x00000003},
+ {0x4A465859, 0x02000000, 0x00000003},
+ {0x4A465A59, 0x02000000, 0x00000002},
+ {0x4A473241, 0x02000000, 0x00000003},
+ {0x4A473243, 0x04000000, 0x00000002},
+ {0x4A473256, 0x02000000, 0x00000006},
+ {0x4A473341, 0x04000000, 0x00000005},
+ {0x4A473342, 0x04000000, 0x00000002},
+ {0x4A473441, 0x02000000, 0x00000002},
+ {0x4A473442, 0x08000000, 0x00000002},
+ {0x4A473443, 0x10000000, 0x00000003},
+ {0x4A473542, 0x04000000, 0x00000006},
+ {0x4A473543, 0x01000000, 0x00000002},
+ {0x4A473641, 0x04000000, 0x00000002},
+ {0x4A473643, 0x01000000, 0x00000003},
+ {0x4A473841, 0x04000000, 0x00000002},
+ {0x4A474342, 0x04000000, 0x00000002},
+ {0x4A474343, 0x10000000, 0x00000003},
+ {0x4A474356, 0x04000000, 0x00000002},
+ {0x4A474441, 0x02000000, 0x00000005},
+ {0x4A474442, 0x10000000, 0x00000002},
+ {0x4A474443, 0x04000000, 0x00000006},
+ {0x4A474543, 0x10000000, 0x00000003},
+ {0x4A474559, 0x04000000, 0x00000003},
+ {0x4A474643, 0x02000000, 0x00000002},
+ {0x4A474741, 0x02000000, 0x00000002},
+ {0x4A474743, 0x02000000, 0x00000002},
+ {0x4A474841, 0x02000000, 0x00000003},
+ {0x4A474843, 0x10000000, 0x00000003},
+ {0x4A474854, 0x04000000, 0x00000002},
+ {0x4A474859, 0x04000000, 0x00000003},
+ {0x4A474941, 0x04000000, 0x00000003},
+ {0x4A474943, 0x01000000, 0x00000002},
+ {0x4A474A41, 0x00800000, 0x00000005},
+ {0x4A474A59, 0x04000000, 0x00000002},
+ {0x4A474B41, 0x02000000, 0x00000002},
+ {0x4A474B54, 0x04000000, 0x00000002},
+ {0x4A474B56, 0x02000000, 0x00000005},
+ {0x4A474B59, 0x10000000, 0x00000003},
+ {0x4A474C41, 0x04000000, 0x00000001},
+ {0x4A474D41, 0x01000000, 0x00000001},
+ {0x4A474E41, 0x08000000, 0x00000005},
+ {0x4A474E42, 0x04000000, 0x00000005},
+ {0x4A474E59, 0x08000000, 0x00000003},
+ {0x4A474F59, 0x08000000, 0x00000003},
+ {0x4A475041, 0x01000000, 0x00000001},
+ {0x4A475043, 0x02000000, 0x00000003},
+ {0x4A475049, 0x08000000, 0x00000006},
+ {0x4A475054, 0x10000000, 0x00000003},
+ {0x4A475056, 0x08000000, 0x00000002},
+ {0x4A475141, 0x04000000, 0x00000002},
+ {0x4A475143, 0x04000000, 0x00000002},
+ {0x4A475154, 0x04000000, 0x00000004},
+ {0x4A475241, 0x02000000, 0x00000005},
+ {0x4A475242, 0x04000000, 0x00000002},
+ {0x4A475254, 0x08000000, 0x00000002},
+ {0x4A475259, 0x04000000, 0x00000002},
+ {0x4A475341, 0x02000000, 0x00000005},
+ {0x4A475343, 0x08000000, 0x00000003},
+ {0x4A475441, 0x00800000, 0x00000002},
+ {0x4A475442, 0x10000000, 0x00000003},
+ {0x4A475443, 0x10000000, 0x00000003},
+ {0x4A475459, 0x08000000, 0x00000003},
+ {0x4A475559, 0x02000000, 0x00000003},
+ {0x4A475641, 0x04000000, 0x00000002},
+ {0x4A475659, 0x08000000, 0x00000002},
+ {0x4A475741, 0x08000000, 0x00000005},
+ {0x4A475743, 0x01000000, 0x00000002},
+ {0x4A475859, 0x02000000, 0x00000003},
+ {0x4A475941, 0x04000000, 0x00000002},
+ {0x4A475942, 0x02000000, 0x00000002},
+ {0x4A475943, 0x04000000, 0x00000001},
+ {0x4A475959, 0x04000000, 0x00000002},
+ {0x4A475A41, 0x01000000, 0x00000003},
+ {0x4A475A59, 0x02000000, 0x00000002},
+ {0x4A483241, 0x01000000, 0x00000005},
+ {0x4A483342, 0x04000000, 0x00000002},
+ {0x4A483441, 0x02000000, 0x00000002},
+ {0x4A483443, 0x08000000, 0x00000002},
+ {0x4A483641, 0x02000000, 0x00000002},
+ {0x4A483643, 0x01000000, 0x00000001},
+ {0x4A483841, 0x00800000, 0x00000001},
+ {0x4A484241, 0x08000000, 0x00000002},
+ {0x4A484341, 0x04000000, 0x00000005},
+ {0x4A484354, 0x04000000, 0x00000002},
+ {0x4A484359, 0x04000000, 0x00000005},
+ {0x4A484441, 0x04000000, 0x00000005},
+ {0x4A484443, 0x01000000, 0x00000002},
+ {0x4A484541, 0x04000000, 0x00000002},
+ {0x4A484543, 0x08000000, 0x00000002},
+ {0x4A484641, 0x01000000, 0x00000002},
+ {0x4A484759, 0x08000000, 0x00000001},
+ {0x4A484843, 0x01000000, 0x00000003},
+ {0x4A484859, 0x02000000, 0x00000002},
+ {0x4A484941, 0x08000000, 0x00000002},
+ {0x4A484A41, 0x01000000, 0x00000002},
+ {0x4A484A43, 0x04000000, 0x00000003},
+ {0x4A484A54, 0x04000000, 0x00000005},
+ {0x4A484A59, 0x01000000, 0x00000002},
+ {0x4A484B41, 0x04000000, 0x00000002},
+ {0x4A484B42, 0x04000000, 0x00000003},
+ {0x4A484B59, 0x08000000, 0x00000005},
+ {0x4A484C41, 0x02000000, 0x00000001},
+ {0x4A484C59, 0x04000000, 0x00000002},
+ {0x4A484D41, 0x04000000, 0x00000005},
+ {0x4A484D59, 0x04000000, 0x00000003},
+ {0x4A484E41, 0x08000000, 0x00000006},
+ {0x4A484E42, 0x01000000, 0x00000002},
+ {0x4A484E59, 0x02000000, 0x00000003},
+ {0x4A484F41, 0x02000000, 0x00000003},
+ {0x4A484F42, 0x00800000, 0x00000003},
+ {0x4A484F43, 0x10000000, 0x00000002},
+ {0x4A484F59, 0x02000000, 0x00000002},
+ {0x4A485041, 0x02000000, 0x00000003},
+ {0x4A485042, 0x02000000, 0x00000005},
+ {0x4A485054, 0x04000000, 0x00000005},
+ {0x4A485141, 0x04000000, 0x00000002},
+ {0x4A485143, 0x04000000, 0x00000001},
+ {0x4A485154, 0x08000000, 0x00000004},
+ {0x4A485159, 0x01000000, 0x00000002},
+ {0x4A485242, 0x08000000, 0x00000002},
+ {0x4A485259, 0x02000000, 0x00000001},
+ {0x4A485341, 0x02000000, 0x00000002},
+ {0x4A485343, 0x02000000, 0x00000002},
+ {0x4A485443, 0x01000000, 0x00000002},
+ {0x4A485459, 0x08000000, 0x00000003},
+ {0x4A485541, 0x01000000, 0x00000001},
+ {0x4A485543, 0x02000000, 0x00000003},
+ {0x4A485659, 0x01000000, 0x00000003},
+ {0x4A485841, 0x01000000, 0x00000003},
+ {0x4A485856, 0x08000000, 0x00000002},
+ {0x4A485859, 0x02000000, 0x00000003},
+ {0x4A485941, 0x04000000, 0x00000002},
+ {0x4A485A41, 0x04000000, 0x00000002},
+ {0x4A493241, 0x01000000, 0x00000005},
+ {0x4A493341, 0x08000000, 0x00000002},
+ {0x4A493342, 0x04000000, 0x00000002},
+ {0x4A493442, 0x08000000, 0x00000005},
+ {0x4A493443, 0x04000000, 0x00000002},
+ {0x4A493543, 0x04000000, 0x00000002},
+ {0x4A493641, 0x08000000, 0x00000003},
+ {0x4A493841, 0x02000000, 0x00000002},
+ {0x4A494143, 0x02000000, 0x00000002},
+ {0x4A494241, 0x00800000, 0x00000005},
+ {0x4A494259, 0x04000000, 0x00000002},
+ {0x4A494341, 0x01000000, 0x00000002},
+ {0x4A494441, 0x08000000, 0x00000001},
+ {0x4A494459, 0x04000000, 0x00000002},
+ {0x4A494555, 0x04000000, 0x00000002},
+ {0x4A494559, 0x04000000, 0x00000002},
+ {0x4A494643, 0x08000000, 0x00000003},
+ {0x4A494841, 0x04000000, 0x00000003},
+ {0x4A494843, 0x10000000, 0x00000003},
+ {0x4A494859, 0x04000000, 0x00000001},
+ {0x4A494941, 0x01000000, 0x00000002},
+ {0x4A494959, 0x00800000, 0x00000001},
+ {0x4A494B42, 0x08000000, 0x00000007},
+ {0x4A494B59, 0x04000000, 0x00000003},
+ {0x4A494C42, 0x04000000, 0x00000003},
+ {0x4A494C59, 0x04000000, 0x00000002},
+ {0x4A494D41, 0x00800000, 0x00000002},
+ {0x4A494E41, 0x08000000, 0x00000005},
+ {0x4A494F41, 0x02000000, 0x00000006},
+ {0x4A494F43, 0x10000000, 0x00000002},
+ {0x4A495041, 0x04000000, 0x00000005},
+ {0x4A495059, 0x01000000, 0x00000003},
+ {0x4A495141, 0x02000000, 0x00000005},
+ {0x4A495142, 0x08000000, 0x00000002},
+ {0x4A495143, 0x01000000, 0x00000002},
+ {0x4A495241, 0x01000000, 0x00000001},
+ {0x4A495242, 0x04000000, 0x00000001},
+ {0x4A495243, 0x02000000, 0x00000002},
+ {0x4A495341, 0x02000000, 0x00000002},
+ {0x4A495441, 0x01000000, 0x00000008},
+ {0x4A495459, 0x08000000, 0x00000003},
+ {0x4A495559, 0x01000000, 0x00000002},
+ {0x4A495641, 0x02000000, 0x00000001},
+ {0x4A495642, 0x04000000, 0x00000002},
+ {0x4A495643, 0x04000000, 0x00000002},
+ {0x4A495659, 0x08000000, 0x00000003},
+ {0x4A495741, 0x08000000, 0x00000005},
+ {0x4A495759, 0x02000000, 0x00000002},
+ {0x4A495841, 0x02000000, 0x00000002},
+ {0x4A495843, 0x04000000, 0x00000005},
+ {0x4A495859, 0x02000000, 0x00000003},
+ {0x4A495941, 0x01000000, 0x00000001},
+ {0x4A495A41, 0x00800000, 0x00000002},
+ {0x4A495A59, 0x01000000, 0x00000002},
+ {0x4A4A3241, 0x04000000, 0x00000003},
+ {0x4A4A3242, 0x10000000, 0x00000003},
+ {0x4A4A3343, 0x10000000, 0x00000003},
+ {0x4A4A3441, 0x00800000, 0x00000002},
+ {0x4A4A3543, 0x01000000, 0x00000002},
+ {0x4A4A3641, 0x04000000, 0x00000002},
+ {0x4A4A3842, 0x10000000, 0x00000005},
+ {0x4A4A4241, 0x04000000, 0x00000005},
+ {0x4A4A4242, 0x04000000, 0x00000003},
+ {0x4A4A4441, 0x04000000, 0x00000005},
+ {0x4A4A4541, 0x02000000, 0x00000002},
+ {0x4A4A4659, 0x04000000, 0x00000003},
+ {0x4A4A4843, 0x04000000, 0x00000002},
+ {0x4A4A4859, 0x00800000, 0x00000003},
+ {0x4A4A4941, 0x02000000, 0x00000003},
+ {0x4A4A4A59, 0x04000000, 0x00000002},
+ {0x4A4A4B41, 0x01000000, 0x00000003},
+ {0x4A4A4B42, 0x01000000, 0x00000002},
+ {0x4A4A4B59, 0x08000000, 0x00000002},
+ {0x4A4A4C43, 0x08000000, 0x00000002},
+ {0x4A4A4D41, 0x02000000, 0x00000005},
+ {0x4A4A4D59, 0x04000000, 0x00000001},
+ {0x4A4A4F41, 0x02000000, 0x00000002},
+ {0x4A4A4F42, 0x04000000, 0x00000002},
+ {0x4A4A4F59, 0x01000000, 0x00000002},
+ {0x4A4A5041, 0x04000000, 0x00000005},
+ {0x4A4A5059, 0x04000000, 0x00000005},
+ {0x4A4A5142, 0x02000000, 0x00000003},
+ {0x4A4A5154, 0x04000000, 0x00000003},
+ {0x4A4A5241, 0x08000000, 0x00000003},
+ {0x4A4A5242, 0x08000000, 0x00000003},
+ {0x4A4A5341, 0x04000000, 0x00000005},
+ {0x4A4A5343, 0x08000000, 0x00000002},
+ {0x4A4A5443, 0x08000000, 0x00000002},
+ {0x4A4A5559, 0x04000000, 0x00000001},
+ {0x4A4A5641, 0x04000000, 0x00000002},
+ {0x4A4A5643, 0x04000000, 0x00000002},
+ {0x4A4A5841, 0x04000000, 0x00000003},
+ {0x4A4A5859, 0x08000000, 0x00000005},
+ {0x4A4A5941, 0x02000000, 0x00000005},
+ {0x4A4A5943, 0x04000000, 0x00000002},
+ {0x4A4A5959, 0x01000000, 0x00000002},
+ {0x4A4A5A59, 0x01000000, 0x00000002},
+ {0x4A4B3241, 0x04000000, 0x00000005},
+ {0x4A4B3242, 0x20000000, 0x00000003},
+ {0x4A4B3341, 0x00800000, 0x00000003},
+ {0x4A4B3343, 0x00800000, 0x00000003},
+ {0x4A4B3441, 0x00800000, 0x00000002},
+ {0x4A4B3442, 0x01000000, 0x00000002},
+ {0x4A4B3541, 0x01000000, 0x00000003},
+ {0x4A4B3542, 0x04000000, 0x00000002},
+ {0x4A4B3543, 0x04000000, 0x00000002},
+ {0x4A4B3641, 0x08000000, 0x00000003},
+ {0x4A4B3643, 0x04000000, 0x00000002},
+ {0x4A4B3742, 0x04000000, 0x00000002},
+ {0x4A4B3743, 0x04000000, 0x00000002},
+ {0x4A4B3841, 0x02000000, 0x00000003},
+ {0x4A4B4154, 0x04000000, 0x00000002},
+ {0x4A4B4241, 0x01000000, 0x00000001},
+ {0x4A4B4243, 0x04000000, 0x00000002},
+ {0x4A4B4341, 0x02000000, 0x00000005},
+ {0x4A4B4342, 0x04000000, 0x00000002},
+ {0x4A4B4354, 0x02000000, 0x00000001},
+ {0x4A4B4441, 0x04000000, 0x00000005},
+ {0x4A4B4443, 0x01000000, 0x00000002},
+ {0x4A4B4459, 0x01000000, 0x00000002},
+ {0x4A4B4542, 0x08000000, 0x00000003},
+ {0x4A4B4543, 0x04000000, 0x00000002},
+ {0x4A4B4559, 0x08000000, 0x00000005},
+ {0x4A4B4659, 0x04000000, 0x00000002},
+ {0x4A4B4743, 0x02000000, 0x00000001},
+ {0x4A4B4754, 0x04000000, 0x00000001},
+ {0x4A4B4841, 0x04000000, 0x00000003},
+ {0x4A4B4842, 0x01000000, 0x00000002},
+ {0x4A4B4859, 0x01000000, 0x00000002},
+ {0x4A4B4941, 0x02000000, 0x00000002},
+ {0x4A4B4942, 0x04000000, 0x00000005},
+ {0x4A4B4943, 0x04000000, 0x00000001},
+ {0x4A4B4959, 0x02000000, 0x00000005},
+ {0x4A4B4A41, 0x08000000, 0x00000002},
+ {0x4A4B4A42, 0x01000000, 0x00000002},
+ {0x4A4B4A43, 0x08000000, 0x00000003},
+ {0x4A4B4B41, 0x01000000, 0x00000003},
+ {0x4A4B4B42, 0x08000000, 0x00000003},
+ {0x4A4B4B43, 0x10000000, 0x00000002},
+ {0x4A4B4B59, 0x02000000, 0x00000002},
+ {0x4A4B4C41, 0x08000000, 0x00000003},
+ {0x4A4B4C59, 0x02000000, 0x00000002},
+ {0x4A4B4D41, 0x00800000, 0x00000002},
+ {0x4A4B4D54, 0x04000000, 0x00000002},
+ {0x4A4B4D59, 0x08000000, 0x00000001},
+ {0x4A4B4E41, 0x00800000, 0x00000001},
+ {0x4A4B4E42, 0x02000000, 0x00000003},
+ {0x4A4B4E43, 0x04000000, 0x00000002},
+ {0x4A4B4E59, 0x04000000, 0x00000002},
+ {0x4A4B4F42, 0x10000000, 0x00000002},
+ {0x4A4B4F43, 0x00800000, 0x00000002},
+ {0x4A4B4F59, 0x01000000, 0x00000002},
+ {0x4A4B5041, 0x02000000, 0x00000005},
+ {0x4A4B5049, 0x08000000, 0x00000006},
+ {0x4A4B5059, 0x04000000, 0x00000002},
+ {0x4A4B5141, 0x02000000, 0x00000002},
+ {0x4A4B5154, 0x02000000, 0x00000003},
+ {0x4A4B5241, 0x04000000, 0x00000002},
+ {0x4A4B5341, 0x04000000, 0x00000002},
+ {0x4A4B5342, 0x08000000, 0x00000003},
+ {0x4A4B5343, 0x08000000, 0x00000003},
+ {0x4A4B5359, 0x08000000, 0x00000003},
+ {0x4A4B5441, 0x04000000, 0x00000002},
+ {0x4A4B5443, 0x08000000, 0x00000002},
+ {0x4A4B5459, 0x04000000, 0x00000003},
+ {0x4A4B5541, 0x01000000, 0x00000001},
+ {0x4A4B5542, 0x08000000, 0x00000002},
+ {0x4A4B5543, 0x08000000, 0x00000002},
+ {0x4A4B5641, 0x01000000, 0x00000001},
+ {0x4A4B5743, 0x02000000, 0x00000003},
+ {0x4A4B5841, 0x01000000, 0x00000002},
+ {0x4A4B5859, 0x08000000, 0x00000005},
+ {0x4A4B5941, 0x02000000, 0x00000005},
+ {0x4A4B5959, 0x04000000, 0x00000002},
+ {0x4A4B5A41, 0x00800000, 0x00000002},
+ {0x4A4B5A42, 0x02000000, 0x00000003},
+ {0x4A4B5A43, 0x04000000, 0x00000002},
+ {0x4A4B5A59, 0x10000000, 0x00000003},
+ {0x4A4C3243, 0x04000000, 0x00000002},
+ {0x4A4C3341, 0x00800000, 0x00000002},
+ {0x4A4C3342, 0x20000000, 0x00000003},
+ {0x4A4C3441, 0x01000000, 0x00000002},
+ {0x4A4C3442, 0x02000000, 0x00000002},
+ {0x4A4C3641, 0x00800000, 0x00000002},
+ {0x4A4C4142, 0x10000000, 0x00000003},
+ {0x4A4C4159, 0x02000000, 0x00000003},
+ {0x4A4C4241, 0x08000000, 0x00000002},
+ {0x4A4C4341, 0x04000000, 0x00000003},
+ {0x4A4C4342, 0x01000000, 0x00000002},
+ {0x4A4C4441, 0x04000000, 0x00000003},
+ {0x4A4C4541, 0x04000000, 0x00000002},
+ {0x4A4C4542, 0x02000000, 0x00000002},
+ {0x4A4C4559, 0x02000000, 0x00000001},
+ {0x4A4C4654, 0x08000000, 0x00000003},
+ {0x4A4C4659, 0x04000000, 0x00000003},
+ {0x4A4C4741, 0x02000000, 0x00000001},
+ {0x4A4C4841, 0x01000000, 0x00000003},
+ {0x4A4C4843, 0x04000000, 0x00000002},
+ {0x4A4C4854, 0x20000000, 0x00000002},
+ {0x4A4C4859, 0x08000000, 0x00000003},
+ {0x4A4C4941, 0x00800000, 0x00000002},
+ {0x4A4C4943, 0x02000000, 0x00000001},
+ {0x4A4C4959, 0x10000000, 0x00000002},
+ {0x4A4C4B41, 0x04000000, 0x00000005},
+ {0x4A4C4B42, 0x10000000, 0x00000002},
+ {0x4A4C4C41, 0x00800000, 0x00000003},
+ {0x4A4C4C59, 0x00800000, 0x00000002},
+ {0x4A4C4E43, 0x04000000, 0x00000001},
+ {0x4A4C4F42, 0x01000000, 0x00000003},
+ {0x4A4C4F43, 0x08000000, 0x00000003},
+ {0x4A4C4F59, 0x08000000, 0x00000002},
+ {0x4A4C5041, 0x00800000, 0x00000002},
+ {0x4A4C5056, 0x08000000, 0x00000006},
+ {0x4A4C5154, 0x02000000, 0x00000003},
+ {0x4A4C5241, 0x01000000, 0x00000005},
+ {0x4A4C5342, 0x02000000, 0x00000003},
+ {0x4A4C5359, 0x10000000, 0x00000005},
+ {0x4A4C5559, 0x04000000, 0x00000002},
+ {0x4A4C5641, 0x02000000, 0x00000002},
+ {0x4A4C5642, 0x04000000, 0x00000002},
+ {0x4A4C5659, 0x04000000, 0x00000003},
+ {0x4A4C5741, 0x08000000, 0x00000003},
+ {0x4A4C5759, 0x02000000, 0x00000001},
+ {0x4A4C5859, 0x08000000, 0x00000005},
+ {0x4A4C5A41, 0x08000000, 0x00000007},
+ {0x4A4C5A59, 0x08000000, 0x00000001},
+ {0x4A4D3341, 0x08000000, 0x00000002},
+ {0x4A4D3541, 0x02000000, 0x00000002},
+ {0x4A4D3842, 0x10000000, 0x00000005},
+ {0x4A4D4241, 0x00800000, 0x00000001},
+ {0x4A4D4259, 0x01000000, 0x00000002},
+ {0x4A4D4341, 0x01000000, 0x00000001},
+ {0x4A4D4354, 0x04000000, 0x00000002},
+ {0x4A4D4441, 0x02000000, 0x00000005},
+ {0x4A4D4541, 0x08000000, 0x00000003},
+ {0x4A4D4559, 0x02000000, 0x00000003},
+ {0x4A4D4641, 0x04000000, 0x00000002},
+ {0x4A4D4643, 0x04000000, 0x00000003},
+ {0x4A4D4659, 0x04000000, 0x00000003},
+ {0x4A4D4743, 0x08000000, 0x00000003},
+ {0x4A4D4759, 0x04000000, 0x00000002},
+ {0x4A4D4841, 0x02000000, 0x00000002},
+ {0x4A4D4854, 0x10000000, 0x00000005},
+ {0x4A4D4859, 0x02000000, 0x00000002},
+ {0x4A4D4941, 0x01000000, 0x00000005},
+ {0x4A4D4942, 0x04000000, 0x00000005},
+ {0x4A4D4956, 0x10000000, 0x00000003},
+ {0x4A4D4A41, 0x01000000, 0x00000003},
+ {0x4A4D4A42, 0x04000000, 0x00000001},
+ {0x4A4D4B41, 0x08000000, 0x00000003},
+ {0x4A4D4B42, 0x02000000, 0x00000002},
+ {0x4A4D4B43, 0x01000000, 0x00000003},
+ {0x4A4D4B54, 0x04000000, 0x00000005},
+ {0x4A4D4B59, 0x01000000, 0x00000005},
+ {0x4A4D4C43, 0x08000000, 0x00000003},
+ {0x4A4D4D41, 0x00800000, 0x00000001},
+ {0x4A4D4D43, 0x02000000, 0x00000003},
+ {0x4A4D4D56, 0x04000000, 0x00000003},
+ {0x4A4D4E41, 0x02000000, 0x00000005},
+ {0x4A4D4E59, 0x01000000, 0x00000002},
+ {0x4A4D4F41, 0x01000000, 0x00000002},
+ {0x4A4D4F59, 0x04000000, 0x00000002},
+ {0x4A4D5041, 0x01000000, 0x00000001},
+ {0x4A4D5043, 0x04000000, 0x00000002},
+ {0x4A4D5142, 0x01000000, 0x00000001},
+ {0x4A4D5154, 0x08000000, 0x00000004},
+ {0x4A4D5159, 0x04000000, 0x00000002},
+ {0x4A4D5241, 0x04000000, 0x00000002},
+ {0x4A4D5242, 0x01000000, 0x00000002},
+ {0x4A4D5243, 0x02000000, 0x00000003},
+ {0x4A4D5341, 0x01000000, 0x00000002},
+ {0x4A4D5359, 0x08000000, 0x00000003},
+ {0x4A4D5441, 0x08000000, 0x00000002},
+ {0x4A4D5443, 0x04000000, 0x00000002},
+ {0x4A4D5459, 0x04000000, 0x00000002},
+ {0x4A4D5541, 0x02000000, 0x00000005},
+ {0x4A4D5543, 0x02000000, 0x00000002},
+ {0x4A4D5559, 0x00800000, 0x00000002},
+ {0x4A4D5641, 0x04000000, 0x00000006},
+ {0x4A4D5743, 0x10000000, 0x00000003},
+ {0x4A4D5843, 0x04000000, 0x00000003},
+ {0x4A4D5859, 0x02000000, 0x00000003},
+ {0x4A4D5941, 0x01000000, 0x00000003},
+ {0x4A4D5942, 0x04000000, 0x00000002},
+ {0x4A4D5943, 0x02000000, 0x00000002},
+ {0x4A4D5959, 0x10000000, 0x00000003},
+ {0x4A4D5A41, 0x01000000, 0x00000002},
+ {0x4A4D5A42, 0x04000000, 0x00000006},
+ {0x4A4D5A59, 0x01000000, 0x00000002},
+ {0x4A4E3242, 0x02000000, 0x00000001},
+ {0x4A4E3343, 0x04000000, 0x00000003},
+ {0x4A4E3441, 0x00800000, 0x00000002},
+ {0x4A4E3442, 0x00800000, 0x00000002},
+ {0x4A4E3443, 0x04000000, 0x00000003},
+ {0x4A4E3641, 0x08000000, 0x00000003},
+ {0x4A4E3841, 0x02000000, 0x00000005},
+ {0x4A4E4156, 0x02000000, 0x00000007},
+ {0x4A4E4159, 0x04000000, 0x00000002},
+ {0x4A4E4241, 0x04000000, 0x00000002},
+ {0x4A4E4259, 0x02000000, 0x00000007},
+ {0x4A4E4341, 0x01000000, 0x00000002},
+ {0x4A4E4342, 0x08000000, 0x00000005},
+ {0x4A4E4359, 0x08000000, 0x00000001},
+ {0x4A4E4441, 0x04000000, 0x00000003},
+ {0x4A4E4442, 0x04000000, 0x00000003},
+ {0x4A4E4459, 0x04000000, 0x00000002},
+ {0x4A4E4541, 0x04000000, 0x00000002},
+ {0x4A4E4554, 0x20000000, 0x00000002},
+ {0x4A4E4641, 0x02000000, 0x00000002},
+ {0x4A4E4643, 0x04000000, 0x00000002},
+ {0x4A4E4842, 0x10000000, 0x00000002},
+ {0x4A4E4859, 0x04000000, 0x00000003},
+ {0x4A4E4941, 0x04000000, 0x00000002},
+ {0x4A4E4943, 0x08000000, 0x00000002},
+ {0x4A4E4959, 0x00800000, 0x00000001},
+ {0x4A4E4A41, 0x02000000, 0x00000002},
+ {0x4A4E4A59, 0x04000000, 0x00000002},
+ {0x4A4E4B41, 0x01000000, 0x00000001},
+ {0x4A4E4B43, 0x08000000, 0x00000002},
+ {0x4A4E4B54, 0x04000000, 0x00000002},
+ {0x4A4E4B56, 0x02000000, 0x00000003},
+ {0x4A4E4B59, 0x01000000, 0x00000002},
+ {0x4A4E4D41, 0x01000000, 0x00000005},
+ {0x4A4E4E41, 0x04000000, 0x00000003},
+ {0x4A4E4E42, 0x04000000, 0x00000002},
+ {0x4A4E4E59, 0x08000000, 0x00000003},
+ {0x4A4E4F41, 0x02000000, 0x00000005},
+ {0x4A4E4F42, 0x08000000, 0x00000003},
+ {0x4A4E4F43, 0x01000000, 0x00000005},
+ {0x4A4E4F59, 0x01000000, 0x00000003},
+ {0x4A4E5041, 0x02000000, 0x00000001},
+ {0x4A4E5141, 0x01000000, 0x00000002},
+ {0x4A4E5143, 0x02000000, 0x00000002},
+ {0x4A4E5154, 0x04000000, 0x00000000},
+ {0x4A4E5159, 0x04000000, 0x00000002},
+ {0x4A4E5241, 0x01000000, 0x00000001},
+ {0x4A4E5341, 0x00800000, 0x00000002},
+ {0x4A4E5459, 0x08000000, 0x00000003},
+ {0x4A4E5541, 0x00800000, 0x00000002},
+ {0x4A4E5543, 0x10000000, 0x00000003},
+ {0x4A4E5559, 0x04000000, 0x00000003},
+ {0x4A4E5641, 0x08000000, 0x00000002},
+ {0x4A4E5741, 0x08000000, 0x00000002},
+ {0x4A4E5742, 0x02000000, 0x00000002},
+ {0x4A4E5743, 0x04000000, 0x00000002},
+ {0x4A4E5841, 0x00800000, 0x00000002},
+ {0x4A4E5859, 0x02000000, 0x00000003},
+ {0x4A4E5941, 0x04000000, 0x00000003},
+ {0x4A4E5942, 0x04000000, 0x00000003},
+ {0x4A4E5959, 0x02000000, 0x00000001},
+ {0x4A4E5A59, 0x04000000, 0x00000002},
+ {0x4A4F3241, 0x04000000, 0x00000003},
+ {0x4A4F3242, 0x02000000, 0x00000005},
+ {0x4A4F3341, 0x00800000, 0x00000001},
+ {0x4A4F3343, 0x08000000, 0x00000002},
+ {0x4A4F3441, 0x02000000, 0x00000005},
+ {0x4A4F3641, 0x02000000, 0x00000002},
+ {0x4A4F3643, 0x08000000, 0x00000003},
+ {0x4A4F4242, 0x00800000, 0x00000001},
+ {0x4A4F4243, 0x02000000, 0x00000005},
+ {0x4A4F4341, 0x04000000, 0x00000005},
+ {0x4A4F4359, 0x04000000, 0x00000001},
+ {0x4A4F4459, 0x02000000, 0x00000002},
+ {0x4A4F4541, 0x02000000, 0x00000001},
+ {0x4A4F4559, 0x04000000, 0x00000003},
+ {0x4A4F4641, 0x04000000, 0x00000003},
+ {0x4A4F4741, 0x04000000, 0x00000005},
+ {0x4A4F4841, 0x01000000, 0x00000002},
+ {0x4A4F4859, 0x01000000, 0x00000002},
+ {0x4A4F4941, 0x08000000, 0x00000005},
+ {0x4A4F4B41, 0x08000000, 0x00000003},
+ {0x4A4F4B59, 0x02000000, 0x00000006},
+ {0x4A4F4C43, 0x01000000, 0x00000001},
+ {0x4A4F4D41, 0x04000000, 0x00000002},
+ {0x4A4F4D42, 0x08000000, 0x00000005},
+ {0x4A4F4D43, 0x02000000, 0x00000003},
+ {0x4A4F4E41, 0x02000000, 0x00000002},
+ {0x4A4F4E43, 0x04000000, 0x00000002},
+ {0x4A4F4F41, 0x01000000, 0x00000002},
+ {0x4A4F4F42, 0x08000000, 0x00000002},
+ {0x4A4F4F59, 0x04000000, 0x00000003},
+ {0x4A4F5041, 0x04000000, 0x00000001},
+ {0x4A4F5042, 0x04000000, 0x00000003},
+ {0x4A4F5059, 0x04000000, 0x00000003},
+ {0x4A4F5141, 0x04000000, 0x00000003},
+ {0x4A4F5241, 0x08000000, 0x00000003},
+ {0x4A4F5242, 0x04000000, 0x00000003},
+ {0x4A4F5259, 0x04000000, 0x00000002},
+ {0x4A4F5441, 0x04000000, 0x00000002},
+ {0x4A4F5442, 0x04000000, 0x00000002},
+ {0x4A4F5443, 0x04000000, 0x00000001},
+ {0x4A4F5459, 0x04000000, 0x00000002},
+ {0x4A4F5559, 0x10000000, 0x00000003},
+ {0x4A4F5641, 0x01000000, 0x00000003},
+ {0x4A4F5659, 0x02000000, 0x00000002},
+ {0x4A4F5842, 0x04000000, 0x00000003},
+ {0x4A4F5859, 0x04000000, 0x00000005},
+ {0x4A4F5941, 0x04000000, 0x00000003},
+ {0x4A4F5942, 0x04000000, 0x00000003},
+ {0x4A4F5A59, 0x08000000, 0x00000002},
+ {0x4A503242, 0x04000000, 0x00000005},
+ {0x4A503243, 0x04000000, 0x00000003},
+ {0x4A503341, 0x02000000, 0x00000001},
+ {0x4A503443, 0x01000000, 0x00000002},
+ {0x4A503541, 0x04000000, 0x00000001},
+ {0x4A503542, 0x10000000, 0x00000001},
+ {0x4A503543, 0x02000000, 0x00000002},
+ {0x4A503641, 0x00800000, 0x00000003},
+ {0x4A503643, 0x02000000, 0x00000007},
+ {0x4A503742, 0x08000000, 0x00000003},
+ {0x4A503841, 0x02000000, 0x00000002},
+ {0x4A503842, 0x02000000, 0x00000003},
+ {0x4A504142, 0x04000000, 0x00000001},
+ {0x4A504341, 0x00800000, 0x00000002},
+ {0x4A504356, 0x04000000, 0x00000003},
+ {0x4A504359, 0x04000000, 0x00000001},
+ {0x4A504441, 0x00800000, 0x00000002},
+ {0x4A504459, 0x02000000, 0x00000001},
+ {0x4A504541, 0x01000000, 0x00000003},
+ {0x4A504641, 0x04000000, 0x00000001},
+ {0x4A504642, 0x04000000, 0x00000002},
+ {0x4A504654, 0x04000000, 0x00000005},
+ {0x4A504741, 0x04000000, 0x00000002},
+ {0x4A504759, 0x02000000, 0x00000003},
+ {0x4A504841, 0x04000000, 0x00000001},
+ {0x4A504843, 0x01000000, 0x00000001},
+ {0x4A504859, 0x01000000, 0x00000002},
+ {0x4A504942, 0x04000000, 0x00000002},
+ {0x4A504943, 0x02000000, 0x00000002},
+ {0x4A504959, 0x04000000, 0x00000001},
+ {0x4A504A42, 0x02000000, 0x00000002},
+ {0x4A504B42, 0x04000000, 0x00000002},
+ {0x4A504B56, 0x02000000, 0x00000005},
+ {0x4A504C59, 0x00800000, 0x00000002},
+ {0x4A504D54, 0x08000000, 0x00000003},
+ {0x4A504D59, 0x08000000, 0x00000005},
+ {0x4A505042, 0x04000000, 0x00000005},
+ {0x4A505054, 0x04000000, 0x00000007},
+ {0x4A505059, 0x01000000, 0x00000001},
+ {0x4A505142, 0x04000000, 0x00000002},
+ {0x4A505159, 0x02000000, 0x00000002},
+ {0x4A505242, 0x08000000, 0x00000003},
+ {0x4A505341, 0x02000000, 0x00000003},
+ {0x4A505343, 0x02000000, 0x00000003},
+ {0x4A505359, 0x02000000, 0x00000005},
+ {0x4A505441, 0x04000000, 0x00000005},
+ {0x4A505541, 0x00800000, 0x00000001},
+ {0x4A505559, 0x04000000, 0x00000002},
+ {0x4A505641, 0x04000000, 0x00000002},
+ {0x4A505643, 0x10000000, 0x00000002},
+ {0x4A505659, 0x08000000, 0x00000003},
+ {0x4A505759, 0x04000000, 0x00000002},
+ {0x4A505841, 0x02000000, 0x00000005},
+ {0x4A505842, 0x04000000, 0x00000002},
+ {0x4A505859, 0x02000000, 0x00000003},
+ {0x4A505A41, 0x01000000, 0x00000002},
+ {0x4A505A55, 0x08000000, 0x00000003},
+ {0x4A505A59, 0x02000000, 0x00000002},
+ {0x4A513242, 0x04000000, 0x00000001},
+ {0x4A513341, 0x04000000, 0x00000003},
+ {0x4A513441, 0x01000000, 0x00000001},
+ {0x4A513442, 0x02000000, 0x00000002},
+ {0x4A513541, 0x01000000, 0x00000001},
+ {0x4A513641, 0x01000000, 0x00000001},
+ {0x4A513742, 0x04000000, 0x00000005},
+ {0x4A513841, 0x02000000, 0x00000005},
+ {0x4A514154, 0x04000000, 0x00000004},
+ {0x4A514159, 0x04000000, 0x00000003},
+ {0x4A514254, 0x04000000, 0x00000002},
+ {0x4A514341, 0x02000000, 0x00000001},
+ {0x4A514359, 0x04000000, 0x00000002},
+ {0x4A514441, 0x04000000, 0x00000002},
+ {0x4A514443, 0x08000000, 0x00000001},
+ {0x4A514459, 0x10000000, 0x00000003},
+ {0x4A514541, 0x00800000, 0x00000002},
+ {0x4A514542, 0x04000000, 0x00000002},
+ {0x4A514641, 0x02000000, 0x00000002},
+ {0x4A514654, 0x04000000, 0x00000007},
+ {0x4A514659, 0x04000000, 0x00000002},
+ {0x4A514842, 0x04000000, 0x00000002},
+ {0x4A514859, 0x04000000, 0x00000003},
+ {0x4A514941, 0x00800000, 0x00000002},
+ {0x4A514959, 0x08000000, 0x00000002},
+ {0x4A514A41, 0x02000000, 0x00000002},
+ {0x4A514B41, 0x02000000, 0x00000001},
+ {0x4A514B59, 0x04000000, 0x00000003},
+ {0x4A514D41, 0x04000000, 0x00000005},
+ {0x4A514E41, 0x00800000, 0x00000002},
+ {0x4A514E43, 0x02000000, 0x00000003},
+ {0x4A514E59, 0x00800000, 0x00000002},
+ {0x4A514F41, 0x04000000, 0x00000001},
+ {0x4A514F42, 0x02000000, 0x00000005},
+ {0x4A514F59, 0x08000000, 0x00000002},
+ {0x4A515054, 0x04000000, 0x00000002},
+ {0x4A515059, 0x01000000, 0x00000001},
+ {0x4A515141, 0x02000000, 0x00000002},
+ {0x4A515241, 0x04000000, 0x00000003},
+ {0x4A515242, 0x04000000, 0x00000005},
+ {0x4A515341, 0x00800000, 0x00000002},
+ {0x4A515541, 0x01000000, 0x00000002},
+ {0x4A515542, 0x08000000, 0x00000001},
+ {0x4A515559, 0x01000000, 0x00000002},
+ {0x4A515741, 0x01000000, 0x00000001},
+ {0x4A515859, 0x02000000, 0x00000003},
+ {0x4A515942, 0x02000000, 0x00000002},
+ {0x4A515959, 0x01000000, 0x00000002},
+ {0x4A515A42, 0x08000000, 0x00000003},
+ {0x4A515A59, 0x01000000, 0x00000005},
+ {0x4A523241, 0x01000000, 0x00000003},
+ {0x4A523342, 0x08000000, 0x00000005},
+ {0x4A523343, 0x04000000, 0x00000002},
+ {0x4A523356, 0x02000000, 0x00000003},
+ {0x4A523441, 0x02000000, 0x00000002},
+ {0x4A523541, 0x01000000, 0x00000002},
+ {0x4A523543, 0x08000000, 0x00000003},
+ {0x4A523641, 0x04000000, 0x00000003},
+ {0x4A523643, 0x04000000, 0x00000003},
+ {0x4A523841, 0x04000000, 0x00000005},
+ {0x4A523842, 0x04000000, 0x00000002},
+ {0x4A524142, 0x02000000, 0x00000005},
+ {0x4A524255, 0x00800000, 0x00000005},
+ {0x4A524259, 0x04000000, 0x00000001},
+ {0x4A524441, 0x01000000, 0x00000002},
+ {0x4A524541, 0x01000000, 0x00000002},
+ {0x4A524559, 0x04000000, 0x00000003},
+ {0x4A524643, 0x08000000, 0x00000002},
+ {0x4A524741, 0x04000000, 0x00000005},
+ {0x4A524742, 0x02000000, 0x00000002},
+ {0x4A524743, 0x04000000, 0x00000001},
+ {0x4A524759, 0x08000000, 0x00000002},
+ {0x4A524841, 0x02000000, 0x00000002},
+ {0x4A524854, 0x20000000, 0x00000003},
+ {0x4A524856, 0x04000000, 0x00000002},
+ {0x4A524941, 0x01000000, 0x00000001},
+ {0x4A524A41, 0x08000000, 0x00000005},
+ {0x4A524A43, 0x08000000, 0x00000003},
+ {0x4A524A59, 0x08000000, 0x00000002},
+ {0x4A524B41, 0x04000000, 0x00000002},
+ {0x4A524B43, 0x04000000, 0x00000003},
+ {0x4A524B59, 0x04000000, 0x00000005},
+ {0x4A524C41, 0x00800000, 0x00000002},
+ {0x4A524D41, 0x01000000, 0x00000003},
+ {0x4A524E41, 0x04000000, 0x00000001},
+ {0x4A524E43, 0x04000000, 0x00000002},
+ {0x4A524E54, 0x10000000, 0x00000003},
+ {0x4A524E59, 0x04000000, 0x00000002},
+ {0x4A524F42, 0x01000000, 0x00000003},
+ {0x4A524F55, 0x02000000, 0x00000008},
+ {0x4A525041, 0x02000000, 0x00000002},
+ {0x4A525142, 0x02000000, 0x00000002},
+ {0x4A525143, 0x04000000, 0x00000002},
+ {0x4A525242, 0x10000000, 0x00000003},
+ {0x4A525243, 0x02000000, 0x00000005},
+ {0x4A525341, 0x04000000, 0x00000003},
+ {0x4A525343, 0x10000000, 0x00000002},
+ {0x4A525359, 0x01000000, 0x00000005},
+ {0x4A525441, 0x01000000, 0x00000002},
+ {0x4A52544E, 0x00180AC8, 0x00000000},
+ {0x4A525541, 0x04000000, 0x00000002},
+ {0x4A525543, 0x04000000, 0x00000001},
+ {0x4A525559, 0x04000000, 0x00000003},
+ {0x4A525641, 0x04000000, 0x00000002},
+ {0x4A525659, 0x08000000, 0x00000002},
+ {0x4A525741, 0x02000000, 0x00000005},
+ {0x4A525742, 0x02000000, 0x00000003},
+ {0x4A525841, 0x01000000, 0x00000002},
+ {0x4A525959, 0x04000000, 0x00000001},
+ {0x4A525A41, 0x08000000, 0x00000002},
+ {0x4A525A59, 0x01000000, 0x00000002},
+ {0x4A533243, 0x08000000, 0x00000004},
+ {0x4A533342, 0x20000000, 0x00000003},
+ {0x4A534159, 0x10000000, 0x00000005},
+ {0x4A534241, 0x01000000, 0x00000005},
+ {0x4A534254, 0x02000000, 0x00000002},
+ {0x4A534259, 0x08000000, 0x00000003},
+ {0x4A534342, 0x04000000, 0x00000002},
+ {0x4A534459, 0x04000000, 0x00000002},
+ {0x4A534559, 0x04000000, 0x00000003},
+ {0x4A534654, 0x02000000, 0x00000003},
+ {0x4A534659, 0x04000000, 0x00000002},
+ {0x4A534841, 0x02000000, 0x00000002},
+ {0x4A534A41, 0x001998C8, 0x00000002},
+ {0x4A534A59, 0x02000000, 0x00000002},
+ {0x4A534B41, 0x02000000, 0x00000002},
+ {0x4A534B42, 0x02000000, 0x00000002},
+ {0x4A534C41, 0x04000000, 0x00000002},
+ {0x4A534C59, 0x04000000, 0x00000001},
+ {0x4A534D41, 0x04000000, 0x00000003},
+ {0x4A534D43, 0x02000000, 0x00000003},
+ {0x4A534D59, 0x04000000, 0x00000005},
+ {0x4A534E41, 0x01000000, 0x00000001},
+ {0x4A534E43, 0x04000000, 0x00000002},
+ {0x4A534E55, 0x00800000, 0x00000006},
+ {0x4A534F41, 0x04000000, 0x00000002},
+ {0x4A534F42, 0x01000000, 0x00000003},
+ {0x4A534F56, 0x02000000, 0x00000007},
+ {0x4A534F59, 0x00800000, 0x00000002},
+ {0x4A535041, 0x04000000, 0x00000005},
+ {0x4A535054, 0x04000000, 0x00000005},
+ {0x4A535059, 0x01000000, 0x00000002},
+ {0x4A535141, 0x02000000, 0x00000002},
+ {0x4A535142, 0x01000000, 0x00000003},
+ {0x4A535241, 0x08000000, 0x00000002},
+ {0x4A535359, 0x04000000, 0x00000003},
+ {0x4A535443, 0x04000000, 0x00000001},
+ {0x4A535641, 0x02000000, 0x00000002},
+ {0x4A535659, 0x02000000, 0x00000003},
+ {0x4A535841, 0x04000000, 0x00000002},
+ {0x4A535842, 0x04000000, 0x00000003},
+ {0x4A535859, 0x02000000, 0x00000003},
+ {0x4A535941, 0x04000000, 0x00000005},
+ {0x4A535942, 0x04000000, 0x00000003},
+ {0x4A535959, 0x01000000, 0x00000002},
+ {0x4A535A41, 0x01000000, 0x00000003},
+ {0x4A535A43, 0x04000000, 0x00000001},
+ {0x4A535A59, 0x01000000, 0x00000002},
+ {0x4A543243, 0x04000000, 0x00000003},
+ {0x4A543342, 0x02000000, 0x00000001},
+ {0x4A543442, 0x02000000, 0x00000002},
+ {0x4A543443, 0x08000000, 0x00000002},
+ {0x4A543541, 0x02000000, 0x00000005},
+ {0x4A543841, 0x02000000, 0x00000002},
+ {0x4A543842, 0x01000000, 0x00000001},
+ {0x4A544143, 0x02000000, 0x00000002},
+ {0x4A544259, 0x08000000, 0x00000003},
+ {0x4A544341, 0x02000000, 0x00000001},
+ {0x4A544343, 0x08000000, 0x00000003},
+ {0x4A544354, 0x02000000, 0x00000005},
+ {0x4A544356, 0x04000000, 0x00000003},
+ {0x4A544359, 0x02000000, 0x00000001},
+ {0x4A544459, 0x04000000, 0x00000003},
+ {0x4A544541, 0x04000000, 0x00000001},
+ {0x4A544542, 0x04000000, 0x00000005},
+ {0x4A544543, 0x08000000, 0x00000002},
+ {0x4A544654, 0x04000000, 0x00000002},
+ {0x4A544659, 0x04000000, 0x00000005},
+ {0x4A544741, 0x02000000, 0x00000002},
+ {0x4A544742, 0x08000000, 0x00000002},
+ {0x4A544843, 0x04000000, 0x00000002},
+ {0x4A544854, 0x20000000, 0x00000003},
+ {0x4A544859, 0x01000000, 0x00000001},
+ {0x4A544942, 0x08000000, 0x00000005},
+ {0x4A544A59, 0x08000000, 0x00000002},
+ {0x4A544B41, 0x01000000, 0x00000001},
+ {0x4A544B42, 0x04000000, 0x00000002},
+ {0x4A544B54, 0x04000000, 0x00000002},
+ {0x4A544B59, 0x02000000, 0x00000002},
+ {0x4A544C54, 0x04000000, 0x00000003},
+ {0x4A544C59, 0x08000000, 0x00000002},
+ {0x4A544D41, 0x04000000, 0x00000002},
+ {0x4A544D42, 0x08000000, 0x00000003},
+ {0x4A544D56, 0x10000000, 0x00000002},
+ {0x4A544E41, 0x04000000, 0x00000002},
+ {0x4A544E43, 0x10000000, 0x00000003},
+ {0x4A544E59, 0x10000000, 0x00000001},
+ {0x4A544F41, 0x01000000, 0x00000002},
+ {0x4A544F42, 0x01000000, 0x00000005},
+ {0x4A544F43, 0x01000000, 0x00000005},
+ {0x4A544F59, 0x04000000, 0x00000003},
+ {0x4A545041, 0x01000000, 0x00000002},
+ {0x4A545043, 0x04000000, 0x00000005},
+ {0x4A545056, 0x08000000, 0x00000006},
+ {0x4A545059, 0x02000000, 0x00000005},
+ {0x4A545143, 0x04000000, 0x00000003},
+ {0x4A545241, 0x08000000, 0x00000002},
+ {0x4A545341, 0x02000000, 0x00000001},
+ {0x4A545359, 0x04000000, 0x00000001},
+ {0x4A545442, 0x04000000, 0x00000002},
+ {0x4A545443, 0x08000000, 0x00000003},
+ {0x4A545459, 0x08000000, 0x00000003},
+ {0x4A545641, 0x04000000, 0x00000002},
+ {0x4A545741, 0x00800000, 0x00000001},
+ {0x4A545843, 0x10000000, 0x00000003},
+ {0x4A545859, 0x02000000, 0x00000003},
+ {0x4A545941, 0x08000000, 0x00000003},
+ {0x4A545943, 0x04000000, 0x00000003},
+ {0x4A545A41, 0x01000000, 0x00000005},
+ {0x4A545A43, 0x02000000, 0x00000002},
+ {0x4A545A59, 0x01000000, 0x00000005},
+ {0x4A553241, 0x04000000, 0x00000002},
+ {0x4A553341, 0x02000000, 0x00000001},
+ {0x4A553343, 0x08000000, 0x00000002},
+ {0x4A553441, 0x02000000, 0x00000002},
+ {0x4A553442, 0x02000000, 0x00000003},
+ {0x4A553443, 0x04000000, 0x00000001},
+ {0x4A553641, 0x02000000, 0x00000001},
+ {0x4A553841, 0x02000000, 0x00000002},
+ {0x4A554241, 0x04000000, 0x00000005},
+ {0x4A554242, 0x04000000, 0x00000003},
+ {0x4A554259, 0x08000000, 0x00000003},
+ {0x4A554341, 0x04000000, 0x00000005},
+ {0x4A554343, 0x04000000, 0x00000006},
+ {0x4A554441, 0x02000000, 0x00000003},
+ {0x4A554459, 0x04000000, 0x00000003},
+ {0x4A554541, 0x04000000, 0x00000003},
+ {0x4A554542, 0x10000000, 0x00000003},
+ {0x4A554641, 0x01000000, 0x00000003},
+ {0x4A554656, 0x10000000, 0x00000005},
+ {0x4A554659, 0x04000000, 0x00000002},
+ {0x4A554741, 0x02000000, 0x00000002},
+ {0x4A554742, 0x08000000, 0x00000003},
+ {0x4A554759, 0x01000000, 0x00000002},
+ {0x4A554843, 0x10000000, 0x00000003},
+ {0x4A554A41, 0x04000000, 0x00000003},
+ {0x4A554A42, 0x02000000, 0x00000003},
+ {0x4A554A43, 0x04000000, 0x00000003},
+ {0x4A554A59, 0x04000000, 0x00000002},
+ {0x4A554B42, 0x08000000, 0x00000005},
+ {0x4A554B43, 0x04000000, 0x00000003},
+ {0x4A554B59, 0x04000000, 0x00000003},
+ {0x4A554C41, 0x02000000, 0x00000002},
+ {0x4A554C42, 0x08000000, 0x00000003},
+ {0x4A554C59, 0x08000000, 0x00000005},
+ {0x4A554E43, 0x02000000, 0x00000002},
+ {0x4A554E59, 0x04000000, 0x00000003},
+ {0x4A554F41, 0x01000000, 0x00000003},
+ {0x4A555041, 0x02000000, 0x00000003},
+ {0x4A555042, 0x04000000, 0x00000005},
+ {0x4A555043, 0x08000000, 0x00000006},
+ {0x4A555141, 0x08000000, 0x00000002},
+ {0x4A555142, 0x04000000, 0x00000002},
+ {0x4A555143, 0x02000000, 0x00000002},
+ {0x4A555159, 0x08000000, 0x00000003},
+ {0x4A555241, 0x02000000, 0x00000003},
+ {0x4A555259, 0x00800000, 0x00000001},
+ {0x4A555341, 0x04000000, 0x00000003},
+ {0x4A555359, 0x00800000, 0x00000003},
+ {0x4A555441, 0x04000000, 0x00000002},
+ {0x4A555442, 0x04000000, 0x00000002},
+ {0x4A555443, 0x10000000, 0x00000003},
+ {0x4A555459, 0x04000000, 0x00000003},
+ {0x4A555541, 0x00800000, 0x00000003},
+ {0x4A555543, 0x00800000, 0x00000002},
+ {0x4A555559, 0x02000000, 0x00000002},
+ {0x4A555641, 0x08000000, 0x00000003},
+ {0x4A555643, 0x04000000, 0x00000002},
+ {0x4A555659, 0x04000000, 0x00000005},
+ {0x4A555759, 0x02000000, 0x00000001},
+ {0x4A555859, 0x02000000, 0x00000003},
+ {0x4A555941, 0x02000000, 0x00000002},
+ {0x4A555A41, 0x01000000, 0x00000002},
+ {0x4A555A59, 0x04000000, 0x00000001},
+ {0x4A563243, 0x10000000, 0x00000003},
+ {0x4A563341, 0x04000000, 0x00000003},
+ {0x4A563441, 0x08000000, 0x00000005},
+ {0x4A563841, 0x04000000, 0x00000002},
+ {0x4A563842, 0x02000000, 0x00000003},
+ {0x4A564156, 0x04000000, 0x00000001},
+ {0x4A564241, 0x02000000, 0x00000002},
+ {0x4A564341, 0x04000000, 0x00000002},
+ {0x4A564441, 0x01000000, 0x00000001},
+ {0x4A564454, 0x08000000, 0x00000003},
+ {0x4A564541, 0x04000000, 0x00000002},
+ {0x4A564542, 0x10000000, 0x00000003},
+ {0x4A564742, 0x04000000, 0x00000002},
+ {0x4A564759, 0x04000000, 0x00000002},
+ {0x4A564843, 0x01000000, 0x00000003},
+ {0x4A564941, 0x02000000, 0x00000002},
+ {0x4A564942, 0x00800000, 0x00000001},
+ {0x4A564943, 0x08000000, 0x00000003},
+ {0x4A564959, 0x08000000, 0x00000003},
+ {0x4A564A41, 0x01000000, 0x00000001},
+ {0x4A564B41, 0x04000000, 0x00000001},
+ {0x4A564B59, 0x08000000, 0x00000003},
+ {0x4A564C41, 0x02000000, 0x00000002},
+ {0x4A564C59, 0x04000000, 0x00000002},
+ {0x4A564D59, 0x00800000, 0x00000001},
+ {0x4A564E43, 0x08000000, 0x00000005},
+ {0x4A564E59, 0x02000000, 0x00000002},
+ {0x4A564F41, 0x04000000, 0x00000002},
+ {0x4A564F43, 0x02000000, 0x00000005},
+ {0x4A565041, 0x00800000, 0x00000002},
+ {0x4A565142, 0x04000000, 0x00000003},
+ {0x4A565259, 0x02000000, 0x00000005},
+ {0x4A565359, 0x04000000, 0x00000003},
+ {0x4A565541, 0x08000000, 0x00000002},
+ {0x4A565559, 0x02000000, 0x00000003},
+ {0x4A565641, 0x00800000, 0x00000003},
+ {0x4A565643, 0x01000000, 0x00000001},
+ {0x4A565659, 0x00800000, 0x00000001},
+ {0x4A565741, 0x01000000, 0x00000001},
+ {0x4A565743, 0x04000000, 0x00000002},
+ {0x4A565759, 0x04000000, 0x00000002},
+ {0x4A565841, 0x04000000, 0x00000003},
+ {0x4A565843, 0x02000000, 0x00000003},
+ {0x4A565942, 0x08000000, 0x00000003},
+ {0x4A565943, 0x04000000, 0x00000002},
+ {0x4A565A41, 0x00800000, 0x00000001},
+ {0x4A565A59, 0x02000000, 0x00000002},
+ {0x4A573241, 0x04000000, 0x00000001},
+ {0x4A573242, 0x08000000, 0x00000003},
+ {0x4A573243, 0x02000000, 0x00000002},
+ {0x4A573343, 0x02000000, 0x00000003},
+ {0x4A573443, 0x02000000, 0x00000002},
+ {0x4A573643, 0x02000000, 0x00000002},
+ {0x4A573841, 0x00800000, 0x00000001},
+ {0x4A574159, 0x04000000, 0x00000002},
+ {0x4A574254, 0x02000000, 0x00000001},
+ {0x4A574341, 0x00800000, 0x00000002},
+ {0x4A574359, 0x00800000, 0x00000002},
+ {0x4A574459, 0x02000000, 0x00000005},
+ {0x4A574541, 0x04000000, 0x00000002},
+ {0x4A574543, 0x08000000, 0x00000002},
+ {0x4A574559, 0x04000000, 0x00000008},
+ {0x4A574741, 0x01000000, 0x00000002},
+ {0x4A574742, 0x02000000, 0x00000002},
+ {0x4A574743, 0x00800000, 0x00000001},
+ {0x4A574941, 0x01000000, 0x00000002},
+ {0x4A574A41, 0x01000000, 0x00000001},
+ {0x4A574B41, 0x04000000, 0x00000002},
+ {0x4A574B43, 0x10000000, 0x00000001},
+ {0x4A574B59, 0x08000000, 0x00000003},
+ {0x4A574C41, 0x02000000, 0x00000001},
+ {0x4A574D49, 0x04000000, 0x00000007},
+ {0x4A574F43, 0x10000000, 0x00000002},
+ {0x4A574F59, 0x02000000, 0x00000002},
+ {0x4A575141, 0x02000000, 0x00000002},
+ {0x4A575142, 0x08000000, 0x00000003},
+ {0x4A575241, 0x01000000, 0x00000002},
+ {0x4A575242, 0x08000000, 0x00000005},
+ {0x4A575259, 0x02000000, 0x00000005},
+ {0x4A575342, 0x08000000, 0x00000006},
+ {0x4A575441, 0x02000000, 0x00000002},
+ {0x4A575443, 0x01000000, 0x00000003},
+ {0x4A575459, 0x08000000, 0x00000003},
+ {0x4A575541, 0x04000000, 0x00000003},
+ {0x4A575543, 0x04000000, 0x00000003},
+ {0x4A575659, 0x10000000, 0x00000003},
+ {0x4A575742, 0x08000000, 0x00000003},
+ {0x4A575759, 0x02000000, 0x00000002},
+ {0x4A575841, 0x00800000, 0x00000002},
+ {0x4A575843, 0x02000000, 0x00000003},
+ {0x4A575859, 0x01000000, 0x00000003},
+ {0x4A575941, 0x02000000, 0x00000002},
+ {0x4A575943, 0x01000000, 0x00000001},
+ {0x4A575A41, 0x02000000, 0x00000002},
+ {0x4A575A43, 0x04000000, 0x00000002},
+ {0x4A575A59, 0x02000000, 0x00000002},
+ {0x4A583241, 0x01000000, 0x00000002},
+ {0x4A583243, 0x02000000, 0x00000003},
+ {0x4A583342, 0x01000000, 0x00000001},
+ {0x4A583343, 0x08000000, 0x00000002},
+ {0x4A583442, 0x04000000, 0x00000002},
+ {0x4A583641, 0x02000000, 0x00000002},
+ {0x4A583642, 0x01000000, 0x00000003},
+ {0x4A583643, 0x00800000, 0x00000002},
+ {0x4A583742, 0x08000000, 0x00000003},
+ {0x4A583841, 0x04000000, 0x00000002},
+ {0x4A584241, 0x02000000, 0x00000002},
+ {0x4A584342, 0x04000000, 0x00000005},
+ {0x4A584359, 0x02000000, 0x00000002},
+ {0x4A584441, 0x02000000, 0x00000002},
+ {0x4A584442, 0x01000000, 0x00000001},
+ {0x4A584541, 0x08000000, 0x00000002},
+ {0x4A584559, 0x02000000, 0x00000002},
+ {0x4A584641, 0x08000000, 0x00000003},
+ {0x4A584642, 0x04000000, 0x00000002},
+ {0x4A584743, 0x10000000, 0x00000001},
+ {0x4A584759, 0x08000000, 0x00000002},
+ {0x4A584842, 0x04000000, 0x00000002},
+ {0x4A584941, 0x04000000, 0x00000002},
+ {0x4A584959, 0x08000000, 0x00000003},
+ {0x4A584A41, 0x02000000, 0x00000001},
+ {0x4A584B41, 0x08000000, 0x00000002},
+ {0x4A584B42, 0x04000000, 0x00000003},
+ {0x4A584B59, 0x00800000, 0x00000002},
+ {0x4A584C54, 0x01000000, 0x00000002},
+ {0x4A584D54, 0x04000000, 0x00000003},
+ {0x4A584E42, 0x04000000, 0x00000002},
+ {0x4A584F42, 0x20000000, 0x00000005},
+ {0x4A584F59, 0x04000000, 0x00000003},
+ {0x4A585041, 0x04000000, 0x00000005},
+ {0x4A585141, 0x08000000, 0x00000003},
+ {0x4A585241, 0x04000000, 0x00000001},
+ {0x4A585259, 0x04000000, 0x00000002},
+ {0x4A585341, 0x01000000, 0x00000002},
+ {0x4A585459, 0x04000000, 0x00000002},
+ {0x4A585541, 0x01000000, 0x00000001},
+ {0x4A585559, 0x04000000, 0x00000003},
+ {0x4A585659, 0x04000000, 0x00000002},
+ {0x4A585841, 0x04000000, 0x00000002},
+ {0x4A585843, 0x02000000, 0x00000003},
+ {0x4A585859, 0x04000000, 0x00000002},
+ {0x4A585941, 0x08000000, 0x00000005},
+ {0x4A585942, 0x10000000, 0x00000003},
+ {0x4A585A41, 0x04000000, 0x00000002},
+ {0x4A585A59, 0x04000000, 0x00000002},
+ {0x4A593241, 0x01000000, 0x00000007},
+ {0x4A593243, 0x08000000, 0x00000003},
+ {0x4A593341, 0x04000000, 0x00000003},
+ {0x4A593343, 0x08000000, 0x00000002},
+ {0x4A593441, 0x00800000, 0x00000003},
+ {0x4A593442, 0x00800000, 0x00000001},
+ {0x4A593543, 0x08000000, 0x00000002},
+ {0x4A593643, 0x04000000, 0x00000002},
+ {0x4A593841, 0x00800000, 0x00000001},
+ {0x4A594159, 0x02000000, 0x00000001},
+ {0x4A594341, 0x01000000, 0x00000005},
+ {0x4A594541, 0x04000000, 0x00000002},
+ {0x4A594659, 0x04000000, 0x00000005},
+ {0x4A594741, 0x04000000, 0x00000005},
+ {0x4A594743, 0x04000000, 0x00000002},
+ {0x4A594759, 0x00800000, 0x00000002},
+ {0x4A594942, 0x04000000, 0x00000005},
+ {0x4A594A41, 0x04000000, 0x00000006},
+ {0x4A594B41, 0x01000000, 0x00000003},
+ {0x4A594B43, 0x02000000, 0x00000003},
+ {0x4A594B59, 0x02000000, 0x00000002},
+ {0x4A594D41, 0x04000000, 0x00000003},
+ {0x4A594D43, 0x01000000, 0x00000003},
+ {0x4A594E41, 0x04000000, 0x00000003},
+ {0x4A594F42, 0x04000000, 0x00000002},
+ {0x4A594F59, 0x01000000, 0x00000002},
+ {0x4A595041, 0x02000000, 0x00000002},
+ {0x4A595056, 0x10000000, 0x00000005},
+ {0x4A595141, 0x04000000, 0x00000002},
+ {0x4A595159, 0x01000000, 0x00000002},
+ {0x4A595242, 0x10000000, 0x00000002},
+ {0x4A595259, 0x02000000, 0x00000001},
+ {0x4A595341, 0x00800000, 0x00000001},
+ {0x4A595541, 0x02000000, 0x00000002},
+ {0x4A595542, 0x04000000, 0x00000002},
+ {0x4A595543, 0x02000000, 0x00000001},
+ {0x4A595641, 0x04000000, 0x00000002},
+ {0x4A595659, 0x08000000, 0x00000001},
+ {0x4A595741, 0x02000000, 0x00000003},
+ {0x4A595742, 0x04000000, 0x00000003},
+ {0x4A595841, 0x08000000, 0x00000001},
+ {0x4A595843, 0x02000000, 0x00000003},
+ {0x4A595942, 0x08000000, 0x00000003},
+ {0x4A595959, 0x04000000, 0x00000003},
+ {0x4A595A43, 0x02000000, 0x00000002},
+ {0x4A5A3241, 0x02000000, 0x00000001},
+ {0x4A5A3341, 0x04000000, 0x00000002},
+ {0x4A5A3342, 0x02000000, 0x00000001},
+ {0x4A5A3641, 0x08000000, 0x00000002},
+ {0x4A5A3642, 0x04000000, 0x00000003},
+ {0x4A5A3841, 0x02000000, 0x00000002},
+ {0x4A5A4143, 0x04000000, 0x00000002},
+ {0x4A5A4241, 0x08000000, 0x00000003},
+ {0x4A5A4341, 0x01000000, 0x00000001},
+ {0x4A5A4441, 0x02000000, 0x00000002},
+ {0x4A5A4459, 0x01000000, 0x00000002},
+ {0x4A5A4541, 0x04000000, 0x00000002},
+ {0x4A5A4542, 0x20000000, 0x00000003},
+ {0x4A5A4543, 0x08000000, 0x00000002},
+ {0x4A5A4559, 0x04000000, 0x00000002},
+ {0x4A5A4741, 0x04000000, 0x00000001},
+ {0x4A5A4843, 0x04000000, 0x00000002},
+ {0x4A5A4854, 0x20000000, 0x00000002},
+ {0x4A5A4941, 0x00800000, 0x00000002},
+ {0x4A5A4959, 0x04000000, 0x00000002},
+ {0x4A5A4A41, 0x00800000, 0x00000002},
+ {0x4A5A4A59, 0x02000000, 0x00000005},
+ {0x4A5A4B41, 0x01000000, 0x00000002},
+ {0x4A5A4B54, 0x02000000, 0x00000002},
+ {0x4A5A4B59, 0x01000000, 0x00000002},
+ {0x4A5A4C41, 0x02000000, 0x00000002},
+ {0x4A5A4C59, 0x08000000, 0x00000002},
+ {0x4A5A4D41, 0x00800000, 0x00000002},
+ {0x4A5A4D43, 0x04000000, 0x00000003},
+ {0x4A5A4E41, 0x01000000, 0x00000001},
+ {0x4A5A4E43, 0x02000000, 0x00000002},
+ {0x4A5A4E59, 0x04000000, 0x00000002},
+ {0x4A5A4F41, 0x01000000, 0x00000002},
+ {0x4A5A4F43, 0x08000000, 0x00000002},
+ {0x4A5A5041, 0x01000000, 0x00000002},
+ {0x4A5A5141, 0x02000000, 0x00000002},
+ {0x4A5A5159, 0x00800000, 0x00000001},
+ {0x4A5A5241, 0x04000000, 0x00000002},
+ {0x4A5A5242, 0x04000000, 0x00000003},
+ {0x4A5A5641, 0x01000000, 0x00000001},
+ {0x4A5A5643, 0x10000000, 0x00000003},
+ {0x4A5A5659, 0x00800000, 0x00000001},
+ {0x4A5A5741, 0x02000000, 0x00000002},
+ {0x4A5A5742, 0x04000000, 0x00000003},
+ {0x4A5A5759, 0x04000000, 0x00000001},
+ {0x4A5A5841, 0x08000000, 0x00000001},
+ {0x4A5A5843, 0x02000000, 0x00000003},
+ {0x4A5A5941, 0x02000000, 0x00000003},
+ {0x4A5A5A41, 0x04000000, 0x00000005},
+ {0x4A5A5A59, 0x02000000, 0x00000001},
+ {0x4B324359, 0x04000000, 0x00000006},
+ {0x4B324441, 0x02000000, 0x00000005},
+ {0x4B325043, 0x04000000, 0x00000003},
+ {0x4B325359, 0x04000000, 0x00000005},
+ {0x4B325859, 0x00800000, 0x00000002},
+ {0x4B334341, 0x02000000, 0x00000005},
+ {0x4B334359, 0x04000000, 0x00000006},
+ {0x4B334441, 0x02000000, 0x00000005},
+ {0x4B334741, 0x02000000, 0x00000005},
+ {0x4B334C41, 0x02000000, 0x00000001},
+ {0x4B334D43, 0x08000000, 0x00000003},
+ {0x4B344241, 0x04000000, 0x00000005},
+ {0x4B344759, 0x10000000, 0x00000003},
+ {0x4B344C43, 0x08000000, 0x00000002},
+ {0x4B345043, 0x08000000, 0x00000002},
+ {0x4B345759, 0x04000000, 0x00000003},
+ {0x4B354459, 0x00800000, 0x00000002},
+ {0x4B354759, 0x04000000, 0x00000003},
+ {0x4B354B43, 0x04000000, 0x00000005},
+ {0x4B355443, 0x08000000, 0x00000002},
+ {0x4B363643, 0x04000000, 0x00000002},
+ {0x4B364843, 0x04000000, 0x00000001},
+ {0x4B364C59, 0x04000000, 0x00000001},
+ {0x4B374743, 0x04000000, 0x00000002},
+ {0x4B374D41, 0x02000000, 0x00000002},
+ {0x4B374D59, 0x04000000, 0x00000002},
+ {0x4B375241, 0x04000000, 0x00000002},
+ {0x4B383443, 0x04000000, 0x00000006},
+ {0x4B384659, 0x02000000, 0x00000003},
+ {0x4B384759, 0x08000000, 0x00000005},
+ {0x4B385741, 0x04000000, 0x00000001},
+ {0x4B385943, 0x10000000, 0x00000003},
+ {0x4B394559, 0x04000000, 0x00000003},
+ {0x4B394643, 0x02000000, 0x00000003},
+ {0x4B395259, 0x04000000, 0x00000002},
+ {0x4B395343, 0x02000000, 0x00000001},
+ {0x4B395759, 0x08000000, 0x00000001},
+ {0x4B395941, 0x08000000, 0x00000003},
+ {0x4B413242, 0x04000000, 0x00000003},
+ {0x4B414156, 0x02000000, 0x00000008},
+ {0x4B414441, 0x04000000, 0x00000006},
+ {0x4B414641, 0x04000000, 0x00000003},
+ {0x4B414642, 0x02000000, 0x00000003},
+ {0x4B415041, 0x04000000, 0x00000006},
+ {0x4B415249, 0x10000000, 0x00000006},
+ {0x4B415941, 0x00800000, 0x00000002},
+ {0x4B424B59, 0x04000000, 0x00000003},
+ {0x4B425249, 0x10000000, 0x00000006},
+ {0x4B425259, 0x08000000, 0x00000003},
+ {0x4B433841, 0x02000000, 0x00000002},
+ {0x4B434241, 0x02000000, 0x00000005},
+ {0x4B434341, 0x02000000, 0x00000001},
+ {0x4B434D41, 0x02000000, 0x00000005},
+ {0x4B435041, 0x01000000, 0x00000001},
+ {0x4B435141, 0x04000000, 0x00000002},
+ {0x4B435259, 0x08000000, 0x00000002},
+ {0x4B443241, 0x02000000, 0x00000002},
+ {0x4B444154, 0x04000000, 0x00000005},
+ {0x4B444342, 0x02000000, 0x00000002},
+ {0x4B444E41, 0x01000000, 0x00000005},
+ {0x4B444E43, 0x04000000, 0x00000002},
+ {0x4B445041, 0x01000000, 0x00000002},
+ {0x4B445059, 0x02000000, 0x00000003},
+ {0x4B445249, 0x20000000, 0x00000006},
+ {0x4B454641, 0x04000000, 0x00000003},
+ {0x4B455249, 0x20000000, 0x00000006},
+ {0x4B455741, 0x04000000, 0x00000005},
+ {0x4B455A41, 0x04000000, 0x00000006},
+ {0x4B463341, 0x04000000, 0x00000005},
+ {0x4B463541, 0x04000000, 0x00000002},
+ {0x4B464B59, 0x02000000, 0x00000001},
+ {0x4B465241, 0x08000000, 0x00000003},
+ {0x4B473341, 0x04000000, 0x00000005},
+ {0x4B473641, 0x04000000, 0x00000002},
+ {0x4B474441, 0x02000000, 0x00000005},
+ {0x4B474E41, 0x08000000, 0x00000005},
+ {0x4B474E59, 0x08000000, 0x00000003},
+ {0x4B475049, 0x08000000, 0x00000006},
+ {0x4B475059, 0x04000000, 0x00000002},
+ {0x4B483643, 0x01000000, 0x00000001},
+ {0x4B484759, 0x08000000, 0x00000001},
+ {0x4B484D41, 0x04000000, 0x00000005},
+ {0x4B484E41, 0x08000000, 0x00000006},
+ {0x4B485041, 0x02000000, 0x00000005},
+ {0x4B494459, 0x04000000, 0x00000002},
+ {0x4B495041, 0x00800000, 0x00000002},
+ {0x4B495141, 0x02000000, 0x00000005},
+ {0x4B495243, 0x02000000, 0x00000002},
+ {0x4B495741, 0x08000000, 0x00000005},
+ {0x4B4A4241, 0x04000000, 0x00000005},
+ {0x4B4A4342, 0x10000000, 0x00000003},
+ {0x4B4A4C43, 0x08000000, 0x00000002},
+ {0x4B4A5159, 0x08000000, 0x00000005},
+ {0x4B4B4343, 0x02000000, 0x00000001},
+ {0x4B4B4841, 0x04000000, 0x00000003},
+ {0x4B4B5049, 0x08000000, 0x00000006},
+ {0x4B4B5659, 0x08000000, 0x00000002},
+ {0x4B4C4143, 0x04000000, 0x00000001},
+ {0x4B4C4443, 0x02000000, 0x00000005},
+ {0x4B4C4542, 0x02000000, 0x00000002},
+ {0x4B4C4F43, 0x08000000, 0x00000003},
+ {0x4B4C5759, 0x02000000, 0x00000001},
+ {0x4B4C5A41, 0x08000000, 0x00000007},
+ {0x4B4D3341, 0x08000000, 0x00000002},
+ {0x4B4D4441, 0x02000000, 0x00000005},
+ {0x4B4D4641, 0x04000000, 0x00000002},
+ {0x4B4D4E41, 0x02000000, 0x00000005},
+ {0x4B4D5241, 0x04000000, 0x00000002},
+ {0x4B4D5341, 0x01000000, 0x00000001},
+ {0x4B4E3442, 0x00800000, 0x00000002},
+ {0x4B4E5041, 0x02000000, 0x00000001},
+ {0x4B4E5943, 0x01000000, 0x00000002},
+ {0x4B4F3242, 0x02000000, 0x00000005},
+ {0x4B4F4359, 0x04000000, 0x00000001},
+ {0x4B4F4443, 0x04000000, 0x00000005},
+ {0x4B4F4559, 0x04000000, 0x00000003},
+ {0x4B4F4E59, 0x08000000, 0x00000003},
+ {0x4B4F5259, 0x02000000, 0x00000002},
+ {0x4B504441, 0x00800000, 0x00000002},
+ {0x4B504D59, 0x08000000, 0x00000005},
+ {0x4B504E59, 0x04000000, 0x00000002},
+ {0x4B505142, 0x04000000, 0x00000002},
+ {0x4B505359, 0x02000000, 0x00000005},
+ {0x4B505759, 0x04000000, 0x00000002},
+ {0x4B505841, 0x02000000, 0x00000005},
+ {0x4B514641, 0x04000000, 0x00000003},
+ {0x4B514B42, 0x04000000, 0x00000001},
+ {0x4B524559, 0x04000000, 0x00000003},
+ {0x4B524E41, 0x04000000, 0x00000001},
+ {0x4B524E59, 0x04000000, 0x00000002},
+ {0x4B525441, 0x01000000, 0x00000002},
+ {0x4B534743, 0x08000000, 0x00000001},
+ {0x4B534E43, 0x04000000, 0x00000002},
+ {0x4B534F41, 0x08000000, 0x00000005},
+ {0x4B535043, 0x04000000, 0x00000002},
+ {0x4B535143, 0x02000000, 0x00000001},
+ {0x4B535659, 0x02000000, 0x00000003},
+ {0x4B543841, 0x02000000, 0x00000002},
+ {0x4B544659, 0x04000000, 0x00000005},
+ {0x4B544C59, 0x08000000, 0x00000002},
+ {0x4B545041, 0x01000000, 0x00000002},
+ {0x4B545359, 0x04000000, 0x00000001},
+ {0x4B545A59, 0x01000000, 0x00000005},
+ {0x4B554242, 0x04000000, 0x00000003},
+ {0x4B554D42, 0x02000000, 0x00000001},
+ {0x4B555043, 0x08000000, 0x00000006},
+ {0x4B564143, 0x02000000, 0x00000002},
+ {0x4B564C59, 0x04000000, 0x00000002},
+ {0x4B573443, 0x02000000, 0x00000002},
+ {0x4B574441, 0x04000000, 0x00000002},
+ {0x4B574459, 0x02000000, 0x00000005},
+ {0x4B574B41, 0x04000000, 0x00000002},
+ {0x4B574B59, 0x08000000, 0x00000003},
+ {0x4B574F42, 0x04000000, 0x00000002},
+ {0x4B575241, 0x01000000, 0x00000002},
+ {0x4B575941, 0x02000000, 0x00000002},
+ {0x4B575A41, 0x02000000, 0x00000002},
+ {0x4B583241, 0x01000000, 0x00000002},
+ {0x4B584241, 0x02000000, 0x00000002},
+ {0x4B584559, 0x02000000, 0x00000002},
+ {0x4B585541, 0x01000000, 0x00000001},
+ {0x4B585942, 0x10000000, 0x00000003},
+ {0x4B585A43, 0x08000000, 0x00000002},
+ {0x4B593242, 0x02000000, 0x00000002},
+ {0x4B593341, 0x04000000, 0x00000003},
+ {0x4B593441, 0x00800000, 0x00000003},
+ {0x4B594541, 0x04000000, 0x00000002},
+ {0x4B594659, 0x04000000, 0x00000005},
+ {0x4B595543, 0x02000000, 0x00000001},
+ {0x4B595942, 0x08000000, 0x00000003},
+ {0x4B5A4459, 0x00800000, 0x00000002},
+ {0x4B5A4C59, 0x08000000, 0x00000002},
+ {0x4B5A5242, 0x04000000, 0x00000003},
+ {0x4B5A5A43, 0x10000000, 0x00000005},
+ {0x4C464B59, 0x04000000, 0x00000001},
+ {0x4C474D43, 0x04000000, 0x00000001},
+ {0x4D374C42, 0x04000000, 0x00000001},
+ {0x4D375042, 0x02000000, 0x00000001},
+ {0x4D385042, 0x04000000, 0x00000001},
+ {0x4D435143, 0x02000000, 0x00000001},
+ {0x4D474D43, 0x04000000, 0x00000001},
+ {0x4D503642, 0x02000000, 0x00000001},
+ {0x4E374C42, 0x04000000, 0x00000001},
+ {0x4E374E42, 0x02000000, 0x00000001},
+ {0x4E375042, 0x02000000, 0x00000001},
+ {0x4E385042, 0x04000000, 0x00000001},
+ {0x4E435143, 0x02000000, 0x00000001},
+ {0x4E454642, 0x04000000, 0x00000001},
+ {0x4E503642, 0x02000000, 0x00000001},
+ {0x4E573542, 0x02000000, 0x00000001},
+ {0x4E584C42, 0x04000000, 0x00000008},
+ {0x4E594C42, 0x04000000, 0x00000008},
+ {0x4F415249, 0x10000000, 0x00000006},
+ {0x4F425249, 0x10000000, 0x00000006},
+ {0x4F445249, 0x20000000, 0x00000006},
+ {0x4F455249, 0x20000000, 0x00000006},
+ {0x50323241, 0x01000000, 0x00000002},
+ {0x50323343, 0x04000000, 0x00000003},
+ {0x50323542, 0x01000000, 0x00000001},
+ {0x50323641, 0x04000000, 0x00000008},
+ {0x50323643, 0x04000000, 0x00000001},
+ {0x50323743, 0x00800000, 0x00000002},
+ {0x50323842, 0x01000000, 0x00000001},
+ {0x50324241, 0x02000000, 0x00000002},
+ {0x50324242, 0x04000000, 0x00000002},
+ {0x50324259, 0x04000000, 0x00000002},
+ {0x50324341, 0x04000000, 0x00000001},
+ {0x50324343, 0x01000000, 0x00000001},
+ {0x50324354, 0x00800000, 0x00000001},
+ {0x50324359, 0x00000000, 0x00000006},
+ {0x50324441, 0x04000000, 0x00000005},
+ {0x50324442, 0x01000000, 0x00000002},
+ {0x50324459, 0x01000000, 0x00000003},
+ {0x50324643, 0x01000000, 0x00000001},
+ {0x50324741, 0x08000000, 0x00000001},
+ {0x50324743, 0x02000000, 0x00000002},
+ {0x50324759, 0x01000000, 0x00000001},
+ {0x50324842, 0x02000000, 0x00000003},
+ {0x50324854, 0x01000000, 0x00000001},
+ {0x50324859, 0x02000000, 0x00000003},
+ {0x50324941, 0x04000000, 0x00000002},
+ {0x50324943, 0x00800000, 0x00000001},
+ {0x50324959, 0x00800000, 0x00000001},
+ {0x50324A41, 0x00800000, 0x00000008},
+ {0x50324A42, 0x04000000, 0x00000001},
+ {0x50324A43, 0x01000000, 0x00000002},
+ {0x50324A56, 0x02000000, 0x00000001},
+ {0x50324A59, 0x02000000, 0x00000002},
+ {0x50324B43, 0x02000000, 0x00000001},
+ {0x50324C41, 0x04000000, 0x00000002},
+ {0x50324C59, 0x08000000, 0x00000003},
+ {0x50325041, 0x02000000, 0x00000001},
+ {0x50325042, 0x02000000, 0x00000001},
+ {0x50325059, 0x04000000, 0x00000005},
+ {0x50325141, 0x02000000, 0x00000002},
+ {0x50325254, 0x02000000, 0x00000002},
+ {0x50325259, 0x08000000, 0x00000003},
+ {0x50325341, 0x01000000, 0x00000001},
+ {0x50325359, 0x04000000, 0x00000005},
+ {0x50325442, 0x04000000, 0x00000003},
+ {0x50325459, 0x00800000, 0x00000001},
+ {0x50325559, 0x01000000, 0x00000003},
+ {0x50325642, 0x02000000, 0x00000001},
+ {0x50325741, 0x02000000, 0x00000003},
+ {0x50325759, 0x04000000, 0x00000005},
+ {0x50325841, 0x00800000, 0x00000001},
+ {0x50325842, 0x00800000, 0x00000001},
+ {0x50325A43, 0x01000000, 0x00000003},
+ {0x50333441, 0x01000000, 0x00000008},
+ {0x50333543, 0x00800000, 0x00000001},
+ {0x50333743, 0x00800000, 0x00000002},
+ {0x50333842, 0x08000000, 0x00000001},
+ {0x50334142, 0x04000000, 0x00000001},
+ {0x50334159, 0x00800000, 0x00000001},
+ {0x50334241, 0x04000000, 0x00000003},
+ {0x50334242, 0x08000000, 0x00000001},
+ {0x50334243, 0x02000000, 0x00000002},
+ {0x50334259, 0x04000000, 0x00000005},
+ {0x50334341, 0x04000000, 0x00000005},
+ {0x50334342, 0x00800000, 0x00000001},
+ {0x50334354, 0x04000000, 0x00000002},
+ {0x50334441, 0x04000000, 0x00000005},
+ {0x50334442, 0x04000000, 0x00000001},
+ {0x50334444, 0x02000000, 0x00000001},
+ {0x50334542, 0x04000000, 0x00000001},
+ {0x50334641, 0x00800000, 0x00000001},
+ {0x50334643, 0x01000000, 0x00000001},
+ {0x50334659, 0x02000000, 0x00000002},
+ {0x50334741, 0x04000000, 0x00000005},
+ {0x50334743, 0x02000000, 0x00000002},
+ {0x50334759, 0x02000000, 0x00000003},
+ {0x50334841, 0x02000000, 0x00000003},
+ {0x50334842, 0x02000000, 0x00000002},
+ {0x50334941, 0x01000000, 0x00000002},
+ {0x50334943, 0x04000000, 0x00000001},
+ {0x50334959, 0x04000000, 0x00000002},
+ {0x50334A43, 0x00800000, 0x00000001},
+ {0x50334A54, 0x01000000, 0x00000001},
+ {0x50334A56, 0x02000000, 0x00000001},
+ {0x50334B41, 0x02000000, 0x00000002},
+ {0x50334B59, 0x02000000, 0x00000003},
+ {0x50334C41, 0x02000000, 0x00000001},
+ {0x50334C43, 0x01000000, 0x00000001},
+ {0x50334C59, 0x04000000, 0x00000002},
+ {0x50334D43, 0x08000000, 0x00000003},
+ {0x50334D54, 0x04000000, 0x00000001},
+ {0x50334F41, 0x02000000, 0x00000001},
+ {0x50335043, 0x08000000, 0x00000005},
+ {0x50335059, 0x02000000, 0x00000008},
+ {0x50335141, 0x04000000, 0x00000002},
+ {0x50335154, 0x04000000, 0x00000001},
+ {0x50335159, 0x04000000, 0x00000002},
+ {0x50335341, 0x02000000, 0x00000001},
+ {0x50335343, 0x04000000, 0x00000003},
+ {0x50335359, 0x00800000, 0x00000001},
+ {0x50335459, 0x04000000, 0x00000003},
+ {0x50335543, 0x02000000, 0x00000001},
+ {0x50335559, 0x02000000, 0x00000001},
+ {0x50335741, 0x04000000, 0x00000001},
+ {0x50335742, 0x08000000, 0x00000002},
+ {0x50335759, 0x01000000, 0x00000001},
+ {0x50335842, 0x00800000, 0x00000001},
+ {0x50335941, 0x04000000, 0x00000002},
+ {0x50343242, 0x00800000, 0x00000001},
+ {0x50343243, 0x08000000, 0x00000003},
+ {0x50343543, 0x02000000, 0x00000003},
+ {0x50343559, 0x02000000, 0x00000008},
+ {0x50343741, 0x04000000, 0x00000008},
+ {0x50343743, 0x00800000, 0x00000002},
+ {0x50344259, 0x02000000, 0x00000001},
+ {0x50344341, 0x04000000, 0x00000001},
+ {0x50344441, 0x02000000, 0x00000005},
+ {0x50344443, 0x00800000, 0x00000001},
+ {0x50344456, 0x04000000, 0x00000001},
+ {0x50344643, 0x00800000, 0x00000001},
+ {0x50344659, 0x08000000, 0x00000003},
+ {0x50344759, 0x10000000, 0x00000003},
+ {0x50344843, 0x04000000, 0x00000002},
+ {0x50344943, 0x04000000, 0x00000002},
+ {0x50344A42, 0x00800000, 0x00000001},
+ {0x50344A43, 0x01000000, 0x00000001},
+ {0x50344A56, 0x02000000, 0x00000001},
+ {0x50344C41, 0x00800000, 0x00000001},
+ {0x50344D41, 0x00800000, 0x00000002},
+ {0x50344D42, 0x00000000, 0x00000002},
+ {0x50344D43, 0x01000000, 0x00000003},
+ {0x50344D56, 0x02000000, 0x00000002},
+ {0x50344E41, 0x04000000, 0x00000001},
+ {0x50345059, 0x04000000, 0x00000002},
+ {0x50345141, 0x02000000, 0x00000001},
+ {0x50345159, 0x00800000, 0x00000002},
+ {0x50345242, 0x08000000, 0x00000003},
+ {0x50345243, 0x04000000, 0x00000002},
+ {0x50345341, 0x04000000, 0x00000003},
+ {0x50345442, 0x01000000, 0x00000008},
+ {0x50345443, 0x01000000, 0x00000001},
+ {0x50345543, 0x02000000, 0x00000002},
+ {0x50345659, 0x08000000, 0x00000003},
+ {0x50345742, 0x02000000, 0x00000002},
+ {0x50345759, 0x04000000, 0x00000003},
+ {0x50345842, 0x00800000, 0x00000001},
+ {0x50345A43, 0x04000000, 0x00000001},
+ {0x50353441, 0x01000000, 0x00000008},
+ {0x50353542, 0x00800000, 0x00000001},
+ {0x50353643, 0x02000000, 0x00000001},
+ {0x50353743, 0x00800000, 0x00000002},
+ {0x50353841, 0x02000000, 0x00000008},
+ {0x50353859, 0x00800000, 0x00000000},
+ {0x50354142, 0x01000000, 0x00000001},
+ {0x50354242, 0x00800000, 0x00000002},
+ {0x50354259, 0x02000000, 0x00000002},
+ {0x50354342, 0x04000000, 0x00000002},
+ {0x50354359, 0x00800000, 0x00000008},
+ {0x50354443, 0x02000000, 0x00000001},
+ {0x50354642, 0x00800000, 0x00000002},
+ {0x50354643, 0x00800000, 0x00000002},
+ {0x50354741, 0x01000000, 0x00000001},
+ {0x50354743, 0x04000000, 0x00000001},
+ {0x50354841, 0x02000000, 0x00000002},
+ {0x50354943, 0x01000000, 0x00000001},
+ {0x50354A42, 0x02000000, 0x00000001},
+ {0x50354A54, 0x01000000, 0x00000002},
+ {0x50354A59, 0x08000000, 0x00000002},
+ {0x50354B43, 0x04000000, 0x00000005},
+ {0x50354C41, 0x04000000, 0x00000001},
+ {0x50354D43, 0x04000000, 0x00000001},
+ {0x50354F41, 0x02000000, 0x00000005},
+ {0x50354F42, 0x10000000, 0x00000005},
+ {0x50354F43, 0x04000000, 0x00000001},
+ {0x50355043, 0x02000000, 0x00000001},
+ {0x50355059, 0x01000000, 0x00000001},
+ {0x50355141, 0x04000000, 0x00000001},
+ {0x50355241, 0x02000000, 0x00000001},
+ {0x50355242, 0x01000000, 0x00000002},
+ {0x50355259, 0x02000000, 0x00000002},
+ {0x50355341, 0x01000000, 0x00000001},
+ {0x50355343, 0x04000000, 0x00000001},
+ {0x50355359, 0x02000000, 0x00000001},
+ {0x50355459, 0x00800000, 0x00000002},
+ {0x50355541, 0x00800000, 0x00000001},
+ {0x50355643, 0x02000000, 0x00000001},
+ {0x50355659, 0x08000000, 0x00000003},
+ {0x50355743, 0x00000000, 0x00000001},
+ {0x50355759, 0x01000000, 0x00000001},
+ {0x50355842, 0x00800000, 0x00000001},
+ {0x50355941, 0x08000000, 0x00000003},
+ {0x50363241, 0x01000000, 0x00000008},
+ {0x50363242, 0x00800000, 0x00000002},
+ {0x50363341, 0x04000000, 0x00000008},
+ {0x50363442, 0x01000000, 0x00000001},
+ {0x50363642, 0x01000000, 0x00000001},
+ {0x50363742, 0x02000000, 0x00000001},
+ {0x50363743, 0x02000000, 0x00000002},
+ {0x50363842, 0x00800000, 0x00000001},
+ {0x50363859, 0x00800000, 0x00000000},
+ {0x50364241, 0x02000000, 0x00000001},
+ {0x50364243, 0x02000000, 0x00000002},
+ {0x50364254, 0x02000000, 0x00000001},
+ {0x50364341, 0x01000000, 0x00000002},
+ {0x50364542, 0x02000000, 0x00000002},
+ {0x50364641, 0x02000000, 0x00000002},
+ {0x50364642, 0x00800000, 0x00000001},
+ {0x50364743, 0x08000000, 0x00000002},
+ {0x50364759, 0x04000000, 0x00000002},
+ {0x50364841, 0x02000000, 0x00000001},
+ {0x50364843, 0x04000000, 0x00000001},
+ {0x50364A56, 0x02000000, 0x00000001},
+ {0x50364B41, 0x01000000, 0x00000001},
+ {0x50364B59, 0x00800000, 0x00000008},
+ {0x50364D41, 0x02000000, 0x00000005},
+ {0x50364D43, 0x08000000, 0x00000002},
+ {0x50364D54, 0x01000000, 0x00000001},
+ {0x50364D59, 0x00800000, 0x00000001},
+ {0x50364E41, 0x02000000, 0x00000001},
+ {0x50365043, 0x00000000, 0x00000002},
+ {0x50365059, 0x01000000, 0x00000001},
+ {0x50365241, 0x01000000, 0x00000002},
+ {0x50365242, 0x02000000, 0x00000002},
+ {0x50365259, 0x02000000, 0x00000002},
+ {0x50365342, 0x02000000, 0x00000001},
+ {0x50365343, 0x04000000, 0x00000002},
+ {0x50365359, 0x04000000, 0x00000005},
+ {0x50365541, 0x00800000, 0x00000002},
+ {0x50365559, 0x04000000, 0x00000002},
+ {0x50365642, 0x01000000, 0x00000001},
+ {0x50365643, 0x01000000, 0x00000001},
+ {0x50365741, 0x00800000, 0x00000001},
+ {0x50365743, 0x04000000, 0x00000002},
+ {0x50365842, 0x00800000, 0x00000001},
+ {0x50365941, 0x00800000, 0x00000005},
+ {0x50365942, 0x01000000, 0x00000001},
+ {0x50365A41, 0x01000000, 0x00000005},
+ {0x50365A42, 0x04000000, 0x00000002},
+ {0x50373241, 0x01000000, 0x00000008},
+ {0x50373242, 0x00800000, 0x00000001},
+ {0x50373243, 0x08000000, 0x00000003},
+ {0x50373442, 0x01000000, 0x00000001},
+ {0x50373541, 0x01000000, 0x00000008},
+ {0x50373743, 0x02000000, 0x00000003},
+ {0x50374143, 0x02000000, 0x00000002},
+ {0x50374159, 0x02000000, 0x00000002},
+ {0x50374241, 0x00800000, 0x00000001},
+ {0x50374242, 0x04000000, 0x00000002},
+ {0x50374243, 0x02000000, 0x00000002},
+ {0x50374259, 0x04000000, 0x00000002},
+ {0x50374341, 0x00800000, 0x00000002},
+ {0x50374441, 0x04000000, 0x00000005},
+ {0x50374443, 0x01000000, 0x00000001},
+ {0x50374542, 0x04000000, 0x00000002},
+ {0x50374641, 0x02000000, 0x00000002},
+ {0x50374642, 0x00800000, 0x00000001},
+ {0x50374659, 0x01000000, 0x00000002},
+ {0x50374741, 0x04000000, 0x00000002},
+ {0x50374943, 0x04000000, 0x00000002},
+ {0x50374A42, 0x00800000, 0x00000001},
+ {0x50374C41, 0x02000000, 0x00000001},
+ {0x50374C43, 0x01000000, 0x00000002},
+ {0x50374D54, 0x04000000, 0x00000002},
+ {0x50374D59, 0x04000000, 0x00000002},
+ {0x50374E41, 0x02000000, 0x00000002},
+ {0x50374E43, 0x01000000, 0x00000002},
+ {0x50375141, 0x00800000, 0x00000002},
+ {0x50375143, 0x04000000, 0x00000001},
+ {0x50375241, 0x08000000, 0x00000002},
+ {0x50375259, 0x04000000, 0x00000002},
+ {0x50375359, 0x02000000, 0x00000001},
+ {0x50375443, 0x00800000, 0x00000002},
+ {0x50375459, 0x04000000, 0x00000002},
+ {0x50375541, 0x02000000, 0x00000002},
+ {0x50375542, 0x08000000, 0x00000001},
+ {0x50375643, 0x00800000, 0x00000001},
+ {0x50375941, 0x08000000, 0x00000005},
+ {0x50375942, 0x00800000, 0x00000001},
+ {0x50375943, 0x04000000, 0x00000002},
+ {0x50383242, 0x04000000, 0x00000001},
+ {0x50383259, 0x02000000, 0x00000008},
+ {0x50383342, 0x01000000, 0x00000001},
+ {0x50383343, 0x04000000, 0x00000005},
+ {0x50383541, 0x02000000, 0x00000008},
+ {0x50383542, 0x01000000, 0x00000001},
+ {0x50383543, 0x04000000, 0x00000001},
+ {0x50383642, 0x00800000, 0x00000001},
+ {0x50384149, 0x04000000, 0x00000005},
+ {0x50384159, 0x01000000, 0x00000002},
+ {0x50384241, 0x02000000, 0x00000001},
+ {0x50384243, 0x02000000, 0x00000001},
+ {0x50384359, 0x01000000, 0x00000002},
+ {0x50384443, 0x02000000, 0x00000002},
+ {0x50384642, 0x00800000, 0x00000001},
+ {0x50384643, 0x04000000, 0x00000002},
+ {0x50384659, 0x02000000, 0x00000003},
+ {0x50384741, 0x04000000, 0x00000003},
+ {0x50384759, 0x08000000, 0x00000005},
+ {0x50384841, 0x02000000, 0x00000001},
+ {0x50384843, 0x02000000, 0x00000001},
+ {0x50384941, 0x02000000, 0x00000002},
+ {0x50384A42, 0x04000000, 0x00000002},
+ {0x50384C41, 0x04000000, 0x00000001},
+ {0x50384C43, 0x04000000, 0x00000002},
+ {0x50384D41, 0x01000000, 0x00000001},
+ {0x50384D42, 0x04000000, 0x00000001},
+ {0x50384D43, 0x02000000, 0x00000002},
+ {0x50384E41, 0x00800000, 0x00000001},
+ {0x50384F41, 0x04000000, 0x00000003},
+ {0x50384F59, 0x08000000, 0x00000003},
+ {0x50385043, 0x02000000, 0x00000002},
+ {0x50385059, 0x01000000, 0x00000001},
+ {0x50385141, 0x00800000, 0x00000002},
+ {0x50385143, 0x01000000, 0x00000001},
+ {0x50385243, 0x04000000, 0x00000002},
+ {0x50385259, 0x02000000, 0x00000002},
+ {0x50385342, 0x04000000, 0x00000002},
+ {0x50385343, 0x04000000, 0x00000003},
+ {0x50385359, 0x04000000, 0x00000001},
+ {0x50385442, 0x08000000, 0x00000001},
+ {0x50385459, 0x02000000, 0x00000002},
+ {0x50385542, 0x04000000, 0x00000001},
+ {0x50385543, 0x00800000, 0x00000001},
+ {0x50385642, 0x01000000, 0x00000002},
+ {0x50385643, 0x04000000, 0x00000002},
+ {0x50385741, 0x04000000, 0x00000001},
+ {0x50385742, 0x01000000, 0x00000001},
+ {0x50385759, 0x08000000, 0x00000005},
+ {0x50385859, 0x08000000, 0x00000001},
+ {0x50385942, 0x00800000, 0x00000001},
+ {0x50385943, 0x10000000, 0x00000003},
+ {0x50385A42, 0x01000000, 0x00000001},
+ {0x50393241, 0x00800000, 0x00000008},
+ {0x50393343, 0x02000000, 0x00000002},
+ {0x50393442, 0x04000000, 0x00000001},
+ {0x50393443, 0x04000000, 0x00000005},
+ {0x50393459, 0x04000000, 0x00000008},
+ {0x50393642, 0x01000000, 0x00000001},
+ {0x50393643, 0x04000000, 0x00000002},
+ {0x50393741, 0x02000000, 0x00000008},
+ {0x50393742, 0x02000000, 0x00000001},
+ {0x50394159, 0x00800000, 0x00000001},
+ {0x50394241, 0x01000000, 0x00000001},
+ {0x50394242, 0x02000000, 0x00000001},
+ {0x50394243, 0x08000000, 0x00000005},
+ {0x50394259, 0x02000000, 0x00000003},
+ {0x50394341, 0x04000000, 0x00000001},
+ {0x50394441, 0x04000000, 0x00000003},
+ {0x50394442, 0x00800000, 0x00000002},
+ {0x50394542, 0x04000000, 0x00000002},
+ {0x50394543, 0x01000000, 0x00000003},
+ {0x50394641, 0x00800000, 0x00000001},
+ {0x50394642, 0x00800000, 0x00000001},
+ {0x50394643, 0x02000000, 0x00000003},
+ {0x50394659, 0x02000000, 0x00000001},
+ {0x50394841, 0x04000000, 0x00000005},
+ {0x50394943, 0x01000000, 0x00000002},
+ {0x50394A59, 0x00800000, 0x00000005},
+ {0x50394B42, 0x10000000, 0x00000003},
+ {0x50394C42, 0x08000000, 0x00000001},
+ {0x50394D41, 0x01000000, 0x00000002},
+ {0x50394D43, 0x01000000, 0x00000001},
+ {0x50394D59, 0x01000000, 0x00000001},
+ {0x50394E41, 0x01000000, 0x00000001},
+ {0x50395042, 0x04000000, 0x00000002},
+ {0x50395141, 0x04000000, 0x00000001},
+ {0x50395242, 0x01000000, 0x00000001},
+ {0x50395259, 0x04000000, 0x00000002},
+ {0x50395341, 0x02000000, 0x00000001},
+ {0x50395343, 0x00000000, 0x00000001},
+ {0x50395442, 0x00800000, 0x00000001},
+ {0x50395459, 0x04000000, 0x00000003},
+ {0x50395542, 0x04000000, 0x00000001},
+ {0x50395642, 0x01000000, 0x00000001},
+ {0x50395643, 0x01000000, 0x00000001},
+ {0x50395742, 0x08000000, 0x00000002},
+ {0x50395759, 0x08000000, 0x00000001},
+ {0x50395941, 0x08000000, 0x00000003},
+ {0x50395943, 0x04000000, 0x00000001},
+ {0x50413342, 0x02000000, 0x00000001},
+ {0x50413459, 0x04000000, 0x00000008},
+ {0x50413541, 0x04000000, 0x00000001},
+ {0x50413542, 0x00800000, 0x00000001},
+ {0x50413543, 0x02000000, 0x00000002},
+ {0x50413641, 0x02000000, 0x00000005},
+ {0x50413741, 0x02000000, 0x00000001},
+ {0x50413742, 0x00800000, 0x00000001},
+ {0x50413842, 0x02000000, 0x00000001},
+ {0x50413859, 0x04000000, 0x00000000},
+ {0x50414159, 0x04000000, 0x00000002},
+ {0x50414241, 0x02000000, 0x00000001},
+ {0x50414254, 0x01000000, 0x00000001},
+ {0x50414259, 0x02000000, 0x00000002},
+ {0x50414341, 0x00800000, 0x00000001},
+ {0x50414342, 0x01000000, 0x00000002},
+ {0x50414443, 0x04000000, 0x00000002},
+ {0x50414541, 0x08000000, 0x00000001},
+ {0x50414642, 0x00000000, 0x00000003},
+ {0x50414643, 0x08000000, 0x00000002},
+ {0x50414754, 0x01000000, 0x00000001},
+ {0x50414759, 0x01000000, 0x00000001},
+ {0x50414941, 0x04000000, 0x00000001},
+ {0x50414A54, 0x00800000, 0x00000001},
+ {0x50414B41, 0x08000000, 0x00000005},
+ {0x50414B43, 0x04000000, 0x00000002},
+ {0x50414C54, 0x00800000, 0x00000001},
+ {0x50414C59, 0x00800000, 0x00000002},
+ {0x50414D54, 0x00800000, 0x00000001},
+ {0x50414E42, 0x02000000, 0x00000001},
+ {0x50414E43, 0x02000000, 0x00000001},
+ {0x50414F42, 0x04000000, 0x00000001},
+ {0x50415042, 0x02000000, 0x00000002},
+ {0x50415043, 0x02000000, 0x00000001},
+ {0x50415054, 0x02000000, 0x00000001},
+ {0x50415141, 0x02000000, 0x00000001},
+ {0x50415241, 0x02000000, 0x00000001},
+ {0x50415243, 0x00800000, 0x00000001},
+ {0x50415254, 0x00800000, 0x00000001},
+ {0x50415343, 0x01000000, 0x00000001},
+ {0x50415443, 0x04000000, 0x00000001},
+ {0x50415543, 0x04000000, 0x00000001},
+ {0x50415641, 0x04000000, 0x00000002},
+ {0x50415642, 0x00800000, 0x00000001},
+ {0x50415741, 0x04000000, 0x00000002},
+ {0x50415742, 0x02000000, 0x00000002},
+ {0x50415743, 0x00800000, 0x00000001},
+ {0x50415941, 0x02000000, 0x00000002},
+ {0x50415A42, 0x08000000, 0x00000001},
+ {0x50415A43, 0x02000000, 0x00000002},
+ {0x50423342, 0x04000000, 0x00000001},
+ {0x50423343, 0x00800000, 0x00000001},
+ {0x50423442, 0x04000000, 0x00000002},
+ {0x50423443, 0x02000000, 0x00000003},
+ {0x50423542, 0x04000000, 0x00000002},
+ {0x50423543, 0x01000000, 0x00000003},
+ {0x50423641, 0x02000000, 0x00000005},
+ {0x50423642, 0x04000000, 0x00000001},
+ {0x50423643, 0x02000000, 0x00000002},
+ {0x50423741, 0x01000000, 0x00000001},
+ {0x50423841, 0x00800000, 0x00000002},
+ {0x50423842, 0x01000000, 0x00000002},
+ {0x50423959, 0x08000000, 0x00000000},
+ {0x50424142, 0x01000000, 0x00000002},
+ {0x50424243, 0x01000000, 0x00000002},
+ {0x50424259, 0x02000000, 0x00000001},
+ {0x50424341, 0x04000000, 0x00000003},
+ {0x50424354, 0x08000000, 0x00000001},
+ {0x50424441, 0x04000000, 0x00000002},
+ {0x50424442, 0x04000000, 0x00000002},
+ {0x50424443, 0x04000000, 0x00000001},
+ {0x50424542, 0x10000000, 0x00000003},
+ {0x50424641, 0x00800000, 0x00000001},
+ {0x50424642, 0x01000000, 0x00000002},
+ {0x50424654, 0x01000000, 0x00000001},
+ {0x50424742, 0x00800000, 0x00000002},
+ {0x50424841, 0x02000000, 0x00000002},
+ {0x50424842, 0x00800000, 0x00000001},
+ {0x50424942, 0x01000000, 0x00000003},
+ {0x50424959, 0x02000000, 0x00000001},
+ {0x50424A42, 0x04000000, 0x00000001},
+ {0x50424A59, 0x04000000, 0x00000001},
+ {0x50424B41, 0x04000000, 0x00000003},
+ {0x50424C42, 0x04000000, 0x00000002},
+ {0x50424C43, 0x08000000, 0x00000003},
+ {0x50424E43, 0x04000000, 0x00000003},
+ {0x50425054, 0x00800000, 0x00000002},
+ {0x50425141, 0x02000000, 0x00000001},
+ {0x50425159, 0x00800000, 0x00000001},
+ {0x50425241, 0x02000000, 0x00000001},
+ {0x50425341, 0x04000000, 0x00000002},
+ {0x50425343, 0x01000000, 0x00000002},
+ {0x50425359, 0x02000000, 0x00000002},
+ {0x50425442, 0x04000000, 0x00000002},
+ {0x50425543, 0x04000000, 0x00000003},
+ {0x50425559, 0x04000000, 0x00000002},
+ {0x50425741, 0x00800000, 0x00000001},
+ {0x50425742, 0x04000000, 0x00000002},
+ {0x50425743, 0x00800000, 0x00000001},
+ {0x50425759, 0x02000000, 0x00000002},
+ {0x50425855, 0x08000000, 0x00000008},
+ {0x50425942, 0x01000000, 0x00000001},
+ {0x50425943, 0x04000000, 0x00000001},
+ {0x50425959, 0x08000000, 0x00000005},
+ {0x50425A41, 0x00800000, 0x00000001},
+ {0x50433342, 0x04000000, 0x00000002},
+ {0x50433441, 0x02000000, 0x00000003},
+ {0x50433459, 0x08000000, 0x00000008},
+ {0x50433543, 0x01000000, 0x00000003},
+ {0x50433641, 0x02000000, 0x00000005},
+ {0x50433643, 0x10000000, 0x00000005},
+ {0x50433741, 0x01000000, 0x00000001},
+ {0x50433742, 0x00800000, 0x00000002},
+ {0x50433841, 0x02000000, 0x00000002},
+ {0x50433859, 0x00800000, 0x00000008},
+ {0x50434241, 0x04000000, 0x00000005},
+ {0x50434259, 0x02000000, 0x00000002},
+ {0x50434341, 0x02000000, 0x00000001},
+ {0x50434342, 0x04000000, 0x00000002},
+ {0x50434354, 0x00800000, 0x00000001},
+ {0x50434441, 0x02000000, 0x00000001},
+ {0x50434443, 0x04000000, 0x00000003},
+ {0x50434541, 0x04000000, 0x00000001},
+ {0x50434543, 0x04000000, 0x00000002},
+ {0x50434559, 0x02000000, 0x00000001},
+ {0x50434641, 0x00800000, 0x00000001},
+ {0x50434659, 0x08000000, 0x00000002},
+ {0x50434741, 0x04000000, 0x00000003},
+ {0x50434742, 0x00800000, 0x00000001},
+ {0x50434759, 0x02000000, 0x00000002},
+ {0x50434859, 0x00800000, 0x00000001},
+ {0x50434941, 0x01000000, 0x00000001},
+ {0x50434943, 0x04000000, 0x00000003},
+ {0x50434956, 0x08000000, 0x00000002},
+ {0x50434A42, 0x04000000, 0x00000002},
+ {0x50434A43, 0x04000000, 0x00000002},
+ {0x50434A59, 0x04000000, 0x00000002},
+ {0x50434C41, 0x01000000, 0x00000008},
+ {0x50434C42, 0x04000000, 0x00000002},
+ {0x50434C43, 0x02000000, 0x00000001},
+ {0x50434D41, 0x02000000, 0x00000005},
+ {0x50434D42, 0x01000000, 0x00000001},
+ {0x50434D54, 0x04000000, 0x00000003},
+ {0x50435041, 0x01000000, 0x00000001},
+ {0x50435043, 0x00800000, 0x00000002},
+ {0x50435159, 0x01000000, 0x00000001},
+ {0x50435242, 0x04000000, 0x00000003},
+ {0x50435243, 0x02000000, 0x00000001},
+ {0x50435254, 0x04000000, 0x00000001},
+ {0x50435341, 0x04000000, 0x00000002},
+ {0x50435343, 0x08000000, 0x00000001},
+ {0x50435441, 0x04000000, 0x00000005},
+ {0x50435442, 0x01000000, 0x00000001},
+ {0x50435641, 0x04000000, 0x00000005},
+ {0x50435642, 0x00800000, 0x00000001},
+ {0x50435759, 0x02000000, 0x00000002},
+ {0x50435842, 0x01000000, 0x00000001},
+ {0x50435943, 0x02000000, 0x00000002},
+ {0x50435959, 0x04000000, 0x00000001},
+ {0x50443241, 0x02000000, 0x00000002},
+ {0x50443242, 0x02000000, 0x00000002},
+ {0x50443343, 0x01000000, 0x00000001},
+ {0x50443442, 0x01000000, 0x00000001},
+ {0x50443741, 0x01000000, 0x00000001},
+ {0x50443841, 0x04000000, 0x00000002},
+ {0x50444154, 0x08000000, 0x00000005},
+ {0x50444156, 0x02000000, 0x00000001},
+ {0x50444159, 0x01000000, 0x00000001},
+ {0x50444343, 0x00000000, 0x00000003},
+ {0x50444354, 0x02000000, 0x00000001},
+ {0x50444441, 0x01000000, 0x00000001},
+ {0x50444442, 0x01000000, 0x00000001},
+ {0x50444454, 0x00800000, 0x00000001},
+ {0x50444459, 0x01000000, 0x00000001},
+ {0x50444541, 0x00800000, 0x00000001},
+ {0x50444559, 0x00800000, 0x00000001},
+ {0x50444641, 0x04000000, 0x00000002},
+ {0x50444643, 0x08000000, 0x00000002},
+ {0x50444743, 0x01000000, 0x00000001},
+ {0x50444759, 0x00800000, 0x00000002},
+ {0x50444841, 0x04000000, 0x00000002},
+ {0x50444842, 0x04000000, 0x00000001},
+ {0x50444859, 0x04000000, 0x00000001},
+ {0x50444943, 0x02000000, 0x00000003},
+ {0x50444A54, 0x01000000, 0x00000001},
+ {0x50444A59, 0x02000000, 0x00000002},
+ {0x50444B41, 0x02000000, 0x00000002},
+ {0x50444C41, 0x04000000, 0x00000003},
+ {0x50444C42, 0x04000000, 0x00000002},
+ {0x50444C54, 0x02000000, 0x00000001},
+ {0x50444C59, 0x04000000, 0x00000005},
+ {0x50444D42, 0x00000000, 0x00000001},
+ {0x50444D43, 0x02000000, 0x00000005},
+ {0x50444D54, 0x04000000, 0x00000002},
+ {0x50444E41, 0x01000000, 0x00000005},
+ {0x50444E42, 0x02000000, 0x00000001},
+ {0x50444E43, 0x04000000, 0x00000002},
+ {0x50445041, 0x02000000, 0x00000002},
+ {0x50445042, 0x04000000, 0x00000002},
+ {0x50445043, 0x02000000, 0x00000001},
+ {0x50445054, 0x08000000, 0x00000001},
+ {0x50445059, 0x04000000, 0x00000003},
+ {0x50445241, 0x02000000, 0x00000001},
+ {0x50445243, 0x01000000, 0x00000001},
+ {0x50445259, 0x02000000, 0x00000001},
+ {0x50445341, 0x01000000, 0x00000001},
+ {0x50445343, 0x02000000, 0x00000001},
+ {0x50445441, 0x01000000, 0x00000002},
+ {0x50445442, 0x01000000, 0x00000001},
+ {0x50445443, 0x04000000, 0x00000002},
+ {0x50445641, 0x01000000, 0x00000002},
+ {0x50445643, 0x00800000, 0x00000001},
+ {0x50445741, 0x02000000, 0x00000005},
+ {0x50445743, 0x02000000, 0x00000003},
+ {0x50445759, 0x01000000, 0x00000002},
+ {0x50445A42, 0x08000000, 0x00000001},
+ {0x50453242, 0x00800000, 0x00000001},
+ {0x50453341, 0x00800000, 0x00000002},
+ {0x50453442, 0x01000000, 0x00000001},
+ {0x50453642, 0x02000000, 0x00000001},
+ {0x50453643, 0x00800000, 0x00000002},
+ {0x50453741, 0x02000000, 0x00000001},
+ {0x50454156, 0x02000000, 0x00000001},
+ {0x50454254, 0x04000000, 0x00000001},
+ {0x50454342, 0x02000000, 0x00000002},
+ {0x50454343, 0x00000000, 0x00000005},
+ {0x50454359, 0x02000000, 0x00000002},
+ {0x50454442, 0x04000000, 0x00000002},
+ {0x50454443, 0x00800000, 0x00000001},
+ {0x50454542, 0x10000000, 0x00000003},
+ {0x50454559, 0x10000000, 0x00000003},
+ {0x50454641, 0x04000000, 0x00000003},
+ {0x50454659, 0x04000000, 0x00000005},
+ {0x50454741, 0x01000000, 0x00000001},
+ {0x50454742, 0x04000000, 0x00000001},
+ {0x50454841, 0x08000000, 0x00000005},
+ {0x50454843, 0x02000000, 0x00000002},
+ {0x50454854, 0x01000000, 0x00000001},
+ {0x50454A59, 0x01000000, 0x00000001},
+ {0x50454B42, 0x04000000, 0x00000002},
+ {0x50454C43, 0x02000000, 0x00000001},
+ {0x50454C54, 0x02000000, 0x00000001},
+ {0x50454C59, 0x02000000, 0x00000001},
+ {0x50454D56, 0x02000000, 0x00000001},
+ {0x50454F59, 0x01000000, 0x00000005},
+ {0x50455141, 0x00800000, 0x00000002},
+ {0x50455143, 0x04000000, 0x00000002},
+ {0x50455241, 0x04000000, 0x00000001},
+ {0x50455341, 0x08000000, 0x00000002},
+ {0x50455443, 0x00800000, 0x00000001},
+ {0x50455459, 0x02000000, 0x00000003},
+ {0x50455542, 0x02000000, 0x00000001},
+ {0x50455543, 0x01000000, 0x00000002},
+ {0x50455641, 0x01000000, 0x00000001},
+ {0x50455642, 0x00800000, 0x00000002},
+ {0x50455741, 0x04000000, 0x00000005},
+ {0x50455743, 0x01000000, 0x00000002},
+ {0x50455842, 0x04000000, 0x00000001},
+ {0x50455942, 0x02000000, 0x00000001},
+ {0x50455959, 0x00000000, 0x00000002},
+ {0x50455A41, 0x08000000, 0x00000006},
+ {0x50463259, 0x04000000, 0x00000008},
+ {0x50463342, 0x00800000, 0x00000001},
+ {0x50463343, 0x00000000, 0x00000002},
+ {0x50463541, 0x08000000, 0x00000002},
+ {0x50463641, 0x08000000, 0x00000003},
+ {0x50463642, 0x08000000, 0x00000001},
+ {0x50463741, 0x02000000, 0x00000001},
+ {0x50463743, 0x01000000, 0x00000003},
+ {0x50464156, 0x02000000, 0x00000001},
+ {0x50464159, 0x02000000, 0x00000002},
+ {0x50464243, 0x00000000, 0x00000003},
+ {0x50464341, 0x04000000, 0x00000002},
+ {0x50464342, 0x01000000, 0x00000002},
+ {0x50464343, 0x00800000, 0x00000001},
+ {0x50464354, 0x04000000, 0x00000002},
+ {0x50464441, 0x01000000, 0x00000001},
+ {0x50464443, 0x04000000, 0x00000002},
+ {0x50464542, 0x00800000, 0x00000001},
+ {0x50464543, 0x01000000, 0x00000001},
+ {0x50464641, 0x08000000, 0x00000003},
+ {0x50464643, 0x00800000, 0x00000005},
+ {0x50464741, 0x04000000, 0x00000002},
+ {0x50464743, 0x00800000, 0x00000001},
+ {0x50464759, 0x01000000, 0x00000001},
+ {0x50464841, 0x02000000, 0x00000001},
+ {0x50464843, 0x02000000, 0x00000002},
+ {0x50464859, 0x00800000, 0x00000002},
+ {0x50464943, 0x02000000, 0x00000001},
+ {0x50464959, 0x04000000, 0x00000002},
+ {0x50464A59, 0x08000000, 0x00000002},
+ {0x50464B43, 0x02000000, 0x00000001},
+ {0x50464B59, 0x02000000, 0x00000001},
+ {0x50464C42, 0x10000000, 0x00000003},
+ {0x50464C43, 0x02000000, 0x00000001},
+ {0x50464C54, 0x01000000, 0x00000001},
+ {0x50464C59, 0x04000000, 0x00000001},
+ {0x50464D41, 0x01000000, 0x00000001},
+ {0x50464D42, 0x02000000, 0x00000002},
+ {0x50464D59, 0x04000000, 0x00000003},
+ {0x50464E41, 0x02000000, 0x00000005},
+ {0x50464F41, 0x01000000, 0x00000001},
+ {0x50465042, 0x04000000, 0x00000002},
+ {0x50465054, 0x02000000, 0x00000001},
+ {0x50465159, 0x02000000, 0x00000002},
+ {0x50465241, 0x08000000, 0x00000003},
+ {0x50465242, 0x08000000, 0x00000003},
+ {0x50465243, 0x02000000, 0x00000002},
+ {0x50465259, 0x02000000, 0x00000002},
+ {0x50465341, 0x04000000, 0x00000005},
+ {0x50465342, 0x02000000, 0x00000001},
+ {0x50465359, 0x04000000, 0x00000001},
+ {0x50465441, 0x01000000, 0x00000001},
+ {0x50465443, 0x08000000, 0x00000001},
+ {0x50465541, 0x04000000, 0x00000002},
+ {0x50465543, 0x01000000, 0x00000001},
+ {0x50465643, 0x01000000, 0x00000001},
+ {0x50465659, 0x02000000, 0x00000001},
+ {0x50465743, 0x02000000, 0x00000002},
+ {0x50465841, 0x08000000, 0x00000003},
+ {0x50465842, 0x04000000, 0x00000001},
+ {0x50465943, 0x08000000, 0x00000003},
+ {0x50465956, 0x02000000, 0x00000001},
+ {0x50465A42, 0x04000000, 0x00000001},
+ {0x50473241, 0x02000000, 0x00000003},
+ {0x50473459, 0x01000000, 0x00000008},
+ {0x50473559, 0x01000000, 0x00000002},
+ {0x50473642, 0x01000000, 0x00000001},
+ {0x50473742, 0x00800000, 0x00000001},
+ {0x50473743, 0x01000000, 0x00000001},
+ {0x50473759, 0x08000000, 0x00000008},
+ {0x50474142, 0x01000000, 0x00000001},
+ {0x50474143, 0x02000000, 0x00000001},
+ {0x50474159, 0x04000000, 0x00000001},
+ {0x50474243, 0x02000000, 0x00000005},
+ {0x50474254, 0x00800000, 0x00000001},
+ {0x50474259, 0x00800000, 0x00000001},
+ {0x50474354, 0x04000000, 0x00000001},
+ {0x50474441, 0x04000000, 0x00000005},
+ {0x50474443, 0x04000000, 0x00000006},
+ {0x50474541, 0x04000000, 0x00000001},
+ {0x50474542, 0x00800000, 0x00000001},
+ {0x50474641, 0x04000000, 0x00000001},
+ {0x50474659, 0x01000000, 0x00000001},
+ {0x50474742, 0x02000000, 0x00000005},
+ {0x50474754, 0x00800000, 0x00000001},
+ {0x50474842, 0x02000000, 0x00000001},
+ {0x50474942, 0x02000000, 0x00000001},
+ {0x50474959, 0x02000000, 0x00000001},
+ {0x50474B41, 0x02000000, 0x00000002},
+ {0x50474B59, 0x10000000, 0x00000003},
+ {0x50474C59, 0x04000000, 0x00000001},
+ {0x50474D41, 0x01000000, 0x00000001},
+ {0x50474D42, 0x02000000, 0x00000001},
+ {0x50474D43, 0x04000000, 0x00000001},
+ {0x50474D54, 0x04000000, 0x00000002},
+ {0x50474E41, 0x08000000, 0x00000005},
+ {0x50474E59, 0x08000000, 0x00000003},
+ {0x50474F41, 0x00800000, 0x00000001},
+ {0x50474F59, 0x08000000, 0x00000003},
+ {0x50475041, 0x01000000, 0x00000001},
+ {0x50475059, 0x04000000, 0x00000002},
+ {0x50475241, 0x02000000, 0x00000005},
+ {0x50475243, 0x01000000, 0x00000001},
+ {0x50475541, 0x02000000, 0x00000002},
+ {0x50475543, 0x02000000, 0x00000002},
+ {0x50475842, 0x04000000, 0x00000002},
+ {0x50475843, 0x00800000, 0x00000001},
+ {0x50475941, 0x04000000, 0x00000002},
+ {0x50475956, 0x04000000, 0x00000001},
+ {0x50483241, 0x02000000, 0x00000005},
+ {0x50483243, 0x02000000, 0x00000002},
+ {0x50483341, 0x02000000, 0x00000001},
+ {0x50483343, 0x00800000, 0x00000001},
+ {0x50483442, 0x02000000, 0x00000001},
+ {0x50483741, 0x02000000, 0x00000001},
+ {0x50483742, 0x04000000, 0x00000002},
+ {0x50483842, 0x04000000, 0x00000002},
+ {0x50484159, 0x04000000, 0x00000002},
+ {0x50484241, 0x08000000, 0x00000002},
+ {0x50484259, 0x02000000, 0x00000002},
+ {0x50484341, 0x04000000, 0x00000005},
+ {0x50484342, 0x00800000, 0x00000001},
+ {0x50484442, 0x02000000, 0x00000002},
+ {0x50484459, 0x02000000, 0x00000005},
+ {0x50484541, 0x04000000, 0x00000002},
+ {0x50484542, 0x01000000, 0x00000002},
+ {0x50484559, 0x04000000, 0x00000001},
+ {0x50484643, 0x04000000, 0x00000003},
+ {0x50484659, 0x04000000, 0x00000002},
+ {0x50484742, 0x10000000, 0x00000001},
+ {0x50484743, 0x02000000, 0x00000002},
+ {0x50484759, 0x08000000, 0x00000001},
+ {0x50484841, 0x04000000, 0x00000001},
+ {0x50484842, 0x01000000, 0x00000001},
+ {0x50484943, 0x04000000, 0x00000002},
+ {0x50484959, 0x02000000, 0x00000002},
+ {0x50484A42, 0x01000000, 0x00000001},
+ {0x50484B43, 0x02000000, 0x00000002},
+ {0x50484B56, 0x02000000, 0x00000002},
+ {0x50484C41, 0x02000000, 0x00000001},
+ {0x50484C42, 0x08000000, 0x00000001},
+ {0x50484C54, 0x01000000, 0x00000001},
+ {0x50484D41, 0x04000000, 0x00000005},
+ {0x50484D42, 0x04000000, 0x00000001},
+ {0x50484D54, 0x00800000, 0x00000001},
+ {0x50484E41, 0x08000000, 0x00000006},
+ {0x50484E43, 0x04000000, 0x00000002},
+ {0x50485041, 0x02000000, 0x00000005},
+ {0x50485043, 0x04000000, 0x00000001},
+ {0x50485243, 0x02000000, 0x00000002},
+ {0x50485254, 0x02000000, 0x00000001},
+ {0x50485341, 0x02000000, 0x00000002},
+ {0x50485441, 0x04000000, 0x00000001},
+ {0x50485641, 0x04000000, 0x00000002},
+ {0x50485643, 0x04000000, 0x00000002},
+ {0x50485741, 0x01000000, 0x00000001},
+ {0x50485759, 0x01000000, 0x00000001},
+ {0x50485843, 0x02000000, 0x00000001},
+ {0x50485959, 0x04000000, 0x00000001},
+ {0x50485A42, 0x01000000, 0x00000001},
+ {0x50485A59, 0x04000000, 0x00000001},
+ {0x50493241, 0x02000000, 0x00000005},
+ {0x50493242, 0x04000000, 0x00000001},
+ {0x50493341, 0x08000000, 0x00000002},
+ {0x50493441, 0x04000000, 0x00000001},
+ {0x50493642, 0x04000000, 0x00000002},
+ {0x50493741, 0x02000000, 0x00000001},
+ {0x50493742, 0x02000000, 0x00000001},
+ {0x50493842, 0x04000000, 0x00000001},
+ {0x50494159, 0x04000000, 0x00000001},
+ {0x50494341, 0x02000000, 0x00000002},
+ {0x50494342, 0x02000000, 0x00000002},
+ {0x50494359, 0x01000000, 0x00000001},
+ {0x50494442, 0x04000000, 0x00000001},
+ {0x50494443, 0x02000000, 0x00000001},
+ {0x50494542, 0x01000000, 0x00000001},
+ {0x50494641, 0x02000000, 0x00000002},
+ {0x50494643, 0x08000000, 0x00000003},
+ {0x50494659, 0x04000000, 0x00000001},
+ {0x50494742, 0x04000000, 0x00000001},
+ {0x50494759, 0x00800000, 0x00000002},
+ {0x50494842, 0x04000000, 0x00000002},
+ {0x50494959, 0x00800000, 0x00000001},
+ {0x50494A43, 0x02000000, 0x00000002},
+ {0x50494B42, 0x08000000, 0x00000007},
+ {0x50494C43, 0x04000000, 0x00000001},
+ {0x50494C56, 0x02000000, 0x00000001},
+ {0x50494C59, 0x04000000, 0x00000002},
+ {0x50494D43, 0x00800000, 0x00000001},
+ {0x50494E41, 0x08000000, 0x00000005},
+ {0x50494E42, 0x02000000, 0x00000001},
+ {0x50494E43, 0x04000000, 0x00000001},
+ {0x50494E59, 0x08000000, 0x00000002},
+ {0x50494F42, 0x02000000, 0x00000002},
+ {0x50495042, 0x00800000, 0x00000001},
+ {0x50495043, 0x01000000, 0x00000002},
+ {0x50495056, 0x02000000, 0x00000002},
+ {0x50495059, 0x02000000, 0x00000003},
+ {0x50495141, 0x02000000, 0x00000005},
+ {0x50495241, 0x01000000, 0x00000001},
+ {0x50495243, 0x02000000, 0x00000002},
+ {0x50495259, 0x04000000, 0x00000002},
+ {0x50495341, 0x02000000, 0x00000002},
+ {0x50495342, 0x04000000, 0x00000001},
+ {0x50495441, 0x01000000, 0x00000008},
+ {0x50495442, 0x01000000, 0x00000001},
+ {0x50495456, 0x02000000, 0x00000001},
+ {0x50495541, 0x02000000, 0x00000001},
+ {0x50495543, 0x02000000, 0x00000002},
+ {0x50495559, 0x04000000, 0x00000002},
+ {0x50495641, 0x04000000, 0x00000001},
+ {0x50495659, 0x08000000, 0x00000003},
+ {0x50495741, 0x08000000, 0x00000005},
+ {0x50495742, 0x01000000, 0x00000002},
+ {0x50495941, 0x01000000, 0x00000001},
+ {0x50495A41, 0x00800000, 0x00000002},
+ {0x504A3259, 0x04000000, 0x00000008},
+ {0x504A3343, 0x10000000, 0x00000003},
+ {0x504A3356, 0x04000000, 0x00000001},
+ {0x504A3442, 0x00800000, 0x00000001},
+ {0x504A3542, 0x01000000, 0x00000001},
+ {0x504A3642, 0x00800000, 0x00000001},
+ {0x504A3742, 0x01000000, 0x00000001},
+ {0x504A4241, 0x04000000, 0x00000005},
+ {0x504A4243, 0x08000000, 0x00000003},
+ {0x504A4259, 0x00800000, 0x00000001},
+ {0x504A4341, 0x04000000, 0x00000001},
+ {0x504A4343, 0x04000000, 0x00000002},
+ {0x504A4359, 0x02000000, 0x00000005},
+ {0x504A4559, 0x01000000, 0x00000002},
+ {0x504A4643, 0x02000000, 0x00000002},
+ {0x504A4743, 0x02000000, 0x00000002},
+ {0x504A4759, 0x02000000, 0x00000001},
+ {0x504A4841, 0x01000000, 0x00000002},
+ {0x504A4943, 0x00800000, 0x00000001},
+ {0x504A4959, 0x00000000, 0x00000002},
+ {0x504A4A43, 0x00800000, 0x00000002},
+ {0x504A4B43, 0x02000000, 0x00000001},
+ {0x504A4C41, 0x01000000, 0x00000001},
+ {0x504A4C42, 0x04000000, 0x00000001},
+ {0x504A4C43, 0x08000000, 0x00000002},
+ {0x504A4C54, 0x08000000, 0x00000002},
+ {0x504A4C59, 0x04000000, 0x00000001},
+ {0x504A4D43, 0x01000000, 0x00000002},
+ {0x504A4D59, 0x04000000, 0x00000001},
+ {0x504A4E41, 0x02000000, 0x00000001},
+ {0x504A4E42, 0x01000000, 0x00000001},
+ {0x504A4E43, 0x02000000, 0x00000001},
+ {0x504A4E59, 0x02000000, 0x00000001},
+ {0x504A4F42, 0x04000000, 0x00000002},
+ {0x504A5042, 0x00800000, 0x00000001},
+ {0x504A5043, 0x04000000, 0x00000002},
+ {0x504A5141, 0x08000000, 0x00000001},
+ {0x504A5143, 0x00800000, 0x00000001},
+ {0x504A5243, 0x02000000, 0x00000001},
+ {0x504A5259, 0x08000000, 0x00000002},
+ {0x504A5341, 0x04000000, 0x00000005},
+ {0x504A5342, 0x01000000, 0x00000001},
+ {0x504A5359, 0x00800000, 0x00000001},
+ {0x504A5441, 0x01000000, 0x00000002},
+ {0x504A5541, 0x04000000, 0x00000001},
+ {0x504A5542, 0x08000000, 0x00000001},
+ {0x504A5641, 0x04000000, 0x00000002},
+ {0x504A5659, 0x01000000, 0x00000001},
+ {0x504A5743, 0x00000000, 0x00000001},
+ {0x504A5759, 0x00800000, 0x00000002},
+ {0x504A5841, 0x08000000, 0x00000003},
+ {0x504A5842, 0x00000000, 0x00000001},
+ {0x504A5A43, 0x01000000, 0x00000001},
+ {0x504B3342, 0x01000000, 0x00000001},
+ {0x504B3443, 0x00800000, 0x00000001},
+ {0x504B3641, 0x08000000, 0x00000003},
+ {0x504B3642, 0x08000000, 0x00000003},
+ {0x504B3842, 0x02000000, 0x00000002},
+ {0x504B3859, 0x00800000, 0x00000008},
+ {0x504B4159, 0x08000000, 0x00000002},
+ {0x504B4241, 0x00800000, 0x00000001},
+ {0x504B4242, 0x02000000, 0x00000002},
+ {0x504B4243, 0x04000000, 0x00000002},
+ {0x504B4343, 0x04000000, 0x00000001},
+ {0x504B4541, 0x04000000, 0x00000002},
+ {0x504B4641, 0x00800000, 0x00000001},
+ {0x504B4742, 0x01000000, 0x00000001},
+ {0x504B4841, 0x04000000, 0x00000003},
+ {0x504B4843, 0x01000000, 0x00000001},
+ {0x504B4A59, 0x08000000, 0x00000002},
+ {0x504B4B41, 0x01000000, 0x00000003},
+ {0x504B4C41, 0x08000000, 0x00000003},
+ {0x504B4C43, 0x04000000, 0x00000001},
+ {0x504B4C54, 0x10000000, 0x00000002},
+ {0x504B4C59, 0x02000000, 0x00000002},
+ {0x504B4E41, 0x01000000, 0x00000001},
+ {0x504B4E59, 0x04000000, 0x00000002},
+ {0x504B5043, 0x02000000, 0x00000008},
+ {0x504B5142, 0x01000000, 0x00000001},
+ {0x504B5143, 0x04000000, 0x00000001},
+ {0x504B5159, 0x02000000, 0x00000001},
+ {0x504B5243, 0x00000000, 0x00000001},
+ {0x504B5341, 0x04000000, 0x00000002},
+ {0x504B5441, 0x04000000, 0x00000002},
+ {0x504B5559, 0x04000000, 0x00000001},
+ {0x504B5641, 0x01000000, 0x00000001},
+ {0x504B5642, 0x04000000, 0x00000002},
+ {0x504B5741, 0x04000000, 0x00000003},
+ {0x504B5759, 0x04000000, 0x00000002},
+ {0x504B5842, 0x02000000, 0x00000001},
+ {0x504B5843, 0x04000000, 0x00000001},
+ {0x504B5943, 0x02000000, 0x00000002},
+ {0x504B5A41, 0x00800000, 0x00000002},
+ {0x504C3241, 0x01000000, 0x00000003},
+ {0x504C3242, 0x02000000, 0x00000001},
+ {0x504C3541, 0x08000000, 0x00000002},
+ {0x504C3543, 0x02000000, 0x00000001},
+ {0x504C3742, 0x00800000, 0x00000001},
+ {0x504C3743, 0x08000000, 0x00000002},
+ {0x504C3859, 0x08000000, 0x00000000},
+ {0x504C4143, 0x04000000, 0x00000001},
+ {0x504C4241, 0x08000000, 0x00000002},
+ {0x504C4242, 0x02000000, 0x00000001},
+ {0x504C4259, 0x00800000, 0x00000001},
+ {0x504C4341, 0x08000000, 0x00000003},
+ {0x504C4354, 0x02000000, 0x00000001},
+ {0x504C4441, 0x04000000, 0x00000003},
+ {0x504C4443, 0x02000000, 0x00000005},
+ {0x504C4642, 0x04000000, 0x00000002},
+ {0x504C4741, 0x02000000, 0x00000001},
+ {0x504C4742, 0x01000000, 0x00000001},
+ {0x504C4759, 0x04000000, 0x00000002},
+ {0x504C4859, 0x08000000, 0x00000003},
+ {0x504C4A41, 0x04000000, 0x00000001},
+ {0x504C4A43, 0x02000000, 0x00000002},
+ {0x504C4A54, 0x00800000, 0x00000001},
+ {0x504C4A59, 0x01000000, 0x00000002},
+ {0x504C4D41, 0x02000000, 0x00000002},
+ {0x504C4E41, 0x04000000, 0x00000001},
+ {0x504C4E59, 0x04000000, 0x00000001},
+ {0x504C4F41, 0x00800000, 0x00000001},
+ {0x504C4F43, 0x08000000, 0x00000003},
+ {0x504C5041, 0x00800000, 0x00000002},
+ {0x504C5042, 0x02000000, 0x00000001},
+ {0x504C5043, 0x02000000, 0x00000001},
+ {0x504C5054, 0x04000000, 0x00000001},
+ {0x504C5059, 0x00800000, 0x00000001},
+ {0x504C5141, 0x00800000, 0x00000001},
+ {0x504C5159, 0x08000000, 0x00000002},
+ {0x504C5243, 0x02000000, 0x00000001},
+ {0x504C5259, 0x02000000, 0x00000001},
+ {0x504C5342, 0x02000000, 0x00000003},
+ {0x504C5441, 0x01000000, 0x00000001},
+ {0x504C5443, 0x02000000, 0x00000003},
+ {0x504C5459, 0x00800000, 0x00000002},
+ {0x504C5643, 0x01000000, 0x00000001},
+ {0x504C5741, 0x08000000, 0x00000003},
+ {0x504C5742, 0x04000000, 0x00000003},
+ {0x504C5759, 0x02000000, 0x00000001},
+ {0x504C5841, 0x04000000, 0x00000001},
+ {0x504C5843, 0x04000000, 0x00000002},
+ {0x504C5941, 0x02000000, 0x00000002},
+ {0x504C5943, 0x04000000, 0x00000002},
+ {0x504C5956, 0x04000000, 0x00000001},
+ {0x504C5A41, 0x10000000, 0x00000007},
+ {0x504C5A42, 0x00800000, 0x00000002},
+ {0x504C5A43, 0x02000000, 0x00000002},
+ {0x504D3241, 0x00800000, 0x00000001},
+ {0x504D3242, 0x08000000, 0x00000002},
+ {0x504D3243, 0x02000000, 0x00000002},
+ {0x504D3341, 0x08000000, 0x00000002},
+ {0x504D3443, 0x04000000, 0x00000001},
+ {0x504D3643, 0x04000000, 0x00000002},
+ {0x504D3743, 0x00000000, 0x00000003},
+ {0x504D4142, 0x02000000, 0x00000002},
+ {0x504D4154, 0x02000000, 0x00000001},
+ {0x504D4156, 0x02000000, 0x00000001},
+ {0x504D4159, 0x00800000, 0x00000001},
+ {0x504D4241, 0x00800000, 0x00000001},
+ {0x504D4242, 0x00800000, 0x00000001},
+ {0x504D4243, 0x02000000, 0x00000002},
+ {0x504D4254, 0x04000000, 0x00000001},
+ {0x504D4341, 0x01000000, 0x00000001},
+ {0x504D4342, 0x04000000, 0x00000001},
+ {0x504D4343, 0x04000000, 0x00000002},
+ {0x504D4354, 0x04000000, 0x00000002},
+ {0x504D4356, 0x04000000, 0x00000002},
+ {0x504D4359, 0x02000000, 0x00000001},
+ {0x504D4441, 0x04000000, 0x00000005},
+ {0x504D4442, 0x04000000, 0x00000002},
+ {0x504D4459, 0x02000000, 0x00000002},
+ {0x504D4556, 0x04000000, 0x00000001},
+ {0x504D4559, 0x04000000, 0x00000003},
+ {0x504D4642, 0x02000000, 0x00000002},
+ {0x504D4742, 0x04000000, 0x00000003},
+ {0x504D4843, 0x04000000, 0x00000002},
+ {0x504D4943, 0x00000000, 0x00000002},
+ {0x504D4959, 0x04000000, 0x00000001},
+ {0x504D4A54, 0x00800000, 0x00000001},
+ {0x504D4C42, 0x02000000, 0x00000001},
+ {0x504D4C54, 0x08000000, 0x00000001},
+ {0x504D4D59, 0x02000000, 0x00000001},
+ {0x504D4E41, 0x04000000, 0x00000005},
+ {0x504D4E43, 0x04000000, 0x00000001},
+ {0x504D4E59, 0x01000000, 0x00000002},
+ {0x504D5042, 0x02000000, 0x00000001},
+ {0x504D5043, 0x04000000, 0x00000002},
+ {0x504D5141, 0x00800000, 0x00000001},
+ {0x504D5143, 0x00000000, 0x00000001},
+ {0x504D5241, 0x04000000, 0x00000002},
+ {0x504D5242, 0x01000000, 0x00000002},
+ {0x504D5259, 0x02000000, 0x00000003},
+ {0x504D5341, 0x01000000, 0x00000002},
+ {0x504D5342, 0x01000000, 0x00000002},
+ {0x504D5343, 0x01000000, 0x00000003},
+ {0x504D5442, 0x00800000, 0x00000002},
+ {0x504D5459, 0x04000000, 0x00000002},
+ {0x504D5642, 0x02000000, 0x00000001},
+ {0x504D5643, 0x02000000, 0x00000002},
+ {0x504D5742, 0x01000000, 0x00000001},
+ {0x504D5842, 0x04000000, 0x00000002},
+ {0x504D5A43, 0x02000000, 0x00000001},
+ {0x504E3242, 0x02000000, 0x00000001},
+ {0x504E3342, 0x02000000, 0x00000001},
+ {0x504E3542, 0x01000000, 0x00000001},
+ {0x504E3543, 0x01000000, 0x00000001},
+ {0x504E3641, 0x08000000, 0x00000003},
+ {0x504E3642, 0x00800000, 0x00000001},
+ {0x504E3742, 0x08000000, 0x00000003},
+ {0x504E3841, 0x02000000, 0x00000005},
+ {0x504E3842, 0x01000000, 0x00000001},
+ {0x504E4142, 0x01000000, 0x00000002},
+ {0x504E4143, 0x02000000, 0x00000005},
+ {0x504E4241, 0x08000000, 0x00000002},
+ {0x504E4243, 0x02000000, 0x00000001},
+ {0x504E4259, 0x04000000, 0x00000007},
+ {0x504E4341, 0x01000000, 0x00000002},
+ {0x504E4343, 0x00000000, 0x00000001},
+ {0x504E4443, 0x08000000, 0x00000001},
+ {0x504E4541, 0x04000000, 0x00000002},
+ {0x504E4542, 0x00800000, 0x00000001},
+ {0x504E4559, 0x00800000, 0x00000001},
+ {0x504E4641, 0x02000000, 0x00000002},
+ {0x504E4642, 0x00800000, 0x00000001},
+ {0x504E4654, 0x04000000, 0x00000002},
+ {0x504E4741, 0x02000000, 0x00000001},
+ {0x504E4743, 0x04000000, 0x00000002},
+ {0x504E4759, 0x04000000, 0x00000002},
+ {0x504E4841, 0x02000000, 0x00000001},
+ {0x504E4843, 0x02000000, 0x00000002},
+ {0x504E4859, 0x00000000, 0x00000003},
+ {0x504E4A41, 0x02000000, 0x00000002},
+ {0x504E4A42, 0x02000000, 0x00000001},
+ {0x504E4C43, 0x02000000, 0x00000002},
+ {0x504E4C59, 0x08000000, 0x00000002},
+ {0x504E4D54, 0x01000000, 0x00000002},
+ {0x504E4D59, 0x01000000, 0x00000002},
+ {0x504E4E42, 0x04000000, 0x00000002},
+ {0x504E4E59, 0x08000000, 0x00000003},
+ {0x504E4F41, 0x02000000, 0x00000005},
+ {0x504E4F43, 0x02000000, 0x00000001},
+ {0x504E4F59, 0x04000000, 0x00000003},
+ {0x504E5041, 0x02000000, 0x00000001},
+ {0x504E5042, 0x02000000, 0x00000002},
+ {0x504E5043, 0x02000000, 0x00000008},
+ {0x504E5142, 0x04000000, 0x00000001},
+ {0x504E5159, 0x04000000, 0x00000002},
+ {0x504E5241, 0x02000000, 0x00000001},
+ {0x504E5243, 0x01000000, 0x00000001},
+ {0x504E5341, 0x00800000, 0x00000002},
+ {0x504E5342, 0x02000000, 0x00000001},
+ {0x504E5343, 0x08000000, 0x00000003},
+ {0x504E5359, 0x04000000, 0x00000002},
+ {0x504E5442, 0x04000000, 0x00000002},
+ {0x504E5443, 0x01000000, 0x00000002},
+ {0x504E5642, 0x04000000, 0x00000001},
+ {0x504E5656, 0x02000000, 0x00000002},
+ {0x504E5A43, 0x04000000, 0x00000002},
+ {0x504F3241, 0x04000000, 0x00000003},
+ {0x504F3341, 0x01000000, 0x00000001},
+ {0x504F3441, 0x02000000, 0x00000005},
+ {0x504F3442, 0x00800000, 0x00000001},
+ {0x504F3541, 0x01000000, 0x00000001},
+ {0x504F3543, 0x01000000, 0x00000001},
+ {0x504F3642, 0x02000000, 0x00000001},
+ {0x504F3743, 0x04000000, 0x00000002},
+ {0x504F3959, 0x00800000, 0x00000000},
+ {0x504F4142, 0x04000000, 0x00000001},
+ {0x504F4143, 0x02000000, 0x00000001},
+ {0x504F4156, 0x04000000, 0x00000001},
+ {0x504F4241, 0x02000000, 0x00000001},
+ {0x504F4259, 0x08000000, 0x00000003},
+ {0x504F4341, 0x04000000, 0x00000005},
+ {0x504F4342, 0x01000000, 0x00000001},
+ {0x504F4359, 0x04000000, 0x00000001},
+ {0x504F4742, 0x00800000, 0x00000002},
+ {0x504F4743, 0x01000000, 0x00000001},
+ {0x504F4759, 0x02000000, 0x00000001},
+ {0x504F4842, 0x04000000, 0x00000001},
+ {0x504F4843, 0x02000000, 0x00000001},
+ {0x504F4941, 0x08000000, 0x00000005},
+ {0x504F4942, 0x02000000, 0x00000001},
+ {0x504F4959, 0x00800000, 0x00000001},
+ {0x504F4A42, 0x04000000, 0x00000001},
+ {0x504F4A43, 0x04000000, 0x00000002},
+ {0x504F4C42, 0x00800000, 0x00000001},
+ {0x504F4D41, 0x04000000, 0x00000002},
+ {0x504F4D59, 0x04000000, 0x00000001},
+ {0x504F4E41, 0x02000000, 0x00000002},
+ {0x504F4E42, 0x01000000, 0x00000001},
+ {0x504F4F42, 0x00400000, 0x00000002},
+ {0x504F4F43, 0x04000000, 0x00000002},
+ {0x504F5043, 0x01000000, 0x00000002},
+ {0x504F5059, 0x04000000, 0x00000003},
+ {0x504F5143, 0x02000000, 0x00000001},
+ {0x504F5159, 0x00800000, 0x00000001},
+ {0x504F5259, 0x04000000, 0x00000002},
+ {0x504F5342, 0x02000000, 0x00000001},
+ {0x504F5343, 0x00000000, 0x00000002},
+ {0x504F5359, 0x01000000, 0x00000002},
+ {0x504F5541, 0x00800000, 0x00000001},
+ {0x504F5741, 0x02000000, 0x00000002},
+ {0x504F5743, 0x00800000, 0x00000001},
+ {0x504F5759, 0x00800000, 0x00000001},
+ {0x504F5841, 0x01000000, 0x00000002},
+ {0x504F5843, 0x04000000, 0x00000001},
+ {0x504F5A42, 0x04000000, 0x00000003},
+ {0x504F5A43, 0x02000000, 0x00000001},
+ {0x50503342, 0x04000000, 0x00000001},
+ {0x50503343, 0x04000000, 0x00000002},
+ {0x50503441, 0x02000000, 0x00000002},
+ {0x50503541, 0x04000000, 0x00000001},
+ {0x50503643, 0x04000000, 0x00000007},
+ {0x50503659, 0x04000000, 0x00000008},
+ {0x50504143, 0x02000000, 0x00000003},
+ {0x50504159, 0x01000000, 0x00000001},
+ {0x50504243, 0x01000000, 0x00000002},
+ {0x50504259, 0x02000000, 0x00000001},
+ {0x50504341, 0x01000000, 0x00000002},
+ {0x50504441, 0x00800000, 0x00000002},
+ {0x50504442, 0x00800000, 0x00000001},
+ {0x50504443, 0x00000000, 0x00000002},
+ {0x50504459, 0x02000000, 0x00000001},
+ {0x50504542, 0x01000000, 0x00000002},
+ {0x50504543, 0x08000000, 0x00000002},
+ {0x50504741, 0x04000000, 0x00000002},
+ {0x50504742, 0x04000000, 0x00000002},
+ {0x50504743, 0x02000000, 0x00000001},
+ {0x50504754, 0x02000000, 0x00000001},
+ {0x50504841, 0x04000000, 0x00000001},
+ {0x50504941, 0x00800000, 0x00000008},
+ {0x50504A41, 0x00800000, 0x00000001},
+ {0x50504A43, 0x04000000, 0x00000002},
+ {0x50504B41, 0x01000000, 0x00000001},
+ {0x50504C42, 0x04000000, 0x00000002},
+ {0x50504C43, 0x04000000, 0x00000003},
+ {0x50504C59, 0x00800000, 0x00000002},
+ {0x50504D43, 0x04000000, 0x00000001},
+ {0x50504D44, 0x10000000, 0xFFFFFFFF},
+ {0x50504E41, 0x01000000, 0x00000001},
+ {0x50504E42, 0x04000000, 0x00000001},
+ {0x50504E43, 0x01000000, 0x00000002},
+ {0x50504E59, 0x04000000, 0x00000002},
+ {0x50504F43, 0x01000000, 0x00000003},
+ {0x50505041, 0x01000000, 0x00000002},
+ {0x50505141, 0x02000000, 0x00000002},
+ {0x50505143, 0x01000000, 0x00000001},
+ {0x50505241, 0x04000000, 0x00000001},
+ {0x50505242, 0x08000000, 0x00000002},
+ {0x50505341, 0x02000000, 0x00000003},
+ {0x50505343, 0x02000000, 0x00000003},
+ {0x50505359, 0x02000000, 0x00000005},
+ {0x50505543, 0x00800000, 0x00000001},
+ {0x50505642, 0x08000000, 0x00000006},
+ {0x50505659, 0x08000000, 0x00000003},
+ {0x50505741, 0x01000000, 0x00000001},
+ {0x50505742, 0x00800000, 0x00000001},
+ {0x50505743, 0x02000000, 0x00000002},
+ {0x50505841, 0x02000000, 0x00000005},
+ {0x50505843, 0x02000000, 0x00000001},
+ {0x50505943, 0x04000000, 0x00000002},
+ {0x50505A41, 0x01000000, 0x00000002},
+ {0x50505A42, 0x01000000, 0x00000001},
+ {0x50505A55, 0x08000000, 0x00000003},
+ {0x50513243, 0x00800000, 0x00000001},
+ {0x50513342, 0x00800000, 0x00000001},
+ {0x50513543, 0x01000000, 0x00000002},
+ {0x50513642, 0x00800000, 0x00000001},
+ {0x50513643, 0x08000000, 0x00000001},
+ {0x50513841, 0x02000000, 0x00000005},
+ {0x50513842, 0x00800000, 0x00000001},
+ {0x50513859, 0x00800000, 0x00000000},
+ {0x50514143, 0x02000000, 0x00000002},
+ {0x50514242, 0x00800000, 0x00000001},
+ {0x50514243, 0x02000000, 0x00000002},
+ {0x50514259, 0x02000000, 0x00000002},
+ {0x50514359, 0x04000000, 0x00000002},
+ {0x50514459, 0x10000000, 0x00000003},
+ {0x50514559, 0x00800000, 0x00000001},
+ {0x50514641, 0x04000000, 0x00000002},
+ {0x50514642, 0x00800000, 0x00000001},
+ {0x50514742, 0x02000000, 0x00000002},
+ {0x50514743, 0x04000000, 0x00000003},
+ {0x50514759, 0x04000000, 0x00000002},
+ {0x50514841, 0x02000000, 0x00000001},
+ {0x50514943, 0x02000000, 0x00000002},
+ {0x50514A41, 0x04000000, 0x00000002},
+ {0x50514A43, 0x00800000, 0x00000002},
+ {0x50514A59, 0x01000000, 0x00000001},
+ {0x50514B41, 0x02000000, 0x00000001},
+ {0x50514B43, 0x02000000, 0x00000001},
+ {0x50514C41, 0x00800000, 0x00000001},
+ {0x50514C43, 0x04000000, 0x00000001},
+ {0x50514D41, 0x04000000, 0x00000005},
+ {0x50514D42, 0x04000000, 0x00000001},
+ {0x50514D54, 0x02000000, 0x00000002},
+ {0x50514E41, 0x00800000, 0x00000002},
+ {0x50514E42, 0x02000000, 0x00000001},
+ {0x50514F41, 0x01000000, 0x00000001},
+ {0x50514F43, 0x04000000, 0x00000002},
+ {0x50515043, 0x02000000, 0x00000001},
+ {0x50515141, 0x02000000, 0x00000002},
+ {0x50515143, 0x04000000, 0x00000001},
+ {0x50515243, 0x02000000, 0x00000001},
+ {0x50515259, 0x02000000, 0x00000001},
+ {0x50515341, 0x01000000, 0x00000002},
+ {0x50515343, 0x01000000, 0x00000001},
+ {0x50515359, 0x02000000, 0x00000002},
+ {0x50515442, 0x01000000, 0x00000001},
+ {0x50515641, 0x02000000, 0x00000002},
+ {0x50515643, 0x02000000, 0x00000002},
+ {0x50515741, 0x01000000, 0x00000001},
+ {0x50515743, 0x02000000, 0x00000001},
+ {0x50515842, 0x04000000, 0x00000001},
+ {0x50515941, 0x01000000, 0x00000002},
+ {0x50515943, 0x04000000, 0x00000001},
+ {0x50515A41, 0x01000000, 0x00000002},
+ {0x50523341, 0x01000000, 0x00000002},
+ {0x50523342, 0x08000000, 0x00000005},
+ {0x50523443, 0x02000000, 0x00000001},
+ {0x50523459, 0x04000000, 0x00000008},
+ {0x50523542, 0x10000000, 0x00000001},
+ {0x50523559, 0x04000000, 0x00000008},
+ {0x50523642, 0x08000000, 0x00000002},
+ {0x50523743, 0x00800000, 0x00000001},
+ {0x50524241, 0x04000000, 0x00000002},
+ {0x50524243, 0x01000000, 0x00000002},
+ {0x50524254, 0x04000000, 0x00000001},
+ {0x50524255, 0x00800000, 0x00000005},
+ {0x50524259, 0x04000000, 0x00000001},
+ {0x50524341, 0x02000000, 0x00000001},
+ {0x50524343, 0x00800000, 0x00000002},
+ {0x50524354, 0x00800000, 0x00000001},
+ {0x50524441, 0x01000000, 0x00000002},
+ {0x50524442, 0x04000000, 0x00000005},
+ {0x50524459, 0x00800000, 0x00000001},
+ {0x50524541, 0x01000000, 0x00000002},
+ {0x50524543, 0x02000000, 0x00000003},
+ {0x50524554, 0x00800000, 0x00000001},
+ {0x50524559, 0x04000000, 0x00000003},
+ {0x50524641, 0x04000000, 0x00000001},
+ {0x50524659, 0x01000000, 0x00000001},
+ {0x50524741, 0x02000000, 0x00000005},
+ {0x50524754, 0x01000000, 0x00000001},
+ {0x50524841, 0x02000000, 0x00000002},
+ {0x50524942, 0x01000000, 0x00000001},
+ {0x50524943, 0x04000000, 0x00000002},
+ {0x50524A41, 0x08000000, 0x00000005},
+ {0x50524A42, 0x01000000, 0x00000001},
+ {0x50524A43, 0x08000000, 0x00000003},
+ {0x50524C42, 0x10000000, 0x00000001},
+ {0x50524C43, 0x04000000, 0x00000003},
+ {0x50524C54, 0x08000000, 0x00000001},
+ {0x50524D43, 0x02000000, 0x00000002},
+ {0x50524D59, 0x01000000, 0x00000001},
+ {0x50524E41, 0x04000000, 0x00000001},
+ {0x50524E42, 0x04000000, 0x00000003},
+ {0x50524E43, 0x04000000, 0x00000002},
+ {0x50524F55, 0x08000000, 0x00000008},
+ {0x50525041, 0x02000000, 0x00000002},
+ {0x50525042, 0x00800000, 0x00000001},
+ {0x50525054, 0x02000000, 0x00000001},
+ {0x50525059, 0x02000000, 0x00000002},
+ {0x50525141, 0x01000000, 0x00000002},
+ {0x50525143, 0x04000000, 0x00000002},
+ {0x50525159, 0x02000000, 0x00000001},
+ {0x50525254, 0x01000000, 0x00000001},
+ {0x50525259, 0x02000000, 0x00000002},
+ {0x50525359, 0x01000000, 0x00000005},
+ {0x50525441, 0x01000000, 0x00000002},
+ {0x50525442, 0x02000000, 0x00000002},
+ {0x50525443, 0x02000000, 0x00000003},
+ {0x50525459, 0x00000000, 0x00000001},
+ {0x50525741, 0x02000000, 0x00000005},
+ {0x50525743, 0x02000000, 0x00000001},
+ {0x50525759, 0x04000000, 0x00000001},
+ {0x50525843, 0x04000000, 0x00000001},
+ {0x50525941, 0x00800000, 0x00000001},
+ {0x50525943, 0x02000000, 0x00000001},
+ {0x50525959, 0x04000000, 0x00000001},
+ {0x50525A43, 0x02000000, 0x00000001},
+ {0x50533242, 0x08000000, 0x00000002},
+ {0x50533243, 0x08000000, 0x00000004},
+ {0x50533341, 0x02000000, 0x00000001},
+ {0x50533343, 0x01000000, 0x00000002},
+ {0x50533543, 0x08000000, 0x00000001},
+ {0x50533641, 0x04000000, 0x00000001},
+ {0x50533642, 0x04000000, 0x00000001},
+ {0x50533659, 0x04000000, 0x00000008},
+ {0x50533759, 0x04000000, 0x00000008},
+ {0x50533841, 0x00800000, 0x00000002},
+ {0x50534143, 0x02000000, 0x00000001},
+ {0x50534156, 0x02000000, 0x00000001},
+ {0x50534359, 0x00800000, 0x00000001},
+ {0x50534443, 0x08000000, 0x00000001},
+ {0x50534556, 0x04000000, 0x00000001},
+ {0x50534641, 0x02000000, 0x00000002},
+ {0x50534643, 0x02000000, 0x00000001},
+ {0x50534743, 0x08000000, 0x00000001},
+ {0x50534759, 0x04000000, 0x00000003},
+ {0x50534841, 0x02000000, 0x00000002},
+ {0x50534843, 0x02000000, 0x00000001},
+ {0x50534859, 0x02000000, 0x00000003},
+ {0x50534941, 0x01000000, 0x00000001},
+ {0x50534943, 0x04000000, 0x00000001},
+ {0x50534959, 0x04000000, 0x00000002},
+ {0x50534A42, 0x04000000, 0x00000003},
+ {0x50534A43, 0x01000000, 0x00000002},
+ {0x50534A54, 0x00800000, 0x00000001},
+ {0x50534C42, 0x04000000, 0x00000001},
+ {0x50534C54, 0x02000000, 0x00000001},
+ {0x50534D43, 0x02000000, 0x00000003},
+ {0x50534D54, 0x01000000, 0x00000001},
+ {0x50534E41, 0x01000000, 0x00000001},
+ {0x50534F41, 0x08000000, 0x00000005},
+ {0x50534F43, 0x02000000, 0x00000001},
+ {0x50535042, 0x04000000, 0x00000002},
+ {0x50535043, 0x04000000, 0x00000002},
+ {0x50535143, 0x02000000, 0x00000001},
+ {0x50535154, 0x00800000, 0x00000001},
+ {0x50535159, 0x02000000, 0x00000002},
+ {0x50535243, 0x00800000, 0x00000001},
+ {0x50535341, 0x04000000, 0x00000002},
+ {0x50535343, 0x00800000, 0x00000001},
+ {0x50535459, 0x01000000, 0x00000001},
+ {0x50535541, 0x04000000, 0x00000001},
+ {0x50535542, 0x00800000, 0x00000002},
+ {0x50535543, 0x02000000, 0x00000001},
+ {0x50535559, 0x00800000, 0x00000001},
+ {0x50535641, 0x02000000, 0x00000002},
+ {0x50535643, 0x02000000, 0x00000001},
+ {0x50535659, 0x02000000, 0x00000003},
+ {0x50535741, 0x01000000, 0x00000002},
+ {0x50535743, 0x00000000, 0x00000002},
+ {0x50535842, 0x04000000, 0x00000003},
+ {0x50535843, 0x00000000, 0x00000001},
+ {0x50535941, 0x04000000, 0x00000001},
+ {0x50543241, 0x02000000, 0x00000001},
+ {0x50543341, 0x02000000, 0x00000002},
+ {0x50543343, 0x08000000, 0x00000003},
+ {0x50543442, 0x01000000, 0x00000002},
+ {0x50543541, 0x04000000, 0x00000005},
+ {0x50543641, 0x04000000, 0x00000001},
+ {0x50543642, 0x04000000, 0x00000001},
+ {0x50543643, 0x01000000, 0x00000002},
+ {0x50543743, 0x01000000, 0x00000002},
+ {0x50543841, 0x02000000, 0x00000002},
+ {0x50544142, 0x04000000, 0x00000002},
+ {0x50544143, 0x02000000, 0x00000002},
+ {0x50544159, 0x01000000, 0x00000002},
+ {0x50544241, 0x02000000, 0x00000001},
+ {0x50544243, 0x02000000, 0x00000001},
+ {0x50544254, 0x01000000, 0x00000001},
+ {0x50544256, 0x02000000, 0x00000002},
+ {0x50544259, 0x08000000, 0x00000003},
+ {0x50544341, 0x02000000, 0x00000001},
+ {0x50544459, 0x04000000, 0x00000003},
+ {0x50544556, 0x08000000, 0x00000007},
+ {0x50544559, 0x01000000, 0x00000001},
+ {0x50544641, 0x00800000, 0x00000001},
+ {0x50544642, 0x01000000, 0x00000001},
+ {0x50544659, 0x08000000, 0x00000005},
+ {0x50544742, 0x08000000, 0x00000002},
+ {0x50544754, 0x04000000, 0x00000002},
+ {0x50544759, 0x02000000, 0x00000001},
+ {0x50544841, 0x01000000, 0x00000001},
+ {0x50544941, 0x00800000, 0x00000001},
+ {0x50544943, 0x01000000, 0x00000001},
+ {0x50544A41, 0x02000000, 0x00000001},
+ {0x50544A56, 0x04000000, 0x00000001},
+ {0x50544B43, 0x04000000, 0x00000002},
+ {0x50544C41, 0x00800000, 0x00000001},
+ {0x50544C59, 0x08000000, 0x00000002},
+ {0x50544D41, 0x04000000, 0x00000002},
+ {0x50544D43, 0x02000000, 0x00000001},
+ {0x50544D54, 0x04000000, 0x00000003},
+ {0x50544D59, 0x02000000, 0x00000002},
+ {0x50544F43, 0x02000000, 0x00000001},
+ {0x50545041, 0x01000000, 0x00000002},
+ {0x50545054, 0x08000000, 0x00000001},
+ {0x50545059, 0x02000000, 0x00000005},
+ {0x50545154, 0x02000000, 0x00000002},
+ {0x50545259, 0x02000000, 0x00000002},
+ {0x50545341, 0x02000000, 0x00000001},
+ {0x50545359, 0x04000000, 0x00000001},
+ {0x50545456, 0x04000000, 0x00000001},
+ {0x50545541, 0x02000000, 0x00000001},
+ {0x50545542, 0x02000000, 0x00000001},
+ {0x50545559, 0x04000000, 0x00000002},
+ {0x50545642, 0x01000000, 0x00000001},
+ {0x50545643, 0x02000000, 0x00000001},
+ {0x50545659, 0x02000000, 0x00000001},
+ {0x50545841, 0x00800000, 0x00000001},
+ {0x50545942, 0x08000000, 0x00000002},
+ {0x50545959, 0x02000000, 0x00000002},
+ {0x50545A41, 0x01000000, 0x00000005},
+ {0x50545A59, 0x01000000, 0x00000005},
+ {0x50553242, 0x02000000, 0x00000001},
+ {0x50553342, 0x02000000, 0x00000002},
+ {0x50553459, 0x02000000, 0x00000008},
+ {0x50553541, 0x02000000, 0x00000005},
+ {0x50553659, 0x01000000, 0x00000008},
+ {0x50553743, 0x02000000, 0x00000001},
+ {0x50553842, 0x01000000, 0x00000001},
+ {0x50554159, 0x04000000, 0x00000003},
+ {0x50554241, 0x04000000, 0x00000005},
+ {0x50554242, 0x08000000, 0x00000003},
+ {0x50554259, 0x08000000, 0x00000003},
+ {0x50554359, 0x00000000, 0x00000003},
+ {0x50554442, 0x02000000, 0x00000001},
+ {0x50554443, 0x01000000, 0x00000003},
+ {0x50554454, 0x00800000, 0x00000001},
+ {0x50554641, 0x01000000, 0x00000003},
+ {0x50554643, 0x02000000, 0x00000002},
+ {0x50554842, 0x04000000, 0x00000001},
+ {0x50554854, 0x02000000, 0x00000001},
+ {0x50554859, 0x00800000, 0x00000008},
+ {0x50554943, 0x04000000, 0x00000002},
+ {0x50554B41, 0x04000000, 0x00000001},
+ {0x50554B42, 0x08000000, 0x00000005},
+ {0x50554C41, 0x02000000, 0x00000002},
+ {0x50554C54, 0x04000000, 0x00000001},
+ {0x50554C59, 0x08000000, 0x00000005},
+ {0x50554D41, 0x00800000, 0x00000001},
+ {0x50554D42, 0x04000000, 0x00000001},
+ {0x50554D43, 0x01000000, 0x00000003},
+ {0x50554D54, 0x04000000, 0x00000003},
+ {0x50554D59, 0x04000000, 0x00000002},
+ {0x50554E41, 0x01000000, 0x00000001},
+ {0x50554E42, 0x01000000, 0x00000001},
+ {0x50554F42, 0x02000000, 0x00000001},
+ {0x50555054, 0x01000000, 0x00000001},
+ {0x50555059, 0x02000000, 0x00000008},
+ {0x50555154, 0x00800000, 0x00000001},
+ {0x50555159, 0x08000000, 0x00000003},
+ {0x50555341, 0x04000000, 0x00000003},
+ {0x50555342, 0x02000000, 0x00000001},
+ {0x50555343, 0x02000000, 0x00000001},
+ {0x50555442, 0x04000000, 0x00000002},
+ {0x50555542, 0x04000000, 0x00000001},
+ {0x50555741, 0x02000000, 0x00000001},
+ {0x50555743, 0x04000000, 0x00000001},
+ {0x50555841, 0x02000000, 0x00000001},
+ {0x50555842, 0x04000000, 0x00000001},
+ {0x50555843, 0x08000000, 0x00000002},
+ {0x50555942, 0x00800000, 0x00000001},
+ {0x50555943, 0x01000000, 0x00000002},
+ {0x50555959, 0x04000000, 0x00000001},
+ {0x50555A42, 0x02000000, 0x00000002},
+ {0x50563241, 0x00800000, 0x00000001},
+ {0x50563342, 0x02000000, 0x00000001},
+ {0x50563343, 0x01000000, 0x00000001},
+ {0x50563443, 0x01000000, 0x00000001},
+ {0x50563643, 0x02000000, 0x00000001},
+ {0x50563743, 0x00800000, 0x00000001},
+ {0x50564143, 0x02000000, 0x00000002},
+ {0x50564159, 0x04000000, 0x00000002},
+ {0x50564242, 0x00800000, 0x00000001},
+ {0x50564243, 0x04000000, 0x00000002},
+ {0x50564341, 0x04000000, 0x00000002},
+ {0x50564359, 0x01000000, 0x00000003},
+ {0x50564441, 0x01000000, 0x00000001},
+ {0x50564442, 0x00000000, 0x00000001},
+ {0x50564443, 0x01000000, 0x00000001},
+ {0x50564454, 0x07FFEC70, 0x00000003},
+ {0x50564641, 0x04000000, 0x00000001},
+ {0x50564642, 0x00800000, 0x00000001},
+ {0x50564741, 0x02000000, 0x00000002},
+ {0x50564841, 0x01000000, 0x00000001},
+ {0x50564842, 0x02000000, 0x00000001},
+ {0x50564843, 0x02000000, 0x00000003},
+ {0x50564854, 0x04000000, 0x00000001},
+ {0x50564942, 0x00800000, 0x00000001},
+ {0x50564959, 0x08000000, 0x00000003},
+ {0x50564A56, 0x04000000, 0x00000001},
+ {0x50564C41, 0x01000000, 0x00000002},
+ {0x50564C43, 0x04000000, 0x00000001},
+ {0x50564C54, 0x02000000, 0x00000002},
+ {0x50564D41, 0x04000000, 0x00000001},
+ {0x50564D42, 0x00800000, 0x00000001},
+ {0x50564D43, 0x00800000, 0x00000001},
+ {0x50564D54, 0x04000000, 0x00000002},
+ {0x50564E42, 0x02000000, 0x00000001},
+ {0x50564E43, 0x10000000, 0x00000005},
+ {0x50565042, 0x00800000, 0x00000002},
+ {0x50565043, 0x04000000, 0x00000002},
+ {0x50565059, 0x04000000, 0x00000001},
+ {0x50565141, 0x01000000, 0x00000002},
+ {0x50565143, 0x04000000, 0x00000001},
+ {0x50565159, 0x01000000, 0x00000001},
+ {0x50565243, 0x02000000, 0x00000001},
+ {0x50565259, 0x02000000, 0x00000005},
+ {0x50565341, 0x00800000, 0x00000001},
+ {0x50565342, 0x02000000, 0x00000001},
+ {0x50565343, 0x02000000, 0x00000005},
+ {0x50565441, 0x02000000, 0x00000001},
+ {0x50565442, 0x02000000, 0x00000002},
+ {0x50565443, 0x04000000, 0x00000003},
+ {0x50565459, 0x08000000, 0x00000003},
+ {0x50565542, 0x02000000, 0x00000002},
+ {0x50565642, 0x01000000, 0x00000002},
+ {0x50565741, 0x01000000, 0x00000001},
+ {0x50565742, 0x02000000, 0x00000001},
+ {0x50565756, 0x04000000, 0x00000001},
+ {0x50565841, 0x04000000, 0x00000003},
+ {0x50565842, 0x02000000, 0x00000001},
+ {0x50565859, 0x00800000, 0x00000001},
+ {0x50565A41, 0x00800000, 0x00000001},
+ {0x50565A43, 0x02000000, 0x00000001},
+ {0x50573259, 0x04000000, 0x00000008},
+ {0x50573341, 0x04000000, 0x00000002},
+ {0x50573641, 0x02000000, 0x00000002},
+ {0x50573643, 0x02000000, 0x00000002},
+ {0x50573742, 0x01000000, 0x00000002},
+ {0x50573759, 0x01000000, 0x00000001},
+ {0x50574142, 0x02000000, 0x00000001},
+ {0x50574159, 0x04000000, 0x00000002},
+ {0x50574259, 0x01000000, 0x00000002},
+ {0x50574343, 0x02000000, 0x00000001},
+ {0x50574354, 0x02000000, 0x00000001},
+ {0x50574442, 0x02000000, 0x00000001},
+ {0x50574443, 0x00800000, 0x00000001},
+ {0x50574459, 0x02000000, 0x00000005},
+ {0x50574542, 0x04000000, 0x00000002},
+ {0x50574641, 0x01000000, 0x00000001},
+ {0x50574741, 0x01000000, 0x00000002},
+ {0x50574759, 0x00800000, 0x00000001},
+ {0x50574843, 0x02000000, 0x00000002},
+ {0x50574859, 0x02000000, 0x00000001},
+ {0x50574942, 0x04000000, 0x00000002},
+ {0x50574A43, 0x00800000, 0x00000001},
+ {0x50574A59, 0x00800000, 0x00000001},
+ {0x50574B41, 0x04000000, 0x00000002},
+ {0x50574B42, 0x00800000, 0x00000002},
+ {0x50574B59, 0x08000000, 0x00000003},
+ {0x50574C41, 0x02000000, 0x00000001},
+ {0x50574C43, 0x10000000, 0x00000002},
+ {0x50574C54, 0x02000000, 0x00000002},
+ {0x50574C59, 0x02000000, 0x00000001},
+ {0x50574D41, 0x04000000, 0x00000002},
+ {0x50574D43, 0x02000000, 0x00000002},
+ {0x50574D49, 0x04000000, 0x00000007},
+ {0x50574D54, 0x01000000, 0x00000001},
+ {0x50574D59, 0x01000000, 0x00000002},
+ {0x50574E41, 0x02000000, 0x00000002},
+ {0x50574E42, 0x02000000, 0x00000001},
+ {0x50574E59, 0x02000000, 0x00000001},
+ {0x50574F41, 0x00800000, 0x00000001},
+ {0x50575041, 0x02000000, 0x00000001},
+ {0x50575042, 0x01000000, 0x00000001},
+ {0x50575043, 0x04000000, 0x00000002},
+ {0x50575054, 0x00800000, 0x00000002},
+ {0x50575141, 0x01000000, 0x00000001},
+ {0x50575159, 0x00800000, 0x00000001},
+ {0x50575243, 0x02000000, 0x00000002},
+ {0x50575254, 0x04000000, 0x00000002},
+ {0x50575259, 0x02000000, 0x00000005},
+ {0x50575343, 0x04000000, 0x00000001},
+ {0x50575442, 0x02000000, 0x00000001},
+ {0x50575443, 0x08000000, 0x00000001},
+ {0x50575542, 0x02000000, 0x00000001},
+ {0x50575559, 0x02000000, 0x00000002},
+ {0x50575641, 0x02000000, 0x00000002},
+ {0x50575643, 0x01000000, 0x00000002},
+ {0x50575941, 0x02000000, 0x00000002},
+ {0x50575942, 0x00800000, 0x00000001},
+ {0x50575A41, 0x02000000, 0x00000002},
+ {0x50583242, 0x02000000, 0x00000002},
+ {0x50583341, 0x04000000, 0x00000001},
+ {0x50583542, 0x02000000, 0x00000003},
+ {0x50583559, 0x00800000, 0x00000008},
+ {0x50583659, 0x00800000, 0x00000008},
+ {0x50584142, 0x04000000, 0x00000001},
+ {0x50584143, 0x02000000, 0x00000003},
+ {0x50584154, 0x00800000, 0x00000001},
+ {0x50584159, 0x02000000, 0x00000002},
+ {0x50584241, 0x04000000, 0x00000002},
+ {0x50584242, 0x00800000, 0x00000001},
+ {0x50584259, 0x00800000, 0x00000001},
+ {0x50584341, 0x01000000, 0x00000003},
+ {0x50584343, 0x01000000, 0x00000003},
+ {0x50584354, 0x00800000, 0x00000001},
+ {0x50584443, 0x02000000, 0x00000001},
+ {0x50584459, 0x04000000, 0x00000001},
+ {0x50584559, 0x02000000, 0x00000002},
+ {0x50584641, 0x08000000, 0x00000003},
+ {0x50584642, 0x04000000, 0x00000002},
+ {0x50584741, 0x08000000, 0x00000003},
+ {0x50584742, 0x02000000, 0x00000002},
+ {0x50584759, 0x08000000, 0x00000002},
+ {0x50584841, 0x00800000, 0x00000001},
+ {0x50584843, 0x02000000, 0x00000003},
+ {0x50584859, 0x01000000, 0x00000001},
+ {0x50584943, 0x00800000, 0x00000001},
+ {0x50584A43, 0x01000000, 0x00000001},
+ {0x50584A59, 0x00800000, 0x00000001},
+ {0x50584C41, 0x02000000, 0x00000001},
+ {0x50584C43, 0x02000000, 0x00000002},
+ {0x50584C59, 0x00800000, 0x00000001},
+ {0x50584D41, 0x02000000, 0x00000001},
+ {0x50584D42, 0x02000000, 0x00000001},
+ {0x50584D59, 0x00800000, 0x00000001},
+ {0x50584E41, 0x02000000, 0x00000001},
+ {0x50584F41, 0x02000000, 0x00000001},
+ {0x50585043, 0x01000000, 0x00000005},
+ {0x50585054, 0x00800000, 0x00000002},
+ {0x50585059, 0x00800000, 0x00000003},
+ {0x50585143, 0x04000000, 0x00000001},
+ {0x50585159, 0x01000000, 0x00000001},
+ {0x50585342, 0x02000000, 0x00000001},
+ {0x50585359, 0x01000000, 0x00000001},
+ {0x50585441, 0x01000000, 0x00000002},
+ {0x50585543, 0x04000000, 0x00000001},
+ {0x50585559, 0x04000000, 0x00000003},
+ {0x50585641, 0x01000000, 0x00000001},
+ {0x50585741, 0x01000000, 0x00000002},
+ {0x50585742, 0x02000000, 0x00000001},
+ {0x50585759, 0x01000000, 0x00000002},
+ {0x50585859, 0x04000000, 0x00000002},
+ {0x50585941, 0x08000000, 0x00000005},
+ {0x50585942, 0x10000000, 0x00000003},
+ {0x50585A42, 0x02000000, 0x00000001},
+ {0x50585A59, 0x04000000, 0x00000002},
+ {0x50593259, 0x00800000, 0x00000008},
+ {0x50593341, 0x04000000, 0x00000003},
+ {0x50593342, 0x02000000, 0x00000001},
+ {0x50593443, 0x02000000, 0x00000001},
+ {0x50593542, 0x01000000, 0x00000001},
+ {0x50593641, 0x01000000, 0x00000002},
+ {0x50593842, 0x02000000, 0x00000001},
+ {0x50594143, 0x02000000, 0x00000001},
+ {0x50594159, 0x02000000, 0x00000001},
+ {0x50594242, 0x00800000, 0x00000001},
+ {0x50594243, 0x02000000, 0x00000001},
+ {0x50594259, 0x02000000, 0x00000001},
+ {0x50594343, 0x01000000, 0x00000001},
+ {0x50594359, 0x00800000, 0x00000001},
+ {0x50594442, 0x04000000, 0x00000002},
+ {0x50594443, 0x02000000, 0x00000002},
+ {0x50594459, 0x00800000, 0x00000001},
+ {0x50594542, 0x00800000, 0x00000001},
+ {0x50594641, 0x04000000, 0x00000001},
+ {0x50594659, 0x08000000, 0x00000005},
+ {0x50594741, 0x04000000, 0x00000005},
+ {0x50594742, 0x01000000, 0x00000001},
+ {0x50594842, 0x02000000, 0x00000001},
+ {0x50594843, 0x00000000, 0x00000001},
+ {0x50594859, 0x01000000, 0x00000001},
+ {0x50594943, 0x04000000, 0x00000002},
+ {0x50594959, 0x01000000, 0x00000001},
+ {0x50594A42, 0x04000000, 0x00000001},
+ {0x50594A59, 0x00800000, 0x00000001},
+ {0x50594B41, 0x02000000, 0x00000003},
+ {0x50594B42, 0x02000000, 0x00000002},
+ {0x50594C41, 0x04000000, 0x00000001},
+ {0x50594C43, 0x02000000, 0x00000002},
+ {0x50594C59, 0x02000000, 0x00000002},
+ {0x50594D54, 0x00800000, 0x00000001},
+ {0x50594D59, 0x08000000, 0x00000005},
+ {0x50594E41, 0x04000000, 0x00000003},
+ {0x50594E42, 0x04000000, 0x00000001},
+ {0x50594E43, 0x08000000, 0x00000002},
+ {0x50594E59, 0x00800000, 0x00000001},
+ {0x50594F41, 0x02000000, 0x00000002},
+ {0x50594F43, 0x00000000, 0x00000002},
+ {0x50595041, 0x02000000, 0x00000002},
+ {0x50595042, 0x00800000, 0x00000001},
+ {0x50595056, 0x10000000, 0x00000005},
+ {0x50595241, 0x02000000, 0x00000002},
+ {0x50595243, 0x01000000, 0x00000001},
+ {0x50595254, 0x02000000, 0x00000001},
+ {0x50595342, 0x02000000, 0x00000002},
+ {0x50595344, 0x02000000, 0x00000001},
+ {0x50595359, 0x01000000, 0x00000001},
+ {0x50595442, 0x01000000, 0x00000002},
+ {0x50595443, 0x01000000, 0x00000002},
+ {0x50595543, 0x02000000, 0x00000001},
+ {0x50595642, 0x08000000, 0x00000001},
+ {0x50595743, 0x02000000, 0x00000003},
+ {0x50595842, 0x04000000, 0x00000002},
+ {0x50595941, 0x01000000, 0x00000002},
+ {0x50595942, 0x08000000, 0x00000003},
+ {0x50595943, 0x00800000, 0x00000001},
+ {0x50595A41, 0x04000000, 0x00000002},
+ {0x505A3243, 0x00800000, 0x00000002},
+ {0x505A3441, 0x00800000, 0x00000001},
+ {0x505A3442, 0x08000000, 0x00000002},
+ {0x505A3443, 0x04000000, 0x00000002},
+ {0x505A3542, 0x01000000, 0x00000001},
+ {0x505A3642, 0x04000000, 0x00000003},
+ {0x505A3659, 0x08000000, 0x00000000},
+ {0x505A3742, 0x04000000, 0x00000001},
+ {0x505A3842, 0x01000000, 0x00000001},
+ {0x505A4159, 0x01000000, 0x00000001},
+ {0x505A4241, 0x08000000, 0x00000003},
+ {0x505A4243, 0x01000000, 0x00000003},
+ {0x505A4259, 0x01000000, 0x00000001},
+ {0x505A4341, 0x01000000, 0x00000001},
+ {0x505A4342, 0x01000000, 0x00000002},
+ {0x505A4343, 0x00800000, 0x00000001},
+ {0x505A4359, 0x00800000, 0x00000001},
+ {0x505A4441, 0x02000000, 0x00000002},
+ {0x505A4442, 0x04000000, 0x00000003},
+ {0x505A4443, 0x04000000, 0x00000002},
+ {0x505A4459, 0x01000000, 0x00000002},
+ {0x505A4641, 0x04000000, 0x00000001},
+ {0x505A4642, 0x00800000, 0x00000001},
+ {0x505A4742, 0x01000000, 0x00000002},
+ {0x505A4743, 0x00000000, 0x00000001},
+ {0x505A4759, 0x04000000, 0x00000001},
+ {0x505A4841, 0x04000000, 0x00000001},
+ {0x505A4842, 0x02000000, 0x00000003},
+ {0x505A4859, 0x04000000, 0x00000002},
+ {0x505A4941, 0x02000000, 0x00000002},
+ {0x505A4943, 0x02000000, 0x00000001},
+ {0x505A4A59, 0x04000000, 0x00000005},
+ {0x505A4C42, 0x02000000, 0x00000001},
+ {0x505A4C43, 0x04000000, 0x00000001},
+ {0x505A4C59, 0x10000000, 0x00000002},
+ {0x505A4D42, 0x00800000, 0x00000002},
+ {0x505A4D54, 0x01000000, 0x00000002},
+ {0x505A4D56, 0x04000000, 0x00000001},
+ {0x505A4E41, 0x01000000, 0x00000001},
+ {0x505A4E42, 0x01000000, 0x00000001},
+ {0x505A4E59, 0x04000000, 0x00000002},
+ {0x505A4F41, 0x01000000, 0x00000002},
+ {0x505A4F42, 0x02000000, 0x00000001},
+ {0x505A4F59, 0x00000000, 0x00000002},
+ {0x505A5042, 0x00000000, 0x00000001},
+ {0x505A5059, 0x01000000, 0x00000001},
+ {0x505A5143, 0x02000000, 0x00000001},
+ {0x505A5241, 0x04000000, 0x00000002},
+ {0x505A5242, 0x04000000, 0x00000003},
+ {0x505A5243, 0x00800000, 0x00000002},
+ {0x505A5259, 0x01000000, 0x00000002},
+ {0x505A5359, 0x08000000, 0x00000001},
+ {0x505A5442, 0x02000000, 0x00000001},
+ {0x505A5459, 0x04000000, 0x00000001},
+ {0x505A5541, 0x04000000, 0x00000005},
+ {0x505A5542, 0x00800000, 0x00000002},
+ {0x505A5543, 0x04000000, 0x00000001},
+ {0x505A5759, 0x04000000, 0x00000001},
+ {0x505A5A42, 0x01000000, 0x00000001},
+ {0x51374C42, 0x04000000, 0x00000001},
+ {0x51375042, 0x02000000, 0x00000001},
+ {0x51375142, 0x02000000, 0x00000001},
+ {0x51385042, 0x04000000, 0x00000001},
+ {0x51435143, 0x02000000, 0x00000001},
+ {0x51454642, 0x04000000, 0x00000001},
+ {0x514C5542, 0x02000000, 0x00000001},
+ {0x514F5542, 0x01000000, 0x00000001},
+ {0x51503642, 0x02000000, 0x00000001},
+ {0x51573542, 0x02000000, 0x00000001},
+ {0x51584C42, 0x04000000, 0x00000008},
+ {0x51585042, 0x04000000, 0x00000003},
+ {0x51594C42, 0x04000000, 0x00000008},
+ {0x52335741, 0x04000000, 0x00000001},
+ {0x52464443, 0x04000000, 0x00000002},
+ {0x53323643, 0x04000000, 0x00000001},
+ {0x53335141, 0x04000000, 0x00000002},
+ {0x53335159, 0x04000000, 0x00000002},
+ {0x53344259, 0x02000000, 0x00000001},
+ {0x53344C43, 0x04000000, 0x00000002},
+ {0x53354841, 0x02000000, 0x00000002},
+ {0x53394341, 0x04000000, 0x00000001},
+ {0x53414441, 0x04000000, 0x00000006},
+ {0x53415041, 0x04000000, 0x00000006},
+ {0x53415249, 0x10000000, 0x00000006},
+ {0x53424542, 0x10000000, 0x00000003},
+ {0x53425249, 0x10000000, 0x00000006},
+ {0x53434A42, 0x04000000, 0x00000002},
+ {0x53434D43, 0x02000000, 0x00000002},
+ {0x53435141, 0x04000000, 0x00000002},
+ {0x53435259, 0x08000000, 0x00000002},
+ {0x53435943, 0x02000000, 0x00000002},
+ {0x53445249, 0x20000000, 0x00000006},
+ {0x53445641, 0x01000000, 0x00000002},
+ {0x53453231, 0x02000000, 0x00000003},
+ {0x53453443, 0x04000000, 0x00000001},
+ {0x53454343, 0x01000000, 0x00000005},
+ {0x53454542, 0x10000000, 0x00000003},
+ {0x53454559, 0x10000000, 0x00000003},
+ {0x53454959, 0x02000000, 0x00000002},
+ {0x53454C43, 0x04000000, 0x00000001},
+ {0x53455249, 0x20000000, 0x00000006},
+ {0x53464959, 0x02000000, 0x00000002},
+ {0x53464B59, 0x02000000, 0x00000001},
+ {0x53464C42, 0x10000000, 0x00000003},
+ {0x53465359, 0x04000000, 0x00000001},
+ {0x53474D41, 0x01000000, 0x00000001},
+ {0x53474D43, 0x04000000, 0x00000001},
+ {0x53475049, 0x08000000, 0x00000006},
+ {0x534A3343, 0x10000000, 0x00000003},
+ {0x534A5641, 0x04000000, 0x00000002},
+ {0x534B4356, 0x08000000, 0x00000002},
+ {0x534B5049, 0x08000000, 0x00000006},
+ {0x534C4443, 0x02000000, 0x00000004},
+ {0x534C4C43, 0x01000000, 0x00000002},
+ {0x534D4359, 0x02000000, 0x00000001},
+ {0x534F4359, 0x04000000, 0x00000001},
+ {0x534F5342, 0x02000000, 0x00000001},
+ {0x53504A59, 0x01000000, 0x00000001},
+ {0x53505A55, 0x08000000, 0xFFFFFFFF},
+ {0x53514142, 0x08000000, 0x00000002},
+ {0x53525359, 0x01000000, 0x00000005},
+ {0x53533341, 0x02000000, 0x00000001},
+ {0x53534F41, 0x08000000, 0x00000005},
+ {0x53535541, 0x04000000, 0x00000001},
+ {0x53544C59, 0x08000000, 0x00000002},
+ {0x53554259, 0x08000000, 0x00000003},
+ {0x53555043, 0x08000000, 0x00000006},
+ {0x53563543, 0x01000000, 0x00000001},
+ {0x53564256, 0x02000000, 0x00000001},
+ {0x53564E43, 0x10000000, 0x00000005},
+ {0x53565841, 0x04000000, 0x00000003},
+ {0x53574143, 0x04000000, 0x00000001},
+ {0x53594641, 0x04000000, 0x00000001},
+ {0x53594C41, 0x04000000, 0x00000001},
+ {0x53595543, 0x02000000, 0x00000001},
+ {0x53595A41, 0x04000000, 0x00000002},
+ {0x535A4641, 0x04000000, 0x00000001},
+ {0x535A5359, 0x08000000, 0x00000001},
+ {0x54595056, 0x10000000, 0x00000005},
+ {0x55414C59, 0x00800000, 0x00000002},
+ {0x55425742, 0x04000000, 0x00000002},
+ {0x55434956, 0x04000000, 0x00000002},
+ {0x55435243, 0x02000000, 0x00000001},
+ {0x55444E41, 0x00800000, 0x00000008},
+ {0x55454342, 0x02000000, 0x00000002},
+ {0x55463343, 0x02000000, 0x00000002},
+ {0x554A5243, 0x02000000, 0x00000001},
+ {0x55504A59, 0x01000000, 0x00000001},
+ {0x55515243, 0x02000000, 0x00000001},
+ {0x55524542, 0x02000000, 0x00000001},
+ {0x55525342, 0x01000000, 0x00000001},
+ {0x55544256, 0x02000000, 0x00000002},
+ {0x55545942, 0x04000000, 0x00000002},
+ {0x55573341, 0x04000000, 0x00000002},
+ {0x55574C41, 0x02000000, 0x00000001},
+ {0x56324356, 0x02000000, 0x00000001},
+ {0x56324456, 0x04000000, 0x00000001},
+ {0x56324D56, 0x04000000, 0x00000002},
+ {0x56335356, 0x08000000, 0x00000005},
+ {0x56335456, 0x04000000, 0x00000001},
+ {0x56345456, 0x04000000, 0x00000003},
+ {0x56364356, 0x02000000, 0x00000002},
+ {0x56394856, 0x04000000, 0x00000002},
+ {0x56395056, 0x04000000, 0x00000001},
+ {0x56413956, 0x02000000, 0x00000000},
+ {0x56414156, 0x02000000, 0x00000008},
+ {0x56414256, 0x02000000, 0x00000001},
+ {0x56414356, 0x04000000, 0x00000001},
+ {0x56414C56, 0x04000000, 0x00000002},
+ {0x56434156, 0x04000000, 0x00000002},
+ {0x56434D56, 0x02000000, 0x00000001},
+ {0x56444356, 0x04000000, 0x00000002},
+ {0x56444956, 0x02000000, 0x00000002},
+ {0x56455056, 0x04000000, 0x00000001},
+ {0x56455456, 0x04000000, 0x00000002},
+ {0x56464956, 0x02000000, 0x00000002},
+ {0x56465056, 0x04000000, 0x00000001},
+ {0x56473256, 0x02000000, 0x00000006},
+ {0x56475256, 0x02000000, 0x00000002},
+ {0x56494C56, 0x02000000, 0x00000001},
+ {0x56495256, 0x02000000, 0x00000001},
+ {0x564A4956, 0x08000000, 0x00000003},
+ {0x564B4356, 0x08000000, 0x00000002},
+ {0x564B4D56, 0x02000000, 0x00000003},
+ {0x564B5355, 0x08000000, 0xFFFFFFFF},
+ {0x564B5356, 0x04000000, 0x00000001},
+ {0x564C4156, 0x04000000, 0x00000002},
+ {0x564C4256, 0x02000000, 0x00000002},
+ {0x564C4556, 0x02000000, 0x00000003},
+ {0x564D4356, 0x04000000, 0x00000002},
+ {0x564E5356, 0x04000000, 0x00000002},
+ {0x564F4156, 0x04000000, 0x00000001},
+ {0x564F5356, 0x04000000, 0x00000003},
+ {0x56505056, 0x02000000, 0x00000001},
+ {0x56505256, 0x02000000, 0x00000001},
+ {0x56505456, 0x08000000, 0x00000002},
+ {0x56524756, 0x04000000, 0x00000001},
+ {0x56534256, 0x02000000, 0x00000001},
+ {0x56534556, 0x04000000, 0x00000001},
+ {0x56534656, 0x08000000, 0x00000003},
+ {0x56534844, 0x02000000, 0xFFFFFFFF},
+ {0x56544156, 0x02000000, 0x00000001},
+ {0x56554B56, 0x04000000, 0x00000001},
+ {0x56555A56, 0x02000000, 0x00000002},
+ {0x56564156, 0x04000000, 0x00000001},
+ {0x56564256, 0x02000000, 0x00000001},
+ {0x56564A56, 0x04000000, 0x00000001},
+ {0x56565056, 0x04000000, 0x00000002},
+ {0x56565756, 0x04000000, 0x00000001},
+ {0x56574356, 0x02000000, 0x00000002},
+ {0x56574856, 0x04000000, 0x00000002},
+ {0x56574A56, 0x02000000, 0x00000003},
+ {0x56594D56, 0x04000000, 0x00000001},
+ {0x565A4656, 0x02000000, 0x00000001},
+ {0x565A4D56, 0x04000000, 0x00000001},
+ {0x57325141, 0x02000000, 0x00000002},
+ {0x57334941, 0x01000000, 0x00000002},
+ {0x57414356, 0x04000000, 0x00000001},
+ {0x57414E43, 0x04000000, 0x00000001},
+ {0x57445759, 0x01000000, 0x00000002},
+ {0x57474C43, 0x04000000, 0x00000001},
+ {0x574C5759, 0x02000000, 0x00000001},
+ {0x57565141, 0x01000000, 0x00000002},
+ {0x575A5242, 0x04000000, 0x00000003},
+ {0x58324354, 0x00800000, 0x00000001},
+ {0x58324842, 0x02000000, 0x00000003},
+ {0x58324859, 0x02000000, 0x00000003},
+ {0x58324B41, 0x04000000, 0x00000001},
+ {0x58324D56, 0x04000000, 0x00000002},
+ {0x58325141, 0x02000000, 0x00000002},
+ {0x58325241, 0x02000000, 0x00000003},
+ {0x58325341, 0x01000000, 0x00000001},
+ {0x58334242, 0x00000000, 0x00000001},
+ {0x58334542, 0x04000000, 0x00000001},
+ {0x58334759, 0x02000000, 0x00000003},
+ {0x58334841, 0x04000000, 0x00000003},
+ {0x58334941, 0x01000000, 0x00000002},
+ {0x58334943, 0x04000000, 0x00000001},
+ {0x58334C41, 0x02000000, 0x00000001},
+ {0x58335456, 0x04000000, 0x00000001},
+ {0x58343242, 0x00800000, 0x00000001},
+ {0x58344A43, 0x01000000, 0x00000001},
+ {0x58345442, 0x01000000, 0x00000008},
+ {0x58345741, 0x02000000, 0x00000002},
+ {0x58354259, 0x02000000, 0x00000002},
+ {0x58354A42, 0x02000000, 0x00000001},
+ {0x58354D54, 0x04000000, 0x00000003},
+ {0x58355059, 0x10000000, 0x00000001},
+ {0x58355142, 0x04000000, 0x00000001},
+ {0x58355243, 0x10000000, 0x00000001},
+ {0x58355259, 0x02000000, 0x00000002},
+ {0x58355343, 0x04000000, 0x00000001},
+ {0x58363559, 0x04000000, 0x00000008},
+ {0x58364254, 0x02000000, 0x00000001},
+ {0x58364341, 0x01000000, 0x00000002},
+ {0x58365259, 0x00000000, 0x00000002},
+ {0x58374943, 0x04000000, 0x00000002},
+ {0x58374A42, 0x00800000, 0x00000001},
+ {0x58374C42, 0x04000000, 0x00000001},
+ {0x58375042, 0x02000000, 0x00000001},
+ {0x58384442, 0x04000000, 0x00000001},
+ {0x58384843, 0x02000000, 0x00000001},
+ {0x58384D41, 0x01000000, 0x00000001},
+ {0x58385741, 0x04000000, 0x00000001},
+ {0x58385742, 0x01000000, 0x00000001},
+ {0x58385859, 0x08000000, 0x00000001},
+ {0x58394259, 0x02000000, 0x00000003},
+ {0x58394943, 0x01000000, 0x00000002},
+ {0x58394D59, 0x01000000, 0x00000001},
+ {0x58395056, 0x04000000, 0x00000001},
+ {0x58395141, 0x04000000, 0x00000001},
+ {0x58395341, 0x02000000, 0x00000001},
+ {0x58395759, 0x08000000, 0x00000001},
+ {0x58413541, 0x04000000, 0x00000001},
+ {0x58414243, 0x02000000, 0x00000001},
+ {0x58414356, 0x04000000, 0x00000001},
+ {0x58414643, 0x08000000, 0x00000002},
+ {0x58414E43, 0x04000000, 0x00000001},
+ {0x58415141, 0x02000000, 0x00000001},
+ {0x58415243, 0x00800000, 0x00000001},
+ {0x58415359, 0x01000000, 0x00000002},
+ {0x58415459, 0x04000000, 0x00000001},
+ {0x58415A43, 0x02000000, 0x00000002},
+ {0x58423242, 0x08000000, 0x00000002},
+ {0x58423542, 0x08000000, 0x00000002},
+ {0x58424254, 0x02000000, 0x00000001},
+ {0x58424654, 0x01000000, 0x00000001},
+ {0x58424743, 0x02000000, 0x00000001},
+ {0x58424A43, 0x01000000, 0x00000001},
+ {0x58424B43, 0x02000000, 0x00000002},
+ {0x58425342, 0x04000000, 0x00000003},
+ {0x58425442, 0x04000000, 0x00000002},
+ {0x58425742, 0x04000000, 0x00000002},
+ {0x58433342, 0x04000000, 0x00000002},
+ {0x58433441, 0x02000000, 0x00000003},
+ {0x58434341, 0x02000000, 0x00000001},
+ {0x58434542, 0x01000000, 0x00000003},
+ {0x58434642, 0x02000000, 0x00000001},
+ {0x58434741, 0x04000000, 0x00000003},
+ {0x58434941, 0x01000000, 0x00000001},
+ {0x58435043, 0x01000000, 0x00000002},
+ {0x58435143, 0x02000000, 0x00000001},
+ {0x58435359, 0x02000000, 0x00000001},
+ {0x58435842, 0x01000000, 0x00000001},
+ {0x58443743, 0x04000000, 0x00000001},
+ {0x58444359, 0x01000000, 0x00000001},
+ {0x58444642, 0x00000000, 0x00000001},
+ {0x58444842, 0x04000000, 0x00000001},
+ {0x58444A54, 0x01000000, 0x00000001},
+ {0x58444B42, 0x00800000, 0x00000001},
+ {0x58445054, 0x08000000, 0x00000001},
+ {0x58445759, 0x01000000, 0x00000002},
+ {0x58453242, 0x00800000, 0x00000001},
+ {0x58453442, 0x01000000, 0x00000001},
+ {0x58454543, 0x00800000, 0x00000001},
+ {0x58454C43, 0x04000000, 0x00000001},
+ {0x58455056, 0x04000000, 0x00000001},
+ {0x58455141, 0x00800000, 0x00000002},
+ {0x58455143, 0x04000000, 0x00000002},
+ {0x58455456, 0x04000000, 0x00000002},
+ {0x58455542, 0x02000000, 0x00000001},
+ {0x58463642, 0x08000000, 0x00000001},
+ {0x58464143, 0x01000000, 0x00000001},
+ {0x58464243, 0x08000000, 0x00000003},
+ {0x58464541, 0x00800000, 0x00000001},
+ {0x58464A42, 0x08000000, 0x00000003},
+ {0x58465956, 0x02000000, 0x00000001},
+ {0x58465A42, 0x04000000, 0x00000001},
+ {0x58473241, 0x02000000, 0x00000003},
+ {0x58474142, 0x01000000, 0x00000001},
+ {0x58474143, 0x02000000, 0x00000001},
+ {0x58474342, 0x04000000, 0x00000002},
+ {0x58474354, 0x04000000, 0x00000001},
+ {0x58474542, 0x00800000, 0x00000001},
+ {0x58475742, 0x04000000, 0x00000001},
+ {0x58475956, 0x04000000, 0x00000001},
+ {0x58483343, 0x00800000, 0x00000001},
+ {0x58483842, 0x04000000, 0x00000002},
+ {0x58484759, 0x08000000, 0x00000001},
+ {0x58484A42, 0x01000000, 0x00000001},
+ {0x58484C41, 0x02000000, 0x00000001},
+ {0x58485243, 0x00000000, 0x00000002},
+ {0x58485254, 0x02000000, 0x00000001},
+ {0x58485641, 0x04000000, 0x00000002},
+ {0x58485A59, 0x04000000, 0x00000001},
+ {0x58493642, 0x04000000, 0x00000002},
+ {0x58494442, 0x04000000, 0x00000001},
+ {0x58494641, 0x02000000, 0x00000002},
+ {0x58494942, 0x00800000, 0x00000001},
+ {0x58494C43, 0x04000000, 0x00000001},
+ {0x58495259, 0x04000000, 0x00000002},
+ {0x58495442, 0x01000000, 0x00000001},
+ {0x584A4841, 0x01000000, 0x00000002},
+ {0x584A4D54, 0x02000000, 0x00000001},
+ {0x584A5143, 0x00800000, 0x00000001},
+ {0x584B3443, 0x00800000, 0x00000001},
+ {0x584B3842, 0x02000000, 0x00000002},
+ {0x584B4143, 0x04000000, 0x00000002},
+ {0x584B4243, 0x04000000, 0x00000002},
+ {0x584B4541, 0x04000000, 0x00000002},
+ {0x584B4642, 0x04000000, 0x00000001},
+ {0x584B4B41, 0x02000000, 0x00000003},
+ {0x584B4C42, 0x04000000, 0x00000001},
+ {0x584B5356, 0x04000000, 0x00000001},
+ {0x584B5559, 0x04000000, 0x00000001},
+ {0x584C4643, 0x02000000, 0x00000002},
+ {0x584C4A59, 0x01000000, 0x00000002},
+ {0x584C4E59, 0x04000000, 0x00000001},
+ {0x584C5059, 0x00800000, 0x00000001},
+ {0x584C5242, 0x02000000, 0x00000001},
+ {0x584C5342, 0x02000000, 0x00000003},
+ {0x584C5543, 0x04000000, 0x00000001},
+ {0x584C5759, 0x02000000, 0x00000001},
+ {0x584C5941, 0x02000000, 0x00000002},
+ {0x584C5959, 0x04000000, 0x00000002},
+ {0x584D3243, 0x02000000, 0x00000002},
+ {0x584D3442, 0x02000000, 0x00000001},
+ {0x584D4359, 0x02000000, 0x00000001},
+ {0x584D4842, 0x02000000, 0x00000001},
+ {0x584D4A54, 0x00800000, 0x00000001},
+ {0x584D4C42, 0x01000000, 0x00000001},
+ {0x584D4E42, 0x04000000, 0x00000001},
+ {0x584D5642, 0x02000000, 0x00000001},
+ {0x584D5842, 0x04000000, 0x00000002},
+ {0x584E3743, 0x04000000, 0x00000001},
+ {0x584E4354, 0x01000000, 0x00000001},
+ {0x584E4559, 0x00800000, 0x00000001},
+ {0x584E4641, 0x02000000, 0x00000002},
+ {0x584E5159, 0x04000000, 0x00000002},
+ {0x584F3543, 0x01000000, 0x00000001},
+ {0x584F3642, 0x02000000, 0x00000001},
+ {0x584F3743, 0x04000000, 0x00000002},
+ {0x584F4142, 0x04000000, 0x00000001},
+ {0x584F4156, 0x04000000, 0x00000001},
+ {0x584F4442, 0x01000000, 0x00000001},
+ {0x584F4D59, 0x04000000, 0x00000001},
+ {0x584F5542, 0x02000000, 0x00000001},
+ {0x584F5741, 0x02000000, 0x00000002},
+ {0x584F5841, 0x01000000, 0x00000002},
+ {0x584F5843, 0x04000000, 0x00000001},
+ {0x58503541, 0x04000000, 0x00000001},
+ {0x58504259, 0x02000000, 0x00000001},
+ {0x58504342, 0x04000000, 0x00000002},
+ {0x58504442, 0x02000000, 0x00000001},
+ {0x58504B59, 0x01000000, 0x00000001},
+ {0x58504F43, 0x01000000, 0x00000003},
+ {0x58505343, 0x02000000, 0x00000003},
+ {0x58513543, 0x01000000, 0x00000002},
+ {0x58513643, 0x08000000, 0x00000001},
+ {0x58514559, 0x01000000, 0x00000001},
+ {0x58514A59, 0x01000000, 0x00000001},
+ {0x58514C42, 0x02000000, 0x00000001},
+ {0x58514D43, 0x02000000, 0x00000001},
+ {0x58514D59, 0x02000000, 0x00000001},
+ {0x58515459, 0x01000000, 0x00000001},
+ {0x58523559, 0x04000000, 0x00000008},
+ {0x58523743, 0x00800000, 0x00000001},
+ {0x58524354, 0x00800000, 0x00000001},
+ {0x58524459, 0x01000000, 0x00000001},
+ {0x58524842, 0x02000000, 0x00000001},
+ {0x58524943, 0x04000000, 0x00000002},
+ {0x58524A42, 0x01000000, 0x00000001},
+ {0x58524C54, 0x08000000, 0x00000001},
+ {0x58524D42, 0x02000000, 0x00000001},
+ {0x58525042, 0x00800000, 0x00000001},
+ {0x58525141, 0x01000000, 0x00000002},
+ {0x58525642, 0x04000000, 0x00000001},
+ {0x58525843, 0x04000000, 0x00000001},
+ {0x58533841, 0x00800000, 0x00000002},
+ {0x58534342, 0x04000000, 0x00000002},
+ {0x58534556, 0x04000000, 0x00000001},
+ {0x58534642, 0x04000000, 0x00000001},
+ {0x58534643, 0x02000000, 0x00000001},
+ {0x58534743, 0x08000000, 0x00000001},
+ {0x58534A54, 0x00800000, 0x00000001},
+ {0x58534E43, 0x04000000, 0x00000002},
+ {0x58535143, 0x02000000, 0x00000001},
+ {0x58543341, 0x02000000, 0x00000002},
+ {0x58543642, 0x04000000, 0x00000001},
+ {0x58543743, 0x01000000, 0x00000002},
+ {0x58544256, 0x02000000, 0x00000002},
+ {0x58544D59, 0x02000000, 0x00000002},
+ {0x58545054, 0x08000000, 0x00000001},
+ {0x58545259, 0x02000000, 0x00000002},
+ {0x58545A41, 0x01000000, 0x00000005},
+ {0x58554159, 0x04000000, 0x00000003},
+ {0x58554242, 0x04000000, 0x00000003},
+ {0x58554341, 0x08000000, 0x00000005},
+ {0x58554454, 0x01000000, 0x00000001},
+ {0x58554643, 0x00000000, 0x00000002},
+ {0x58554E42, 0x01000000, 0x00000001},
+ {0x58555442, 0x04000000, 0x00000002},
+ {0x58555841, 0x02000000, 0x00000001},
+ {0x58564142, 0x04000000, 0x00000001},
+ {0x58564159, 0x04000000, 0x00000002},
+ {0x58564343, 0x01000000, 0x00000001},
+ {0x58564854, 0x04000000, 0x00000001},
+ {0x58564B42, 0x00800000, 0x00000001},
+ {0x58564D42, 0x00800000, 0x00000001},
+ {0x58565141, 0x01000000, 0x00000002},
+ {0x58573241, 0x04000000, 0x00000001},
+ {0x58573341, 0x04000000, 0x00000002},
+ {0x58573742, 0x01000000, 0x00000002},
+ {0x58574443, 0x01000000, 0x00000001},
+ {0x58574859, 0x02000000, 0x00000001},
+ {0x58574942, 0x04000000, 0x00000002},
+ {0x58574C41, 0x02000000, 0x00000001},
+ {0x58574D42, 0x04000000, 0x00000002},
+ {0x58575141, 0x02000000, 0x00000001},
+ {0x58575343, 0x04000000, 0x00000001},
+ {0x58575942, 0x00800000, 0x00000001},
+ {0x58584254, 0x04000000, 0x00000002},
+ {0x58584C41, 0x02000000, 0x00000001},
+ {0x58584D59, 0x00800000, 0x00000001},
+ {0x58585043, 0x01000000, 0x00000005},
+ {0x58594159, 0x02000000, 0x00000001},
+ {0x58594259, 0x02000000, 0x00000001},
+ {0x58594443, 0x02000000, 0x00000002},
+ {0x58594741, 0x04000000, 0x00000003},
+ {0x58594842, 0x02000000, 0x00000001},
+ {0x58594943, 0x04000000, 0x00000002},
+ {0x58594A42, 0x04000000, 0x00000001},
+ {0x58594E42, 0x04000000, 0x00000001},
+ {0x58595543, 0x02000000, 0x00000001},
+ {0x585A3242, 0x00800000, 0x00000001},
+ {0x585A3742, 0x04000000, 0x00000001},
+ {0x585A4341, 0x01000000, 0x00000001},
+ {0x585A4A59, 0x04000000, 0x00000005},
+ {0x585A4C59, 0x10000000, 0x00000002},
+ {0x585A4D56, 0x04000000, 0x00000001},
+ {0x585A5059, 0x01000000, 0x00000001},
+ {0x585A5242, 0x04000000, 0x00000003},
+ {0x585A5243, 0x00800000, 0x00000002},
+ {0x585A5442, 0x04000000, 0x00000001},
+ {0x59325141, 0x02000000, 0x00000002},
+ {0x59334242, 0x08000000, 0x00000001},
+ {0x59334759, 0x02000000, 0x00000003},
+ {0x59334941, 0x01000000, 0x00000002},
+ {0x59334943, 0x04000000, 0x00000001},
+ {0x59334C41, 0x02000000, 0x00000001},
+ {0x59345741, 0x02000000, 0x00000002},
+ {0x59354A42, 0x02000000, 0x00000001},
+ {0x59355142, 0x08000000, 0x00000001},
+ {0x59364341, 0x01000000, 0x00000002},
+ {0x59374943, 0x00000000, 0x00000002},
+ {0x59394259, 0x02000000, 0x00000003},
+ {0x59395056, 0x04000000, 0x00000001},
+ {0x59414356, 0x04000000, 0x00000001},
+ {0x59414643, 0x08000000, 0x00000002},
+ {0x59414E43, 0x04000000, 0x00000001},
+ {0x59415359, 0x01000000, 0x00000002},
+ {0x59415459, 0x04000000, 0x00000001},
+ {0x59425442, 0x04000000, 0x00000002},
+ {0x59425742, 0x04000000, 0x00000002},
+ {0x59434741, 0x04000000, 0x00000003},
+ {0x59443442, 0x01000000, 0x00000001},
+ {0x59444642, 0x00800000, 0x00000001},
+ {0x59445054, 0x08000000, 0x00000001},
+ {0x59453442, 0x01000000, 0x00000001},
+ {0x59454259, 0x08000000, 0x00000003},
+ {0x59454543, 0x00800000, 0x00000001},
+ {0x59454C43, 0x04000000, 0x00000001},
+ {0x59455056, 0x04000000, 0x00000001},
+ {0x59455143, 0x04000000, 0x00000002},
+ {0x59455542, 0x02000000, 0x00000001},
+ {0x59463642, 0x08000000, 0x00000001},
+ {0x59465042, 0x04000000, 0x00000002},
+ {0x59474354, 0x04000000, 0x00000001},
+ {0x59474C43, 0x04000000, 0x00000001},
+ {0x59484A42, 0x01000000, 0x00000001},
+ {0x59484C41, 0x02000000, 0x00000001},
+ {0x59495443, 0x02000000, 0x00000002},
+ {0x594A4841, 0x01000000, 0x00000002},
+ {0x594A4D54, 0x02000000, 0x00000001},
+ {0x594B5356, 0x04000000, 0x00000001},
+ {0x594C4A59, 0x01000000, 0x00000002},
+ {0x594C4E59, 0x04000000, 0x00000001},
+ {0x594C5759, 0x02000000, 0x00000001},
+ {0x594E4641, 0x02000000, 0x00000002},
+ {0x594E4654, 0x04000000, 0x00000002},
+ {0x594E5159, 0x04000000, 0x00000002},
+ {0x594F5841, 0x01000000, 0x00000002},
+ {0x59504442, 0x02000000, 0x00000001},
+ {0x59513642, 0x00800000, 0x00000001},
+ {0x59514559, 0x01000000, 0x00000001},
+ {0x59514D59, 0x02000000, 0x00000001},
+ {0x59524254, 0x04000000, 0x00000001},
+ {0x59524459, 0x01000000, 0x00000001},
+ {0x59524842, 0x02000000, 0x00000001},
+ {0x59524C54, 0x08000000, 0x00000001},
+ {0x59533841, 0x00800000, 0x00000002},
+ {0x59545054, 0x08000000, 0x00000001},
+ {0x59545259, 0x02000000, 0x00000002},
+ {0x59545A41, 0x01000000, 0x00000005},
+ {0x59554242, 0x04000000, 0x00000003},
+ {0x59554341, 0x08000000, 0x00000005},
+ {0x59554B56, 0x04000000, 0x00000001},
+ {0x59554D42, 0x04000000, 0x00000001},
+ {0x59555154, 0x00800000, 0x00000001},
+ {0x59555442, 0x04000000, 0x00000002},
+ {0x59564854, 0x04000000, 0x00000001},
+ {0x59565141, 0x01000000, 0x00000002},
+ {0x59573241, 0x04000000, 0x00000001},
+ {0x59574443, 0x01000000, 0x00000001},
+ {0x59574C41, 0x02000000, 0x00000001},
+ {0x59574D42, 0x04000000, 0x00000002},
+ {0x59594159, 0x02000000, 0x00000001},
+ {0x59594254, 0x04000000, 0x00000002},
+ {0x59594442, 0x08000000, 0x00000002},
+ {0x59594E42, 0x04000000, 0x00000001},
+ {0x595A4341, 0x01000000, 0x00000001},
+ {0x595A4A59, 0x04000000, 0x00000005},
+ {0x595A5059, 0x01000000, 0x00000001},
+ {0x595A5242, 0x04000000, 0x00000003},
+ {0x595A5442, 0x04000000, 0x00000001},
+ {0x595A5443, 0x02000000, 0x00000003},
+ {0x5A325141, 0x02000000, 0x00000002},
+ {0x5A334941, 0x01000000, 0x00000002},
+ {0x5A335456, 0x04000000, 0x00000001},
+ {0x5A345741, 0x02000000, 0x00000002},
+ {0x5A353859, 0x00800000, 0x00000008},
+ {0x5A374943, 0x04000000, 0x00000002},
+ {0x5A414356, 0x04000000, 0x00000001},
+ {0x5A424259, 0x02000000, 0x00000001},
+ {0x5A445759, 0x01000000, 0x00000002},
+ {0x5A454259, 0x08000000, 0x00000003},
+ {0x5A475956, 0x04000000, 0x00000001},
+ {0x5A4A3642, 0x00800000, 0x00000001},
+ {0x5A4A3959, 0x00800000, 0x00000008},
+ {0x5A4C4E59, 0x04000000, 0x00000001},
+ {0x5A4C5759, 0x02000000, 0x00000001},
+ {0x5A4C5959, 0x04000000, 0x00000002},
+ {0x5A4D4842, 0x02000000, 0x00000001},
+ {0x5A4F3959, 0x00800000, 0x00000000},
+ {0x5A513642, 0x00800000, 0x00000001},
+ {0x5A523642, 0x08000000, 0x00000002},
+ {0x5A544D59, 0x02000000, 0x00000002},
+ {0x5A545054, 0x08000000, 0x00000001},
+ {0x5A554242, 0x04000000, 0x00000003},
+ {0x5A565141, 0x01000000, 0x00000002},
+ {0x5A574C41, 0x02000000, 0x00000001},
+ {0x5A595543, 0x02000000, 0x00000001},
+ {0x5A5A4254, 0x04000000, 0x00000002},
+ {0x5A5A4341, 0x01000000, 0x00000001},
+ {0x5A5A5242, 0x04000000, 0x00000003},
+};
+
+#endif // ROMLIST_H
diff --git a/src/SPI.cpp b/src/SPI.cpp
index 1a5873e..ac40707 100644
--- a/src/SPI.cpp
+++ b/src/SPI.cpp
@@ -22,12 +22,14 @@
#include "Config.h"
#include "NDS.h"
#include "SPI.h"
+#include "DSi_SPI_TSC.h"
#include "Platform.h"
namespace SPI_Firmware
{
+char FirmwarePath[1024];
u8* Firmware;
u32 FirmwareLength;
u32 FirmwareMask;
@@ -76,6 +78,7 @@ bool VerifyCRC16(u32 start, u32 offset, u32 len, u32 crcoffset)
bool Init()
{
+ memset(FirmwarePath, 0, sizeof(FirmwarePath));
Firmware = NULL;
return true;
}
@@ -90,10 +93,15 @@ void Reset()
if (Firmware) delete[] Firmware;
Firmware = NULL;
- FILE* f = Platform::OpenLocalFile("firmware.bin", "rb");
+ if (NDS::ConsoleType == 1)
+ strncpy(FirmwarePath, Config::DSiFirmwarePath, 1023);
+ else
+ strncpy(FirmwarePath, Config::FirmwarePath, 1023);
+
+ FILE* f = Platform::OpenLocalFile(FirmwarePath, "rb");
if (!f)
{
- printf("firmware.bin not found\n");
+ printf("Firmware not found\n");
// TODO: generate default firmware
return;
@@ -129,7 +137,11 @@ void Reset()
fclose(f);
// take a backup
- const char* firmbkp = "firmware.bin.bak";
+ char firmbkp[1028];
+ int fplen = strlen(FirmwarePath);
+ strncpy(&firmbkp[0], FirmwarePath, fplen);
+ strncpy(&firmbkp[fplen], ".bak", 1028-fplen);
+ firmbkp[fplen+4] = '\0';
f = Platform::OpenLocalFile(firmbkp, "rb");
if (f) fclose(f);
else
@@ -151,6 +163,7 @@ void Reset()
UserSettings = userdata;
// fix touchscreen coords
+ #if 0
*(u16*)&Firmware[userdata+0x58] = 0;
*(u16*)&Firmware[userdata+0x5A] = 0;
Firmware[userdata+0x5C] = 0;
@@ -173,12 +186,12 @@ void Reset()
Firmware[0x39] = rand()&0xFF;
Firmware[0x3A] = rand()&0xFF;
Firmware[0x3B] = rand()&0xFF;
-
+#endif
printf("MAC: %02X:%02X:%02X:%02X:%02X:%02X\n",
Firmware[0x36], Firmware[0x37], Firmware[0x38],
Firmware[0x39], Firmware[0x3A], Firmware[0x3B]);
- *(u16*)&Firmware[0x2A] = CRC16(&Firmware[0x2C], *(u16*)&Firmware[0x2C], 0x0000);
+ //*(u16*)&Firmware[0x2A] = CRC16(&Firmware[0x2C], *(u16*)&Firmware[0x2C], 0x0000);
// verify shit
printf("FW: WIFI CRC16 = %s\n", VerifyCRC16(0x0000, 0x2C, *(u16*)&Firmware[0x2C], 0x2A)?"GOOD":"BAD");
@@ -225,6 +238,7 @@ void SetupDirectBoot()
u8 GetConsoleType() { return Firmware[0x1D]; }
u8 GetWifiVersion() { return Firmware[0x2F]; }
u8 GetRFVersion() { return Firmware[0x40]; }
+u8* GetWifiMAC() { return &Firmware[0x36]; }
u8 Read()
{
@@ -325,7 +339,7 @@ void Write(u8 val, u32 hold)
if (!hold && (CurCmd == 0x02 || CurCmd == 0x0A))
{
- FILE* f = Platform::OpenLocalFile("firmware.bin", "r+b");
+ FILE* f = Platform::OpenLocalFile(FirmwarePath, "r+b");
if (f)
{
u32 cutoff = 0x7FA00 & FirmwareMask;
@@ -581,7 +595,7 @@ namespace SPI
u16 Cnt;
-u32 CurDevice;
+u32 CurDevice; // remove me
bool Init()
@@ -589,6 +603,7 @@ bool Init()
if (!SPI_Firmware::Init()) return false;
if (!SPI_Powerman::Init()) return false;
if (!SPI_TSC::Init()) return false;
+ if (!DSi_SPI_TSC::Init()) return false;
return true;
}
@@ -598,6 +613,7 @@ void DeInit()
SPI_Firmware::DeInit();
SPI_Powerman::DeInit();
SPI_TSC::DeInit();
+ DSi_SPI_TSC::DeInit();
}
void Reset()
@@ -607,6 +623,7 @@ void Reset()
SPI_Firmware::Reset();
SPI_Powerman::Reset();
SPI_TSC::Reset();
+ if (NDS::ConsoleType == 1) DSi_SPI_TSC::Reset();
}
void DoSavestate(Savestate* file)
@@ -619,6 +636,7 @@ void DoSavestate(Savestate* file)
SPI_Firmware::DoSavestate(file);
SPI_Powerman::DoSavestate(file);
SPI_TSC::DoSavestate(file);
+ if (NDS::ConsoleType == 1) DSi_SPI_TSC::DoSavestate(file);
}
@@ -632,7 +650,12 @@ void WriteCnt(u16 val)
{
case 0x0000: SPI_Powerman::Hold = 0; break;
case 0x0100: SPI_Firmware::Hold = 0; break;
- case 0x0200: SPI_TSC::DataPos = 0; break;
+ case 0x0200:
+ if (NDS::ConsoleType == 1)
+ DSi_SPI_TSC::DataPos = 0;
+ else
+ SPI_TSC::DataPos = 0;
+ break;
}
}
@@ -658,7 +681,11 @@ u8 ReadData()
{
case 0x0000: return SPI_Powerman::Read();
case 0x0100: return SPI_Firmware::Read();
- case 0x0200: return SPI_TSC::Read();
+ case 0x0200:
+ if (NDS::ConsoleType == 1)
+ return DSi_SPI_TSC::Read();
+ else
+ return SPI_TSC::Read();
default: return 0;
}
}
@@ -674,7 +701,12 @@ void WriteData(u8 val)
{
case 0x0000: SPI_Powerman::Write(val, Cnt&(1<<11)); break;
case 0x0100: SPI_Firmware::Write(val, Cnt&(1<<11)); break;
- case 0x0200: SPI_TSC::Write(val, Cnt&(1<<11)); break;
+ case 0x0200:
+ if (NDS::ConsoleType == 1)
+ DSi_SPI_TSC::Write(val, Cnt&(1<<11));
+ else
+ SPI_TSC::Write(val, Cnt&(1<<11));
+ break;
default: printf("SPI to unknown device %04X %02X\n", Cnt, val); break;
}
diff --git a/src/SPI.h b/src/SPI.h
index 086de1a..21734c4 100644
--- a/src/SPI.h
+++ b/src/SPI.h
@@ -29,6 +29,7 @@ void SetupDirectBoot();
u8 GetConsoleType();
u8 GetWifiVersion();
u8 GetRFVersion();
+u8* GetWifiMAC();
}
@@ -38,6 +39,9 @@ namespace SPI_TSC
void SetTouchCoords(u16 x, u16 y);
void MicInputFrame(s16* data, int samples);
+u8 Read();
+void Write(u8 val, u32 hold);
+
}
namespace SPI
@@ -50,7 +54,6 @@ void DeInit();
void Reset();
void DoSavestate(Savestate* file);
-u16 ReadCnt();
void WriteCnt(u16 val);
u8 ReadData();
diff --git a/src/SPU.cpp b/src/SPU.cpp
index 710533e..9f6b107 100644
--- a/src/SPU.cpp
+++ b/src/SPU.cpp
@@ -19,6 +19,7 @@
#include <stdio.h>
#include <string.h>
#include "NDS.h"
+#include "DSi.h"
#include "SPU.h"
@@ -116,6 +117,9 @@ void Reset()
void Stop()
{
memset(OutputBuffer, 0, 2*OutputBufferSize*2);
+
+ OutputReadOffset = 0;
+ OutputWriteOffset = 0;
}
void DoSavestate(Savestate* file)
@@ -151,6 +155,11 @@ Channel::~Channel()
void Channel::Reset()
{
+ if (NDS::ConsoleType == 1)
+ BusRead32 = DSi::ARM7Read32;
+ else
+ BusRead32 = NDS::ARM7Read32;
+
SetCnt(0);
SrcAddr = 0;
TimerReload = 0;
@@ -213,7 +222,7 @@ void Channel::FIFO_BufferData()
for (u32 i = 0; i < burstlen; i += 4)
{
- FIFO[FIFOWritePos] = NDS::ARM7Read32(SrcAddr + FIFOReadOffset);
+ FIFO[FIFOWritePos] = BusRead32(SrcAddr + FIFOReadOffset);
FIFOReadOffset += 4;
FIFOWritePos++;
FIFOWritePos &= 0x7;
@@ -461,6 +470,11 @@ CaptureUnit::~CaptureUnit()
void CaptureUnit::Reset()
{
+ if (NDS::ConsoleType == 1)
+ BusWrite32 = DSi::ARM7Write32;
+ else
+ BusWrite32 = NDS::ARM7Write32;
+
SetCnt(0);
DstAddr = 0;
TimerReload = 0;
@@ -496,7 +510,7 @@ void CaptureUnit::FIFO_FlushData()
{
for (u32 i = 0; i < 4; i++)
{
- NDS::ARM7Write32(DstAddr + FIFOWriteOffset, FIFO[FIFOReadPos]);
+ BusWrite32(DstAddr + FIFOWriteOffset, FIFO[FIFOReadPos]);
FIFOReadPos++;
FIFOReadPos &= 0x3;
diff --git a/src/SPU.h b/src/SPU.h
index 74a4471..8ab17a0 100644
--- a/src/SPU.h
+++ b/src/SPU.h
@@ -142,6 +142,9 @@ public:
}
void PanOutput(s32* inbuf, u32 samples, s32* leftbuf, s32* rightbuf);
+
+private:
+ u32 (*BusRead32)(u32 addr);
};
class CaptureUnit
@@ -196,6 +199,9 @@ public:
}
void Run(s32 sample);
+
+private:
+ void (*BusWrite32)(u32 addr, u32 val);
};
}
diff --git a/src/frontend/FrontendUtil.h b/src/frontend/FrontendUtil.h
index 32f28d1..099583f 100644
--- a/src/frontend/FrontendUtil.h
+++ b/src/frontend/FrontendUtil.h
@@ -32,6 +32,33 @@ enum
ROMSlot_MAX
};
+enum
+{
+ Load_OK = 0,
+
+ Load_BIOS9Missing,
+ Load_BIOS9Bad,
+
+ Load_BIOS7Missing,
+ Load_BIOS7Bad,
+
+ Load_FirmwareMissing,
+ Load_FirmwareBad,
+ Load_FirmwareNotBootable,
+
+ Load_DSiBIOS9Missing,
+ Load_DSiBIOS9Bad,
+
+ Load_DSiBIOS7Missing,
+ Load_DSiBIOS7Bad,
+
+ Load_DSiNANDMissing,
+ Load_DSiNANDBad,
+
+ // TODO: more precise errors for ROM loading
+ Load_ROMLoadError,
+};
+
extern char ROMPath [ROMSlot_MAX][1024];
extern char SRAMPath[ROMSlot_MAX][1024];
extern bool SavestateLoaded;
@@ -41,11 +68,18 @@ extern bool SavestateLoaded;
void Init_ROM();
// load the BIOS/firmware and boot from it
-bool LoadBIOS();
+int LoadBIOS();
// load a ROM file to the specified cart slot
// note: loading a ROM to the NDS slot resets emulation
-bool LoadROM(const char* file, int slot);
+int LoadROM(const char* file, int slot);
+
+// unload the ROM loaded in the specified cart slot
+// simulating ejection of the cartridge
+void UnloadROM(int slot);
+
+// reset execution of the current ROM
+int Reset();
// get the filename associated with the given savestate slot (1-8)
void GetSavestateName(int slot, char* filename, int len);
@@ -64,6 +98,33 @@ bool SaveState(const char* filename);
void UndoStateLoad();
+// setup the display layout based on the provided display size and parameters
+// * screenWidth/screenHeight: size of the host display
+// * screenLayout: how the DS screens are laid out
+// 0 = natural (top screen above bottom screen always)
+// 1 = vertical
+// 2 = horizontal
+// * rotation: angle at which the DS screens are presented: 0/1/2/3 = 0/90/180/270
+// * sizing: how the display size is shared between the two screens
+// 0 = even (both screens get same size)
+// 1 = emphasize top screen (make top screen as big as possible, fit bottom screen in remaining space)
+// 2 = emphasize bottom screen
+// * screenGap: size of the gap between the two screens
+// * integerScale: force screens to be scaled up at integer scaling factors
+void SetupScreenLayout(int screenWidth, int screenHeight, int screenLayout, int rotation, int sizing, int screenGap, bool integerScale);
+
+// get a 2x3 transform matrix for each screen
+// note: the transform assumes an origin point at the top left of the display,
+// X going left and Y going down
+// for each screen the source coordinates should be (0,0) and (256,192)
+// 'top' and 'bot' should point each to an array of 6 floats
+void GetScreenTransforms(float* top, float* bot);
+
+// de-transform the provided host display coordinates to get coordinates
+// on the bottom screen
+void GetTouchCoords(int& x, int& y);
+
+
// initialize the audio utility
void Init_Audio(int outputfreq);
@@ -72,9 +133,20 @@ void Init_Audio(int outputfreq);
int AudioOut_GetNumSamples(int outlen);
// resample audio from the core audio output to match the frontend's
-// output frequency, and apply user-specified volume
+// output frequency, and apply specified volume
// note: this assumes the output buffer is interleaved stereo
-void AudioOut_Resample(s16* inbuf, int inlen, s16* outbuf, int outlen);
+void AudioOut_Resample(s16* inbuf, int inlen, s16* outbuf, int outlen, int volume);
+
+// feed silence to the microphone input
+void Mic_FeedSilence();
+
+// feed random noise to the microphone input
+void Mic_FeedNoise();
+
+// feed an external buffer to the microphone input
+// buffer should be mono
+void Mic_FeedExternalBuffer();
+void Mic_SetExternalBuffer(s16* buffer, u32 len);
}
diff --git a/src/frontend/Util_Audio.cpp b/src/frontend/Util_Audio.cpp
index fe0ecab..fc80c90 100644
--- a/src/frontend/Util_Audio.cpp
+++ b/src/frontend/Util_Audio.cpp
@@ -17,16 +17,15 @@
*/
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "FrontendUtil.h"
-#include "Config.h"
-#include "qt_sdl/PlatformConfig.h" // FIXME!!!
-#include "Platform.h"
#include "NDS.h"
-#include "GBACart.h"
+
+#include "mic_blow.h"
namespace Frontend
@@ -35,13 +34,22 @@ namespace Frontend
int AudioOut_Freq;
float AudioOut_SampleFrac;
+s16* MicBuffer;
+u32 MicBufferLength;
+u32 MicBufferReadPos;
+
void Init_Audio(int outputfreq)
{
AudioOut_Freq = outputfreq;
AudioOut_SampleFrac = 0;
+
+ MicBuffer = nullptr;
+ MicBufferLength = 0;
+ MicBufferReadPos = 0;
}
+
int AudioOut_GetNumSamples(int outlen)
{
float f_len_in = (outlen * 32823.6328125) / (float)AudioOut_Freq;
@@ -52,14 +60,12 @@ int AudioOut_GetNumSamples(int outlen)
return len_in;
}
-void AudioOut_Resample(s16* inbuf, int inlen, s16* outbuf, int outlen)
+void AudioOut_Resample(s16* inbuf, int inlen, s16* outbuf, int outlen, int volume)
{
float res_incr = inlen / (float)outlen;
float res_timer = 0;
int res_pos = 0;
- int volume = Config::AudioVolume;
-
for (int i = 0; i < outlen; i++)
{
outbuf[i*2 ] = (inbuf[res_pos*2 ] * volume) >> 8;
@@ -74,4 +80,56 @@ void AudioOut_Resample(s16* inbuf, int inlen, s16* outbuf, int outlen)
}
}
+
+void Mic_FeedSilence()
+{
+ MicBufferReadPos = 0;
+ NDS::MicInputFrame(NULL, 0);
+}
+
+void Mic_FeedNoise()
+{
+ int sample_len = sizeof(mic_blow) / sizeof(u16);
+ static int sample_pos = 0;
+
+ s16 tmp[735];
+
+ for (int i = 0; i < 735; i++)
+ {
+ tmp[i] = mic_blow[sample_pos];
+ sample_pos++;
+ if (sample_pos >= sample_len) sample_pos = 0;
+ }
+
+ NDS::MicInputFrame(tmp, 735);
+}
+
+void Mic_FeedExternalBuffer()
+{
+ if (!MicBuffer) return Mic_FeedSilence();
+
+ if ((MicBufferReadPos + 735) > MicBufferLength)
+ {
+ s16 tmp[735];
+ u32 len1 = MicBufferLength - MicBufferReadPos;
+ memcpy(&tmp[0], &MicBuffer[MicBufferReadPos], len1*sizeof(s16));
+ memcpy(&tmp[len1], &MicBuffer[0], (735 - len1)*sizeof(s16));
+
+ NDS::MicInputFrame(tmp, 735);
+ MicBufferReadPos = 735 - len1;
+ }
+ else
+ {
+ NDS::MicInputFrame(&MicBuffer[MicBufferReadPos], 735);
+ MicBufferReadPos += 735;
+ }
+}
+
+void Mic_SetExternalBuffer(s16* buffer, u32 len)
+{
+ MicBuffer = buffer;
+ MicBufferLength = len;
+ MicBufferReadPos = 0;
+}
+
}
diff --git a/src/frontend/Util_ROM.cpp b/src/frontend/Util_ROM.cpp
index 19c8eb9..8116a93 100644
--- a/src/frontend/Util_ROM.cpp
+++ b/src/frontend/Util_ROM.cpp
@@ -50,6 +50,11 @@ void Init_ROM()
memset(PrevSRAMPath[ROMSlot_GBA], 0, 1024);
}
+// TODO: currently, when failing to load a ROM for whatever reason, we attempt
+// to revert to the previous state and resume execution; this may not be a very
+// good thing, depending on what state the core was left in.
+// should we do a better state revert (via the savestate system)? completely stop?
+
void SetupSRAMPath(int slot)
{
strncpy(SRAMPath[slot], ROMPath[slot], 1023);
@@ -57,8 +62,166 @@ void SetupSRAMPath(int slot)
strncpy(SRAMPath[slot] + strlen(ROMPath[slot]) - 3, "sav", 3);
}
-bool LoadBIOS()
+int VerifyDSBIOS()
+{
+ FILE* f;
+ long len;
+
+ f = Platform::OpenLocalFile(Config::BIOS9Path, "rb");
+ if (!f) return Load_BIOS9Missing;
+
+ fseek(f, 0, SEEK_END);
+ len = ftell(f);
+ if (len != 0x1000)
+ {
+ fclose(f);
+ return Load_BIOS9Bad;
+ }
+
+ fclose(f);
+
+ f = Platform::OpenLocalFile(Config::BIOS7Path, "rb");
+ if (!f) return Load_BIOS7Missing;
+
+ fseek(f, 0, SEEK_END);
+ len = ftell(f);
+ if (len != 0x4000)
+ {
+ fclose(f);
+ return Load_BIOS7Bad;
+ }
+
+ fclose(f);
+
+ return Load_OK;
+}
+
+int VerifyDSiBIOS()
+{
+ FILE* f;
+ long len;
+
+ // TODO: check the first 32 bytes
+
+ f = Platform::OpenLocalFile(Config::DSiBIOS9Path, "rb");
+ if (!f) return Load_DSiBIOS9Missing;
+
+ fseek(f, 0, SEEK_END);
+ len = ftell(f);
+ if (len != 0x10000)
+ {
+ fclose(f);
+ return Load_DSiBIOS9Bad;
+ }
+
+ fclose(f);
+
+ f = Platform::OpenLocalFile(Config::DSiBIOS7Path, "rb");
+ if (!f) return Load_DSiBIOS7Missing;
+
+ fseek(f, 0, SEEK_END);
+ len = ftell(f);
+ if (len != 0x10000)
+ {
+ fclose(f);
+ return Load_DSiBIOS7Bad;
+ }
+
+ fclose(f);
+
+ return Load_OK;
+}
+
+int VerifyDSFirmware()
+{
+ FILE* f;
+ long len;
+
+ f = Platform::OpenLocalFile(Config::FirmwarePath, "rb");
+ if (!f) return Load_FirmwareMissing;
+
+ fseek(f, 0, SEEK_END);
+ len = ftell(f);
+ if (len == 0x20000)
+ {
+ // 128KB firmware, not bootable
+ fclose(f);
+ return Load_FirmwareNotBootable;
+ }
+ else if (len != 0x40000 && len != 0x80000)
+ {
+ fclose(f);
+ return Load_FirmwareBad;
+ }
+
+ fclose(f);
+
+ return Load_OK;
+}
+
+int VerifyDSiFirmware()
{
+ FILE* f;
+ long len;
+
+ f = Platform::OpenLocalFile(Config::DSiFirmwarePath, "rb");
+ if (!f) return Load_FirmwareMissing;
+
+ fseek(f, 0, SEEK_END);
+ len = ftell(f);
+ if (len != 0x20000)
+ {
+ // not 128KB
+ // TODO: check whether those work
+ fclose(f);
+ return Load_FirmwareBad;
+ }
+
+ fclose(f);
+
+ return Load_OK;
+}
+
+int VerifyDSiNAND()
+{
+ FILE* f;
+ long len;
+
+ f = Platform::OpenLocalFile(Config::DSiNANDPath, "rb");
+ if (!f) return Load_DSiNANDMissing;
+
+ // TODO: some basic checks
+ // check that it has the nocash footer, and all
+
+ fclose(f);
+
+ return Load_OK;
+}
+
+int LoadBIOS()
+{
+ int res;
+
+ res = VerifyDSBIOS();
+ if (res != Load_OK) return res;
+
+ if (Config::ConsoleType == 1)
+ {
+ res = VerifyDSiBIOS();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiFirmware();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiNAND();
+ if (res != Load_OK) return res;
+ }
+ else
+ {
+ res = VerifyDSFirmware();
+ if (res != Load_OK) return res;
+ }
+
// TODO:
// original code in the libui frontend called NDS::LoadGBAROM() if needed
// should this be carried over here?
@@ -67,16 +230,54 @@ bool LoadBIOS()
ROMPath[ROMSlot_NDS][0] = '\0';
SRAMPath[ROMSlot_NDS][0] = '\0';
+ NDS::SetConsoleType(Config::ConsoleType);
NDS::LoadBIOS();
SavestateLoaded = false;
- // TODO: error reporting?
- return true;
+ return Load_OK;
}
-bool LoadROM(const char* file, int slot)
+int LoadROM(const char* file, int slot)
{
+ int res;
+ bool directboot = Config::DirectBoot != 0;
+
+ if (Config::ConsoleType == 1 && slot == 1)
+ {
+ // cannot load a GBA ROM into a DSi
+ return Load_ROMLoadError;
+ }
+
+ res = VerifyDSBIOS();
+ if (res != Load_OK) return res;
+
+ if (Config::ConsoleType == 1)
+ {
+ res = VerifyDSiBIOS();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiFirmware();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiNAND();
+ if (res != Load_OK) return res;
+
+ GBACart::Eject();
+ ROMPath[ROMSlot_GBA][0] = '\0';
+ }
+ else
+ {
+ res = VerifyDSFirmware();
+ if (res != Load_OK)
+ {
+ if (res == Load_FirmwareNotBootable)
+ directboot = true;
+ else
+ return res;
+ }
+ }
+
char oldpath[1024];
char oldsram[1024];
strncpy(oldpath, ROMPath[slot], 1024);
@@ -88,29 +289,105 @@ bool LoadROM(const char* file, int slot)
SetupSRAMPath(0);
SetupSRAMPath(1);
- if (slot == ROMSlot_NDS && NDS::LoadROM(ROMPath[slot], SRAMPath[slot], Config::DirectBoot))
+ NDS::SetConsoleType(Config::ConsoleType);
+
+ if (slot == ROMSlot_NDS && NDS::LoadROM(ROMPath[slot], SRAMPath[slot], directboot))
{
SavestateLoaded = false;
// Reload the inserted GBA cartridge (if any)
+ // TODO: report failure there??
if (ROMPath[ROMSlot_GBA][0] != '\0') NDS::LoadGBAROM(ROMPath[ROMSlot_GBA], SRAMPath[ROMSlot_GBA]);
strncpy(PrevSRAMPath[slot], SRAMPath[slot], 1024); // safety
- return true;
+ return Load_OK;
}
else if (slot == ROMSlot_GBA && NDS::LoadGBAROM(ROMPath[slot], SRAMPath[slot]))
{
- SavestateLoaded = false;
+ SavestateLoaded = false; // checkme??
strncpy(PrevSRAMPath[slot], SRAMPath[slot], 1024); // safety
- return true;
+ return Load_OK;
}
else
{
strncpy(ROMPath[slot], oldpath, 1024);
strncpy(SRAMPath[slot], oldsram, 1024);
- return false;
+ return Load_ROMLoadError;
+ }
+}
+
+void UnloadROM(int slot)
+{
+ if (slot == ROMSlot_NDS)
+ {
+ // TODO!
+ }
+ else if (slot == ROMSlot_GBA)
+ {
+ GBACart::Eject();
}
+
+ ROMPath[slot][0] = '\0';
+}
+
+int Reset()
+{
+ int res;
+ bool directboot = Config::DirectBoot != 0;
+
+ res = VerifyDSBIOS();
+ if (res != Load_OK) return res;
+
+ if (Config::ConsoleType == 1)
+ {
+ res = VerifyDSiBIOS();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiFirmware();
+ if (res != Load_OK) return res;
+
+ res = VerifyDSiNAND();
+ if (res != Load_OK) return res;
+
+ GBACart::Eject();
+ ROMPath[ROMSlot_GBA][0] = '\0';
+ }
+ else
+ {
+ res = VerifyDSFirmware();
+ if (res != Load_OK)
+ {
+ if (res == Load_FirmwareNotBootable)
+ directboot = true;
+ else
+ return res;
+ }
+ }
+
+ SavestateLoaded = false;
+
+ NDS::SetConsoleType(Config::ConsoleType);
+
+ if (ROMPath[ROMSlot_NDS][0] == '\0')
+ {
+ NDS::LoadBIOS();
+ }
+ else
+ {
+ SetupSRAMPath(0);
+ if (!NDS::LoadROM(ROMPath[ROMSlot_NDS], SRAMPath[ROMSlot_NDS], directboot))
+ return Load_ROMLoadError;
+ }
+
+ if (ROMPath[ROMSlot_GBA][0] != '\0')
+ {
+ SetupSRAMPath(1);
+ if (!NDS::LoadGBAROM(ROMPath[ROMSlot_GBA], SRAMPath[ROMSlot_GBA]))
+ return Load_ROMLoadError;
+ }
+
+ return Load_OK;
}
@@ -241,10 +518,6 @@ bool SaveState(const char* filename)
}
}
- /*char msg[64];
- if (slot > 0) sprintf(msg, "State saved to slot %d", slot);
- else sprintf(msg, "State saved to file");
- OSD::AddMessage(0, msg);*/
return true;
}
@@ -264,8 +537,6 @@ void UndoStateLoad()
strncpy(SRAMPath[ROMSlot_NDS], PrevSRAMPath[ROMSlot_NDS], 1024);
NDS::RelocateSave(SRAMPath[ROMSlot_NDS], false);
}
-
- //OSD::AddMessage(0, "State load undone");
}
}
diff --git a/src/frontend/Util_Video.cpp b/src/frontend/Util_Video.cpp
new file mode 100644
index 0000000..87cb9b5
--- /dev/null
+++ b/src/frontend/Util_Video.cpp
@@ -0,0 +1,334 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <cmath>
+#include <algorithm>
+
+#include "FrontendUtil.h"
+
+
+namespace Frontend
+{
+
+float TopScreenMtx[6];
+float BotScreenMtx[6];
+float TouchMtx[6];
+
+
+void M23_Identity(float* m)
+{
+ m[0] = 1; m[1] = 0;
+ m[2] = 0; m[3] = 1;
+ m[4] = 0; m[5] = 0;
+}
+
+void M23_Scale(float* m, float s)
+{
+ m[0] *= s; m[1] *= s;
+ m[2] *= s; m[3] *= s;
+ m[4] *= s; m[5] *= s;
+}
+
+void M23_RotateFast(float* m, int angle)
+{
+ if (angle == 0) return;
+
+ float temp[4]; memcpy(temp, m, sizeof(float)*4);
+
+ switch (angle)
+ {
+ case 1: // 90
+ m[0] = temp[2];
+ m[1] = temp[3];
+ m[2] = -temp[0];
+ m[3] = -temp[1];
+ break;
+
+ case 2: // 180
+ m[0] = -temp[0];
+ m[1] = -temp[1];
+ m[2] = -temp[2];
+ m[3] = -temp[3];
+ break;
+
+ case 3: // 270
+ m[0] = -temp[2];
+ m[1] = -temp[3];
+ m[2] = temp[0];
+ m[3] = temp[1];
+ break;
+ }
+}
+
+void M23_Translate(float* m, float tx, float ty)
+{
+ m[4] += tx;
+ m[5] += ty;
+}
+
+void M23_Multiply(float* m, float* _a, float* _b)
+{
+ float a[6]; memcpy(a, _a, 6*sizeof(float));
+ float b[6]; memcpy(b, _b, 6*sizeof(float));
+
+ m[0] = (a[0] * b[0]) + (a[2] * b[1]);
+ m[1] = (a[1] * b[0]) + (a[3] * b[1]);
+
+ m[2] = (a[0] * b[2]) + (a[2] * b[3]);
+ m[3] = (a[1] * b[2]) + (a[3] * b[3]);
+
+ m[4] = (a[0] * b[4]) + (a[2] * b[5]) + a[4];
+ m[5] = (a[1] * b[4]) + (a[3] * b[5]) + a[5];
+}
+
+void M23_Transform(float* m, float& x, float& y)
+{
+ float vx = x;
+ float vy = y;
+
+ x = (vx * m[0]) + (vy * m[2]) + m[4];
+ y = (vx * m[1]) + (vy * m[3]) + m[5];
+}
+
+
+void SetupScreenLayout(int screenWidth, int screenHeight, int screenLayout, int rotation, int sizing, int screenGap, bool integerScale)
+{
+ float refpoints[4][2] =
+ {
+ {0, 0}, {256, 192},
+ {0, 0}, {256, 192}
+ };
+
+ int layout = screenLayout == 0
+ ? ((rotation % 2 == 0) ? 0 : 1)
+ : screenLayout - 1;
+
+ float botScale = 1;
+ float botTrans[4] = {0};
+
+ M23_Identity(TopScreenMtx);
+ M23_Identity(BotScreenMtx);
+
+ M23_Translate(TopScreenMtx, -256/2, -192/2);
+ M23_Translate(BotScreenMtx, -256/2, -192/2);
+
+ // rotation
+ {
+ float rotmtx[6];
+ M23_Identity(rotmtx);
+
+ M23_RotateFast(rotmtx, rotation);
+ M23_Multiply(TopScreenMtx, rotmtx, TopScreenMtx);
+ M23_Multiply(BotScreenMtx, rotmtx, BotScreenMtx);
+
+ M23_Transform(TopScreenMtx, refpoints[0][0], refpoints[0][1]);
+ M23_Transform(TopScreenMtx, refpoints[1][0], refpoints[1][1]);
+ M23_Transform(BotScreenMtx, refpoints[2][0], refpoints[2][1]);
+ M23_Transform(BotScreenMtx, refpoints[3][0], refpoints[3][1]);
+ }
+
+ // move screens apart
+ {
+ int idx = layout == 0 ? 1 : 0;
+ float offset =
+ (((layout == 0 && (rotation % 2 == 0)) || (layout == 1 && (rotation % 2 == 1))
+ ? 192.f : 256.f)
+ + screenGap) / 2.f;
+ if (rotation == 1 || rotation == 2)
+ offset *= -1.f;
+
+ M23_Translate(TopScreenMtx, (idx==0)?-offset:0, (idx==1)?-offset:0);
+ M23_Translate(BotScreenMtx, (idx==0)?offset:0, (idx==1)?offset:0);
+
+ refpoints[0][idx] -= offset;
+ refpoints[1][idx] -= offset;
+ refpoints[2][idx] += offset;
+ refpoints[3][idx] += offset;
+
+ botTrans[idx] = offset;
+ }
+
+ // scale
+ {
+ if (sizing == 0)
+ {
+ float minX = refpoints[0][0], maxX = minX;
+ float minY = refpoints[0][1], maxY = minY;
+
+ for (int i = 1; i < 4; i++)
+ {
+ minX = std::min(minX, refpoints[i][0]);
+ minY = std::min(minY, refpoints[i][1]);
+ maxX = std::max(maxX, refpoints[i][0]);
+ maxY = std::max(maxY, refpoints[i][1]);
+ }
+
+ float hSize = maxX - minX;
+ float vSize = maxY - minY;
+
+ // scale evenly
+ float scale = std::min(screenWidth / hSize, screenHeight / vSize);
+
+ if (integerScale)
+ scale = floor(scale);
+
+ M23_Scale(TopScreenMtx, scale);
+ M23_Scale(BotScreenMtx, scale);
+
+ for (int i = 0; i < 4; i++)
+ {
+ refpoints[i][0] *= scale;
+ refpoints[i][1] *= scale;
+ }
+
+ botScale = scale;
+ }
+ else
+ {
+ int primOffset = (sizing == 1) ? 0 : 2;
+ int secOffset = (sizing == 1) ? 2 : 0;
+ float* primMtx = (sizing == 1) ? TopScreenMtx : BotScreenMtx;
+ float* secMtx = (sizing == 1) ? BotScreenMtx : TopScreenMtx;
+
+ float primMinX = refpoints[primOffset][0], primMaxX = primMinX;
+ float primMinY = refpoints[primOffset][1], primMaxY = primMinY;
+ float secMinX = refpoints[secOffset][0], secMaxX = secMinX;
+ float secMinY = refpoints[secOffset][1], secMaxY = secMinY;
+
+ primMinX = std::min(primMinX, refpoints[primOffset+1][0]);
+ primMinY = std::min(primMinY, refpoints[primOffset+1][1]);
+ primMaxX = std::max(primMaxX, refpoints[primOffset+1][0]);
+ primMaxY = std::max(primMaxY, refpoints[primOffset+1][1]);
+
+ secMinX = std::min(secMinX, refpoints[secOffset+1][0]);
+ secMinY = std::min(secMinY, refpoints[secOffset+1][1]);
+ secMaxX = std::max(secMaxX, refpoints[secOffset+1][0]);
+ secMaxY = std::max(secMaxY, refpoints[secOffset+1][1]);
+
+ float primHSize = layout == 1 ? std::max(primMaxX, -primMinX) : primMaxX - primMinX;
+ float primVSize = layout == 0 ? std::max(primMaxY, -primMinY) : primMaxY - primMinY;
+
+ float secHSize = layout == 1 ? std::max(secMaxX, -secMinX) : secMaxX - secMinX;
+ float secVSize = layout == 0 ? std::max(secMaxY, -secMinY) : secMaxY - secMinY;
+
+ float primScale = std::min(screenWidth / primHSize, screenHeight / primVSize);
+ float secScale = 1.f;
+
+ if (layout == 0)
+ {
+ if (screenHeight - primVSize * primScale < secVSize)
+ primScale = std::min(screenWidth / primHSize, (screenHeight - secVSize) / primVSize);
+ else
+ secScale = std::min((screenHeight - primVSize * primScale) / secVSize, screenWidth / secHSize);
+ }
+ else
+ {
+ if (screenWidth - primHSize * primScale < secHSize)
+ primScale = std::min((screenWidth - secHSize) / primHSize, screenHeight / primVSize);
+ else
+ secScale = std::min((screenWidth - primHSize * primScale) / secHSize, screenHeight / secVSize);
+ }
+
+ if (integerScale)
+ {
+ primScale = floor(primScale);
+ secScale = floor(secScale);
+ }
+
+ M23_Scale(primMtx, primScale);
+ M23_Scale(secMtx, secScale);
+
+ refpoints[primOffset+0][0] *= primScale;
+ refpoints[primOffset+0][1] *= primScale;
+ refpoints[primOffset+1][0] *= primScale;
+ refpoints[primOffset+1][1] *= primScale;
+ refpoints[secOffset+0][0] *= secScale;
+ refpoints[secOffset+0][1] *= secScale;
+ refpoints[secOffset+1][0] *= secScale;
+ refpoints[secOffset+1][1] *= secScale;
+
+ botScale = (sizing == 1) ? secScale : primScale;
+ }
+ }
+
+ // position
+ {
+ float minX = refpoints[0][0], maxX = minX;
+ float minY = refpoints[0][1], maxY = minY;
+
+ for (int i = 1; i < 4; i++)
+ {
+ minX = std::min(minX, refpoints[i][0]);
+ minY = std::min(minY, refpoints[i][1]);
+ maxX = std::max(maxX, refpoints[i][0]);
+ maxY = std::max(maxY, refpoints[i][1]);
+ }
+
+ float width = maxX - minX;
+ float height = maxY - minY;
+
+ float tx = (screenWidth/2) - (width/2) - minX;
+ float ty = (screenHeight/2) - (height/2) - minY;
+
+ M23_Translate(TopScreenMtx, tx, ty);
+ M23_Translate(BotScreenMtx, tx, ty);
+
+ botTrans[2] = tx; botTrans[3] = ty;
+ }
+
+ // prepare a 'reverse' matrix for the touchscreen
+ // this matrix undoes the transforms applied to the bottom screen
+ // and can be used to calculate touchscreen coords from host screen coords
+ {
+ M23_Identity(TouchMtx);
+
+ M23_Translate(TouchMtx, -botTrans[2], -botTrans[3]);
+ M23_Scale(TouchMtx, 1.f / botScale);
+ M23_Translate(TouchMtx, -botTrans[0], -botTrans[1]);
+
+ float rotmtx[6];
+ M23_Identity(rotmtx);
+ M23_RotateFast(rotmtx, (4-rotation) & 3);
+ M23_Multiply(TouchMtx, rotmtx, TouchMtx);
+
+ M23_Translate(TouchMtx, 256/2, 192/2);
+ }
+}
+
+void GetScreenTransforms(float* top, float* bot)
+{
+ memcpy(top, TopScreenMtx, 6*sizeof(float));
+ memcpy(bot, BotScreenMtx, 6*sizeof(float));
+}
+
+void GetTouchCoords(int& x, int& y)
+{
+ float vx = x;
+ float vy = y;
+
+ M23_Transform(TouchMtx, vx, vy);
+
+ x = (int)vx;
+ y = (int)vy;
+}
+
+}
+
diff --git a/src/frontend/mic_blow.h b/src/frontend/mic_blow.h
new file mode 100644
index 0000000..cee92fe
--- /dev/null
+++ b/src/frontend/mic_blow.h
@@ -0,0 +1,5539 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef MIC_BLOW_H
+#define MIC_BLOW_H
+
+const u16 mic_blow[] =
+{
+ 0x1840, 0x1EF0, 0x24F0, 0x2A60, 0x2F60, 0x33F0, 0x3800, 0x3BC0, 0x3FB0, 0x43E0, 0x48A0, 0x4EC0, 0x5490, 0x5A30, 0x6040, 0x6490,
+ 0x6960, 0x6E40, 0x7220, 0x76B0, 0x79B0, 0x7CA0, 0x7E60, 0x7F00, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EC0, 0x7F30,
+ 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F30, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F50, 0x7EF0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F60, 0x7EE0, 0x7E90,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7EB0, 0x7F20,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F60, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F80, 0x7EB0, 0x7220, 0x66D0, 0x5BD0, 0x5190, 0x4680,
+ 0x3D70, 0x3470, 0x2C70, 0x2640, 0x2090, 0x1D00, 0x1A40, 0x1910, 0x1810, 0x17A0, 0x1860, 0x19C0, 0x1C10, 0x1F30, 0x22E0, 0x2930,
+ 0x2FA0, 0x3720, 0x3EC0, 0x46B0, 0x4E80, 0x5660, 0x5ED0, 0x6710, 0x7000, 0x7720, 0x7D10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7E80, 0x7D30, 0x7C00, 0x7AA0, 0x7890,
+ 0x7610, 0x73F0, 0x71A0, 0x6F60, 0x6CD0, 0x6970, 0x6670, 0x6310, 0x5F90, 0x5D10, 0x5A20, 0x5720, 0x5410, 0x4FB0, 0x4AC0, 0x4670,
+ 0x4250, 0x3E40, 0x39F0, 0x3540, 0x2FB0, 0x28E0, 0x2260, 0x1BB0, 0x15F0, 0x10B0, 0x0C60, 0x08B0, 0x05B0, 0x0300, 0x00F0, 0xFEB0,
+ 0xFC00, 0xF8E0, 0xF570, 0xF170, 0xED60, 0xE8E0, 0xE4C0, 0xDFF0, 0xDB90, 0xD650, 0xD090, 0xCAB0, 0xC570, 0xC0C0, 0xBD00, 0xBA30,
+ 0xB790, 0xB4C0, 0xB1B0, 0xAF40, 0xAD00, 0xAC10, 0xAB70, 0xAA70, 0xA9C0, 0xA800, 0xA640, 0xA520, 0xA420, 0xA2C0, 0xA1D0, 0xA000,
+ 0x9E60, 0x9CF0, 0x9B80, 0x9A10, 0x97F0, 0x9550, 0x9340, 0x9170, 0x8F80, 0x8DA0, 0x8C40, 0x8B10, 0x89E0, 0x8890, 0x87B0, 0x86F0,
+ 0x8660, 0x8640, 0x8600, 0x85F0, 0x85D0, 0x85B0, 0x8580, 0x8560, 0x8550, 0x8550, 0x8540, 0x8530, 0x8530, 0x8520, 0x8510, 0x8510,
+ 0x8500, 0x8500, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x8510, 0x84E0, 0x84E0, 0x8500, 0x84F0,
+ 0x84F0, 0x84C0, 0x84F0, 0x8500, 0x8500, 0x8510, 0x8520, 0x8530, 0x8550, 0x8580, 0x8590, 0x85D0, 0x8610, 0x8690, 0x8730, 0x8820,
+ 0x8970, 0x8BC0, 0x8E40, 0x9190, 0x9560, 0x9990, 0x9E30, 0xA1E0, 0xA540, 0xA890, 0xAAB0, 0xADB0, 0xB0E0, 0xB370, 0xB5E0, 0xB860,
+ 0xBB30, 0xBEB0, 0xC230, 0xC5E0, 0xC930, 0xCD20, 0xCFA0, 0xD130, 0xD310, 0xD530, 0xD8C0, 0xDC80, 0xE0D0, 0xE520, 0xE880, 0xEBF0,
+ 0xEEB0, 0xF160, 0xF460, 0xF6F0, 0xF970, 0xFBC0, 0xFE90, 0x0250, 0x04C0, 0x06E0, 0x0910, 0x0AB0, 0x0C90, 0x0DA0, 0x0F80, 0x1210,
+ 0x1400, 0x1550, 0x1680, 0x1770, 0x18A0, 0x1A10, 0x1C90, 0x1E80, 0x2060, 0x22B0, 0x2360, 0x2540, 0x2600, 0x26C0, 0x2920, 0x2B40,
+ 0x2D50, 0x2EF0, 0x30C0, 0x31D0, 0x3210, 0x3330, 0x33E0, 0x35C0, 0x36F0, 0x37D0, 0x38A0, 0x3990, 0x39F0, 0x39C0, 0x39C0, 0x3950,
+ 0x3820, 0x3730, 0x36A0, 0x3610, 0x35A0, 0x3490, 0x3270, 0x30B0, 0x2E20, 0x2C60, 0x2A90, 0x2890, 0x2760, 0x2490, 0x2330, 0x20C0,
+ 0x1F20, 0x1E10, 0x1D30, 0x1D70, 0x1D20, 0x1D10, 0x1E40, 0x1F00, 0x2010, 0x2110, 0x21B0, 0x23C0, 0x25E0, 0x2810, 0x2A20, 0x2C10,
+ 0x2DF0, 0x2E20, 0x2E60, 0x2F10, 0x2FB0, 0x30F0, 0x3200, 0x31F0, 0x31B0, 0x3070, 0x2F50, 0x2DC0, 0x2BD0, 0x29F0, 0x27C0, 0x2650,
+ 0x2470, 0x2290, 0x2090, 0x1DF0, 0x1B60, 0x18C0, 0x1670, 0x1490, 0x1220, 0x10E0, 0x0EA0, 0x0D60, 0x0C90, 0x0B10, 0x09B0, 0x0860,
+ 0x06C0, 0x0630, 0x0520, 0x0520, 0x04F0, 0x0430, 0x0340, 0x0180, 0x0150, 0x0100, 0xFFE0, 0x00A0, 0xFFC0, 0xFFF0, 0xFFF0, 0xFFF0,
+ 0x00B0, 0x00C0, 0x0150, 0x0190, 0x00D0, 0x0170, 0x01F0, 0x0330, 0x03F0, 0x0480, 0x0510, 0x0580, 0x0570, 0x05C0, 0x0630, 0x06E0,
+ 0x0810, 0x0910, 0x0A50, 0x0B20, 0x0BD0, 0x0CD0, 0x0E70, 0x1070, 0x1280, 0x1520, 0x17B0, 0x18F0, 0x2120, 0x2240, 0x2340, 0x23B0,
+ 0x2560, 0x2640, 0x27F0, 0x29F0, 0x2AB0, 0x2BC0, 0x2C50, 0x2CE0, 0x2E20, 0x2F50, 0x3150, 0x3360, 0x33E0, 0x3510, 0x3500, 0x3520,
+ 0x34F0, 0x33B0, 0x3320, 0x3200, 0x3210, 0x3150, 0x30E0, 0x3010, 0x2ED0, 0x2DE0, 0x2D20, 0x2AF0, 0x2A50, 0x28D0, 0x2760, 0x26C0,
+ 0x2560, 0x2540, 0x2460, 0x2350, 0x2290, 0x2170, 0x21A0, 0x2110, 0x2090, 0x2000, 0x1F50, 0x1F80, 0x1F40, 0x21A0, 0x21D0, 0x21B0,
+ 0x21E0, 0x21C0, 0x2260, 0x2370, 0x24F0, 0x2630, 0x2700, 0x2760, 0x2810, 0x2930, 0x2AE0, 0x2C40, 0x2D20, 0x2D80, 0x2DF0, 0x2F00,
+ 0x30A0, 0x31F0, 0x3510, 0x36B0, 0x3950, 0x3AB0, 0x3B70, 0x3DA0, 0x3F90, 0x4310, 0x4640, 0x4840, 0x4B10, 0x4D20, 0x4FE0, 0x5270,
+ 0x5590, 0x5900, 0x5C00, 0x5ED0, 0x6110, 0x63A0, 0x66F0, 0x69A0, 0x6CA0, 0x6F40, 0x7090, 0x7290, 0x7440, 0x75F0, 0x7800, 0x79C0,
+ 0x7BA0, 0x7C90, 0x7D90, 0x7E00, 0x7E70, 0x7ED0, 0x7EF0, 0x7F70, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EA0,
+ 0x7E40, 0x7C70, 0x7AA0, 0x7890, 0x76F0, 0x74E0, 0x71F0, 0x6EC0, 0x6A00, 0x6630, 0x61E0, 0x5D10, 0x5A30, 0x5560, 0x5160, 0x4D50,
+ 0x4990, 0x46E0, 0x4400, 0x4130, 0x3DE0, 0x3A00, 0x3790, 0x3480, 0x31E0, 0x2F80, 0x2CD0, 0x2B30, 0x27C0, 0x24D0, 0x2220, 0x2020,
+ 0x1F00, 0x1D10, 0x1B10, 0x1830, 0x1520, 0x12F0, 0x1160, 0x10A0, 0x0FC0, 0x0E30, 0x0BB0, 0x0900, 0x05F0, 0x0350, 0x00E0, 0xFF50,
+ 0xFD70, 0xFA30, 0xF600, 0xF1C0, 0xEE10, 0xEA30, 0xE5E0, 0xE1F0, 0xDDB0, 0xD8C0, 0xD3C0, 0xCE10, 0xC850, 0xC2C0, 0xBD40, 0xB720,
+ 0xAFF0, 0xA880, 0xA0D0, 0x99A0, 0x9250, 0x8C50, 0x88B0, 0x86A0, 0x85B0, 0x8540, 0x8510, 0x84F0, 0x84E0, 0x84D0, 0x84D0, 0x84C0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84F0, 0x84F0,
+ 0x84D0, 0x84D0, 0x8490, 0x84F0, 0x84F0, 0x8500, 0x8500, 0x8510, 0x8520, 0x8540, 0x8560, 0x8590, 0x85E0, 0x8630, 0x8680, 0x8700,
+ 0x87C0, 0x88C0, 0x89D0, 0x8BA0, 0x8DF0, 0x9050, 0x9320, 0x9620, 0x9930, 0x9BE0, 0x9E30, 0xA0F0, 0xA300, 0xA5B0, 0xA8C0, 0xABC0,
+ 0xAE30, 0xB140, 0xB3E0, 0xB660, 0xB7B0, 0xB990, 0xBB30, 0xBDC0, 0xBF70, 0xC0A0, 0xC200, 0xC310, 0xC410, 0xC5A0, 0xC710, 0xC7F0,
+ 0xC910, 0xC960, 0xCA30, 0xCA70, 0xCB70, 0xCB90, 0xCBF0, 0xCCB0, 0xCD00, 0xCE40, 0xCEA0, 0xCEF0, 0xD010, 0xD0F0, 0xD2F0, 0xD360,
+ 0xD470, 0xD570, 0xD660, 0xD740, 0xD7B0, 0xD820, 0xD820, 0xD880, 0xD810, 0xD910, 0xDA60, 0xDB80, 0xDC90, 0xDD20, 0xDD40, 0xDDA0,
+ 0xDE00, 0xDE90, 0xDF60, 0xDFD0, 0xE030, 0xE070, 0xE010, 0xE070, 0xE130, 0xE1F0, 0xE240, 0xE1C0, 0xE1A0, 0xE1C0, 0xE1C0, 0xE210,
+ 0xE270, 0xE1E0, 0xE1D0, 0xE1A0, 0xE0E0, 0xE0A0, 0xDFF0, 0xE010, 0xDFC0, 0xDF60, 0xDEB0, 0xDDB0, 0xDC70, 0xDC10, 0xDB70, 0xDA80,
+ 0xD990, 0xD8B0, 0xD790, 0xD7E0, 0xD860, 0xD800, 0xD7B0, 0xD650, 0xD580, 0xD470, 0xD3F0, 0xD380, 0xD3D0, 0xD3D0, 0xD300, 0xD1B0,
+ 0xD030, 0xCFA0, 0xCF60, 0xCF10, 0xCF30, 0xCEE0, 0xCEE0, 0xCEA0, 0xCEF0, 0xCEE0, 0xCF10, 0xCF80, 0xD030, 0xD0A0, 0xD150, 0xD230,
+ 0xD2A0, 0xD3E0, 0xD4F0, 0xD5E0, 0xD6C0, 0xD7C0, 0xD9C0, 0xDC50, 0xDDE0, 0xDF70, 0xDFD0, 0xDFF0, 0xDFB0, 0xE020, 0xE070, 0xE130,
+ 0xE280, 0xE3B0, 0xE480, 0xE530, 0xE500, 0xE4D0, 0xE3F0, 0xE370, 0xE270, 0xE1C0, 0xE110, 0xE170, 0xE240, 0xE2F0, 0xE310, 0xE260,
+ 0xE0C0, 0xDF00, 0xDCB0, 0xDB60, 0xDA20, 0xD950, 0xD730, 0xD550, 0xD290, 0xCE90, 0xCBB0, 0xC980, 0xC750, 0xC4E0, 0xC210, 0xBED0,
+ 0xBC10, 0xBA10, 0xB8A0, 0xB780, 0xB690, 0xB520, 0xB410, 0xB240, 0xB110, 0xB100, 0xB0D0, 0xB140, 0xB180, 0xB290, 0xB320, 0xB460,
+ 0xB680, 0xB8C0, 0xBB70, 0xBCE0, 0xBF30, 0xC140, 0xC3D0, 0xC750, 0xCA50, 0xCD20, 0xCFA0, 0xD1A0, 0xD370, 0xD530, 0xD710, 0xD930,
+ 0xDB50, 0xDCA0, 0xDD30, 0xDCF0, 0xDD00, 0xDDF0, 0xDE50, 0xDDB0, 0xDC70, 0xD9E0, 0xD660, 0xD250, 0xCDB0, 0xC8D0, 0xC410, 0xBE00,
+ 0xB810, 0xB180, 0xAB00, 0xA410, 0x9DB0, 0x9650, 0x8FB0, 0x8AE0, 0x87D0, 0x8670, 0x85D0, 0x8590, 0x8580, 0x8580, 0x85A0, 0x85D0,
+ 0x8640, 0x8730, 0x8950, 0x8E80, 0x9630, 0x9E10, 0xA5B0, 0xAD40, 0xB370, 0xB8D0, 0xBE30, 0xC2E0, 0xC740, 0xCBF0, 0xD040, 0xD470,
+ 0xDA20, 0xDEE0, 0xE3C0, 0xE770, 0xEA30, 0xED30, 0xEFC0, 0xF250, 0xF480, 0xF720, 0xF9F0, 0xFC00, 0xFE60, 0x0060, 0x0210, 0x03B0,
+ 0x04E0, 0x0600, 0x0790, 0x07B0, 0x08A0, 0x08E0, 0x08D0, 0x08E0, 0x0940, 0x0950, 0x08B0, 0x0780, 0x0700, 0x05D0, 0x0590, 0x05E0,
+ 0x05C0, 0x0640, 0x0580, 0x0540, 0x0490, 0x0490, 0x0420, 0x0410, 0x0510, 0x0550, 0x05F0, 0x06F0, 0x0730, 0x07A0, 0x0700, 0x0630,
+ 0x0580, 0x03C0, 0x0350, 0x0290, 0x0160, 0x00B0, 0x0010, 0xFF60, 0xFDC0, 0xFC40, 0xFA80, 0xF880, 0xF740, 0xF5F0, 0xF450, 0xF270,
+ 0xF090, 0xEEF0, 0xEDE0, 0xEC60, 0xEC20, 0xEAF0, 0xE8E0, 0xE720, 0xE450, 0xE290, 0xDFE0, 0xDDC0, 0xDA50, 0xD710, 0xD330, 0xCEE0,
+ 0xCA80, 0xC640, 0xC1C0, 0xBCD0, 0xB7D0, 0xB240, 0xAC90, 0xA620, 0xA0B0, 0x9AE0, 0x93F0, 0x8EA0, 0x8A40, 0x87A0, 0x8610, 0x8560,
+ 0x8510, 0x84F0, 0x84E0, 0x84C0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x84B0,
+ 0x8490, 0x8470, 0x8470, 0x8450, 0x8470, 0x8470, 0x84A0, 0x8480, 0x84B0, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x84F0, 0x8500, 0x8510, 0x8530, 0x8530, 0x8550,
+ 0x8560, 0x8570, 0x8590, 0x8590, 0x8590, 0x85B0, 0x85C0, 0x85E0, 0x85F0, 0x8660, 0x86D0, 0x8750, 0x87C0, 0x8800, 0x8860, 0x88C0,
+ 0x88E0, 0x88F0, 0x8940, 0x8920, 0x88C0, 0x8800, 0x8740, 0x86A0, 0x8600, 0x8580, 0x8550, 0x8500, 0x84E0, 0x84F0, 0x84B0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8470,
+ 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83C0, 0x83E0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83B0, 0x83B0, 0x83C0, 0x83A0, 0x83C0, 0x83C0, 0x83F0,
+ 0x83F0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410,
+ 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x8490, 0x8490,
+ 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x84F0, 0x8510, 0x8540, 0x85B0, 0x8680, 0x88E0, 0x8F80, 0x9A70, 0xA590,
+ 0xB2D0, 0xC030, 0xCE40, 0xDD10, 0xEAF0, 0xF910, 0x0560, 0x1130, 0x1B90, 0x2650, 0x2F70, 0x3730, 0x3E60, 0x4460, 0x49D0, 0x4EF0,
+ 0x5380, 0x5800, 0x5CB0, 0x6030, 0x6400, 0x6740, 0x6AC0, 0x6EB0, 0x7280, 0x7710, 0x7B10, 0x7E40, 0x7EF0, 0x7F10, 0x7F00, 0x7EE0,
+ 0x7F50, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F60, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F70,
+ 0x7F00, 0x7EA0, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F20,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F30, 0x7F20, 0x7F80, 0x7F10, 0x7F10, 0x7F20, 0x7EE0,
+ 0x7F80, 0x7EF0, 0x7F20, 0x7ED0, 0x7F10, 0x7F70, 0x7F20, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F50, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F30,
+ 0x7F20, 0x7EC0, 0x7ED0, 0x7F00, 0x7F30, 0x7F10, 0x7E90, 0x7EB0, 0x7EA0, 0x7EF0, 0x7F10, 0x7EB0, 0x7ED0, 0x7F10, 0x7F20, 0x7F20,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F30, 0x7EF0, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F00,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F00, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7C80, 0x70C0, 0x65B0, 0x5AD0, 0x5000, 0x4640, 0x3E30, 0x3790,
+ 0x3330, 0x2FB0, 0x2D80, 0x2B70, 0x2980, 0x2A40, 0x2D00, 0x3230, 0x39A0, 0x43C0, 0x5030, 0x5BE0, 0x66C0, 0x7150, 0x7A30, 0x7EF0,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F00, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F00, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7EF0, 0x7F30, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F90, 0x7F10, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F30, 0x7F20, 0x7E80,
+ 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7E90, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F30, 0x7EF0,
+ 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F20, 0x7F30, 0x7F00, 0x7F30, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F30, 0x7EE0, 0x7ED0,
+ 0x7EF0, 0x7F20, 0x7F60, 0x7ED0, 0x7E90, 0x7F00, 0x7EE0, 0x7F30, 0x7EE0, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10,
+ 0x7F00, 0x7F10, 0x7F10, 0x7EB0, 0x7F20, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7EF0,
+ 0x7F10, 0x7EF0, 0x7EF0, 0x7F70, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0,
+ 0x7EF0, 0x7F00, 0x7F40, 0x7F10, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7E70, 0x7ED0, 0x7F10, 0x7F20, 0x7EF0, 0x7E90, 0x7F00,
+ 0x7F20, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F40,
+ 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F70, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7EC0,
+ 0x7F10, 0x7EF0, 0x7F70, 0x7EF0, 0x7EC0, 0x7F00, 0x7ED0, 0x7F10, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F00, 0x7F20, 0x7ED0, 0x7EB0, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EC0, 0x7F30, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EE0, 0x7F70, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7F10, 0x7EF0,
+ 0x7EF0, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F50, 0x7F00,
+ 0x7EC0, 0x7ED0, 0x7EF0, 0x7F30, 0x7EF0, 0x7ED0, 0x7F00, 0x7EE0, 0x7F30, 0x7F10, 0x7E90, 0x7EC0, 0x7EF0, 0x7F30, 0x7EE0, 0x7E90,
+ 0x7ED0, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7EF0, 0x7F50, 0x7F10, 0x7F20, 0x75F0, 0x6B10, 0x60B0, 0x5570,
+ 0x4AC0, 0x3EF0, 0x33B0, 0x29C0, 0x2050, 0x1890, 0x1230, 0x0B40, 0x03D0, 0xFC70, 0xF320, 0xEB50, 0xE4B0, 0xDF20, 0xDA40, 0xD4D0,
+ 0xCFB0, 0xC940, 0xC240, 0xB9A0, 0xB050, 0xA640, 0x9B60, 0x90F0, 0x89C0, 0x8690, 0x8560, 0x8510, 0x84E0, 0x84D0, 0x84C0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84C0,
+ 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84F0, 0x84D0, 0x84C0, 0x84C0, 0x8460, 0x84D0, 0x84E0,
+ 0x8500, 0x8510, 0x8530, 0x8580, 0x8600, 0x86F0, 0x8850, 0x8A40, 0x8CC0, 0x9010, 0x9360, 0x9730, 0x9B10, 0xA020, 0xA4A0, 0xA7D0,
+ 0xAA70, 0xAC90, 0xAFD0, 0xB350, 0xB710, 0xBB50, 0xBEA0, 0xC240, 0xC4A0, 0xC7C0, 0xCA60, 0xCD30, 0xD0D0, 0xD4C0, 0xD7F0, 0xDAD0,
+ 0xDD30, 0xDFA0, 0xE250, 0xE4F0, 0xE860, 0xEAE0, 0xECF0, 0xEF70, 0xF130, 0xF3A0, 0xF450, 0xF5B0, 0xF560, 0xF3F0, 0xF310, 0xF170,
+ 0xF120, 0xF190, 0xF1B0, 0xF1E0, 0xF1C0, 0xF0C0, 0xEEA0, 0xEC10, 0xE950, 0xE680, 0xE360, 0xDFA0, 0xDA40, 0xD500, 0xCF20, 0xC8C0,
+ 0xC250, 0xBB70, 0xB440, 0xAC40, 0xA3E0, 0x9C10, 0x94D0, 0x8ED0, 0x89D0, 0x8710, 0x85E0, 0x8500, 0x84F0, 0x84E0, 0x84E0, 0x84D0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0,
+ 0x84E0, 0x84F0, 0x84F0, 0x8510, 0x8500, 0x8510, 0x8520, 0x8570, 0x8550, 0x8570, 0x8590, 0x85B0, 0x85E0, 0x8600, 0x8650, 0x86C0,
+ 0x8730, 0x87C0, 0x8850, 0x88A0, 0x88F0, 0x89C0, 0x8A70, 0x8B80, 0x8C20, 0x8D00, 0x8DC0, 0x8E60, 0x8F80, 0x9080, 0x9240, 0x9400,
+ 0x9530, 0x96C0, 0x97A0, 0x9980, 0x9BA0, 0x9ED0, 0xA240, 0xA600, 0xA920, 0xACC0, 0xAFE0, 0xB370, 0xB650, 0xB8C0, 0xBA90, 0xBB80,
+ 0xBBD0, 0xBBD0, 0xBB80, 0xBBE0, 0xBB10, 0xBA40, 0xB960, 0xB8B0, 0xB710, 0xB5D0, 0xB400, 0xB1C0, 0xAEF0, 0xABC0, 0xA930, 0xA7A0,
+ 0xA6E0, 0xA610, 0xA440, 0xA230, 0xA080, 0x9EC0, 0x9CE0, 0x9C00, 0x9AB0, 0x9A30, 0x9A40, 0x9A90, 0x9A80, 0x9A50, 0x9A60, 0x9A50,
+ 0x9AE0, 0x9C10, 0x9D60, 0x9E30, 0x9EF0, 0x9F50, 0x9FA0, 0x9FF0, 0xA000, 0xA030, 0xA140, 0xA210, 0xA260, 0xA260, 0xA250, 0xA1F0,
+ 0xA190, 0xA1B0, 0xA260, 0xA290, 0xA310, 0xA2D0, 0xA2F0, 0xA200, 0xA1A0, 0xA210, 0xA1B0, 0xA190, 0xA110, 0xA050, 0x9FE0, 0x9FF0,
+ 0xA0C0, 0xA200, 0xA310, 0xA330, 0xA340, 0xA330, 0xA370, 0xA500, 0xA730, 0xA930, 0xABB0, 0xADF0, 0xB030, 0xB2D0, 0xB560, 0xB7E0,
+ 0xBA50, 0xBC50, 0xBDC0, 0xBFE0, 0xC310, 0xC5E0, 0xC900, 0xCC50, 0xCF60, 0xD1D0, 0xD4E0, 0xD780, 0xDAA0, 0xDE10, 0xE0E0, 0xE3F0,
+ 0xE630, 0xE910, 0xEC00, 0xEF10, 0xF270, 0xF580, 0xF800, 0xFA70, 0xFB90, 0xFD30, 0xFF20, 0x01E0, 0x04F0, 0x07F0, 0x09C0, 0x0B50,
+ 0x0B90, 0x0C50, 0x0DA0, 0x0F90, 0x11D0, 0x1400, 0x1610, 0x17B0, 0x18F0, 0x1A60, 0x1BC0, 0x1D00, 0x1EA0, 0x2000, 0x2120, 0x2200,
+ 0x22D0, 0x2360, 0x23D0, 0x22B0, 0x2120, 0x1FD0, 0x1DF0, 0x1C80, 0x1AA0, 0x18D0, 0x16D0, 0x1430, 0x1170, 0x0DF0, 0x0AB0, 0x0860,
+ 0x0680, 0x0500, 0x0380, 0x01B0, 0x0060, 0xFF40, 0xFF70, 0x00A0, 0x02A0, 0x0600, 0x0AD0, 0x1100, 0x1820, 0x20D0, 0x2A10, 0x34C0,
+ 0x3FF0, 0x4BD0, 0x5830, 0x64A0, 0x7140, 0x7C80, 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7EE0, 0x7F10, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F70, 0x7EF0, 0x7EB0, 0x7F20, 0x7F40, 0x7F40,
+ 0x7ED0, 0x7E70, 0x7EF0, 0x7F10, 0x7EF0, 0x7E70, 0x7E60, 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7EC0, 0x7F00, 0x7F10, 0x7F10, 0x7BF0,
+ 0x6A00, 0x5660, 0x3CF0, 0x1E60, 0xFDE0, 0xDB20, 0xC030, 0xACE0, 0xA1C0, 0xA010, 0xA950, 0xBD40, 0xDC30, 0x0280, 0x32B0, 0x5F20,
+ 0x7ED0, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7EF0, 0x7EB0, 0x7EF0, 0x7EE0, 0x7F10,
+ 0x7F00, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F10, 0x7EF0, 0x7E90, 0x7EF0, 0x7F20, 0x7E50, 0x7A90, 0x7900, 0x79A0, 0x7B90, 0x7C90, 0x7DA0,
+ 0x7E00, 0x7EE0, 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7EF0, 0x7F40, 0x7F10, 0x7F20, 0x7F00, 0x7EF0,
+ 0x7F50, 0x7F00, 0x7F20, 0x74D0, 0x6630, 0x5CA0, 0x5540, 0x4F50, 0x4970, 0x41E0, 0x3950, 0x2E50, 0x2180, 0x12F0, 0x0550, 0xF8E0,
+ 0xF020, 0xEAC0, 0xE880, 0xE6D0, 0xE3A0, 0xDE80, 0xD430, 0xC620, 0xB530, 0xA1C0, 0x8E40, 0x8600, 0x84E0, 0x84B0, 0x8480, 0x8470,
+ 0x8450, 0x8440, 0x8430, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x8410,
+ 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83F0, 0x8400, 0x8430, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420,
+ 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8480, 0x8460, 0x8470, 0x8480, 0x8490,
+ 0x8490, 0x84B0, 0x84D0, 0x84E0, 0x8520, 0x85C0, 0x8800, 0x8E80, 0x98F0, 0xA360, 0xAC50, 0xB560, 0xBD90, 0xC520, 0xCBB0, 0xCFE0,
+ 0xD3C0, 0xD570, 0xD5D0, 0xD670, 0xD6A0, 0xD650, 0xD550, 0xD320, 0xD060, 0xCCD0, 0xC9E0, 0xC680, 0xC2F0, 0xBF70, 0xBA80, 0xB400,
+ 0xAD50, 0xA690, 0xA050, 0x88A0, 0x8670, 0x8590, 0x8530, 0x8510, 0x8500, 0x8510, 0x84F0, 0x84F0, 0x84E0, 0x84F0, 0x8510, 0x8530,
+ 0x8560, 0x85B0, 0x8640, 0x8750, 0x88F0, 0x8BA0, 0x9020, 0x9490, 0x9740, 0x9920, 0x99E0, 0x9B50, 0x9C60, 0x9E30, 0xA040, 0xA1E0,
+ 0xA340, 0xA3B0, 0xA3A0, 0xA3B0, 0xA4F0, 0xA620, 0xA790, 0xA870, 0xAA50, 0xAC90, 0xB120, 0xB720, 0xBEF0, 0xC790, 0xD030, 0xDAC0,
+ 0xE540, 0xF220, 0xFE50, 0x0A30, 0x1590, 0x1E70, 0x2510, 0x2A80, 0x2E70, 0x3130, 0x31D0, 0x2FB0, 0x2B60, 0x2470, 0x1CF0, 0x14E0,
+ 0x0C40, 0x05A0, 0xFEF0, 0xF860, 0xF0E0, 0xE870, 0xE050, 0xD7E0, 0xCF90, 0xC7B0, 0xBF90, 0xB770, 0xAEF0, 0xA800, 0xA1B0, 0x9C00,
+ 0x9720, 0x92B0, 0x8E60, 0x8AB0, 0x8800, 0x8680, 0x85C0, 0x85A0, 0x8550, 0x8540, 0x8550, 0x8590, 0x85B0, 0x8620, 0x8730, 0x8930,
+ 0x8CA0, 0x90C0, 0x9610, 0x9BD0, 0xA290, 0xAA90, 0xB2D0, 0xBC70, 0xC500, 0xCE90, 0xD810, 0xE260, 0xEC00, 0xF5F0, 0xFFD0, 0x0900,
+ 0x12D0, 0x1C10, 0x24D0, 0x2E60, 0x37B0, 0x4070, 0x4970, 0x5160, 0x59D0, 0x6230, 0x68E0, 0x6F50, 0x7430, 0x79A0, 0x7D60, 0x7EF0,
+ 0x7F10, 0x7EA0, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F00, 0x7F80, 0x7F10, 0x7F20, 0x7EF0, 0x7D30, 0x78B0, 0x7360, 0x6CC0, 0x64D0, 0x5C00, 0x50E0, 0x4520, 0x3830, 0x2D40, 0x22A0,
+ 0x1950, 0x1100, 0x09E0, 0x0410, 0xFEB0, 0xF8F0, 0xF250, 0xE970, 0xDF70, 0xD250, 0xC330, 0xB1D0, 0x9E20, 0x8B50, 0x8580, 0x84E0,
+ 0x84C0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490,
+ 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8530, 0x8650, 0x8DA0, 0xA210, 0xB6B0, 0xCBF0, 0xDF70, 0xF270, 0x0360, 0x13F0, 0x22D0,
+ 0x3130, 0x3E60, 0x4960, 0x5470, 0x5C70, 0x62F0, 0x6850, 0x6B10, 0x6DB0, 0x6F10, 0x6F50, 0x6F90, 0x6EC0, 0x6E80, 0x6DA0, 0x6C60,
+ 0x6BE0, 0x6AD0, 0x6990, 0x6720, 0x6320, 0x5D70, 0x55C0, 0x4E10, 0x4600, 0x3EB0, 0x3920, 0x3540, 0x33D0, 0x33B0, 0x3400, 0x35F0,
+ 0x3860, 0x3CB0, 0x4240, 0x4890, 0x5030, 0x5700, 0x5D60, 0x6410, 0x68C0, 0x6D20, 0x6F90, 0x70B0, 0x7160, 0x70C0, 0x6F50, 0x6DE0,
+ 0x6AF0, 0x6880, 0x6530, 0x6260, 0x5FE0, 0x5ED0, 0x6210, 0x6800, 0x7370, 0x7E70, 0x7F30, 0x7EF0, 0x7E90, 0x7ED0, 0x7F00, 0x7F00,
+ 0x7F10, 0x7E90, 0x7ED0, 0x7EF0, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x1390, 0xF4A0, 0xD8C0, 0xC0E0, 0xACE0, 0x9B10,
+ 0x8CE0, 0x86C0, 0x8530, 0x84F0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430,
+ 0x8420, 0x8430, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400,
+ 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400,
+ 0x8400, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8470, 0x8450,
+ 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x84B0, 0x84A0, 0x84C0, 0x84F0, 0x8580, 0x88C0, 0x9930, 0xAA80, 0xB8D0, 0xC600, 0xD160,
+ 0xDA50, 0xE3B0, 0xEC10, 0xF470, 0xFD80, 0x0600, 0x0EB0, 0x1890, 0x2130, 0x2930, 0x30A0, 0x3620, 0x3AF0, 0x3E30, 0x4100, 0x4360,
+ 0x4630, 0x4900, 0x4A60, 0x4A70, 0x49F0, 0x4870, 0x4640, 0x4390, 0x4030, 0x3CE0, 0x3890, 0x33F0, 0x2F50, 0x2AE0, 0x26E0, 0x2290,
+ 0x1E70, 0x1A50, 0x14D0, 0x0F50, 0x0960, 0x03F0, 0xFE10, 0xF890, 0xF2E0, 0xECE0, 0xE670, 0xDEE0, 0xD780, 0xCFF0, 0xC7D0, 0xC070,
+ 0xBA50, 0xB580, 0xB1F0, 0xB0D0, 0xB0F0, 0xB290, 0xB5C0, 0xB9E0, 0xBDF0, 0xC1D0, 0xC5C0, 0xCA60, 0xCFA0, 0xD650, 0xDC60, 0xE2E0,
+ 0xE950, 0xEE50, 0xF370, 0xF7C0, 0xFB40, 0xFE10, 0xFFF0, 0x0250, 0x0540, 0x0710, 0x08A0, 0x0A00, 0x0AD0, 0x0A70, 0x0960, 0x07B0,
+ 0x0630, 0x0620, 0x05C0, 0x0610, 0x06D0, 0x0720, 0x0940, 0x0C50, 0x11A0, 0x17C0, 0x1F90, 0x2870, 0x3240, 0x3C90, 0x4780, 0x5170,
+ 0x5BA0, 0x64F0, 0x6BB0, 0x70A0, 0x73C0, 0x75D0, 0x77F0, 0x7A20, 0x7CA0, 0x7E40, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7EA0, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F00, 0x7E90, 0x7F10, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F80, 0x7F10,
+ 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F80, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F00, 0x7EE0,
+ 0x7ED0, 0x7EF0, 0x7F60, 0x7F20, 0x7E90, 0x7EB0, 0x7EE0, 0x7F30, 0x7F10, 0x7E70, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10,
+ 0x7F00, 0x7F00, 0x7F10, 0x7EB0, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7F10,
+ 0x7F20, 0x7EF0, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F80, 0x7EF0, 0x7EE0, 0x7F10, 0x7F10, 0x7F70, 0x7EE0, 0x7ED0,
+ 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7EE0, 0x7F00, 0x7F10, 0x7F30, 0x7EB0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F30, 0x7ED0, 0x7E90, 0x7F10,
+ 0x7F20, 0x7F10, 0x7F10, 0x7EB0, 0x7F20, 0x7EF0, 0x6610, 0x45A0, 0x2240, 0xFEF0, 0xDFA0, 0xC6D0, 0xB8F0, 0xB570, 0xBD60, 0xCD60,
+ 0xDF10, 0xEEF0, 0xF900, 0xFD00, 0xFBF0, 0xF830, 0xF470, 0xF300, 0xF530, 0xFAB0, 0x0180, 0x0940, 0x0F10, 0x1270, 0x1400, 0x1290,
+ 0x10F0, 0x0EC0, 0x0D50, 0x0C90, 0x0CD0, 0x0E40, 0x0E90, 0x0DD0, 0x0CB0, 0x0B00, 0x0980, 0x08E0, 0x0920, 0x0A40, 0x0C30, 0x1060,
+ 0x1520, 0x1BC0, 0x24B0, 0x3000, 0x3B40, 0x6860, 0x70C0, 0x7760, 0x7C40, 0x7ED0, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0,
+ 0x7ED0, 0x7F00, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F50,
+ 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7EF0,
+ 0x7EE0, 0x7EF0, 0x7EF0, 0x7F70, 0x7EE0, 0x7ED0, 0x7F10, 0x7F20, 0x7F50, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0, 0x7EB0, 0x7CE0, 0x79C0,
+ 0x7780, 0x7590, 0x7370, 0x72E0, 0x7100, 0x6F10, 0x6C20, 0x6910, 0x6730, 0x6460, 0x61C0, 0x5E80, 0x5AF0, 0x5860, 0x55A0, 0x51D0,
+ 0x4E60, 0x49A0, 0x4510, 0x3F10, 0x38B0, 0x31A0, 0x29F0, 0x22F0, 0x1B20, 0x1380, 0x0C90, 0x0540, 0xFEE0, 0xF850, 0xF1B0, 0xEB00,
+ 0xE4E0, 0xDEF0, 0xD930, 0xD340, 0xCCC0, 0xC5D0, 0xBF30, 0xB740, 0xAEF0, 0xA670, 0x9CD0, 0x9460, 0x8D20, 0x8850, 0x8620, 0x8550,
+ 0x8500, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84F0, 0x8540, 0x8660, 0x8B40,
+ 0x98D0, 0xA700, 0xB570, 0xC2F0, 0xCFC0, 0xDC10, 0xE730, 0xF1F0, 0xFAF0, 0x0250, 0x0740, 0x0A40, 0x0B10, 0x0870, 0x0400, 0xFCC0,
+ 0xF260, 0xE690, 0xD980, 0xCC80, 0xBFD0, 0xB5E0, 0xAF70, 0xAC90, 0xAEE0, 0xB5D0, 0xBFF0, 0xCC60, 0xDB00, 0xEBA0, 0xFC80, 0x0DF0,
+ 0x2000, 0x30D0, 0x4280, 0x51E0, 0x6140, 0x6EF0, 0x7AB0, 0x7EF0, 0x7EF0, 0x7F90, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F70, 0x7F10,
+ 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7F00, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F50, 0x7F10, 0x7EB0,
+ 0x7EB0, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EE0, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7EF0,
+ 0x7EF0, 0x7F00, 0x7F10, 0x7F70, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F60, 0x7EE0, 0x7EF0, 0x7F00, 0x7F00, 0x7F50, 0x7ED0, 0x7EA0,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F00, 0x7EC0, 0x7F40,
+ 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F80, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7590, 0x6980, 0x5C20, 0x4D80, 0x3DC0, 0x2DD0, 0x1DA0, 0x0BF0, 0xFCB0, 0xEDA0, 0xDE80, 0xD010, 0xC190, 0xB440, 0xA720, 0x9AF0,
+ 0x8F40, 0x88D0, 0x8630, 0x8530, 0x8500, 0x84E0, 0x84D0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84F0, 0x8500, 0x8520, 0x8560, 0x85D0,
+ 0x8670, 0x8770, 0x8900, 0x8B20, 0x8E20, 0x90C0, 0x9330, 0x94C0, 0x94E0, 0x92B0, 0x91E0, 0x90D0, 0x8FF0, 0x8E10, 0x8BD0, 0x8A20,
+ 0x8890, 0x8750, 0x8680, 0x85D0, 0x8590, 0x8550, 0x8530, 0x8510, 0x8500, 0x84F0, 0x84E0, 0x84F0, 0x84E0, 0x8510, 0x84E0, 0x84F0,
+ 0x8520, 0x8520, 0x8540, 0x8570, 0x85B0, 0x8610, 0x86C0, 0x8780, 0x8870, 0x8930, 0x8990, 0x8970, 0x8890, 0x87B0, 0x8720, 0x86E0,
+ 0x86D0, 0x8720, 0x87F0, 0x8940, 0x8BB0, 0x8F70, 0x9520, 0x9BA0, 0xA230, 0xA950, 0xB130, 0xB840, 0xBF40, 0xC630, 0xCDC0, 0xD540,
+ 0xDDC0, 0xE690, 0xF000, 0xFB50, 0x0670, 0x1290, 0x1F50, 0x2C30, 0x3980, 0x4700, 0x5460, 0x6200, 0x6F70, 0x7A70, 0x7F10, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7FA0, 0x7F10, 0x7F20, 0x7F30,
+ 0x7EF0, 0x7F50, 0x7F20, 0x7F00, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F00,
+ 0x7F10, 0x7F00, 0x7EE0, 0x7ED0, 0x7EB0, 0x7F20, 0x7F40, 0x7E80, 0x7EF0, 0x7F00, 0x7F00, 0x7F30, 0x7EA0, 0x7EC0, 0x7ED0, 0x7F10,
+ 0x7EF0, 0x7E80, 0x7EF0, 0x7F10, 0x7EE0, 0x7EF0, 0x7EB0, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7F10, 0x7F00, 0x7F20,
+ 0x7EF0, 0x7F50, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7F00, 0x7F00, 0x7B90,
+ 0x62B0, 0x59F0, 0x5C90, 0x64D0, 0x6C30, 0x6EF0, 0x6CC0, 0x6580, 0x5E20, 0x5B70, 0x5FB0, 0x6BB0, 0x7A70, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F00, 0x7E90, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F30, 0x7F10, 0x7F00, 0x7F20,
+ 0x7EF0, 0x7F80, 0x7F00, 0x7EF0, 0x7F30, 0x7F20, 0x7F80, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F70, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0,
+ 0x7F60, 0x7F00, 0x7E10, 0x7D10, 0x7BB0, 0x7B50, 0x7B10, 0x79B0, 0x77A0, 0x71F0, 0x6530, 0x5240, 0x36A0, 0x14D0, 0xED70, 0xC8C0,
+ 0xA790, 0x8D80, 0x85F0, 0x8510, 0x84F0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84E0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84D0, 0x84B0, 0x84B0, 0x84A0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8510, 0x8550, 0x85F0, 0x8720, 0x89C0, 0x8FA0, 0x9730, 0x9F70,
+ 0xA670, 0xACF0, 0xB380, 0xB9C0, 0xC0B0, 0xC710, 0xCE90, 0xE950, 0xF110, 0xF940, 0x01A0, 0x0B00, 0x13C0, 0x1CD0, 0x2630, 0x2EE0,
+ 0x38E0, 0x4190, 0x48B0, 0x4ED0, 0x52B0, 0x5570, 0x5720, 0x56F0, 0x5710, 0x55E0, 0x54E0, 0x5200, 0x4F00, 0x4C00, 0x4740, 0x41F0,
+ 0x3B30, 0x33C0, 0x2BB0, 0x22D0, 0x1A90, 0x10C0, 0x0750, 0xFE00, 0xF460, 0xEA50, 0xDF90, 0xD410, 0xC7F0, 0xBB80, 0xADC0, 0xA0A0,
+ 0x9390, 0x89F0, 0x8620, 0x8530, 0x84F0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8450, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x8490, 0x84A0, 0x84B0,
+ 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x8500, 0x84E0, 0x84F0, 0x84E0, 0x8510, 0x8520, 0x8530, 0x8540, 0x8540, 0x8550, 0x8550, 0x8570,
+ 0x8580, 0x85B0, 0x85E0, 0x8630, 0x8670, 0x8700, 0x8780, 0x8860, 0x89B0, 0x8BB0, 0x8EF0, 0x9320, 0x9900, 0x9F60, 0xA590, 0xAC70,
+ 0xB2C0, 0xB830, 0xBDA0, 0xC210, 0xC5D0, 0xC950, 0xCD50, 0xD0F0, 0xD490, 0xD780, 0xD9C0, 0xDAC0, 0xDBF0, 0xDC30, 0xDC60, 0xDBB0,
+ 0xD9F0, 0xD7E0, 0xD560, 0xD1F0, 0xCDA0, 0xC7E0, 0xC1A0, 0xBA50, 0xB280, 0xA9A0, 0xA070, 0x97F0, 0x8FB0, 0x8A00, 0x86F0, 0x85C0,
+ 0x8550, 0x8510, 0x8500, 0x84E0, 0x84D0, 0x84D0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84F0, 0x84F0, 0x8500, 0x8520, 0x8530, 0x8540, 0x8560, 0x8580,
+ 0x85B0, 0x85F0, 0x8630, 0x8670, 0x86D0, 0x8700, 0x8720, 0x8710, 0x8780, 0x87A0, 0x87D0, 0x8790, 0x8770, 0x8730, 0x8720, 0x86B0,
+ 0x8680, 0x8670, 0x8660, 0x8640, 0x8630, 0x8620, 0x8620, 0x8600, 0x8610, 0x8620, 0x8630, 0x8620, 0x8660, 0x8630, 0x8660, 0x8690,
+ 0x86E0, 0x8740, 0x87A0, 0x87F0, 0x8840, 0x8850, 0x8880, 0x88C0, 0x8970, 0x8A80, 0x8BA0, 0x8C50, 0x8C90, 0x8C10, 0x8B10, 0x8990,
+ 0x8880, 0x87A0, 0x86E0, 0x8650, 0x85D0, 0x8590, 0x8560, 0x8540, 0x8530, 0x8530, 0x8530, 0x8530, 0x8530, 0x8540, 0x8560, 0x85A0,
+ 0x85D0, 0x85F0, 0x85F0, 0x85E0, 0x85D0, 0x85D0, 0x85D0, 0x85F0, 0x8610, 0x8610, 0x8600, 0x85F0, 0x85C0, 0x8590, 0x8560, 0x8530,
+ 0x8510, 0x8500, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84E0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0,
+ 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x84F0, 0x84F0, 0x8500, 0x8500, 0x8510, 0x8520, 0x8530,
+ 0x8530, 0x8540, 0x8550, 0x8550, 0x8550, 0x8560, 0x8580, 0x85C0, 0x8600, 0x8640, 0x8670, 0x86B0, 0x86D0, 0x8730, 0x87D0, 0x88C0,
+ 0x89F0, 0x8B40, 0x8CE0, 0x8E30, 0x9010, 0x9190, 0x9350, 0x9420, 0x9550, 0x96B0, 0x9850, 0x9A40, 0x9BD0, 0x9D30, 0x9E40, 0x9E50,
+ 0x9D70, 0x9D10, 0x9CF0, 0x9DE0, 0x9F80, 0xA0F0, 0xA270, 0xA2D0, 0xA310, 0xA330, 0xA3D0, 0xA4A0, 0xA4E0, 0xA4C0, 0xA3A0, 0xA2D0,
+ 0xA260, 0xA250, 0xA320, 0xA460, 0xA4E0, 0xA480, 0xA3E0, 0xA310, 0xA2B0, 0xA210, 0xA250, 0xA290, 0xA180, 0xA0B0, 0xA000, 0x9F90,
+ 0xA040, 0xA130, 0xA220, 0xA2C0, 0xA2E0, 0xA260, 0xA220, 0xA240, 0xA340, 0xA3A0, 0xA330, 0xA2C0, 0xA1D0, 0xA110, 0xA110, 0xA0A0,
+ 0x9FD0, 0x9EC0, 0x9DB0, 0x9C40, 0x9AC0, 0x9900, 0x97C0, 0x9740, 0x97B0, 0x9850, 0x98F0, 0x9960, 0x9A30, 0x9B60, 0x9D70, 0x9F40,
+ 0xA120, 0xA3D0, 0xA650, 0xAAB0, 0xB070, 0xB650, 0xBC50, 0xC1F0, 0xD5D0, 0xDB30, 0xE040, 0xE450, 0xE7E0, 0xEA00, 0xEC30, 0xEDD0,
+ 0xEEB0, 0xEFA0, 0xEF70, 0xEF20, 0xEE50, 0xED40, 0xEBC0, 0xE8F0, 0xE550, 0xE090, 0xDB20, 0xD480, 0xCDE0, 0xC6B0, 0xBF70, 0xB700,
+ 0xAD50, 0xA270, 0x9690, 0x8BE0, 0x86B0, 0x8550, 0x8500, 0x84D0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440,
+ 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430,
+ 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84D0, 0x8500, 0x8560, 0x8660,
+ 0x8870, 0x8B90, 0x8DF0, 0x8EF0, 0x8E00, 0x8C40, 0x8A70, 0x88C0, 0x8780, 0x8670, 0x85D0, 0x8570, 0x8540, 0x8520, 0x8500, 0x84F0,
+ 0x84E0, 0x84D0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8480, 0x8480, 0x8490, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x8500,
+ 0x8540, 0x85E0, 0x8790, 0x8D30, 0x96C0, 0xA0B0, 0xAA10, 0xB380, 0xBC30, 0xC440, 0xC9C0, 0xCEB0, 0xD3E0, 0xD950, 0xDFF0, 0xE7C0,
+ 0xF080, 0xF880, 0xFFC0, 0x0460, 0x0680, 0x06C0, 0x0490, 0x0230, 0xFE70, 0xF9E0, 0xF5A0, 0xF0D0, 0xEDC0, 0xEA90, 0xE890, 0xE830,
+ 0xE8A0, 0xE9D0, 0xEBF0, 0xEDE0, 0xF0F0, 0xF3D0, 0xF720, 0xFAE0, 0xFE90, 0x02D0, 0x06B0, 0x0AA0, 0x0EA0, 0x1280, 0x1620, 0x17B0,
+ 0x1830, 0x1730, 0x14E0, 0x11C0, 0x0C90, 0x07C0, 0x0210, 0xFB90, 0xF630, 0xF140, 0xECE0, 0xE950, 0xE520, 0xE180, 0xDDE0, 0xD9B0,
+ 0xD6B0, 0xD2D0, 0xD000, 0xCD00, 0xCA80, 0xC890, 0xC750, 0xC720, 0xC6F0, 0xC710, 0xC790, 0xC840, 0xCA50, 0xCC70, 0xCFA0, 0xD3E0,
+ 0xD820, 0xDF00, 0xE5F0, 0xEDF0, 0xF600, 0xFD70, 0x03E0, 0x0840, 0x0B90, 0x15A0, 0x1850, 0x1B70, 0x1EB0, 0x2140, 0x2350, 0x2520,
+ 0x26C0, 0x2750, 0x2890, 0x2930, 0x2A40, 0x2C10, 0x2D30, 0x2F20, 0x30D0, 0x3160, 0x3220, 0x3240, 0x31D0, 0x3230, 0x3320, 0x35E0,
+ 0x37F0, 0x3960, 0x3A80, 0x3AD0, 0x3BB0, 0x3C20, 0x3CE0, 0x3D90, 0x3E30, 0x3F70, 0x4050, 0x4110, 0x4170, 0x4170, 0x4180, 0x3FF0,
+ 0x3EA0, 0x3CC0, 0x3A90, 0x3900, 0x3780, 0x3590, 0x3330, 0x30A0, 0x2E20, 0x2AF0, 0x27D0, 0x24E0, 0x20D0, 0x1CC0, 0x17E0, 0x1240,
+ 0x0D90, 0x09D0, 0x06E0, 0x04C0, 0x0240, 0x0170, 0x00E0, 0x02C0, 0x06D0, 0x0CA0, 0x1460, 0x1C10, 0x2230, 0x2590, 0x24A0, 0x21B0,
+ 0x1C00, 0x1400, 0x0B90, 0x02F0, 0xFCF0, 0xF990, 0xF9B0, 0xFDE0, 0x0460, 0x0EA0, 0x1A30, 0x26B0, 0x3320, 0x4070, 0x4DF0, 0x5B30,
+ 0x6870, 0x7350, 0x7BF0, 0x7F00, 0x7F00, 0x7F90, 0x7EF0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F60, 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F40,
+ 0x7ED0, 0x7E90, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F40, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F40, 0x7EF0, 0x7F30, 0x7F20, 0x7EF0, 0x7F50, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F70, 0x7EE0, 0x7F10, 0x7F10, 0x7EE0,
+ 0x7F70, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F50, 0x7F20, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EB0, 0x7ED0, 0x7F00, 0x7F50,
+ 0x7F20, 0x7EA0, 0x7ED0, 0x7ED0, 0x7F00, 0x7EF0, 0x7E90, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F40, 0x7F10, 0x7F10,
+ 0x7EE0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0,
+ 0x7F50, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7ED0, 0x7F00, 0x7EF0, 0x7F50, 0x7ED0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F30,
+ 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7ED0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F00, 0x7F20, 0x7EE0, 0x7EF0, 0x7F30, 0x7F10, 0x7F60, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0,
+ 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7ED0, 0x7EF0, 0x7F30,
+ 0x7F20, 0x7E90, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7E60, 0x7D90, 0x7C10, 0x7AE0, 0x7800, 0x75B0, 0x7260, 0x6E00, 0x6A50,
+ 0x6600, 0x61E0, 0x5E40, 0x59D0, 0x55B0, 0x5240, 0x4ED0, 0x4BF0, 0x48A0, 0x4570, 0x4290, 0x4130, 0x4060, 0x3ED0, 0x3E90, 0x3EE0,
+ 0x3F70, 0x4260, 0x4520, 0x4830, 0x4BE0, 0x4F20, 0x5240, 0x55B0, 0x59E0, 0x5E20, 0x6120, 0x6410, 0x66C0, 0x6850, 0x69D0, 0x6A90,
+ 0x6B40, 0x6B40, 0x6B10, 0x6A70, 0x69E0, 0x6850, 0x6710, 0x6620, 0x64E0, 0x6390, 0x61D0, 0x5FF0, 0x5D80, 0x5B50, 0x5860, 0x5560,
+ 0x51D0, 0x4D60, 0x48A0, 0x4400, 0x3E70, 0x37F0, 0x30B0, 0x27B0, 0x1E70, 0x1420, 0x0A60, 0x00D0, 0xF710, 0xEEA0, 0xE630, 0xDD50,
+ 0xD400, 0xCB40, 0xC260, 0xB980, 0xB0B0, 0xA8B0, 0xA120, 0x9A50, 0x93C0, 0x8D90, 0x89F0, 0x87D0, 0x86A0, 0x85E0, 0x8580, 0x8540,
+ 0x8520, 0x84F0, 0x8500, 0x8500, 0x8500, 0x8500, 0x8500, 0x8510, 0x8520, 0x8520, 0x8560, 0x8540, 0x8550, 0x8570, 0x8580, 0x8590,
+ 0x85A0, 0x85B0, 0x85D0, 0x85F0, 0x8600, 0x8620, 0x8620, 0x8620, 0x8630, 0x8640, 0x8640, 0x8650, 0x8660, 0x8680, 0x86A0, 0x86A0,
+ 0x86C0, 0x86C0, 0x86D0, 0x86F0, 0x8700, 0x8730, 0x8770, 0x8790, 0x87F0, 0x8880, 0x8940, 0x89B0, 0x8A60, 0x8B70, 0x8C90, 0x8E40,
+ 0x8FB0, 0x9170, 0x93F0, 0x9680, 0x9930, 0x9C70, 0xA030, 0xA3B0, 0xA780, 0xAB70, 0xAF50, 0xB2B0, 0xB6E0, 0xBAF0, 0xBEC0, 0xC2F0,
+ 0xC650, 0xC9F0, 0xCD60, 0xD0E0, 0xD3B0, 0xD660, 0xD8C0, 0xDAC0, 0xDCE0, 0xDE70, 0xE000, 0xE130, 0xE1E0, 0xE1B0, 0xE080, 0xDE60,
+ 0xDC70, 0xDA00, 0xD810, 0xD620, 0xD470, 0xD2E0, 0xD090, 0xCE40, 0xCBC0, 0xC990, 0xC800, 0xC6D0, 0xC6B0, 0xC700, 0xC850, 0xCAA0,
+ 0xCCA0, 0xCF90, 0xD220, 0xD510, 0xD840, 0xDB60, 0xDF00, 0xE340, 0xE7B0, 0xEC30, 0xF0E0, 0xF4B0, 0xF840, 0xFC30, 0x0050, 0x03F0,
+ 0x06B0, 0x0930, 0x0BC0, 0x0EF0, 0x1280, 0x1570, 0x18C0, 0x1BE0, 0x1DF0, 0x2120, 0x2300, 0x2530, 0x27F0, 0x2A70, 0x2E20, 0x3050,
+ 0x33A0, 0x35C0, 0x3870, 0x3AF0, 0x3C80, 0x3F00, 0x4090, 0x4230, 0x44A0, 0x4690, 0x49B0, 0x4D00, 0x4FE0, 0x5390, 0x56A0, 0x59C0,
+ 0x5C90, 0x5E90, 0x61A0, 0x6500, 0x6840, 0x6BB0, 0x6F20, 0x7340, 0x7680, 0x79B0, 0x7C60, 0x7E50, 0x7F10, 0x7F20, 0x7F60, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F50, 0x7EF0, 0x7F00, 0x7F40, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7F50, 0x7F10, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F80, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F70, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F50, 0x7F10, 0x7EB0, 0x7EE0,
+ 0x7ED0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7ED0, 0x7F00, 0x7F20, 0x7E90, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F00, 0x7F30, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F50, 0x7F10, 0x7F20,
+ 0x7F00, 0x7EF0, 0x7F50, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7F00, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F70, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F50, 0x7ED0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F10, 0x7EC0, 0x7F10, 0x7F10,
+ 0x7F20, 0x7F10, 0x7EB0, 0x7F10, 0x7EF0, 0x7460, 0x63F0, 0x4FC0, 0x3C70, 0x2950, 0x1710, 0x06A0, 0xF600, 0xE5D0, 0xD510, 0xC3C0,
+ 0xB160, 0xA000, 0x8F40, 0x86F0, 0x8520, 0x84E0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x84A0, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8460, 0x84C0, 0x84F0, 0x8500, 0x8540, 0x85B0, 0x8700, 0x8A40,
+ 0x90B0, 0x97F0, 0x9F90, 0xA5A0, 0xAB80, 0xAF30, 0xB2C0, 0xB420, 0xB5B0, 0xB600, 0xB580, 0xB7C0, 0xB990, 0xBB40, 0xBCC0, 0xBE80,
+ 0xC100, 0xC410, 0xC7E0, 0xCB60, 0xCE90, 0xD1D0, 0xD410, 0xD710, 0xDA40, 0xDDB0, 0xE1A0, 0xE4D0, 0xE830, 0xEAC0, 0xED70, 0xF090,
+ 0xF330, 0xF6C0, 0xF9C0, 0xFB50, 0xFD40, 0xFDE0, 0xFED0, 0xFFD0, 0x00D0, 0x01C0, 0x0250, 0x0280, 0x01C0, 0x00F0, 0x01C0, 0x02C0,
+ 0x04E0, 0x0690, 0x0830, 0x09B0, 0x0AF0, 0x0D10, 0x1020, 0x1360, 0x16F0, 0x1A00, 0x1C80, 0x1F80, 0x22D0, 0x2770, 0x2B60, 0x3000,
+ 0x33D0, 0x36A0, 0x3960, 0x3AD0, 0x3B50, 0x3BA0, 0x3A90, 0x3A10, 0x38E0, 0x3760, 0x3710, 0x3710, 0x38F0, 0x3990, 0x3990, 0x3A20,
+ 0x39A0, 0x38B0, 0x3750, 0x3560, 0x3390, 0x30B0, 0x2D50, 0x2920, 0x2440, 0x1EB0, 0x1820, 0x1160, 0x0A30, 0x0260, 0xFAA0, 0xF2C0,
+ 0xEBB0, 0xE490, 0xDC00, 0xD1D0, 0xC630, 0xB920, 0xA8D0, 0x95B0, 0x8830, 0x8520, 0x84D0, 0x84A0, 0x8480, 0x8470, 0x8470, 0x8450,
+ 0x8440, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0,
+ 0x83F0, 0x8400, 0x8440, 0x8440, 0x8430, 0x8440, 0x8460, 0x8450, 0x8460, 0x8470, 0x8480, 0x8480, 0x8490, 0x84D0, 0x84C0, 0x84B0,
+ 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8540, 0x8610, 0x8890, 0x91B0, 0x9E60, 0xA910, 0xB1B0, 0xB760, 0xBC40, 0xC060, 0xC400, 0xC7C0,
+ 0xCBD0, 0xD010, 0xD560, 0xDA20, 0xDF60, 0xE580, 0xEAE0, 0xEFD0, 0xF430, 0xF8B0, 0xFDE0, 0x0370, 0x0960, 0x0F00, 0x1440, 0x19B0,
+ 0x1F00, 0x2620, 0x2DD0, 0x35F0, 0x3E80, 0x4640, 0x4E90, 0x55B0, 0x5BF0, 0x62D0, 0x68B0, 0x6F00, 0x7440, 0x78B0, 0x7BA0, 0x7CE0,
+ 0x7D90, 0x7DB0, 0x7D70, 0x7CE0, 0x7B50, 0x7980, 0x76F0, 0x73D0, 0x71B0, 0x6E40, 0x6B60, 0x6680, 0x6030, 0x5960, 0x5180, 0x49D0,
+ 0x4320, 0x3C10, 0x3610, 0x2EA0, 0x26A0, 0x1DC0, 0x13D0, 0x0A00, 0xFE40, 0xF3F0, 0xE9E0, 0xE040, 0xD8A0, 0xD290, 0xCDF0, 0xCAA0,
+ 0xC870, 0xC6B0, 0xC520, 0xC3E0, 0xC290, 0xC2B0, 0xC350, 0xC3A0, 0xC420, 0xC530, 0xC600, 0xC800, 0xCB30, 0xCF70, 0xD500, 0xDA90,
+ 0xE050, 0xE640, 0xECC0, 0xF4F0, 0xFC60, 0x04F0, 0x0D90, 0x1630, 0x1F40, 0x2780, 0x3090, 0x39B0, 0x4350, 0x4C50, 0x5470, 0x5CE0,
+ 0x6480, 0x6B80, 0x7360, 0x7A80, 0x7EF0, 0x7F10, 0x7F20, 0x7F40, 0x7F00, 0x7F30, 0x7EE0, 0x7EF0, 0x7F30, 0x7F10, 0x7F50, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7F00, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F70, 0x7F10, 0x7EB0,
+ 0x7EF0, 0x7ED0, 0x7F10, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F00, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7DD0, 0x7080, 0x6040, 0x4E90, 0x3C70, 0x2B20, 0x1D10, 0x1450, 0x1270, 0x1700, 0x2120,
+ 0x2FA0, 0x3F80, 0x4F20, 0x5DD0, 0x6A90, 0x74A0, 0x7B60, 0x7E90, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F30, 0x7E60, 0x6A60, 0x5640, 0x4150, 0x2AE0, 0x16F0, 0x0280, 0xED80, 0xD8F0, 0xC560, 0xB460, 0xA5A0, 0x9B00, 0x92D0,
+ 0x8E00, 0x8A70, 0x8800, 0x8660, 0x8570, 0x8510, 0x84E0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84A0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84D0, 0x84D0,
+ 0x84E0, 0x8480, 0x84F0, 0x8500, 0x8530, 0x8520, 0x8530, 0x8560, 0x8520, 0x85D0, 0x8630, 0x86C0, 0x8790, 0x8870, 0x89B0, 0x8B30,
+ 0x8D70, 0x8F50, 0x9210, 0x94D0, 0x97D0, 0x9A90, 0x9E30, 0xA2C0, 0xA770, 0xABF0, 0xB160, 0xB5F0, 0xBAD0, 0xBF60, 0xC370, 0xC670,
+ 0xC8D0, 0xCB80, 0xCC90, 0xCDB0, 0xCDD0, 0xCD40, 0xCD70, 0xCC60, 0xCBA0, 0xCA90, 0xC8A0, 0xC770, 0xC690, 0xC4C0, 0xC2D0, 0xC030,
+ 0xBEF0, 0xBDB0, 0xBCE0, 0xBCC0, 0xBC50, 0xBC90, 0xBC30, 0xBC20, 0xBC40, 0xBB20, 0xBAA0, 0xB8A0, 0xB730, 0xB570, 0xB3E0, 0xB1D0,
+ 0xAFE0, 0xAE70, 0xABF0, 0xA940, 0xA730, 0xA580, 0xA440, 0xA2D0, 0xA230, 0xA220, 0xA250, 0xA3B0, 0xA560, 0xA7D0, 0xAB70, 0xAEF0,
+ 0xB320, 0xB760, 0xBC10, 0xC270, 0xCA20, 0xD1B0, 0xD9D0, 0xE1E0, 0xEA20, 0xF190, 0xF8B0, 0x00A0, 0x06F0, 0x0D00, 0x1120, 0x1370,
+ 0x1510, 0x14B0, 0x1420, 0x1280, 0x0EF0, 0x0B20, 0x0500, 0xFE90, 0xF730, 0xEF00, 0xE740, 0xDEA0, 0xD5B0, 0xCD60, 0xC3C0, 0xBA00,
+ 0xB120, 0xA880, 0xA010, 0x9880, 0x9240, 0x8D10, 0x85C0, 0x8560, 0x8530, 0x8560, 0x8500, 0x8500, 0x8500, 0x8500, 0x8500, 0x8510,
+ 0x8520, 0x8530, 0x8550, 0x8570, 0x85B0, 0x8610, 0x86B0, 0x87C0, 0x8910, 0x8AF0, 0x8DE0, 0x9200, 0x95A0, 0x9990, 0x9C50, 0x9E60,
+ 0xA110, 0xA310, 0xA4E0, 0xA6C0, 0xA8C0, 0xAAC0, 0xACC0, 0xAEC0, 0xB0A0, 0xB1B0, 0xB370, 0xB460, 0xB590, 0xB750, 0xB840, 0xBA60,
+ 0xBB50, 0xBC70, 0xBD40, 0xBD60, 0xBDD0, 0xBCC0, 0xBB00, 0xB9B0, 0xB830, 0xB6A0, 0xB480, 0xB150, 0xADF0, 0xA9F0, 0xA5E0, 0xA110,
+ 0x9D70, 0x99E0, 0x95D0, 0x9260, 0x8F30, 0x8C80, 0x8A70, 0x88B0, 0x8780, 0x86C0, 0x8640, 0x85F0, 0x85A0, 0x8570, 0x8530, 0x8510,
+ 0x8510, 0x8500, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84D0, 0x84D0,
+ 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0,
+ 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x84F0, 0x8500, 0x8500, 0x8510, 0x8520, 0x8530, 0x8540,
+ 0x8550, 0x8570, 0x8590, 0x85D0, 0x8610, 0x8680, 0x86F0, 0x8790, 0x8850, 0x8950, 0x8A60, 0x8BC0, 0x8DD0, 0x9080, 0x9340, 0x95A0,
+ 0x97D0, 0x9A60, 0x9CB0, 0x9F20, 0xA200, 0xA4A0, 0xA7C0, 0xAA00, 0xAC40, 0xAE70, 0xB070, 0xB2C0, 0xB580, 0xB840, 0xBB30, 0xBC60,
+ 0xBDA0, 0xBF20, 0xC0B0, 0xC250, 0xC370, 0xC4B0, 0xC550, 0xC5C0, 0xC5C0, 0xC4F0, 0xC4E0, 0xC450, 0xC380, 0xC200, 0xC070, 0xBE60,
+ 0xBBF0, 0xBA20, 0xB8E0, 0xB690, 0xB3A0, 0xB080, 0xADA0, 0xAB00, 0xA770, 0xA3C0, 0xA090, 0x9CE0, 0x98F0, 0x94F0, 0x91E0, 0x8EB0,
+ 0x8C30, 0x8A00, 0x8840, 0x8700, 0x8630, 0x85B0, 0x8580, 0x8550, 0x8530, 0x8530, 0x8500, 0x8510, 0x8500, 0x8500, 0x8500, 0x8500,
+ 0x8500, 0x8500, 0x8500, 0x8500, 0x8500, 0x8510, 0x8510, 0x8520, 0x8520, 0x8530, 0x8550, 0x8570, 0x8580, 0x85C0, 0x8610, 0x8650,
+ 0x86A0, 0x86F0, 0x8750, 0x8770, 0x87F0, 0x8820, 0x87E0, 0x8760, 0x86E0, 0x8670, 0x8610, 0x85C0, 0x8580, 0x8560, 0x8530, 0x8520,
+ 0x8500, 0x8500, 0x8510, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8520, 0x8580,
+ 0x86C0, 0x8D60, 0x9D40, 0xAE70, 0xC1B0, 0xD710, 0xEE00, 0x06C0, 0x20E0, 0x3B20, 0x5790, 0x6FA0, 0x7F60, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7EE0, 0x7F60, 0x7F10, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7EA0, 0x7EC0, 0x7EC0,
+ 0x7F10, 0x7F20, 0x7EA0, 0x7F00, 0x7F10, 0x7F20, 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7930, 0x6C80,
+ 0x5F20, 0x4F40, 0x3ED0, 0x2EB0, 0x1E70, 0x1060, 0x02F0, 0xF860, 0xF120, 0xEBF0, 0xEAB0, 0xEA60, 0xEA50, 0xEA10, 0xE7F0, 0xE340,
+ 0xDB80, 0xD290, 0xC800, 0xBE60, 0xB4D0, 0xAB60, 0xA0E0, 0x9680, 0x8D60, 0x8820, 0x8630, 0x8590, 0x8560, 0x8570, 0x85E0, 0x8730,
+ 0x8CC0, 0x9A90, 0xA8C0, 0xB550, 0xC060, 0xC9F0, 0xD310, 0xDC00, 0xE660, 0xF0E0, 0xFB50, 0x0670, 0x0F00, 0x1710, 0x1E30, 0x23C0,
+ 0x29E0, 0x2E50, 0x3310, 0x3770, 0x3C80, 0x42E0, 0x4780, 0x4BD0, 0x4FA0, 0x5340, 0x5690, 0x5960, 0x5C80, 0x6050, 0x63F0, 0x67A0,
+ 0x6B20, 0x6D50, 0x6F90, 0x7160, 0x72D0, 0x7510, 0x76F0, 0x78A0, 0x7A00, 0x7B50, 0x7C90, 0x7D30, 0x7E00, 0x7E30, 0x7EA0, 0x7EC0,
+ 0x7E90, 0x7E90, 0x7E60, 0x7E40, 0x7E70, 0x7EA0, 0x7ED0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F10, 0x7F30, 0x7F30, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20,
+ 0x7EF0, 0x7F30, 0x7F20, 0x7F10, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F00, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F10, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F70, 0x7F30, 0x7F00, 0x7F00, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F00, 0x7F10, 0x7EF0, 0x7F00, 0x7EE0, 0x7EC0, 0x7EC0, 0x7EF0, 0x7F50, 0x7F00, 0x7EC0, 0x7F00, 0x7F10, 0x7F30, 0x7EE0,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7EB0, 0x7F30, 0x7F00, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7EF0, 0x7F00, 0x7F00, 0x7EC0,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7F50, 0x7F00, 0x7F00, 0x7F50, 0x7F10, 0x7F60,
+ 0x7F20, 0x7F10, 0x7EF0, 0x7EF0, 0x7F90, 0x7F10, 0x7F00, 0x7EE0, 0x7EE0, 0x7F70, 0x7730, 0x6AA0, 0x5F60, 0x5280, 0x4660, 0x3B50,
+ 0x30D0, 0x2850, 0x2130, 0x1B90, 0x1790, 0x13D0, 0x1140, 0x0EF0, 0x0DD0, 0x0E60, 0x0F20, 0x1230, 0x1620, 0x1AA0, 0x1FC0, 0x2530,
+ 0x2AC0, 0x3070, 0x3550, 0x3A50, 0x3EE0, 0x4380, 0x4810, 0x4CF0, 0x53C0, 0x59D0, 0x6010, 0x66B0, 0x6CF0, 0x73D0, 0x79D0, 0x7E30,
+ 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7F50, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7ED0,
+ 0x7E90, 0x7EF0, 0x7EE0, 0x7F30, 0x7EB0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F60, 0x7EE0, 0x7EF0, 0x7F10, 0x7EF0, 0x7F60,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F00, 0x7EE0, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0, 0x7F00, 0x7300, 0x46D0, 0x2030,
+ 0xFC80, 0xE380, 0xD1B0, 0xC5B0, 0xBF00, 0xB9A0, 0xB4C0, 0xAF40, 0xA8B0, 0xA1D0, 0x9A40, 0x92B0, 0x8BB0, 0x8760, 0x85A0, 0x8510,
+ 0x84E0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450,
+ 0x8440, 0x8440, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8420, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8410, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450,
+ 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0,
+ 0x84D0, 0x84E0, 0x84F0, 0x8510, 0x8530, 0x8560, 0x85B0, 0x8630, 0x86E0, 0x87B0, 0x88F0, 0x89F0, 0x8AB0, 0x8B90, 0x8C10, 0x8DC0,
+ 0x9020, 0x9350, 0x9820, 0x9E50, 0xA5B0, 0xADC0, 0xB5C0, 0xBD80, 0xC3D0, 0xCA60, 0xD020, 0xD5F0, 0xDBF0, 0xE130, 0xE680, 0xEB40,
+ 0xEF70, 0xF300, 0xF580, 0xF910, 0xFBE0, 0xFE90, 0x0170, 0x0250, 0x0260, 0x0010, 0xFD90, 0xFA20, 0xF5C0, 0xF090, 0xEA20, 0xE370,
+ 0xDC90, 0xD670, 0xCFE0, 0xC950, 0xC290, 0xBCD0, 0xB650, 0xAFC0, 0xAA30, 0xA500, 0xA0D0, 0x9C90, 0x9A10, 0x9810, 0x95F0, 0x9450,
+ 0x9270, 0x9140, 0x8F50, 0x8D60, 0x8BD0, 0x8A20, 0x8930, 0x8910, 0x8950, 0x8AA0, 0x8CF0, 0x90E0, 0x95A0, 0x9A30, 0x9E90, 0xA300,
+ 0xA7A0, 0xAB70, 0xAF60, 0xB2E0, 0xB4A0, 0xB650, 0xB7A0, 0xB8E0, 0xBAD0, 0xBD00, 0xBFD0, 0xC380, 0xC750, 0xCD20, 0xD2E0, 0xD8F0,
+ 0xDEF0, 0xE460, 0xE900, 0xECD0, 0xEFD0, 0xF240, 0xF420, 0xF610, 0xF8A0, 0xFA70, 0xFBE0, 0xFCF0, 0xFE60, 0xFFF0, 0x0170, 0x0310,
+ 0x04C0, 0x06E0, 0x0990, 0x0B00, 0x0DE0, 0x0F30, 0x1160, 0x13C0, 0x15B0, 0x18B0, 0x1B60, 0x1E70, 0x2140, 0x2380, 0x2620, 0x2800,
+ 0x2900, 0x2A20, 0x2B60, 0x2E00, 0x3090, 0x32E0, 0x34C0, 0x3580, 0x3660, 0x3670, 0x3710, 0x38B0, 0x3A40, 0x3D70, 0x3FD0, 0x41D0,
+ 0x4400, 0x46D0, 0x4AB0, 0x4E70, 0x5160, 0x5410, 0x55D0, 0x5780, 0x5840, 0x5890, 0x5A20, 0x5BA0, 0x5D90, 0x5FB0, 0x61F0, 0x65C0,
+ 0x68F0, 0x6E30, 0x7460, 0x7A50, 0x7EB0, 0x7EA0, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EA0, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7EB0,
+ 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F70, 0x7D30, 0x6E40, 0x5DF0, 0x4B70, 0x3AC0,
+ 0x2A60, 0x1B80, 0x0EA0, 0x03E0, 0xFBA0, 0xF810, 0xF920, 0xFE60, 0x04C0, 0x09D0, 0x0C60, 0x0B40, 0x05F0, 0xFBD0, 0xED90, 0xDC80,
+ 0xC800, 0xB130, 0x9860, 0x87C0, 0x8500, 0x84D0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470,
+ 0x8460, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8420, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x84A0, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450,
+ 0x8450, 0x8450, 0x8430, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84E0, 0x8560, 0x88B0,
+ 0x9A10, 0xADA0, 0xBDF0, 0xCC40, 0xD8C0, 0xE430, 0xEF00, 0xF970, 0x0310, 0x0B30, 0x1200, 0x1660, 0x17F0, 0x1870, 0x17A0, 0x1670,
+ 0x1510, 0x1380, 0x1180, 0x0E10, 0x0980, 0x03E0, 0xFDA0, 0xF7B0, 0xF180, 0xEBA0, 0xE580, 0xDF40, 0xD970, 0xD3C0, 0xCF00, 0xCB40,
+ 0xC800, 0xC510, 0xC2E0, 0xC170, 0xBFD0, 0xBEF0, 0xBF80, 0xC030, 0xC1B0, 0xC450, 0xC6C0, 0xC9B0, 0xCE00, 0xD360, 0xD940, 0xDF30,
+ 0xE650, 0xEEE0, 0xF850, 0x0250, 0x0D70, 0x18C0, 0x2230, 0x2C60, 0x3560, 0x3E10, 0x4610, 0x4D90, 0x5520, 0x5C80, 0x6380, 0x6A90,
+ 0x71F0, 0x7880, 0x7D60, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EB0, 0x7F20,
+ 0x7EF0, 0x7EF0, 0x7EF0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F00, 0x7EE0, 0x7EC0, 0x7EF0, 0x7EB0, 0x7F40, 0x7F10, 0x7EC0, 0x7F40, 0x7EF0,
+ 0x7F30, 0x7F20, 0x7F00, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F50, 0x7EB0, 0x7E70, 0x7EF0, 0x7F00, 0x7F20, 0x7ED0, 0x7EB0, 0x7F20, 0x7F00, 0x7F40, 0x7ED0, 0x7EA0, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0,
+ 0x7F20, 0x7F40, 0x7F00, 0x7F60, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F90, 0x7F10, 0x7F00,
+ 0x7F00, 0x7ED0, 0x7F30, 0x7F00, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F40, 0x7EF0, 0x7EB0, 0x7EE0, 0x7F00, 0x7F30, 0x7F20, 0x7EC0, 0x7C90,
+ 0x7650, 0x6EE0, 0x6920, 0x6410, 0x61B0, 0x60C0, 0x6050, 0x6210, 0x6480, 0x6800, 0x6A50, 0x6C30, 0x6DB0, 0x6DE0, 0x6BD0, 0x68B0,
+ 0x63A0, 0x5E00, 0x5750, 0x5010, 0x47C0, 0x3E40, 0x3470, 0x28C0, 0x1DC0, 0x1270, 0x0670, 0xFAA0, 0xEED0, 0xE3D0, 0xDA30, 0xD270,
+ 0xCC10, 0xC7A0, 0xC540, 0xC390, 0xC1F0, 0xC070, 0xBFC0, 0xC020, 0xC140, 0xC300, 0xC560, 0xC800, 0xCAF0, 0xCEE0, 0xD3B0, 0xD9C0,
+ 0xE050, 0xE660, 0xEDB0, 0xF300, 0xF820, 0xFCA0, 0x0090, 0x0590, 0x0880, 0x09F0, 0x0A50, 0x0900, 0x07A0, 0x0590, 0x0310, 0xFF20,
+ 0xFA70, 0xF440, 0xED20, 0xE5E0, 0xDDE0, 0xD5D0, 0xCE40, 0xC660, 0xBD80, 0xB380, 0xA7E0, 0x9B80, 0x8FA0, 0x8810, 0x85A0, 0x8510,
+ 0x84E0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84D0, 0x8500,
+ 0x8580, 0x87C0, 0x92F0, 0xA430, 0xB5A0, 0xC5F0, 0xD6B0, 0xE400, 0xEF00, 0xF590, 0xF830, 0xF5E0, 0xEF50, 0xE5B0, 0xD9C0, 0xCB70,
+ 0xBFB0, 0xB590, 0xAFB0, 0xAD40, 0xAF10, 0xB3B0, 0xB930, 0xBE70, 0xC370, 0xC6B0, 0xC890, 0xC910, 0xC9B0, 0xC960, 0xC8D0, 0xC950,
+ 0xC9F0, 0xCBA0, 0xCB50, 0xC8B0, 0xC300, 0xB870, 0xAB30, 0x9A80, 0x8BD0, 0x8630, 0x8510, 0x84F0, 0x84D0, 0x84C0, 0x84B0, 0x84A0,
+ 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8470,
+ 0x8490, 0x8480, 0x8480, 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8470, 0x8450, 0x8450, 0x8450, 0x8460, 0x8450,
+ 0x8460, 0x8460, 0x84A0, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84D0, 0x8530, 0x85C0, 0x87C0, 0x8C90, 0x9270,
+ 0x9750, 0x9BE0, 0xA060, 0xA4F0, 0xA830, 0xA8A0, 0xA350, 0x9560, 0x87A0, 0x8510, 0x84D0, 0x8480, 0x8460, 0x8480, 0x8440, 0x8430,
+ 0x8430, 0x8450, 0x8420, 0x8410, 0x8420, 0x8400, 0x83F0, 0x83F0, 0x83D0, 0x83D0, 0x83D0, 0x83F0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83F0, 0x83C0, 0x83D0, 0x83D0, 0x83F0, 0x83E0, 0x8400, 0x8400, 0x8420, 0x8430, 0x8440, 0x8410, 0x8460, 0x8460,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x84A0, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84A0, 0x84A0, 0x84A0,
+ 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x8520, 0x8620, 0x8C10, 0x9DB0, 0xB020, 0xBEF0, 0xCC10,
+ 0xD700, 0xE0A0, 0xEA10, 0xF470, 0x0070, 0x0D20, 0x1AD0, 0x2790, 0x31E0, 0x3810, 0x39D0, 0x36A0, 0x2E30, 0x1FE0, 0x0CB0, 0xF400,
+ 0xDB90, 0xC530, 0xB1D0, 0xA370, 0x9970, 0x9280, 0x8DB0, 0x8AE0, 0x88A0, 0x8780, 0x86C0, 0x8630, 0x85E0, 0x85C0, 0x85D0, 0x85E0,
+ 0x85F0, 0x8610, 0x8640, 0x8690, 0x8760, 0x8930, 0x8DE0, 0x9600, 0xA080, 0xAB00, 0xB5D0, 0xBE20, 0xC4C0, 0xC9E0, 0xCE10, 0xD1E0,
+ 0xD5E0, 0xDAA0, 0xE0F0, 0xE840, 0xEF50, 0xF680, 0xFC60, 0x0160, 0x04C0, 0x0600, 0x03A0, 0xFE90, 0xF750, 0xED60, 0xE220, 0xD5D0,
+ 0xC890, 0xBB00, 0xACE0, 0x9C40, 0x8CF0, 0x8610, 0x84E0, 0x84B0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430,
+ 0x8420, 0x8430, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8420, 0x8420, 0x8430,
+ 0x8430, 0x8440, 0x8450, 0x8460, 0x8480, 0x8490, 0x84B0, 0x84D0, 0x84F0, 0x8520, 0x85A0, 0x86F0, 0x8B10, 0x9640, 0xA3A0, 0xB1D0,
+ 0xBFD0, 0xCDB0, 0xDBB0, 0xE8E0, 0xF6E0, 0x0240, 0x0B90, 0x13E0, 0x1A40, 0x1FF0, 0x2420, 0x2880, 0x2C40, 0x2F10, 0x3110, 0x3260,
+ 0x33A0, 0x3590, 0x3930, 0x3F30, 0x4900, 0x5650, 0x6770, 0x7810, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F00, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F20, 0x7F20, 0x7EF0, 0x66D0, 0x4E00, 0x36C0, 0x21C0, 0x1030, 0x00E0, 0xF090, 0xDED0, 0xC7D0, 0xAB10, 0x8C00, 0x84F0,
+ 0x84A0, 0x8480, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84F0, 0x84E0, 0x8520, 0x85F0,
+ 0x8990, 0x96D0, 0xA570, 0xB2B0, 0xBEA0, 0xCA80, 0xD410, 0xDC70, 0xE500, 0xEE10, 0xF790, 0x01B0, 0x0B50, 0x14D0, 0x1D60, 0x2500,
+ 0x2B10, 0x3050, 0x3690, 0x3BA0, 0x41C0, 0x4840, 0x4E30, 0x5620, 0x5C90, 0x6300, 0x6820, 0x6BC0, 0x6ED0, 0x7070, 0x72A0, 0x74F0,
+ 0x7770, 0x7AA0, 0x7D00, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F00, 0x7F10, 0x7EB0, 0x7EC0, 0x7ED0, 0x7EB0, 0x7EE0,
+ 0x7F10, 0x7EA0, 0x7EA0, 0x7ED0, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F00, 0x7F10, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F50, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10,
+ 0x7F70, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F80, 0x7EF0, 0x7EB0, 0x7F00, 0x7EF0, 0x7F50, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F40,
+ 0x7EE0, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7E70, 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F00,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F50, 0x7F00, 0x7F40, 0x7F40, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00,
+ 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F00, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F20,
+ 0x7F10, 0x7E90, 0x7EB0, 0x7ED0, 0x7F10, 0x7F00, 0x7E80, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F00, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7EE0,
+ 0x7F50, 0x7EF0, 0x7F20, 0x7F00, 0x7F10, 0x7F70, 0x7EB0, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EE0, 0x7EB0, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F20, 0x7ED0, 0x7EB0, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F40, 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7F60, 0x7E90, 0x7F00, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F10,
+ 0x7F20, 0x7EF0, 0x7F80, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F70, 0x7EE0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F70, 0x7F10, 0x7F00, 0x7F00,
+ 0x7EE0, 0x7F50, 0x7F00, 0x7EE0, 0x7ED0, 0x7EB0, 0x7F30, 0x7EF0, 0x7E90, 0x7ED0, 0x7F00, 0x7F30, 0x7F20, 0x7EA0, 0x7ED0, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EE0, 0x7EF0, 0x7F80, 0x7F00, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7F10, 0x7EF0, 0x7F20, 0x7ED0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7ED0, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F00, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7F80, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0,
+ 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EF0, 0x7F60, 0x7EF0, 0x7EC0, 0x7ED0, 0x7F00, 0x7F20, 0x7F10, 0x7E90, 0x7EE0, 0x7EE0,
+ 0x7F10, 0x7F10, 0x7E90, 0x7E60, 0x7EF0, 0x7F10, 0x7F20, 0x7E90, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7EE0, 0x7EF0,
+ 0x7F00, 0x7EE0, 0x7F40, 0x7EF0, 0x7F20, 0x7F40, 0x7EC0, 0x7F10, 0x7EF0, 0x7F10, 0x7F00, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F00, 0x7F30, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0, 0x7EF0, 0x7F00, 0x7F40, 0x7EF0, 0x7E90, 0x7EE0, 0x7EE0, 0x7F10,
+ 0x7F10, 0x7E70, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7E90, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F20, 0x7EF0, 0x7F10,
+ 0x7EC0, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7F10, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7A60,
+ 0x7140, 0x67E0, 0x5F90, 0x57B0, 0x4FF0, 0x47C0, 0x4070, 0x3830, 0x3160, 0x29E0, 0x21E0, 0x1A40, 0x1190, 0x0890, 0xFE70, 0xF3D0,
+ 0xEA50, 0xE040, 0xD6C0, 0xCD30, 0xC470, 0xBC40, 0xB410, 0xACF0, 0xA6E0, 0xA110, 0x9D60, 0x99F0, 0x9830, 0x9720, 0x96D0, 0x97E0,
+ 0x9960, 0x9BC0, 0x9ED0, 0xA200, 0xA520, 0xA8C0, 0xAC90, 0xB100, 0xB500, 0xB950, 0xBD30, 0xC080, 0xC550, 0xC900, 0xCBD0, 0xCE10,
+ 0xD090, 0xD240, 0xD3F0, 0xD5D0, 0xD750, 0xD8C0, 0xD9F0, 0xDAD0, 0xDBC0, 0xDC40, 0xDD00, 0xDDD0, 0xDF10, 0xE080, 0xE210, 0xE380,
+ 0xE5B0, 0xE760, 0xE8C0, 0xEAF0, 0xED60, 0xF140, 0xF540, 0xF990, 0xFDC0, 0x0110, 0x0480, 0x0820, 0x0B40, 0x0E30, 0x1090, 0x12A0,
+ 0x15C0, 0x1800, 0x1990, 0x1BA0, 0x1D80, 0x1E90, 0x1F50, 0x2000, 0x20F0, 0x2180, 0x2240, 0x2370, 0x23A0, 0x23B0, 0x2400, 0x24C0,
+ 0x24D0, 0x2470, 0x24C0, 0x2490, 0x2430, 0x2490, 0x2340, 0x21E0, 0x1FD0, 0x1CD0, 0x19E0, 0x1650, 0x1290, 0x0EE0, 0x0980, 0x0310,
+ 0xFBF0, 0xF3C0, 0xEAC0, 0xE0E0, 0xD820, 0xD050, 0xC900, 0xC2A0, 0xBCA0, 0xB6E0, 0xB110, 0xABB0, 0xA700, 0xA250, 0x9E40, 0x9950,
+ 0x94E0, 0x90C0, 0x8D70, 0x8AE0, 0x88B0, 0x8790, 0x8680, 0x85E0, 0x8590, 0x8540, 0x8520, 0x8500, 0x84F0, 0x84E0, 0x84D0, 0x84D0,
+ 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8470,
+ 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8460, 0x8460, 0x8460, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8450, 0x8460,
+ 0x8450, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8440, 0x8470, 0x8430, 0x8430, 0x8430, 0x8470,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8450, 0x8460, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x83F0, 0x8400, 0x83F0, 0x83E0, 0x83E0, 0x8400, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x8410, 0x83C0, 0x83C0,
+ 0x83C0, 0x83A0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0,
+ 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450,
+ 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x84F0, 0x8520, 0x85A0, 0x86E0,
+ 0x8A40, 0x93B0, 0x9F50, 0xA8D0, 0xB1D0, 0xBA40, 0xC200, 0xC8F0, 0xD020, 0xD5A0, 0xD980, 0xDD20, 0xDF70, 0xE190, 0xE240, 0xE120,
+ 0xDE30, 0xD7A0, 0xD050, 0xC480, 0xB4B0, 0xA1F0, 0x8D30, 0x8580, 0x84D0, 0x84A0, 0x8480, 0x8470, 0x8470, 0x8460, 0x8450, 0x8450,
+ 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8460, 0x8460, 0x8480, 0x8490, 0x84C0, 0x8530, 0x89C0,
+ 0xA990, 0xC7D0, 0xE3D0, 0xFDF0, 0x12E0, 0x2440, 0x3190, 0x3D00, 0x4470, 0x48F0, 0x4BF0, 0x4D30, 0x4DF0, 0x4E10, 0x4DD0, 0x4EC0,
+ 0x4F40, 0x5150, 0x5490, 0x5760, 0x5C00, 0x60A0, 0x65F0, 0x6BA0, 0x7180, 0x7880, 0x7DA0, 0x7F40, 0x7F10, 0x7F10, 0x7F40, 0x7F00,
+ 0x7F30, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F70, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EC0, 0x7ED0, 0x7F30, 0x7F20, 0x7E90, 0x7ED0, 0x7EE0, 0x7F20, 0x7F10,
+ 0x7E90, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7EE0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F20, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F60,
+ 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F80, 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7EF0,
+ 0x7EA0, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F10, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F40, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F70, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F80,
+ 0x7F10, 0x7F00, 0x7F00, 0x7F00, 0x7F80, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EA0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F20,
+ 0x7EC0, 0x7ED0, 0x7EF0, 0x7F00, 0x7EF0, 0x7E90, 0x7EB0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7340,
+ 0x5A80, 0x4030, 0x2540, 0x0B50, 0xF2D0, 0xDC30, 0xC6C0, 0xB1A0, 0xA050, 0x91F0, 0x8990, 0x86B0, 0x85D0, 0x85A0, 0x85C0, 0x8650,
+ 0x88E0, 0x91F0, 0xA270, 0xB5A0, 0xCB70, 0xE250, 0xF9B0, 0x1150, 0x26A0, 0x3BB0, 0x4C10, 0x5960, 0x63D0, 0x6AD0, 0x6FF0, 0x7340,
+ 0x73D0, 0x7390, 0x71C0, 0x6DD0, 0x69B0, 0x6400, 0x5DF0, 0x5680, 0x4DB0, 0x4520, 0x3C00, 0x3350, 0x2BA0, 0x2460, 0x1ED0, 0x1900,
+ 0x1420, 0x0E70, 0xF610, 0xEF50, 0xE8A0, 0xE400, 0xE090, 0xDFB0, 0xE2E0, 0xE820, 0xEF40, 0xF720, 0xFD40, 0x0190, 0x0380, 0x0390,
+ 0x02F0, 0x0240, 0x02D0, 0x0450, 0x06F0, 0x0B40, 0x11C0, 0x19D0, 0x2160, 0x29E0, 0x3140, 0x3830, 0x3FE0, 0x4820, 0x4F90, 0x5770,
+ 0x60B0, 0x6990, 0x7170, 0x7840, 0x7D40, 0x7EB0, 0x7F00, 0x7F00, 0x7F40, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F00,
+ 0x7F00, 0x7EF0, 0x7ED0, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F50, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F30, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F50, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7ED0, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F00, 0x7F40, 0x7F00, 0x7F10, 0x7EF0, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F20,
+ 0x7EC0, 0x7EF0, 0x65D0, 0x4360, 0x1E80, 0xF5A0, 0xCFE0, 0xA960, 0x8A20, 0x84F0, 0x84B0, 0x8490, 0x8480, 0x8490, 0x8460, 0x8460,
+ 0x8470, 0x8460, 0x8450, 0x8460, 0x8490, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x8500, 0x85F0, 0x8E80, 0xA650, 0xBBF0, 0xCF30,
+ 0xE1B0, 0xF1B0, 0xFFB0, 0x0CE0, 0x1A00, 0x25B0, 0x3120, 0x3B80, 0x4450, 0x4CB0, 0x52C0, 0x5800, 0x5B40, 0x5DB0, 0x5F30, 0x5FE0,
+ 0x6090, 0x6110, 0x60F0, 0x6130, 0x6120, 0x61C0, 0x60F0, 0x6050, 0x6030, 0x5F70, 0x5FD0, 0x5EB0, 0x5CE0, 0x5A90, 0x5710, 0x5360,
+ 0x4EA0, 0x4950, 0x4350, 0x3CE0, 0x36C0, 0x3050, 0x2A30, 0x2440, 0x1CE0, 0x1650, 0x0F30, 0x0780, 0x00F0, 0xF9A0, 0xF420, 0xEEA0,
+ 0xEA10, 0xE6B0, 0xE2A0, 0xDF60, 0xDB30, 0xD670, 0xD200, 0xCD80, 0xC9A0, 0xC670, 0xC320, 0xC030, 0xBC80, 0xB960, 0xB6D0, 0xB380,
+ 0xB170, 0xAF00, 0xAC00, 0xA950, 0xA580, 0xA280, 0x9FE0, 0x9DC0, 0x9B10, 0x98A0, 0x9670, 0x9450, 0x9240, 0x90E0, 0x8F90, 0x8E60,
+ 0x8D20, 0x8BF0, 0x8BA0, 0x8B10, 0x8B30, 0x8B50, 0x8B50, 0x8BB0, 0x8BB0, 0x8B90, 0x8BB0, 0x8C10, 0x8D20, 0x8EA0, 0x8FD0, 0x9050,
+ 0x90A0, 0x91C0, 0x9270, 0x9470, 0x9630, 0x97A0, 0x9980, 0x9AF0, 0x9D00, 0x9FB0, 0xA210, 0xA510, 0xA880, 0xABC0, 0xAE40, 0xB160,
+ 0xB580, 0xB9C0, 0xBE70, 0xC2B0, 0xC670, 0xCB20, 0xCFB0, 0xD410, 0xD8F0, 0xDD80, 0xE230, 0xE690, 0xEA90, 0xEF20, 0xF3D0, 0xF830,
+ 0xFBE0, 0xFF60, 0x0350, 0x0770, 0x0B20, 0x0E70, 0x11F0, 0x15B0, 0x18E0, 0x1C30, 0x1EF0, 0x2170, 0x24C0, 0x2790, 0x2C50, 0x3100,
+ 0x3610, 0x3A70, 0x3D60, 0x4150, 0x4510, 0x4900, 0x4E20, 0x5380, 0x58D0, 0x5D70, 0x60A0, 0x6C80, 0x6F70, 0x71F0, 0x7360, 0x7550,
+ 0x7690, 0x7730, 0x7840, 0x7880, 0x7890, 0x78A0, 0x77B0, 0x7800, 0x7740, 0x7750, 0x7710, 0x75F0, 0x7520, 0x73C0, 0x7300, 0x7240,
+ 0x70C0, 0x6F30, 0x6D20, 0x6B80, 0x69E0, 0x67D0, 0x66F0, 0x6520, 0x6350, 0x6130, 0x5F60, 0x5D80, 0x5B80, 0x59B0, 0x5840, 0x5740,
+ 0x56D0, 0x5560, 0x53F0, 0x5310, 0x52B0, 0x5300, 0x5260, 0x51D0, 0x50F0, 0x4F70, 0x4DF0, 0x4D00, 0x4B70, 0x4B10, 0x4A10, 0x49B0,
+ 0x4960, 0x47E0, 0x46F0, 0x4540, 0x4490, 0x43A0, 0x4180, 0x4010, 0x3D90, 0x3B20, 0x3800, 0x3570, 0x32F0, 0x2FB0, 0x2C30, 0x2820,
+ 0x23C0, 0x1FF0, 0x1BC0, 0x1780, 0x1390, 0x0EA0, 0x0AA0, 0x0690, 0x0350, 0x0020, 0xFD40, 0xFB90, 0xF9E0, 0xF860, 0xF770, 0xF730,
+ 0xF7F0, 0xF940, 0xFB30, 0xFE90, 0x01E0, 0x0620, 0x0AF0, 0x10C0, 0x1680, 0x1B10, 0x2100, 0x26E0, 0x2BF0, 0x31F0, 0x3730, 0x3E00,
+ 0x43F0, 0x49B0, 0x4FA0, 0x5400, 0x5810, 0x5BB0, 0x5F60, 0x6380, 0x6680, 0x6960, 0x6B80, 0x6CD0, 0x6F10, 0x6FA0, 0x70C0, 0x7190,
+ 0x7230, 0x72C0, 0x7280, 0x7380, 0x7420, 0x7500, 0x76F0, 0x7890, 0x7930, 0x7940, 0x78D0, 0x7870, 0x7800, 0x7610, 0x7270, 0x6C60,
+ 0x65A0, 0x5D90, 0x5690, 0x4F60, 0x4770, 0x40A0, 0x38E0, 0x3070, 0x27E0, 0x2060, 0x1B70, 0x1910, 0x19F0, 0x1D60, 0x21D0, 0x2630,
+ 0x28B0, 0x2970, 0x2950, 0x2790, 0x25E0, 0x2320, 0x20B0, 0x1F60, 0x1D20, 0x1AD0, 0x1690, 0x10F0, 0x0960, 0xFF80, 0xF410, 0xE570,
+ 0xD570, 0xC510, 0xB380, 0xA140, 0x8F50, 0x86D0, 0x8510, 0x84D0, 0x84B0, 0x8490, 0x84B0, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450,
+ 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8470, 0x8430, 0x8430, 0x8430, 0x8410, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8430, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8410, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8410, 0x8450, 0x8450, 0x8460,
+ 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x8500,
+ 0x8530, 0x8590, 0x8640, 0x8890, 0x8C90, 0x9340, 0x9AC0, 0xA190, 0xA8C0, 0xAFA0, 0xB5C0, 0xBCA0, 0xC2B0, 0xC870, 0xCDA0, 0xD1E0,
+ 0xD5C0, 0xD9A0, 0xDDE0, 0xE230, 0xE6B0, 0xEAA0, 0xED70, 0xF010, 0xF1F0, 0xF3D0, 0xF520, 0xF6A0, 0xF780, 0xF830, 0xF8A0, 0xF8F0,
+ 0xF960, 0xFA60, 0xF990, 0xF7F0, 0xF760, 0xF6F0, 0xF6C0, 0xF7F0, 0xFA30, 0xFBF0, 0xFEA0, 0x0030, 0x01C0, 0x0320, 0x03D0, 0x03E0,
+ 0x0300, 0x0240, 0x00D0, 0xFF70, 0xFEA0, 0xFDC0, 0xFCD0, 0xFBA0, 0xFA90, 0xFAA0, 0xFB60, 0xFBE0, 0xFCF0, 0xFDD0, 0xFEB0, 0xFEE0,
+ 0xFF80, 0xFF70, 0xFF10, 0xFF40, 0xFFD0, 0x01D0, 0x05B0, 0x0BE0, 0x1360, 0x1C10, 0x24A0, 0x2B70, 0x3050, 0x3400, 0x37B0, 0x3AD0,
+ 0x3E90, 0x4380, 0x48C0, 0x4E90, 0x53B0, 0x5760, 0x5B10, 0x5F50, 0x62B0, 0x6620, 0x69F0, 0x6E70, 0x7270, 0x75C0, 0x7870, 0x7AB0,
+ 0x7CE0, 0x7E60, 0x7F10, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7BE0, 0x7320, 0x6A60, 0x5FF0, 0x53F0, 0x44C0, 0x3470, 0x2150, 0x0B50, 0xF260, 0xD6C0, 0xB8F0, 0x99E0, 0x86E0,
+ 0x84E0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480,
+ 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8540, 0x8580,
+ 0x85E0, 0x8660, 0x8750, 0x8820, 0x8990, 0x8B10, 0x8C40, 0x8CC0, 0x8D20, 0x8CD0, 0x8B70, 0x8A00, 0x8850, 0x86E0, 0x85E0, 0x8540,
+ 0x8500, 0x84D0, 0x84D0, 0x84A0, 0x8490, 0x8480, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8410,
+ 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8480, 0x8430, 0x8430, 0x8440, 0x8430, 0x8440,
+ 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8480, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480,
+ 0x8490, 0x8490, 0x84B0, 0x84B0, 0x84C0, 0x84E0, 0x8510, 0x8570, 0x8690, 0x8A20, 0x9430, 0x9F80, 0xAA10, 0xB350, 0xBCA0, 0xC500,
+ 0xCC40, 0xD430, 0xDC00, 0xE300, 0xEB20, 0xF220, 0xFA30, 0x01D0, 0x0930, 0x11C0, 0x1A00, 0x21B0, 0x29C0, 0x3270, 0x3BF0, 0x4480,
+ 0x4C80, 0x5440, 0x5B10, 0x6210, 0x67B0, 0x6CE0, 0x7270, 0x76A0, 0x7AE0, 0x7E40, 0x7F70, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F60,
+ 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F70, 0x7EF0, 0x7EE0, 0x7F00, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7F10, 0x7F00, 0x7F20, 0x7ED0,
+ 0x7EB0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7E90, 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00,
+ 0x7F40, 0x7ED0, 0x7F10, 0x7F40, 0x7F00, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F80, 0x7F00, 0x7F10, 0x7F00, 0x7F10, 0x7F10,
+ 0x7EC0, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F00, 0x7F60, 0x7EE0, 0x7F10, 0x7F20, 0x7EF0, 0x7F80, 0x7F10, 0x7F20, 0x7F00, 0x7EF0,
+ 0x7F70, 0x7EF0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7EE0, 0x7F50, 0x7F10, 0x7C90, 0x5530, 0x33E0, 0x16D0,
+ 0xFE10, 0xE650, 0xCDA0, 0xB100, 0x8E60, 0x8510, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x84E0,
+ 0x8510, 0x8580, 0x8660, 0x8850, 0x8D90, 0x97C0, 0xA3F0, 0xAF10, 0xB760, 0xBB10, 0xB740, 0xAE30, 0xA000, 0x8FA0, 0x8700, 0x8520,
+ 0x84E0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490,
+ 0x84A0, 0x84B0, 0x84C0, 0x84F0, 0x8510, 0x8550, 0x85F0, 0x8760, 0x8B70, 0x9400, 0x9F80, 0xAB40, 0xB780, 0xC370, 0xCF90, 0xDD00,
+ 0xEB40, 0xFB50, 0x0CD0, 0x1DF0, 0x2D50, 0x3A80, 0x4600, 0x4F70, 0x5800, 0x60C0, 0x68D0, 0x70B0, 0x7880, 0x7DA0, 0x7F20, 0x7F20,
+ 0x7F50, 0x7F10, 0x7F00, 0x7EE0, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7F00, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EF0, 0x7F30,
+ 0x7F00, 0x7EA0, 0x7ED0, 0x7ED0, 0x7F20, 0x7F20, 0x7E90, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7E80, 0x7ED0, 0x7F10, 0x7F20, 0x7F20,
+ 0x7E90, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F00, 0x7EE0, 0x7F40, 0x7F20, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F30, 0x7EE0, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F70, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60,
+ 0x7ED0, 0x7EB0, 0x7F00, 0x7F20, 0x7F50, 0x7EF0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EA0, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0,
+ 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F60, 0x7F00, 0x7F40, 0x7F10, 0x7F20,
+ 0x7F60, 0x7EF0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F80, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F80, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F50,
+ 0x7F10, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EF0, 0x7F00, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7EA0, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7F10, 0x7F20, 0x7F20, 0x7F00,
+ 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F50, 0x7EF0, 0x7F20, 0x7F00, 0x7F10, 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F70,
+ 0x7EE0, 0x7ED0, 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7340,
+ 0x56F0, 0x3D50, 0x2850, 0x1980, 0x0FE0, 0x0AF0, 0x0A60, 0x0C10, 0x0FC0, 0x14F0, 0x1B80, 0x2360, 0x2C50, 0x35F0, 0x3FF0, 0x4A40,
+ 0x5500, 0x5DA0, 0x65A0, 0x6B30, 0x70B0, 0x75B0, 0x79D0, 0x7C90, 0x7E80, 0x7F10, 0x7F30, 0x7F00, 0x7E40, 0x7BB0, 0x77B0, 0x7300,
+ 0x6EA0, 0x6AC0, 0x6710, 0x62B0, 0x5D00, 0x5510, 0x4A90, 0x3C70, 0x2B20, 0x1760, 0x02F0, 0xECA0, 0xD880, 0xC530, 0xB3F0, 0xA430,
+ 0x95C0, 0x8B80, 0x8710, 0x8590, 0x8520, 0x84F0, 0x84E0, 0x8460, 0x84D0, 0x84D0, 0x84D0, 0x84F0, 0x8520, 0x85C0, 0x87F0, 0x9090,
+ 0x9D60, 0xA950, 0xB470, 0xBF80, 0xCA00, 0xD3B0, 0xDC90, 0xE300, 0xE860, 0xEC90, 0xF000, 0xF0F0, 0xF040, 0xEDF0, 0xE930, 0xE180,
+ 0xD8F0, 0xD020, 0xC780, 0xBFF0, 0xB980, 0xB450, 0xB060, 0xAE50, 0xAE20, 0xAF90, 0xB230, 0xB510, 0xB8F0, 0xBD70, 0xC350, 0xC940,
+ 0xE1A0, 0xE850, 0xEEB0, 0xF530, 0xFC00, 0x0240, 0x0830, 0x0E00, 0x12E0, 0x1710, 0x1B20, 0x1FA0, 0x23E0, 0x2730, 0x29F0, 0x2CA0,
+ 0x2EE0, 0x3110, 0x3270, 0x3370, 0x3570, 0x3620, 0x3740, 0x3930, 0x3BD0, 0x3F70, 0x43A0, 0x48B0, 0x4E20, 0x53C0, 0x5910, 0x5EB0,
+ 0x6570, 0x6B70, 0x7140, 0x76D0, 0x7AF0, 0x7DA0, 0x7EB0, 0x7EF0, 0x7EE0, 0x7E70, 0x7D30, 0x7A30, 0x7620, 0x7110, 0x6AD0, 0x6300,
+ 0x5A20, 0x50D0, 0x4730, 0x3DE0, 0x3500, 0x2D60, 0x2680, 0x20B0, 0x1C60, 0x18D0, 0x1590, 0x12A0, 0x1070, 0x0F50, 0x1020, 0x11A0,
+ 0x1400, 0x1710, 0x1B30, 0x2000, 0x2670, 0x2DB0, 0x3570, 0x3C20, 0x4340, 0x49C0, 0x5170, 0x58E0, 0x5F50, 0x6610, 0x6C20, 0x7240,
+ 0x7740, 0x7AD0, 0x7DB0, 0x7E50, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7F50, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7D80, 0x7A40, 0x7710, 0x7330, 0x6F40, 0x6BD0, 0x6730, 0x6330, 0x5F00, 0x5AE0, 0x5770, 0x5440,
+ 0x5200, 0x5090, 0x4F30, 0x4EC0, 0x4D40, 0x4CB0, 0x4BB0, 0x4A50, 0x4A10, 0x49A0, 0x49E0, 0x4990, 0x48C0, 0x49E0, 0x4AC0, 0x4CC0,
+ 0x4E40, 0x4ED0, 0x4FD0, 0x5000, 0x5120, 0x5150, 0x5290, 0x5590, 0x5800, 0x5A10, 0x5B90, 0x5C80, 0x5DE0, 0x5F40, 0x6080, 0x62A0,
+ 0x63C0, 0x64F0, 0x66A0, 0x6840, 0x69C0, 0x6AD0, 0x6CB0, 0x6DF0, 0x6E60, 0x6E90, 0x6E70, 0x6F80, 0x70F0, 0x72B0, 0x7420, 0x7520,
+ 0x7650, 0x7650, 0x7670, 0x76C0, 0x7730, 0x7860, 0x7940, 0x79D0, 0x7AF0, 0x7B70, 0x7CC0, 0x7DD0, 0x7E80, 0x7EA0, 0x7E90, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F10, 0x7ED0, 0x7F20, 0x7EE0, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F20,
+ 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F90, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F70, 0x7F00, 0x7EC0,
+ 0x7ED0, 0x7EE0, 0x7F80, 0x7F10, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F00, 0x7E70, 0x7ED0, 0x7EB0, 0x7F10, 0x7F00, 0x7E90, 0x7EF0,
+ 0x7F20, 0x7F20, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F00, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F70, 0x7EF0, 0x7F10,
+ 0x7EE0, 0x7EF0, 0x7F90, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7F70, 0x7F00, 0x7EC0, 0x7EF0, 0x7F00, 0x7F40, 0x7ED0, 0x7EB0, 0x7F10,
+ 0x7ED0, 0x7EF0, 0x7EE0, 0x7F50, 0x7ED0, 0x7EC0, 0x7EF0, 0x7F00, 0x7F20, 0x7EE0, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7EF0, 0x7E90,
+ 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F70,
+ 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F70, 0x7F10, 0x7F00, 0x7F00, 0x7ED0, 0x7F70, 0x7F20, 0x7ED0, 0x7ED0, 0x7EE0, 0x7EF0, 0x7EF0,
+ 0x7EB0, 0x7EC0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7F10, 0x7F00, 0x7A60, 0x72C0, 0x6BA0, 0x65E0, 0x6050, 0x5C90, 0x5920,
+ 0x5740, 0x5580, 0x53B0, 0x52F0, 0x5130, 0x51B0, 0x51E0, 0x5210, 0x5310, 0x5400, 0x5440, 0x5490, 0x5410, 0x53E0, 0x5360, 0x5270,
+ 0x5130, 0x4E00, 0x4970, 0x42C0, 0x3A90, 0x3160, 0x25B0, 0x1990, 0x0BE0, 0xFD60, 0xED90, 0xDCF0, 0xCB60, 0xB800, 0xA2C0, 0x8D00,
+ 0x85B0, 0x84E0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420,
+ 0x8410, 0x8420, 0x8410, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8480,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84C0, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84E0,
+ 0x84F0, 0x84F0, 0x8510, 0x8560, 0x8560, 0x85D0, 0x85F0, 0x8670, 0x8750, 0x88F0, 0x8B90, 0x8EC0, 0x91B0, 0x94F0, 0x9890, 0x9CA0,
+ 0xA170, 0xA6D0, 0xAC20, 0xAFF0, 0xB450, 0xB880, 0xBD00, 0xC1F0, 0xC740, 0xCD30, 0xD300, 0xD8D0, 0xDD70, 0xE1E0, 0xE700, 0xEAC0,
+ 0xEE00, 0xF0D0, 0xF270, 0xF3F0, 0xF500, 0xF6D0, 0xF840, 0xF920, 0xF8F0, 0xF830, 0xF6C0, 0xF5D0, 0xF490, 0xF390, 0xF140, 0xEE40,
+ 0xEAD0, 0xE710, 0xE400, 0xE140, 0xDEB0, 0xDCB0, 0xDA00, 0xD7F0, 0xD660, 0xD4C0, 0xD310, 0xD210, 0xD0B0, 0xCFE0, 0xCDB0, 0xCC70,
+ 0xCB00, 0xCB40, 0xCC20, 0xCD30, 0xCF20, 0xD010, 0xD170, 0xD390, 0xD660, 0xD950, 0xDBE0, 0xDE60, 0xE0C0, 0xE350, 0xE660, 0xE940,
+ 0xEC50, 0xEFC0, 0xF2E0, 0xF5E0, 0xF7B0, 0xF920, 0xF9A0, 0xF910, 0xF8F0, 0xF7D0, 0xF600, 0xF3C0, 0xF0C0, 0xEEC0, 0xEC60, 0xEA90,
+ 0xE930, 0xE7B0, 0xE710, 0xE5F0, 0xE560, 0xE570, 0xE5F0, 0xE7B0, 0xE9D0, 0xEB80, 0xEE40, 0xF110, 0xF430, 0xF770, 0xFB00, 0xFD90,
+ 0xFFF0, 0x0230, 0x0540, 0x08D0, 0x0CC0, 0x1140, 0x1580, 0x19D0, 0x1E60, 0x2350, 0x2910, 0x30E0, 0x38E0, 0x4180, 0x4B10, 0x5590,
+ 0x6020, 0x6BC0, 0x76D0, 0x7E90, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7B70, 0x74B0, 0x6D30,
+ 0x6560, 0x5CF0, 0x5490, 0x4C60, 0x44C0, 0x3E30, 0x3880, 0x3330, 0x2E70, 0x2AD0, 0x26F0, 0x2440, 0x2200, 0x2070, 0x2010, 0x2100,
+ 0x2250, 0x24D0, 0x28F0, 0x2E30, 0x3390, 0x3940, 0x3E90, 0x4370, 0x45E0, 0x46C0, 0x4540, 0x4240, 0x3D90, 0x3830, 0x32E0, 0x2DD0,
+ 0x28A0, 0x2440, 0x2000, 0x1C60, 0x1920, 0x15E0, 0x1320, 0x1080, 0x0DF0, 0x0AE0, 0x0830, 0x0530, 0x02F0, 0x0080, 0xFDF0, 0xFA50,
+ 0xF690, 0xF230, 0xEDE0, 0xE950, 0xE550, 0xE120, 0xDD80, 0xD9F0, 0xD7A0, 0xD5D0, 0xD480, 0xD350, 0xD260, 0xD1A0, 0xD0D0, 0xD030,
+ 0xCFA0, 0xCF20, 0xCDD0, 0xCC80, 0xCA40, 0xC750, 0xC450, 0xC000, 0xBBC0, 0xB6F0, 0xB250, 0xAD00, 0xA800, 0xA280, 0x9D70, 0x98B0,
+ 0x94F0, 0x91E0, 0x8FC0, 0x8E00, 0x8CC0, 0x8BF0, 0x8BF0, 0x8C10, 0x8C90, 0x8DF0, 0x8EB0, 0x8F90, 0x9040, 0x90F0, 0x90E0, 0x90D0,
+ 0x8FC0, 0x8E60, 0x8D50, 0x8C00, 0x8A80, 0x8940, 0x8820, 0x8720, 0x8640, 0x85A0, 0x8540, 0x8540, 0x84F0, 0x84E0, 0x84D0, 0x84B0,
+ 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8450, 0x8430, 0x8430, 0x8430, 0x8420, 0x8430,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8440,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84E0,
+ 0x8500, 0x8540, 0x85B0, 0x8670, 0x8750, 0x8800, 0x88A0, 0x89F0, 0x8C00, 0x9010, 0x9400, 0x96E0, 0x9880, 0x9810, 0x95F0, 0x91A0,
+ 0x8C20, 0x87F0, 0x8600, 0x8530, 0x84F0, 0x8500, 0x84F0, 0x84B0, 0x84B0, 0x84D0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8470,
+ 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x84A0, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8490, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0,
+ 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x84F0, 0x84F0,
+ 0x84F0, 0x8500, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84E0, 0x84C0, 0x84D0, 0x84B0, 0x84A0, 0x84A0,
+ 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x84C0, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84E0, 0x8500, 0x8510, 0x8530, 0x8570, 0x85C0, 0x8670, 0x8760,
+ 0x88A0, 0x8A90, 0x8D00, 0x8FC0, 0x92D0, 0x95D0, 0x9980, 0x9CD0, 0x9FF0, 0xA2E0, 0xA620, 0xA960, 0xAC70, 0xAF40, 0xB1D0, 0xB3B0,
+ 0xB5B0, 0xB7A0, 0xB970, 0xBC30, 0xBEB0, 0xC1A0, 0xC430, 0xC6B0, 0xC8C0, 0xCA30, 0xCBD0, 0xCD70, 0xCE40, 0xCF00, 0xCFD0, 0xD130,
+ 0xD270, 0xD330, 0xD460, 0xD540, 0xD640, 0xD750, 0xD730, 0xD820, 0xD780, 0xD7F0, 0xD820, 0xD8A0, 0xD8F0, 0xD860, 0xD760, 0xD670,
+ 0xD510, 0xD430, 0xD2C0, 0xD150, 0xCFE0, 0xCD70, 0xCB70, 0xC910, 0xC680, 0xC430, 0xC1C0, 0xC010, 0xBEC0, 0xBD10, 0xBBF0, 0xBB30,
+ 0xBB10, 0xB9F0, 0xB930, 0xB8A0, 0xB8E0, 0xB9E0, 0xBAC0, 0xBC20, 0xBDF0, 0xBE80, 0xBF40, 0xBF30, 0xBF30, 0xBFB0, 0xC010, 0xC180,
+ 0xC170, 0xC130, 0xBFB0, 0xBDD0, 0xBBE0, 0xB8F0, 0xB610, 0xB3B0, 0xB110, 0xAE20, 0xAAF0, 0xA8D0, 0xA730, 0xA560, 0xA3D0, 0xA2E0,
+ 0xA270, 0xA2C0, 0xA2B0, 0xA380, 0xA4C0, 0xA620, 0xA780, 0xA940, 0xABB0, 0xAD00, 0xAF10, 0xB1C0, 0xB460, 0xB710, 0xBA50, 0xBDB0,
+ 0xC160, 0xC5B0, 0xC970, 0xCE60, 0xD2E0, 0xD7B0, 0xDCA0, 0xE160, 0xE640, 0xEAD0, 0xF070, 0xF5D0, 0xFB30, 0x0060, 0x0520, 0x09C0,
+ 0x0E80, 0x1390, 0x18E0, 0x1DE0, 0x2340, 0x2800, 0x2D30, 0x3270, 0x3800, 0x3E10, 0x4350, 0x47F0, 0x4D80, 0x5190, 0x5630, 0x59A0,
+ 0x5D40, 0x6150, 0x6500, 0x6800, 0x6AC0, 0x6CB0, 0x6FA0, 0x7220, 0x7540, 0x7790, 0x79E0, 0x7C20, 0x7DF0, 0x7ED0, 0x7F20, 0x7F40,
+ 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F70, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0, 0x7F20, 0x7F00, 0x7F50, 0x7ED0, 0x7EA0, 0x7F10, 0x7F10, 0x7F30, 0x7EC0, 0x7EC0, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F30, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F80, 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7EE0, 0x7F60, 0x7F10, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EF0, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F10,
+ 0x7F20, 0x7F20, 0x7580, 0x65B0, 0x5630, 0x4680, 0x3910, 0x2D30, 0x2230, 0x18B0, 0x10B0, 0x0A00, 0x0470, 0xFFC0, 0xFBB0, 0xF860,
+ 0xF550, 0xF250, 0xEFA0, 0xECB0, 0xEA20, 0xE6D0, 0xE380, 0xE050, 0xDD30, 0xDAB0, 0xD940, 0xD810, 0xD820, 0xD840, 0xD890, 0xD950,
+ 0xD970, 0xD840, 0xD6A0, 0xD370, 0xCF40, 0xCB10, 0xC630, 0xC160, 0xBCB0, 0xB9E0, 0xB8A0, 0xBA30, 0xBEF0, 0xC620, 0xCF90, 0xDAB0,
+ 0xE660, 0xF390, 0x0200, 0x0FB0, 0x1D80, 0x2B40, 0x38B0, 0x4730, 0x5670, 0x6620, 0x7660, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x6EA0, 0x3E70, 0x0940, 0xD030, 0x95D0, 0x84E0, 0x8490, 0x8470, 0x8450, 0x8440,
+ 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x83E0,
+ 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8490, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84F0, 0x8500,
+ 0x8500, 0x8510, 0x8510, 0x8510, 0x8500, 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84F0, 0x8500, 0x8530, 0x8570, 0x85F0,
+ 0x86F0, 0x8870, 0x8B30, 0x8DF0, 0x9050, 0x91F0, 0x9200, 0x90D0, 0x8E90, 0x8BD0, 0x8930, 0x8760, 0x8660, 0x85B0, 0x8570, 0x8530,
+ 0x8510, 0x84F0, 0x84E0, 0x84C0, 0x84F0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84D0, 0x84F0,
+ 0x8570, 0x8780, 0x9360, 0xA3A0, 0xB000, 0xB7C0, 0xB9F0, 0xB630, 0xAD40, 0xA080, 0x93D0, 0x8A70, 0x8690, 0x8560, 0x8500, 0x84E0,
+ 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490,
+ 0x84C0, 0x84B0, 0x8480, 0x8480, 0x84A0, 0x8460, 0x8460, 0x8410, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8440,
+ 0x8410, 0x8400, 0x8400, 0x83A0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400, 0x83C0, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470,
+ 0x8470, 0x8470, 0x8490, 0x84A0, 0x84C0, 0x84E0, 0x8510, 0x8660, 0x8F50, 0xA5B0, 0xBB30, 0xD020, 0xE410, 0xF770, 0x0710, 0x14E0,
+ 0x2140, 0x2BC0, 0x3350, 0x3940, 0x3D00, 0x3F90, 0x41A0, 0x42E0, 0x4450, 0x44B0, 0x44E0, 0x4470, 0x4480, 0x4650, 0x4900, 0x4C50,
+ 0x4FA0, 0x5240, 0x55D0, 0x5930, 0x5CB0, 0x5FE0, 0x61D0, 0x62B0, 0x60F0, 0x5C40, 0x5540, 0x4A90, 0x3D20, 0x2C20, 0x17F0, 0x0280,
+ 0xEC60, 0xD680, 0xC5B0, 0xB8D0, 0xB220, 0xAE90, 0xAE60, 0xAE50, 0xAB20, 0xA3D0, 0x95D0, 0x8900, 0x8530, 0x84D0, 0x84B0, 0x84A0,
+ 0x8490, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84E0, 0x8530, 0x87C0, 0x9CA0, 0xB6E0, 0xCCA0, 0xDF40, 0xF040,
+ 0x0040, 0x10B0, 0x21F0, 0x3340, 0x4560, 0x5910, 0x69B0, 0x7860, 0x7EE0, 0x7F80, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F70, 0x7F00,
+ 0x7ED0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F50, 0x7F10, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F70,
+ 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7EA0, 0x7EE0, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F00, 0x7EF0,
+ 0x7ED0, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7F00, 0x7F10,
+ 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20,
+ 0x7EE0, 0x7E90, 0x7EF0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7F00, 0x7E90, 0x7F10, 0x7F00, 0x7EF0, 0x7F10,
+ 0x7F00, 0x7F40, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F10, 0x7EF0, 0x7F10,
+ 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F70, 0x7F20, 0x7EC0, 0x7EB0, 0x7EB0, 0x7F50,
+ 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7EB0, 0x7700, 0x70C0, 0x6B80, 0x68B0, 0x6760, 0x6740, 0x6980,
+ 0x6D20, 0x7260, 0x7810, 0x7D60, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F40, 0x7EF0, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F60, 0x7F10, 0x7EF0, 0x7F10, 0x7F10, 0x7F40, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F70, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F50,
+ 0x7C30, 0x7670, 0x7160, 0x6C50, 0x66F0, 0x62C0, 0x5E90, 0x5CA0, 0x5A70, 0x58E0, 0x58D0, 0x5930, 0x5AB0, 0x5BE0, 0x5CF0, 0x5EE0,
+ 0x6000, 0x6250, 0x6390, 0x6360, 0x6300, 0x6200, 0x5FF0, 0x5D20, 0x5940, 0x55B0, 0x5030, 0x49C0, 0x42C0, 0x3AE0, 0x3330, 0x2B60,
+ 0x23A0, 0x1C90, 0x1490, 0x0D70, 0x06E0, 0x00D0, 0xFB10, 0xF4E0, 0xEF00, 0xE7F0, 0xE110, 0xDA80, 0xD480, 0xCF70, 0xCAD0, 0xC5F0,
+ 0xC220, 0xBD70, 0xB860, 0xB3A0, 0xAEB0, 0xAA10, 0xA4E0, 0x9FC0, 0x9B00, 0x9630, 0x9290, 0x8F10, 0x8C50, 0x8A50, 0x88F0, 0x8820,
+ 0x8770, 0x8700, 0x86D0, 0x86C0, 0x86D0, 0x86F0, 0x8730, 0x8790, 0x8840, 0x8990, 0x8BA0, 0x8F10, 0x9480, 0x9A30, 0x9F90, 0xA680,
+ 0xAD50, 0xB560, 0xBCF0, 0xC590, 0xCD70, 0xD570, 0xDE90, 0xE790, 0xF0C0, 0xFAC0, 0x04B0, 0x0F70, 0x19E0, 0x24C0, 0x2EF0, 0x39F0,
+ 0x44C0, 0x4ED0, 0x59B0, 0x6360, 0x6C40, 0x7510, 0x7B80, 0x7F00, 0x7F10, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F00,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F00,
+ 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F00, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7B70, 0x6A40, 0x5870, 0x4380, 0x3080, 0x1EC0,
+ 0x0E50, 0x0090, 0xF4D0, 0xEBE0, 0xE6A0, 0xE450, 0xE4F0, 0xE7A0, 0xEBF0, 0xF0C0, 0xF4D0, 0xF7D0, 0xF9E0, 0xFAB0, 0xFC40, 0xFD50,
+ 0xFFB0, 0x01A0, 0x0380, 0x0410, 0x0480, 0x03B0, 0x02A0, 0x0200, 0x01A0, 0x0300, 0x0480, 0x0730, 0x0B20, 0x0FE0, 0x1520, 0x1A00,
+ 0x1E10, 0x21D0, 0x2500, 0x2950, 0x2D80, 0x3270, 0x36E0, 0x3BC0, 0x4010, 0x44D0, 0x49F0, 0x4E40, 0x52C0, 0x56D0, 0x5AB0, 0x5E20,
+ 0x6120, 0x6410, 0x6730, 0x69C0, 0x6BD0, 0x6D30, 0x6E40, 0x6E60, 0x6E90, 0x6E90, 0x6E00, 0x6D20, 0x6B90, 0x6A00, 0x67B0, 0x65E0,
+ 0x63C0, 0x61B0, 0x5F30, 0x5CC0, 0x59A0, 0x55C0, 0x51A0, 0x4DB0, 0x4A10, 0x4660, 0x4340, 0x4040, 0x3D10, 0x3A60, 0x3710, 0x3490,
+ 0x31E0, 0x2F30, 0x2CC0, 0x2B10, 0x29D0, 0x2920, 0x2860, 0x2730, 0x2610, 0x2520, 0x2440, 0x2410, 0x24F0, 0x25A0, 0x26C0, 0x2770,
+ 0x2800, 0x2870, 0x28D0, 0x2960, 0x29C0, 0x2AC0, 0x2A50, 0x29B0, 0x2890, 0x2730, 0x2510, 0x2360, 0x21A0, 0x1FD0, 0x1DD0, 0x1C00,
+ 0x19A0, 0x1760, 0x1420, 0x10F0, 0x0D10, 0x08B0, 0x03C0, 0xFF00, 0xF8F0, 0xF2D0, 0xECC0, 0xE6A0, 0xE110, 0xDC00, 0xD7D0, 0xD420,
+ 0xD0C0, 0xCE30, 0xCC30, 0xCA00, 0xC7D0, 0xC5B0, 0xC460, 0xC330, 0xC240, 0xC210, 0xC190, 0xC130, 0xC100, 0xC160, 0xC240, 0xC360,
+ 0xC550, 0xC760, 0xC9B0, 0xCCC0, 0xD000, 0xD430, 0xD980, 0xDDD0, 0xE210, 0xE600, 0xE980, 0xEC90, 0xEF30, 0xF2E0, 0xF550, 0xF8E0,
+ 0xFB90, 0xFF70, 0x0450, 0x0900, 0x0EB0, 0x1480, 0x1A60, 0x2140, 0x2880, 0x2ED0, 0x3560, 0x3B20, 0x4200, 0x4990, 0x5070, 0x5820,
+ 0x5ED0, 0x65F0, 0x6BA0, 0x70F0, 0x7680, 0x7A80, 0x7E40, 0x7EF0, 0x7F70, 0x7F00, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60, 0x7EE0, 0x7ED0,
+ 0x7EF0, 0x7F00, 0x7F20, 0x7F20, 0x7EC0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F00, 0x7E90, 0x7ED0, 0x7F10, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F40, 0x7F40,
+ 0x7F10, 0x7F00, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7ED0,
+ 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7EF0, 0x7EE0, 0x7DC0, 0x79B0, 0x7430, 0x6E20,
+ 0x6700, 0x5E50, 0x5540, 0x4C40, 0x43F0, 0x3CB0, 0x35E0, 0x3160, 0x2D00, 0x2A80, 0x2820, 0x26F0, 0x2750, 0x27C0, 0x2940, 0x2A80,
+ 0x2AF0, 0x2C10, 0x2C40, 0x2CD0, 0x2E20, 0x2EE0, 0x3090, 0x3280, 0x34E0, 0x36E0, 0x3940, 0x3C90, 0x3EA0, 0x4040, 0x3E50, 0x3BD0,
+ 0x3900, 0x3610, 0x3390, 0x3020, 0x2C40, 0x2A10, 0x26E0, 0x2330, 0x1FF0, 0x1C40, 0x1950, 0x1630, 0x13A0, 0x11F0, 0x1030, 0x0F10,
+ 0x0DC0, 0x0BF0, 0x0A10, 0x07B0, 0x0530, 0x0240, 0xFE50, 0xF920, 0xF280, 0xEAB0, 0xE2E0, 0xDAD0, 0xD3C0, 0xCCE0, 0xC670, 0xBFA0,
+ 0xB840, 0xB0D0, 0xA7E0, 0xA000, 0x9790, 0x8F90, 0x8520, 0x84F0, 0x84E0, 0x84C0, 0x84C0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x84B0, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84C0, 0x84C0, 0x84B0, 0x84C0, 0x84C0,
+ 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84F0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0,
+ 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480,
+ 0x8470, 0x8470, 0x8470, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83D0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x8360, 0x83B0, 0x83A0, 0x83A0, 0x8360, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8380,
+ 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8370, 0x8380, 0x83A0, 0x8370, 0x8370, 0x8370, 0x8380, 0x8380, 0x8390,
+ 0x8390, 0x8390, 0x8390, 0x83A0, 0x83A0, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0,
+ 0x83C0, 0x83D0, 0x83C0, 0x83C0, 0x83D0, 0x83C0, 0x83C0, 0x83D0, 0x8360, 0x83D0, 0x83D0, 0x83E0, 0x83F0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83E0, 0x83E0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x84A0, 0x84D0,
+ 0x84E0, 0x8530, 0x8610, 0x87A0, 0x89A0, 0x8A70, 0x8A00, 0x8900, 0x8770, 0x8660, 0x8590, 0x84E0, 0x8500, 0x84E0, 0x84E0, 0x84D0,
+ 0x8500, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x84F0, 0x8510, 0x8580, 0x8900, 0xA060, 0xBBC0, 0xD580, 0xEB70, 0xFB20, 0x0860,
+ 0x1400, 0x2100, 0x3210, 0x4300, 0x5360, 0x6140, 0x69D0, 0x6E30, 0x6D00, 0x6780, 0x5DD0, 0x4F20, 0x3EC0, 0x2B80, 0x15D0, 0xFFE0,
+ 0xEA00, 0xD620, 0xC240, 0xAD20, 0x93C0, 0x8690, 0x84F0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8470, 0x84C0, 0x8490,
+ 0x84A0, 0x84B0, 0x84D0, 0x8500, 0x8600, 0x8DC0, 0xAAA0, 0xC790, 0xE670, 0x06B0, 0x27B0, 0x4900, 0x6820, 0x7ED0, 0x7F30, 0x7F30,
+ 0x7F50, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F00, 0x7F40, 0x7ED0, 0x73F0, 0x6920, 0x5CF0, 0x5190, 0x46A0, 0x3CE0, 0x3450, 0x2D90, 0x2840, 0x24E0, 0x2290,
+ 0x2260, 0x2340, 0x2490, 0x2660, 0x2860, 0x2A10, 0x2B50, 0x2CD0, 0x2DA0, 0x2E50, 0x2E40, 0x2E50, 0x2D40, 0x2C60, 0x2BD0, 0x2C00,
+ 0x2C60, 0x2DE0, 0x2F30, 0x3030, 0x30C0, 0x3090, 0x3020, 0x2FE0, 0x30E0, 0x32A0, 0x3510, 0x39A0, 0x3FE0, 0x46D0, 0x4F60, 0x57A0,
+ 0x6040, 0x68C0, 0x7090, 0x7740, 0x7D40, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7E40, 0x7530, 0x6C70, 0x62F0, 0x5990, 0x4F40, 0x4640, 0x3E80, 0x3630,
+ 0x2F20, 0x2840, 0x2300, 0x1DA0, 0x18C0, 0x1590, 0x1290, 0x0FF0, 0x0F10, 0x0F10, 0x1160, 0x1560, 0x1A60, 0x2130, 0x2A10, 0x3550,
+ 0x4360, 0x5340, 0x6530, 0x7860, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7F10, 0x7EF0, 0x7F30, 0x7EF0, 0x7EA0, 0x7F20, 0x7EF0,
+ 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F10, 0x7F40, 0x7ED0, 0x7E90, 0x7F20, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F00, 0x7F20, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F40, 0x7EF0, 0x7F30, 0x7F30, 0x7F00, 0x7F80, 0x7F10, 0x7F00, 0x7F00,
+ 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7F00, 0x7EF0, 0x7F50, 0x7F00, 0x7E70, 0x7EC0, 0x7ED0,
+ 0x7F20, 0x7F20, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7E90, 0x7E60, 0x7EF0, 0x7F10, 0x7EF0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F40, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F50, 0x7F00, 0x7F00, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7EE0,
+ 0x7F50, 0x7EF0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7E70, 0x7F10, 0x7EF0, 0x7EF0, 0x7EF0, 0x7E80, 0x7F10, 0x7F00, 0x7F20,
+ 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10,
+ 0x7EF0, 0x7F60, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F80, 0x7F20, 0x7F00, 0x7ED0, 0x7ED0, 0x7F30, 0x7F10, 0x7EE0, 0x7EE0, 0x7ED0,
+ 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7E90, 0x7EB0, 0x7EF0, 0x7EE0, 0x7F00, 0x7F60, 0x7F10, 0x7E90, 0x7EB0,
+ 0x7EC0, 0x7EF0, 0x7F10, 0x7E90, 0x7ED0, 0x7F00, 0x7F00, 0x7EF0, 0x7EC0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F40,
+ 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7F10,
+ 0x7F30, 0x7F00, 0x7F80, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F70, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7ED0, 0x7EB0,
+ 0x7EE0, 0x7F60, 0x7F00, 0x7E90, 0x7EB0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7EA0, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EE0, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7F80, 0x7F10, 0x7F20,
+ 0x7EF0, 0x7EF0, 0x7F50, 0x7F00, 0x7F00, 0x7F10, 0x7F20, 0x7F60, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F60, 0x7EE0, 0x7E90, 0x7F10, 0x7F00, 0x7EF0, 0x7ED0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7F10, 0x7F10,
+ 0x7ED0, 0x7D10, 0x7AA0, 0x79C0, 0x78C0, 0x77B0, 0x7860, 0x7900, 0x7A50, 0x7BD0, 0x7D60, 0x7EC0, 0x7F10, 0x7F80, 0x7F00, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7F60, 0x7EF0, 0x7F30, 0x7F20, 0x7F20, 0x7F80, 0x7F10, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F70, 0x7EE0, 0x7ED0, 0x7EF0,
+ 0x7F00, 0x7F40, 0x7F10, 0x7E90, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7E70, 0x7ED0, 0x7F10, 0x7F20, 0x7F40, 0x7EA0, 0x7ED0, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7EF0, 0x7480, 0x4BE0, 0x28C0, 0x0B60, 0xF590, 0xE570, 0xD9E0, 0xD300, 0xD000,
+ 0xD120, 0xD710, 0xE290, 0xF480, 0x0D80, 0x2C80, 0x4F90, 0x71B0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EE0, 0x7ED0, 0x7F10,
+ 0x7F00, 0x7F70, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7EC0, 0x7E90, 0x7F10, 0x7EE0, 0x7EF0, 0x7EF0, 0x71A0, 0x34A0, 0xF7D0,
+ 0xBB00, 0x88A0, 0x84B0, 0x8480, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420,
+ 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8430,
+ 0x8430, 0x8430, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x8500,
+ 0x8580, 0x8690, 0x8950, 0x8FD0, 0x98C0, 0xA070, 0xA7D0, 0xAF10, 0xB710, 0xBFE0, 0xC6D0, 0xCD40, 0xD390, 0xD900, 0xDDC0, 0xE290,
+ 0xE7F0, 0xECD0, 0xF1B0, 0xF570, 0xF970, 0xFC60, 0xFF10, 0x01D0, 0x0410, 0x05F0, 0x0780, 0x0890, 0x0920, 0x0A40, 0x0A50, 0x0A10,
+ 0x0970, 0x0850, 0x06F0, 0x04B0, 0x0280, 0x0080, 0xFE30, 0xFB40, 0xF900, 0xF5B0, 0xF2B0, 0xEFF0, 0xEE10, 0xED10, 0xEC60, 0xEBE0,
+ 0xEC50, 0xED30, 0xEE80, 0xF020, 0xF230, 0xF4A0, 0xF780, 0xFA90, 0xFDF0, 0x0220, 0x0620, 0x0A10, 0x0D90, 0x11E0, 0x16E0, 0x1D70,
+ 0x2500, 0x2EC0, 0x3970, 0x44F0, 0x5060, 0x5B40, 0x6550, 0x6F10, 0x7730, 0x7CE0, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7E00, 0x7550, 0x6A60, 0x5CF0, 0x4D10, 0x3B00, 0x2620, 0x0CA0, 0xF2B0, 0xD690, 0xBA90, 0x9FA0, 0x8AF0,
+ 0x8590, 0x84F0, 0x84D0, 0x84C0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x8500, 0x8570, 0x87A0, 0x9AA0, 0xB2C0, 0xCB10, 0xE070,
+ 0xF170, 0xFB60, 0xFD30, 0xF5F0, 0xE5F0, 0xCDA0, 0xB200, 0x9550, 0x86B0, 0x8500, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x8490,
+ 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8490, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0,
+ 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8520, 0x8550, 0x8590, 0x85E0, 0x8620, 0x86D0, 0x8770, 0x8870, 0x8A90, 0x8D80,
+ 0x9150, 0x95B0, 0x99E0, 0x9E50, 0xA410, 0xAA80, 0xB280, 0xBB00, 0xC3E0, 0xCD50, 0xD610, 0xDFA0, 0xE8E0, 0xF3A0, 0xFDA0, 0x0650,
+ 0x0FB0, 0x17E0, 0x2040, 0x2810, 0x2F80, 0x3760, 0x3E10, 0x4490, 0x49B0, 0x4E70, 0x5400, 0x5880, 0x5D80, 0x61E0, 0x6680, 0x6AB0,
+ 0x6E80, 0x7260, 0x7600, 0x7970, 0x7CA0, 0x7EC0, 0x7F40, 0x7F10, 0x7EF0, 0x7EF0, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7F40, 0x7EF0, 0x7F00, 0x7F40, 0x7EF0, 0x7F30, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7F50, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F30,
+ 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F40, 0x7EF0, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7F20,
+ 0x7F00, 0x7F10, 0x7EF0, 0x7F00, 0x7F20, 0x7F00, 0x7F30, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F80, 0x4240, 0xED50, 0x9040, 0x84A0,
+ 0x8470, 0x8450, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8460, 0x8460, 0x8450, 0x8460, 0x8490, 0x8480, 0x84C0,
+ 0x84B0, 0x84D0, 0x8500, 0x85F0, 0x8A50, 0x97D0, 0xA3A0, 0xACF0, 0xB460, 0xBA50, 0xBED0, 0xC180, 0xC1F0, 0xC0B0, 0xBEB0, 0xBD40,
+ 0xBC60, 0xBD90, 0xC0D0, 0xC5E0, 0xCCD0, 0xD500, 0xDE60, 0xE8C0, 0xF470, 0x0200, 0x1060, 0x2180, 0x30E0, 0x3E90, 0x4AD0, 0x53A0,
+ 0x58E0, 0x5AE0, 0x5B90, 0x5D70, 0x60E0, 0x66C0, 0x6EF0, 0x77D0, 0x7EA0, 0x7F10, 0x7F50, 0x7EB0, 0x7E70, 0x7F10, 0x7F00, 0x7F60,
+ 0x7ED0, 0x7EB0, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7EA0, 0x7F10, 0x7F10, 0x7F20, 0x7E70, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F10,
+ 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7EF0, 0x7F30, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7EE0,
+ 0x7F80, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F90, 0x7F10, 0x7F00, 0x7EF0, 0x7ED0, 0x7F60, 0x7F10, 0x7ED0, 0x7EF0, 0x7F20, 0x7F40,
+ 0x7F10, 0x7F90, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7F70, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EC0, 0x7EC0,
+ 0x7F30, 0x7F00, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7EF0, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F00, 0x7EA0, 0x7F10, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7390, 0x6630, 0x5CA0, 0x5480, 0x4F00, 0x4BA0, 0x48C0, 0x4690,
+ 0x4470, 0x41B0, 0x3E70, 0x3A50, 0x36E0, 0x3370, 0x30C0, 0x2E90, 0x2DB0, 0x2EC0, 0x3080, 0x3330, 0x3760, 0x3B50, 0x4030, 0x4530,
+ 0x4A60, 0x4F40, 0x52D0, 0x54A0, 0x5460, 0x51F0, 0x4F70, 0x4B80, 0x4800, 0x4490, 0x4120, 0x3EE0, 0x3CF0, 0x3CF0, 0x3DB0, 0x3F90,
+ 0x4360, 0x46C0, 0x4BD0, 0x50F0, 0x55A0, 0x5B20, 0x6040, 0x6520, 0x6A30, 0x6DE0, 0x7240, 0x7580, 0x78B0, 0x7BA0, 0x7D70, 0x7EF0,
+ 0x7F10, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F00, 0x7EF0, 0x7F10, 0x7F30, 0x7F40, 0x7F10, 0x7F10, 0x7EE0,
+ 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EE0, 0x7F10, 0x7F00, 0x7EF0, 0x7F90,
+ 0x7F00, 0x7EE0, 0x7F00, 0x7F10, 0x7F30, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F30, 0x7F00,
+ 0x7EA0, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7EC0, 0x7F30, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F30, 0x7F00, 0x7F40, 0x7F10, 0x7F10,
+ 0x7F50, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60,
+ 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0, 0x7E70, 0x7ED0, 0x7ED0, 0x7F20, 0x7F20,
+ 0x7EC0, 0x7EF0, 0x7F00, 0x7F00, 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F20, 0x7F20, 0x7F20, 0x7F00,
+ 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7EF0, 0x7F00, 0x7EF0, 0x7F30,
+ 0x74C0, 0x4FC0, 0x29C0, 0x0160, 0xD6F0, 0xABE0, 0x88C0, 0x84E0, 0x84A0, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460,
+ 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8420, 0x8410, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420,
+ 0x8410, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x84C0, 0x84E0,
+ 0x8500, 0x8540, 0x8670, 0x8930, 0x8FA0, 0x9770, 0x9EE0, 0xA590, 0xABE0, 0xB280, 0xBAE0, 0xC380, 0xCC90, 0xD410, 0xDB20, 0xE040,
+ 0xE350, 0xE480, 0xE420, 0xE240, 0xDF30, 0xD9B0, 0xD340, 0xCCE0, 0xC7A0, 0xC3B0, 0xC240, 0xC320, 0xC4A0, 0xC5B0, 0xC530, 0xC230,
+ 0xBBF0, 0xB1A0, 0xA570, 0x98D0, 0x8DB0, 0x87C0, 0x85B0, 0x8510, 0x84E0, 0x84C0, 0x84B0, 0x8490, 0x8470, 0x8460, 0x8440, 0x8440,
+ 0x8420, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83F0, 0x83D0, 0x83D0, 0x8410, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83B0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x8400, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430,
+ 0x8410, 0x8430, 0x8430, 0x8430, 0x8470, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8450, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8470, 0x8460, 0x8460,
+ 0x8460, 0x8450, 0x8460, 0x8460, 0x8470, 0x8450, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490,
+ 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8510, 0x8540,
+ 0x85C0, 0x8710, 0x8BC0, 0x9860, 0xA810, 0xB7C0, 0xC690, 0xD3F0, 0xDF90, 0xE900, 0xEF90, 0xF430, 0xF620, 0xF7B0, 0xF7D0, 0xF920,
+ 0xFAE0, 0xFD90, 0x02B0, 0x08C0, 0x10C0, 0x1910, 0x2020, 0x26E0, 0x2CC0, 0x31B0, 0x3760, 0x3BA0, 0x4110, 0x4610, 0x4A70, 0x4E90,
+ 0x50D0, 0x52E0, 0x5340, 0x5390, 0x53B0, 0x53E0, 0x54C0, 0x5510, 0x55D0, 0x5650, 0x56A0, 0x57E0, 0x58E0, 0x5990, 0x5A90, 0x5A70,
+ 0x5B70, 0x5B10, 0x5A70, 0x5920, 0x5660, 0x5310, 0x4EE0, 0x4AE0, 0x4780, 0x4450, 0x4340, 0x42C0, 0x4330, 0x4530, 0x46E0, 0x49C0,
+ 0x4C90, 0x4F30, 0x5300, 0x5600, 0x5910, 0x5C00, 0x5EE0, 0x6250, 0x64B0, 0x65A0, 0x64C0, 0x6250, 0x5EE0, 0x59C0, 0x5390, 0x4D50,
+ 0x46A0, 0x3FA0, 0x3870, 0x3230, 0x2D60, 0x29B0, 0x28B0, 0x2960, 0x2B50, 0x2EA0, 0x3160, 0x3470, 0x34B0, 0x32B0, 0x2F20, 0x2980,
+ 0x2540, 0x23F0, 0x26E0, 0x2FC0, 0x3C90, 0x4D10, 0x5E40, 0x6EF0, 0x7C50, 0x7EA0, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EA0, 0x7EF0,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7EC0, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F50, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F80, 0x7F00, 0x7EE0,
+ 0x7F10, 0x7F10, 0x7F30, 0x7EC0, 0x7EB0, 0x7EF0, 0x7EE0, 0x7F30, 0x7EF0, 0x7EA0, 0x7F20, 0x7F10, 0x7F10, 0x7EE0, 0x7EC0, 0x7F10,
+ 0x7ED0, 0x7F00, 0x7EF0, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7E90, 0x7F10, 0x7F20, 0x7F40, 0x7ED0, 0x7EA0,
+ 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F00, 0x7F30, 0x7EE0, 0x7F00, 0x7F20, 0x7F00, 0x7F50,
+ 0x7F20, 0x7F40, 0x7EF0, 0x7F10, 0x7F70, 0x7EF0, 0x7F00, 0x7F10, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F80, 0x7F20,
+ 0x7F00, 0x7EF0, 0x7EB0, 0x7F30, 0x7EF0, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7EE0, 0x7F00, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7ED0, 0x7F00, 0x7F00, 0x7EF0, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F50,
+ 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7EF0, 0x7F10, 0x7F60, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F50, 0x7EE0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F30, 0x7EE0, 0x7EC0,
+ 0x7F10, 0x7EF0, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0, 0x7F30,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F70, 0x7F10, 0x7F10, 0x7EF0, 0x7F00, 0x7F90, 0x7F10, 0x7F00, 0x7EE0, 0x7EF0, 0x7F70, 0x7F20,
+ 0x7EE0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7E70, 0x7ED0, 0x7ED0, 0x7F20, 0x7F20, 0x7EC0,
+ 0x7ED0, 0x7F00, 0x7F00, 0x7F10, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F10, 0x7EB0, 0x7F20,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F60, 0x7F00,
+ 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F50, 0x7F10, 0x7CB0,
+ 0x6470, 0x4910, 0x2E70, 0x1310, 0xF660, 0xD8B0, 0xB990, 0x9A30, 0x8740, 0x84F0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470,
+ 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8480, 0x8480, 0x8450, 0x8460, 0x8420, 0x8470, 0x8470, 0x84B0, 0x8480, 0x8490,
+ 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8550, 0x8640, 0x8940, 0x92D0, 0x9F10, 0xAA90, 0xB690, 0xC230, 0xCDF0, 0xD980, 0xE380,
+ 0xEC50, 0xF590, 0xFE70, 0x0720, 0x0F50, 0x18B0, 0x2040, 0x2810, 0x2F80, 0x34E0, 0x3A20, 0x3ED0, 0x4270, 0x46E0, 0x4B40, 0x4EF0,
+ 0x5300, 0x55B0, 0x5840, 0x5A00, 0x5BB0, 0x5E00, 0x5F50, 0x6060, 0x6160, 0x62F0, 0x6450, 0x6560, 0x66A0, 0x6780, 0x6790, 0x6750,
+ 0x66E0, 0x6690, 0x6710, 0x67B0, 0x68C0, 0x69C0, 0x6AD0, 0x6C00, 0x6DA0, 0x7020, 0x7240, 0x7510, 0x7810, 0x7AA0, 0x7D20, 0x7EB0,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F00, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7EF0, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F10, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7EF0, 0x7E90, 0x7D10, 0x7B60, 0x79A0, 0x7850, 0x7630, 0x73B0, 0x7260, 0x7150, 0x6F70, 0x6E30, 0x6CA0, 0x6BE0,
+ 0x6B90, 0x6AA0, 0x6B00, 0x69D0, 0x68C0, 0x6810, 0x6790, 0x67A0, 0x6820, 0x69D0, 0x6B80, 0x6D00, 0x6E00, 0x6E10, 0x6F10, 0x6F80,
+ 0x7020, 0x7050, 0x7000, 0x6FA0, 0x6EA0, 0x6C90, 0x6BE0, 0x6A40, 0x6910, 0x6830, 0x66A0, 0x6560, 0x6480, 0x6450, 0x64A0, 0x6540,
+ 0x6730, 0x68A0, 0x6A20, 0x6BE0, 0x6D90, 0x7090, 0x72A0, 0x7480, 0x7720, 0x7880, 0x7A90, 0x7BB0, 0x7CF0, 0x7DE0, 0x7E90, 0x7EF0,
+ 0x7EE0, 0x7F40, 0x7E80, 0x7E20, 0x7D20, 0x7C20, 0x7A90, 0x7950, 0x7700, 0x7560, 0x7290, 0x6FF0, 0x6D20, 0x6910, 0x65B0, 0x61B0,
+ 0x5D60, 0x5950, 0x54B0, 0x5060, 0x4B90, 0x45B0, 0x3FE0, 0x3900, 0x32D0, 0x2BB0, 0x2480, 0x1EA0, 0x1730, 0x1020, 0x0940, 0x0240,
+ 0xFC30, 0xF5D0, 0xEF20, 0xE830, 0xE0B0, 0xD7E0, 0xD040, 0xC930, 0xC2C0, 0xBC40, 0xB5B0, 0xAED0, 0xA8A0, 0xA260, 0x9B80, 0x9660,
+ 0x91C0, 0x8DE0, 0x8B40, 0x8990, 0x88C0, 0x8850, 0x8830, 0x8850, 0x88C0, 0x8920, 0x8960, 0x89D0, 0x8AE0, 0x8C70, 0x8FA0, 0x9430,
+ 0x9880, 0x9CE0, 0xA060, 0xA3F0, 0xA730, 0xAA60, 0xAE20, 0xB0C0, 0xB3B0, 0xB820, 0xBB60, 0xBF50, 0xC300, 0xC6C0, 0xCAA0, 0xCD50,
+ 0xD060, 0xD370, 0xD6F0, 0xDA20, 0xDCC0, 0xDFB0, 0xE300, 0xE5A0, 0xE8F0, 0xEAD0, 0xEDB0, 0xEFC0, 0xF1B0, 0xF430, 0xF5A0, 0xF770,
+ 0xF870, 0xF960, 0xFB40, 0xFD00, 0xFEE0, 0x00A0, 0x01F0, 0x0350, 0x04F0, 0x05C0, 0x0720, 0x0870, 0x0A60, 0x0B30, 0x0C20, 0x0DD0,
+ 0x0EB0, 0x1060, 0x1110, 0x1250, 0x1250, 0x1170, 0x1010, 0x0EB0, 0x0E60, 0x0CF0, 0x0B10, 0x08A0, 0x0500, 0x0100, 0xFC30, 0xF670,
+ 0xF160, 0xEBD0, 0xE630, 0xDFB0, 0xD8B0, 0xD210, 0xCB50, 0xC530, 0xBF00, 0xB8F0, 0xB3E0, 0xAE70, 0xAA10, 0xA700, 0xA530, 0xA4B0,
+ 0xA480, 0xA530, 0xAE10, 0xB150, 0xB4C0, 0xB8E0, 0xBCA0, 0xC0B0, 0xC4E0, 0xC860, 0xCC30, 0xCF40, 0xD210, 0xD360, 0xD410, 0xD450,
+ 0xD4A0, 0xD580, 0xD730, 0xD8A0, 0xD890, 0xD760, 0xD430, 0xCE40, 0xC6A0, 0xBCE0, 0xB270, 0xA6D0, 0x9A40, 0x8EC0, 0x87E0, 0x8580,
+ 0x84F0, 0x84C0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8440, 0x8430, 0x8430, 0x8420,
+ 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8410, 0x8430, 0x8420, 0x8410,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460,
+ 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8420, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470,
+ 0x8470, 0x8460, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84E0, 0x84C0, 0x84B0, 0x84B0, 0x84D0, 0x84C0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0,
+ 0x84B0, 0x84A0, 0x84B0, 0x84B0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0,
+ 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x8480, 0x84C0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8530, 0x8550, 0x8580, 0x8600, 0x86E0,
+ 0x8870, 0x8BD0, 0x91C0, 0x9860, 0x9FB0, 0xA6F0, 0xAE90, 0xB6A0, 0xBDF0, 0xC5B0, 0xCDB0, 0xD520, 0xDC90, 0xE4E0, 0xECC0, 0xF410,
+ 0xFAF0, 0x00F0, 0x0700, 0x0C70, 0x1250, 0x1920, 0x1FF0, 0x2660, 0x2C10, 0x3280, 0x38F0, 0x3F70, 0x4620, 0x4BD0, 0x5130, 0x5670,
+ 0x5B40, 0x6090, 0x6600, 0x6B00, 0x6FF0, 0x72F0, 0x7710, 0x79E0, 0x7CF0, 0x7ED0, 0x7F20, 0x7F40, 0x7F10, 0x7F50, 0x7F00, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F70, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F10,
+ 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F40, 0x7F30, 0x5F70, 0x3700, 0x11C0, 0xF510, 0xDC00, 0xC420, 0xAB50, 0x9200, 0x8630, 0x84E0, 0x84B0, 0x8490, 0x8490,
+ 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440,
+ 0x8440, 0x8430, 0x8440, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8440, 0x8400, 0x8400, 0x8410, 0x8410, 0x8400,
+ 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8480, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8440, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0,
+ 0x84B0, 0x84C0, 0x84E0, 0x8520, 0x8640, 0x90E0, 0xA7F0, 0xBEE0, 0xD580, 0xEA70, 0xFD30, 0x0CA0, 0x1A50, 0x2530, 0x2EF0, 0x3760,
+ 0x3D50, 0x4210, 0x4480, 0x42C0, 0x3ED0, 0x3690, 0x2C30, 0x1DD0, 0x0EE0, 0x0030, 0xF160, 0xE2D0, 0xD430, 0xC3F0, 0xB180, 0x99A0,
+ 0x8660, 0x84C0, 0x8480, 0x8460, 0x8450, 0x8440, 0x8430, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84E0, 0x8530, 0x8690, 0x8DC0, 0x9EC0,
+ 0xAE70, 0xBE00, 0xCC20, 0xD9C0, 0xE930, 0xF6E0, 0x0390, 0x1030, 0x1B70, 0x26D0, 0x3200, 0x3DE0, 0x49A0, 0x5490, 0x5ED0, 0x6800,
+ 0x70E0, 0x7880, 0x7DD0, 0x7F10, 0x7F00, 0x7F50, 0x7F00, 0x7F00, 0x7F20, 0x7EF0, 0x7F80, 0x7F20, 0x7F40, 0x7F10, 0x7EF0, 0x7F80,
+ 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F50, 0x7F10, 0x7EE0, 0x7F00, 0x7F00, 0x7F60, 0x7F00, 0x7ED0, 0x7ED0, 0x7EB0, 0x7EF0, 0x7EF0,
+ 0x7EB0, 0x7ED0, 0x7EF0, 0x7F30, 0x7F20, 0x7E90, 0x7EB0, 0x7F00, 0x7F00, 0x7EF0, 0x7E70, 0x7D20, 0x7B60, 0x78F0, 0x7730, 0x7500,
+ 0x7340, 0x7210, 0x7090, 0x6FC0, 0x6F10, 0x6E30, 0x6DE0, 0x6C40, 0x6B40, 0x6990, 0x68A0, 0x6800, 0x6750, 0x6820, 0x6AA0, 0x6E60,
+ 0x7390, 0x79F0, 0x7EA0, 0x7EE0, 0x7F70, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F70, 0x7EF0, 0x7ED0, 0x7F00, 0x7EE0, 0x7F70, 0x7ED0,
+ 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EA0, 0x7F10, 0x7F20, 0x7F40, 0x7EF0, 0x7E90, 0x7F00, 0x7EE0, 0x7DC0, 0x7230, 0x64A0,
+ 0x54E0, 0x45B0, 0x35C0, 0x26C0, 0x1700, 0x0590, 0xF3B0, 0xDFF0, 0xCC00, 0xB5E0, 0xA2B0, 0x9110, 0x87D0, 0x8580, 0x8500, 0x84E0,
+ 0x84D0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8540, 0x8590, 0x8630, 0x8790, 0x8A90, 0x9050, 0x9790,
+ 0x9E90, 0xA570, 0xAC60, 0xB330, 0xBA70, 0xC170, 0xC870, 0xCF00, 0xD540, 0xDA90, 0xDFA0, 0xE470, 0xE8F0, 0xED60, 0xF240, 0xF690,
+ 0xFA50, 0xFD90, 0x0040, 0x0210, 0x02F0, 0x0290, 0x0050, 0xFD00, 0xF9E0, 0xF630, 0xF2F0, 0xF100, 0xF090, 0xF2B0, 0xF6F0, 0xFE20,
+ 0x0620, 0x0E90, 0x17D0, 0x1FB0, 0x2520, 0x2970, 0x2B40, 0x2B20, 0x28F0, 0x2410, 0x1EC0, 0x18C0, 0x1410, 0x1150, 0x1040, 0x1160,
+ 0x12D0, 0x14E0, 0x1500, 0x13D0, 0x11D0, 0x0E30, 0x09E0, 0x0440, 0xFED0, 0xF960, 0xF350, 0xEDC0, 0xE630, 0xDB70, 0xCCC0, 0xB8D0,
+ 0xA170, 0x8BA0, 0x8560, 0x84D0, 0x84B0, 0x84A0, 0x84A0, 0x8470, 0x8470, 0x8460, 0x8470, 0x8470, 0x8420, 0x8470, 0x8470, 0x8470,
+ 0x8480, 0x8490, 0x84A0, 0x84E0, 0x85C0, 0x9BC0, 0xBD20, 0xDBE0, 0xF830, 0x1220, 0x2C40, 0x4440, 0x5B90, 0x6F80, 0x7DE0, 0x7EF0,
+ 0x7F00, 0x7F30, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7EE0, 0x7EF0, 0x7F50, 0x7F00, 0x7F20, 0x7F10, 0x4A50,
+ 0x01E0, 0xBD80, 0x8700, 0x8490, 0x8460, 0x8440, 0x8420, 0x83F0, 0x83E0, 0x83D0, 0x83C0, 0x83B0, 0x83A0, 0x8390, 0x8390, 0x8380,
+ 0x8380, 0x8370, 0x8370, 0x8370, 0x8360, 0x8360, 0x8360, 0x8320, 0x8370, 0x8360, 0x8370, 0x8390, 0x8370, 0x8370, 0x8310, 0x8380,
+ 0x8380, 0x8380, 0x8390, 0x8390, 0x8390, 0x8350, 0x83A0, 0x8390, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8400, 0x8420, 0x8420,
+ 0x8420, 0x8400, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460,
+ 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x84F0, 0x8520, 0x8580, 0x86D0, 0x8FF0, 0xA1F0, 0xB4E0, 0xCB10,
+ 0xE2A0, 0xFB90, 0x1550, 0x2F30, 0x47A0, 0x5EF0, 0x7560, 0x7EF0, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F40, 0x7F20, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F00, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F90, 0x7F30,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7F50, 0x7F20, 0x7F00, 0x7F00, 0x7EB0, 0x7F20, 0x7EE0, 0x7EF0, 0x7EB0, 0x7EE0, 0x7F50, 0x7F00, 0x7F00,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EB0, 0x7EF0, 0x7EE0, 0x7F30, 0x7F30, 0x7EA0, 0x7F00, 0x7ED0, 0x7AB0, 0x70A0, 0x6840, 0x62D0,
+ 0x5E30, 0x5B20, 0x5960, 0x5880, 0x5840, 0x5830, 0x56D0, 0x5580, 0x51A0, 0x4D00, 0x4790, 0x4130, 0x3A60, 0x32C0, 0x2A70, 0x2200,
+ 0x1BA0, 0x1870, 0x18B0, 0x1BA0, 0x21F0, 0x2800, 0x2D90, 0x3130, 0x3330, 0x34F0, 0x3690, 0x38E0, 0x3AF0, 0x3E30, 0x4230, 0x4760,
+ 0x4DF0, 0x5700, 0x5FD0, 0x6890, 0x7120, 0x7970, 0x7E90, 0x7F30, 0x7F00, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10,
+ 0x7EF0, 0x7EF0, 0x7F10, 0x7E70, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F30, 0x7EF0,
+ 0x7F00, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F90, 0x7F00, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EC0, 0x7F30, 0x7F00, 0x7E70, 0x7ED0, 0x7ED0, 0x7F20, 0x7F40, 0x7E90, 0x7ED0,
+ 0x7EE0, 0x7F10, 0x7F10, 0x7E90, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7ED0, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7EF0, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F10,
+ 0x7F00, 0x7F00, 0x7F50, 0x7ED0, 0x7F00, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7F10, 0x7F40, 0x7ED0, 0x7EB0, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F00, 0x7EA0, 0x7EF0, 0x7EF0, 0x7F20, 0x7EF0, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F80,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7F10, 0x7F10, 0x7F00, 0x76A0, 0x66D0, 0x57E0, 0x4740, 0x3840, 0x29D0, 0x1C90, 0x0EB0,
+ 0x01F0, 0xF6A0, 0xEB90, 0xE090, 0xD660, 0xCC10, 0xC310, 0xB9F0, 0xB110, 0xA8F0, 0xA0B0, 0x98A0, 0x9250, 0x8DD0, 0x8B50, 0x8970,
+ 0x8850, 0x87F0, 0x87D0, 0x8800, 0x88A0, 0x89F0, 0x8CC0, 0x9160, 0x9740, 0x9D60, 0xA440, 0xAB90, 0xB370, 0xBB80, 0xC3B0, 0xCBE0,
+ 0xD350, 0xDB10, 0xE300, 0xEBE0, 0xF400, 0xFB80, 0x0350, 0x0B20, 0x11F0, 0x1860, 0x1E10, 0x23F0, 0x2A40, 0x2EF0, 0x33D0, 0x3870,
+ 0x3C60, 0x4150, 0x4630, 0x4A70, 0x4F20, 0x5320, 0x5740, 0x5A90, 0x5DB0, 0x6140, 0x6400, 0x67B0, 0x6AA0, 0x6DF0, 0x71D0, 0x7490,
+ 0x7830, 0x7B60, 0x7DD0, 0x7EF0, 0x7F00, 0x7F40, 0x7F00, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F00, 0x7F20, 0x7F20, 0x7EF0, 0x7F90,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7F10, 0x7F70, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F70, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F70, 0x7F20,
+ 0x7ED0, 0x7EB0, 0x7F00, 0x7F60, 0x7F10, 0x7E90, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7ED0, 0x7EF0, 0x7F20, 0x7F20, 0x7EC0,
+ 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F30,
+ 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7EF0, 0x7F40, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F70, 0x7EF0,
+ 0x7EF0, 0x7F00, 0x7F00, 0x7F70, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EA0, 0x7AC0, 0x7610, 0x6FA0, 0x6820, 0x5FD0, 0x5590,
+ 0x4A90, 0x3CD0, 0x2EB0, 0x2030, 0x1060, 0xFFC0, 0xEDD0, 0xDBA0, 0xC980, 0xB560, 0x9E60, 0x8B50, 0x8570, 0x84E0, 0x84B0, 0x8490,
+ 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8450, 0x8440, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8460, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x84A0, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84B0,
+ 0x84D0, 0x8510, 0x85C0, 0x8940, 0x99C0, 0xAB80, 0xBE30, 0xCFE0, 0xE090, 0xF170, 0x0060, 0x0FC0, 0x1AF0, 0x2330, 0x2B10, 0x2F10,
+ 0x30E0, 0x3040, 0x2E10, 0x2AF0, 0x2640, 0x2190, 0x1CC0, 0x1730, 0x10C0, 0x0950, 0x0040, 0xF6E0, 0xED30, 0xE4D0, 0xDC20, 0xD3C0,
+ 0xCBB0, 0xC400, 0xBD00, 0xB590, 0xAFA0, 0xAB00, 0xA7A0, 0xA610, 0xA570, 0xA530, 0xA580, 0xA660, 0xA7A0, 0xAAD0, 0xB0F0, 0xBB10,
+ 0xCA10, 0xDEE0, 0xF8E0, 0x1650, 0x3490, 0x5400, 0x6D50, 0x7E30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F30, 0x7F00, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7EF0, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7DB0, 0x6EF0,
+ 0x6280, 0x57C0, 0x4E70, 0x4680, 0x3E40, 0x3640, 0x2EE0, 0x2A20, 0x2740, 0x26D0, 0x2810, 0x2B70, 0x2FC0, 0x33D0, 0x3650, 0x37E0,
+ 0x39A0, 0x3AD0, 0x3B90, 0x3D30, 0x4040, 0x43F0, 0x48D0, 0x5930, 0x5BE0, 0x5CF0, 0x5D90, 0x5D30, 0x5C40, 0x5AF0, 0x58D0, 0x5620,
+ 0x52C0, 0x4DC0, 0x47A0, 0x4130, 0x39F0, 0x31E0, 0x2980, 0x2040, 0x1690, 0x0CA0, 0x0260, 0xF6D0, 0xEBB0, 0xE010, 0xD400, 0xC800,
+ 0xBC00, 0xB130, 0xA620, 0x9C20, 0x91F0, 0x8BC0, 0x8840, 0x86A0, 0x85E0, 0x85D0, 0x8580, 0x8590, 0x85D0, 0x8660, 0x8780, 0x89B0,
+ 0x8D40, 0x9260, 0x9690, 0x9A90, 0x9DA0, 0x9F90, 0xA270, 0xA500, 0xA850, 0xACE0, 0xB1C0, 0xB760, 0xBC90, 0xC2E0, 0xC8B0, 0xCDB0,
+ 0xD1F0, 0xD550, 0xD900, 0xDCE0, 0xDF60, 0xE160, 0xE2C0, 0xE3B0, 0xE430, 0xE350, 0xE1A0, 0xDDE0, 0xD930, 0xD310, 0xCBE0, 0xC420,
+ 0xBCA0, 0xB3C0, 0xAB90, 0xA330, 0x9A50, 0x9040, 0x88D0, 0x8600, 0x8520, 0x84E0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x84C0, 0x8480,
+ 0x8470, 0x8460, 0x8490, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8410, 0x8430, 0x8430, 0x8430,
+ 0x8450, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460,
+ 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84F0, 0x84D0, 0x84F0, 0x8510, 0x8570, 0x8670,
+ 0x89B0, 0x9250, 0x9DE0, 0xA830, 0xB1F0, 0xBC00, 0xC610, 0xD060, 0xDB80, 0xE650, 0xF150, 0xFBC0, 0x05A0, 0x1000, 0x19D0, 0x24B0,
+ 0x2F60, 0x39C0, 0x43B0, 0x4D80, 0x58D0, 0x62D0, 0x6BB0, 0x7440, 0x7B40, 0x7ED0, 0x7EF0, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EE0,
+ 0x7F50, 0x7F20, 0x7EA0, 0x7ED0, 0x7ED0, 0x7F10, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F20, 0x7F20,
+ 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7F30, 0x7EF0, 0x7F20, 0x7ED0, 0x7BF0, 0x77F0, 0x73C0, 0x6F50, 0x6BB0, 0x6800, 0x6510, 0x61B0, 0x5EB0, 0x5C60, 0x5990,
+ 0x56A0, 0x5420, 0x5100, 0x4F30, 0x4D30, 0x4C40, 0x4BD0, 0x4B90, 0x4BC0, 0x4850, 0x4740, 0x45E0, 0x44D0, 0x4430, 0x4320, 0x4240,
+ 0x4150, 0x3FF0, 0x3F80, 0x3E10, 0x3D00, 0x3B70, 0x3940, 0x36F0, 0x3400, 0x3260, 0x3040, 0x2EF0, 0x2E00, 0x2D00, 0x2C30, 0x2A30,
+ 0x2740, 0x24E0, 0x2140, 0x1D90, 0x1A50, 0x1770, 0x1560, 0x12F0, 0x1090, 0x0E00, 0x0B60, 0x0840, 0x0480, 0x00B0, 0xFD80, 0xFB00,
+ 0xF870, 0xF580, 0xF250, 0xEF50, 0xEAA0, 0xE760, 0xE490, 0xE1B0, 0xDF30, 0xDC70, 0xDA30, 0xD6F0, 0xD3D0, 0xD0A0, 0xCC40, 0xC8A0,
+ 0xC5C0, 0xC2E0, 0xC0B0, 0xBEB0, 0xBCB0, 0xBA60, 0xB790, 0xB4F0, 0xB180, 0xAEB0, 0xAC10, 0xA870, 0xA620, 0xA420, 0xA270, 0x9FF0,
+ 0x9CE0, 0x9A10, 0x96E0, 0x9330, 0x9060, 0x8DD0, 0x8BB0, 0x89F0, 0x8890, 0x8760, 0x86A0, 0x8610, 0x85D0, 0x8590, 0x8570, 0x8550,
+ 0x8530, 0x8520, 0x8510, 0x8500, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84C0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x84C0,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8430, 0x8480, 0x8470, 0x8470, 0x8430, 0x8480, 0x8480, 0x8470,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8480, 0x8480, 0x8480, 0x84B0, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8490, 0x84B0, 0x84B0, 0x84C0, 0x8510, 0x8500,
+ 0x8530, 0x85C0, 0x8750, 0x8D40, 0x9980, 0xA690, 0xB4A0, 0xC1C0, 0xCEE0, 0xDC90, 0xE9B0, 0xF720, 0x0590, 0x12D0, 0x1F30, 0x2A60,
+ 0x34D0, 0x3D90, 0x4460, 0x48C0, 0x4AD0, 0x4AB0, 0x4540, 0x3CD0, 0x2F10, 0x1D20, 0x07E0, 0xEDD0, 0xD030, 0xB0B0, 0x8E10, 0x8530,
+ 0x84C0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8440, 0x8450, 0x8450,
+ 0x8460, 0x8460, 0x8470, 0x8480, 0x84A0, 0x84C0, 0x8590, 0xA040, 0xD550, 0x0E70, 0x4100, 0x6BB0, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F00, 0x7F80, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7ED0, 0x7E90, 0x4DE0, 0x11C0, 0xBDE0, 0x84B0,
+ 0x8440, 0x8410, 0x8410, 0x83C0, 0x83B0, 0x83A0, 0x8390, 0x83C0, 0x83A0, 0x83C0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x8380, 0x83B0,
+ 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x8430, 0x83F0, 0x83F0, 0x8400, 0x8400,
+ 0x8430, 0x8400, 0x8400, 0x83E0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470,
+ 0x8490, 0x84B0, 0x8510, 0x88C0, 0xA830, 0xC6F0, 0xE3D0, 0xFDE0, 0x1810, 0x2EB0, 0x4380, 0x5800, 0x6C40, 0x7DB0, 0x7F20, 0x7F40,
+ 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F50, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7EF0, 0x7F20, 0x7F10, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F60, 0x7F10, 0x7E90, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7EE0, 0x7ED0, 0x7EF0,
+ 0x7EE0, 0x7E80, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F00,
+ 0x7F00, 0x7F10, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7EF0, 0x7F00, 0x7F40, 0x7F00,
+ 0x7F10, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F90,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EC0, 0x7F50, 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20,
+ 0x7EA0, 0x7EF0, 0x7F00, 0x7F00, 0x7F10, 0x7E90, 0x7E70, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F00,
+ 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7F00, 0x7F40, 0x7EF0, 0x6B50, 0x5A00, 0x4B00, 0x3FF0, 0x3770, 0x31A0, 0x2FB0, 0x3110, 0x3640,
+ 0x3E90, 0x49A0, 0x57D0, 0x66C0, 0x75F0, 0x7ED0, 0x7F00, 0x7F00, 0x7F10, 0x7F50, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F30, 0x7ED0,
+ 0x7EB0, 0x7F00, 0x7F20, 0x7F40, 0x7EF0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F40, 0x7F00,
+ 0x7F30, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F40, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F80, 0x7F00, 0x7F40, 0x7F20, 0x7F10, 0x7F70,
+ 0x7EE0, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F70, 0x6E00, 0x54F0, 0x3DE0, 0x26A0, 0x0EF0, 0xF730, 0xDD70, 0xC1D0, 0xA950, 0x9450, 0x8960,
+ 0x8670, 0x85E0, 0x85E0, 0x8640, 0x8710, 0x8840, 0x8A10, 0x8D30, 0x95F0, 0xA610, 0xBC40, 0xD9A0, 0xFAB0, 0x1A60, 0x3630, 0x4160,
+ 0x3D20, 0x2A50, 0x0CB0, 0xECC0, 0xCF00, 0xB840, 0xA9E0, 0xA1F0, 0x9EF0, 0x9CE0, 0x9850, 0x8510, 0x84E0, 0x84D0, 0x84C0, 0x84A0,
+ 0x84B0, 0x84A0, 0x84A0, 0x84B0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8490, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8470,
+ 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8470, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8430, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x83E0,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8460, 0x8440, 0x8440, 0x8440, 0x8400, 0x8430, 0x8430, 0x8430, 0x83D0, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400,
+ 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8420, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8440, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8410, 0x8420, 0x83C0,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x8410, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8440, 0x8450, 0x8450,
+ 0x8460, 0x8470, 0x8490, 0x84A0, 0x84D0, 0x8530, 0x86C0, 0x9120, 0xA2F0, 0xB150, 0xBBF0, 0xC300, 0xC5B0, 0xC3A0, 0xBC00, 0xAFC0,
+ 0x9F00, 0x8C10, 0x8590, 0x84E0, 0x84B0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8450, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8410, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8460,
+ 0x8440, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84E0, 0x8540, 0x8720, 0x92D0, 0xA470, 0xB540, 0xC4C0, 0xD330,
+ 0xE170, 0xECF0, 0xF770, 0x0120, 0x0A20, 0x1340, 0x1AF0, 0x2140, 0x2690, 0x2B30, 0x2EA0, 0x3280, 0x35F0, 0x38D0, 0x3B70, 0x3C40,
+ 0x3C60, 0x3B90, 0x38A0, 0x33D0, 0x2DB0, 0x26B0, 0x2060, 0x1A50, 0x1650, 0x1430, 0x13E0, 0x1560, 0x1750, 0x1870, 0x19C0, 0x1A80,
+ 0x1B50, 0x1C60, 0x1F00, 0x2300, 0x27E0, 0x2E20, 0x3590, 0x3E30, 0x4710, 0x5050, 0x5970, 0x6270, 0x6B30, 0x7420, 0x7C40, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7EF0,
+ 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F50, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0,
+ 0x7EF0, 0x7F20, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F40, 0x7F50,
+ 0x7EF0, 0x7EF0, 0x7EB0, 0x7F60, 0x7F40, 0x7E90, 0x7EC0, 0x7F00, 0x7F10, 0x7F30, 0x7EA0, 0x7EE0, 0x7F00, 0x7F10, 0x7F00, 0x7EA0,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7EC0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F50,
+ 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7ED0, 0x7EF0, 0x7F00, 0x7F10, 0x7F60, 0x7F00,
+ 0x7ED0, 0x7F00, 0x7EF0, 0x7F50, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7E90,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F80,
+ 0x7F10, 0x7EF0, 0x7F30, 0x7F20, 0x7F80, 0x7F40, 0x7F10, 0x7F10, 0x7EE0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F00, 0x7F40, 0x7F40,
+ 0x7F10, 0x7F10, 0x7EE0, 0x7F60, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7EF0, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7ED0,
+ 0x7F10, 0x7EF0, 0x7F60, 0x7ED0, 0x7EB0, 0x7F10, 0x7F20, 0x7F60, 0x7EF0, 0x7EB0, 0x7F00, 0x7EE0, 0x7F40, 0x7EF0, 0x7E90, 0x7F10,
+ 0x7EF0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F50, 0x7F10,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F80, 0x7F00, 0x7F40, 0x7F10, 0x7EF0, 0x7F60, 0x7830, 0x6D70, 0x6360, 0x5810, 0x4C50, 0x4120, 0x35C0,
+ 0x2B60, 0x2230, 0x18A0, 0x1150, 0x0990, 0x02D0, 0xFCC0, 0xF790, 0xF490, 0xF310, 0xF310, 0xF510, 0xF910, 0x26A0, 0x36F0, 0x4800,
+ 0x57E0, 0x67E0, 0x7580, 0x7ED0, 0x7F10, 0x7E70, 0x7EC0, 0x7ED0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F40,
+ 0x7EF0, 0x7F30, 0x7F20, 0x7EF0, 0x7F50, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F00, 0x7EE0, 0x7F50, 0x7F10,
+ 0x7F00, 0x7F00, 0x7F10, 0x7F50, 0x7EB0, 0x7EF0, 0x7F00, 0x7EE0, 0x7F50, 0x7BB0, 0x7230, 0x6780, 0x5B90, 0x4E90, 0x4100, 0x3320,
+ 0x2550, 0x16F0, 0x0730, 0xF800, 0xE890, 0xD920, 0xCA50, 0xB970, 0xA960, 0x9970, 0x8BF0, 0x8660, 0x8520, 0x84E0, 0x84D0, 0x84B0,
+ 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x83F0, 0x8440, 0x8430, 0x8440,
+ 0x8430, 0x8430, 0x8440, 0x8420, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x84A0, 0x8450, 0x8450, 0x8450,
+ 0x8460, 0x8450, 0x8450, 0x8480, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8460, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8470, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440,
+ 0x8450, 0x8470, 0x8470, 0x8480, 0x84C0, 0x8490, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8460, 0x8460, 0x8450, 0x8440, 0x8420, 0x8420,
+ 0x8410, 0x8400, 0x8400, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83A0, 0x8390,
+ 0x8390, 0x8390, 0x8390, 0x83B0, 0x83A0, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x83C0, 0x8390,
+ 0x8390, 0x8350, 0x83A0, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83D0, 0x83A0, 0x83D0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0,
+ 0x83E0, 0x83A0, 0x83B0, 0x8360, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8410, 0x8420, 0x8430, 0x8440, 0x8450, 0x8470, 0x8480, 0x8490, 0x8490,
+ 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x84F0, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x8480, 0x8470,
+ 0x8460, 0x8450, 0x8440, 0x8430, 0x8470, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83C0, 0x83D0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410,
+ 0x8420, 0x8420, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8470, 0x8490, 0x8560, 0xB1A0, 0xF1A0, 0x29D0, 0x58D0, 0x7A70,
+ 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F00, 0x7F10, 0x7F30,
+ 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F40, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F00, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F90, 0x7F40, 0x7EF0, 0x7F30, 0x7F20, 0x7F60, 0x7F40, 0x7EB0, 0x7EB0,
+ 0x7EF0, 0x7F30, 0x7EE0, 0x7E90, 0x7EB0, 0x7F10, 0x7F20, 0x7EF0, 0x7E90, 0x7EB0, 0x7F20, 0x7F40, 0x7ED0, 0x7E90, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F30, 0x7F00, 0x7F30, 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7F30, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EC0, 0x7F40, 0x7EF0, 0x7F20,
+ 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7F00, 0x7F50, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F10,
+ 0x7EF0, 0x7F60, 0x7EE0, 0x7ED0, 0x7EF0, 0x7F00, 0x7F30, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7EC0, 0x7EF0,
+ 0x7F00, 0x7EF0, 0x7E90, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7EF0, 0x7F20,
+ 0x7F20, 0x7F00, 0x7F40, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7F00, 0x7F00, 0x7F00,
+ 0x7F10, 0x7F50, 0x7EE0, 0x7E70, 0x7F10, 0x7F00, 0x7F60, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F40, 0x7EF0, 0x7EC0, 0x7F10, 0x7F10,
+ 0x7F20, 0x7F20, 0x7E90, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7EF0,
+ 0x7F30, 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7F70, 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7F80, 0x7F10, 0x7F00, 0x7EE0,
+ 0x7ED0, 0x7F60, 0x7F00, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EF0,
+ 0x7F00, 0x7EE0, 0x7E90, 0x7EB0, 0x7E70, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7E90, 0x7F00, 0x7F00, 0x7EF0,
+ 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7ED0, 0x7E90, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F20, 0x7EC0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F10,
+ 0x7F10, 0x7ED0, 0x7E70, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7F10, 0x7EF0, 0x7F00, 0x7F10, 0x7EB0, 0x7F20, 0x7EE0, 0x7EF0,
+ 0x7F30, 0x7F20, 0x7F60, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F30, 0x7F00, 0x7F80, 0x7EF0, 0x7F20, 0x7F10,
+ 0x7F00, 0x7F90, 0x7F10, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0, 0x7EF0, 0x7F00, 0x7F40, 0x7F10, 0x7E90, 0x7EB0, 0x7ED0,
+ 0x7F10, 0x7F00, 0x7E70, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F00,
+ 0x7EF0, 0x7F50, 0x7F00, 0x7F10, 0x7F00, 0x7EE0, 0x7F70, 0x7EF0, 0x7EE0, 0x7F00, 0x7D10, 0x7190, 0x65B0, 0x5960, 0x4B80, 0x3A50,
+ 0x26B0, 0x1160, 0xFA80, 0xE550, 0xD510, 0xCCA0, 0xCE00, 0xD850, 0xE920, 0xFDD0, 0x12B0, 0x2690, 0x37A0, 0x4600, 0x54B0, 0x61A0,
+ 0x6F10, 0x7B00, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F20, 0x7EF0,
+ 0x7F10, 0x7F90, 0x6F70, 0x54E0, 0x3800, 0x1850, 0xF6B0, 0xD480, 0xB160, 0x8E50, 0x8530, 0x84C0, 0x84B0, 0x8490, 0x8490, 0x8490,
+ 0x84A0, 0x8490, 0x84C0, 0x84D0, 0x84D0, 0x84D0, 0x84C0, 0x84B0, 0x8470, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8430, 0x8420, 0x8420, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83D0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x83D0, 0x8420, 0x8420, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490,
+ 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84E0, 0x84F0, 0x84F0, 0x8500, 0x84E0, 0x8510,
+ 0x8510, 0x8520, 0x8550, 0x8550, 0x8530, 0x8540, 0x8530, 0x85A0, 0x8610, 0x8700, 0x88F0, 0x8D80, 0x94C0, 0x9D80, 0xA630, 0xAEF0,
+ 0xB880, 0xC250, 0xCC70, 0xD6F0, 0xE130, 0xEBE0, 0xF510, 0xFFA0, 0x07A0, 0x0F50, 0x1710, 0x2060, 0x2A80, 0x35C0, 0x40B0, 0x4AB0,
+ 0x5520, 0x5D70, 0x6520, 0x6BE0, 0x71C0, 0x7600, 0x79D0, 0x7CB0, 0x7E70, 0x7F10, 0x7EF0, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F40, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F50, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7EF0, 0x7E10, 0x7CD0, 0x7BC0, 0x7AF0, 0x7AA0,
+ 0x7AA0, 0x7B20, 0x7BF0, 0x7C90, 0x7CE0, 0x7D40, 0x7DD0, 0x7E20, 0x7E40, 0x7E90, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7EE0, 0x7E00, 0x7CD0, 0x7B30, 0x7970, 0x7840, 0x77B0, 0x77B0, 0x77D0, 0x7770, 0x7750, 0x7780, 0x7770, 0x77C0, 0x7850,
+ 0x7890, 0x7830, 0x77A0, 0x7730, 0x7720, 0x7750, 0x7890, 0x7A30, 0x7B20, 0x7BD0, 0x7BF0, 0x7C10, 0x7C60, 0x7CC0, 0x7D10, 0x7D70,
+ 0x7D60, 0x7D20, 0x7CF0, 0x7D10, 0x7D60, 0x7D30, 0x7CB0, 0x7B60, 0x7A20, 0x78C0, 0x7790, 0x76E0, 0x7620, 0x75E0, 0x75E0, 0x75E0,
+ 0x7610, 0x7650, 0x7610, 0x7560, 0x7490, 0x72D0, 0x7030, 0x6DD0, 0x6C30, 0x6A90, 0x68B0, 0x6640, 0x6310, 0x5F10, 0x5A20, 0x5500,
+ 0x4EE0, 0x49E0, 0x4430, 0x3DF0, 0x3680, 0x2EC0, 0x26C0, 0x1F30, 0x1890, 0x11C0, 0x0B10, 0x0580, 0x00A0, 0xFC70, 0xFA50, 0xF980,
+ 0xFA10, 0xFC20, 0x0050, 0x0510, 0x0A80, 0x1060, 0x16C0, 0x1CA0, 0x20B0, 0x2320, 0x2460, 0x2310, 0x2000, 0x1AE0, 0x12D0, 0x0930,
+ 0xFD30, 0xEFC0, 0xE1F0, 0xD490, 0xC7D0, 0xBC90, 0xB200, 0xA7F0, 0x9E80, 0x9540, 0x8D50, 0x8830, 0x85F0, 0x8520, 0x84E0, 0x84D0,
+ 0x84B0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410,
+ 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0,
+ 0x83D0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83C0, 0x83C0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x8400, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410,
+ 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8460, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x8490,
+ 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8510, 0x8550, 0x85B0, 0x8660, 0x87A0, 0x8970, 0x8BA0, 0x8E60, 0x9190, 0x9440, 0x9730,
+ 0x9A80, 0x9D50, 0xA0A0, 0xA430, 0xA7F0, 0xAC10, 0xB110, 0xB4B0, 0xB9D0, 0xBE00, 0xC1E0, 0xC680, 0xCAE0, 0xCFB0, 0xD460, 0xD8B0,
+ 0xDCC0, 0xE060, 0xE4F0, 0xEA50, 0xF060, 0xF670, 0xFCD0, 0x0410, 0x0B00, 0x1190, 0x1880, 0x1F80, 0x2760, 0x2ED0, 0x35B0, 0x3CB0,
+ 0x4170, 0x4690, 0x4B00, 0x4F60, 0x6430, 0x69F0, 0x6FE0, 0x7610, 0x7BF0, 0x7ED0, 0x7F70, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7F50,
+ 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7ED0, 0x7F00, 0x7F40, 0x7F10, 0x7E90, 0x7F00, 0x7F20, 0x7EF0, 0x7F10,
+ 0x7EA0, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F70, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F50,
+ 0x7EF0, 0x7EB0, 0x7F00, 0x7F00, 0x7F60, 0x7ED0, 0x7F10, 0x7F00, 0x7F00, 0x7F50, 0x7F00, 0x7EC0, 0x7ED0, 0x7EF0, 0x7F50, 0x7F00,
+ 0x7EA0, 0x7ED0, 0x7ED0, 0x7F20, 0x7F00, 0x7E90, 0x7ED0, 0x7EE0, 0x7F00, 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7E90,
+ 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F00, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7EE0, 0x7F40, 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F50,
+ 0x7EF0, 0x7F40, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F00, 0x7F00, 0x7F00, 0x7F50, 0x7EB0,
+ 0x7E70, 0x7EE0, 0x7EF0, 0x7F40, 0x7ED0, 0x7E90, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7EA0, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7EB0,
+ 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0, 0x7F80,
+ 0x7F00, 0x7F20, 0x7F10, 0x7EF0, 0x7F70, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EE0, 0x7F60, 0x7F10, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7EE0, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7EE0, 0x7F10, 0x7F10, 0x7F00, 0x7EC0,
+ 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F70,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F70, 0x7EF0, 0x7EE0, 0x7F00, 0x7F20, 0x7F70, 0x7EF0,
+ 0x7EB0, 0x7EF0, 0x7EE0, 0x7F50, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EA0, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7E90,
+ 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F00, 0x7F20, 0x7DE0, 0x6980, 0x5530,
+ 0x4040, 0x2930, 0x15E0, 0x0370, 0xF150, 0xE030, 0xCEE0, 0xBDC0, 0xABC0, 0x9800, 0x88C0, 0x8540, 0x84E0, 0x84B0, 0x84D0, 0x8480,
+ 0x8470, 0x8460, 0x8450, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8440, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8470, 0x8450, 0x8490, 0x8470, 0x8480, 0x84B0, 0x84E0, 0x8610, 0x9C90, 0xBD70, 0xDEE0, 0xFFF0,
+ 0x2040, 0x3F30, 0x5B20, 0x72A0, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x6AB0, 0x4970,
+ 0x26C0, 0x0890, 0xED60, 0xD580, 0xC1C0, 0xB1A0, 0xA530, 0x9C30, 0x95C0, 0x92D0, 0x92B0, 0x9600, 0x9D60, 0xA840, 0xB590, 0xC5C0,
+ 0xD6E0, 0xE880, 0xFA10, 0x0800, 0x12F0, 0x1B80, 0x21B0, 0x25A0, 0x2890, 0x2930, 0x27B0, 0x23B0, 0x1C60, 0x1290, 0x06B0, 0xF9F0,
+ 0xEBF0, 0xDBE0, 0xCA30, 0xB610, 0x9D50, 0x89D0, 0x8520, 0x84C0, 0x84A0, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8440,
+ 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8430, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8460, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84D0, 0x8520, 0x86A0, 0x8FE0, 0xA240, 0xB2D0, 0xC2D0,
+ 0xD250, 0xE1D0, 0xEF90, 0xFC80, 0x07E0, 0x11F0, 0x19B0, 0x1FD0, 0x2480, 0x2740, 0x29B0, 0x2B60, 0x2D50, 0x2F10, 0x3150, 0x33A0,
+ 0x3680, 0x3990, 0x3C00, 0x3DF0, 0x3F90, 0x4030, 0x3FE0, 0x3EC0, 0x3AF0, 0x35D0, 0x2EC0, 0x26A0, 0x1B70, 0x0EC0, 0xFFE0, 0xEE70,
+ 0xDC10, 0xC840, 0xB430, 0x9F70, 0x8DC0, 0x8630, 0x8510, 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84E0,
+ 0x8510, 0x8580, 0x86B0, 0x8A70, 0x92F0, 0x9D70, 0xA750, 0xB010, 0xB8C0, 0xC140, 0xC840, 0xCDC0, 0xD290, 0xD700, 0xDAF0, 0xDF10,
+ 0xE250, 0xE4C0, 0xE720, 0xE890, 0xE9D0, 0xEA70, 0xEAC0, 0xEA80, 0xE9D0, 0xE950, 0xE8E0, 0xE790, 0xE5F0, 0xE3A0, 0xE180, 0xDF10,
+ 0xDCD0, 0xDB80, 0xD9E0, 0xD8F0, 0xD7A0, 0xD650, 0xD520, 0xD330, 0xD110, 0xCFC0, 0xCD90, 0xCBB0, 0xC9E0, 0xC860, 0xC710, 0xC610,
+ 0xC530, 0xC3A0, 0xC250, 0xC160, 0xBFF0, 0xBF10, 0xBE20, 0xBD40, 0xBCD0, 0xBC10, 0xBC00, 0xBB70, 0xBB30, 0xBBD0, 0xBC00, 0xBD90,
+ 0xBF00, 0xC030, 0xC280, 0xC490, 0xC730, 0xC9A0, 0xCD60, 0xD220, 0xD8C0, 0xDEE0, 0xE4B0, 0xEA90, 0xF0A0, 0xF680, 0xFDD0, 0x0590,
+ 0x0DE0, 0x16D0, 0x1F10, 0x2720, 0x2F00, 0x3640, 0x3E90, 0x4620, 0x4D00, 0x5390, 0x5A80, 0x6090, 0x6630, 0x6C20, 0x71C0, 0x7680,
+ 0x7AB0, 0x7DA0, 0x7F50, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EC0, 0x7ED0, 0x7F60, 0x7EF0, 0x7ED0, 0x7EF0,
+ 0x7EE0, 0x7F20, 0x7F10, 0x7E90, 0x7EE0, 0x7ED0, 0x7F10, 0x7F10, 0x7E70, 0x7EE0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F00, 0x7F20,
+ 0x7F10, 0x7F10, 0x7EC0, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F20,
+ 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F90, 0x7ED0, 0x7F00, 0x7ED0, 0x7F10, 0x7F60, 0x7EE0, 0x7EC0, 0x7F10,
+ 0x7F20, 0x7F40, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7EA0, 0x7EF0, 0x7D10, 0x7750, 0x7320, 0x6E20, 0x6960, 0x6510,
+ 0x5FF0, 0x5B70, 0x5660, 0x51D0, 0x4D50, 0x49E0, 0x4190, 0x40F0, 0x41B0, 0x42C0, 0x4500, 0x4730, 0x4950, 0x4BC0, 0x4EA0, 0x5280,
+ 0x5650, 0x5A90, 0x5E30, 0x6100, 0x63C0, 0x6640, 0x6810, 0x6AC0, 0x6CE0, 0x6ED0, 0x70B0, 0x7120, 0x71F0, 0x7380, 0x74B0, 0x75B0,
+ 0x76A0, 0x7790, 0x7780, 0x7740, 0x7650, 0x7500, 0x7380, 0x7140, 0x6D90, 0x6910, 0x6230, 0x5AA0, 0x5110, 0x46B0, 0x3B00, 0x2CF0,
+ 0x1E50, 0x0E50, 0xFE60, 0xEE60, 0xDF10, 0xCEE0, 0xC090, 0xB210, 0xA450, 0x97A0, 0x8CC0, 0x8790, 0x85B0, 0x8520, 0x84F0, 0x84D0,
+ 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x84B0, 0x8490, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8490, 0x84A0, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490,
+ 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8530, 0x85B0, 0x8690, 0x8880, 0x8DD0, 0x94F0, 0x9D30, 0xA4D0, 0xACB0,
+ 0xB470, 0xBA50, 0xC140, 0xC700, 0xCE10, 0xD550, 0xDC30, 0xE380, 0xE950, 0xEDD0, 0xF260, 0xF6E0, 0xFAC0, 0xFF80, 0x03C0, 0x0880,
+ 0x0B80, 0x0F30, 0x1320, 0x17E0, 0x1D30, 0x22B0, 0x2990, 0x3030, 0x3670, 0x3D00, 0x4440, 0x4C10, 0x53B0, 0x5AE0, 0x6240, 0x6850,
+ 0x6E90, 0x74B0, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F50, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F80, 0x7F00, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F80, 0x7F00, 0x7ED0, 0x7EF0, 0x7F00, 0x7F30, 0x7ED0, 0x7EB0, 0x7F00, 0x7F20, 0x7F60, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0,
+ 0x7EF0, 0x7F10, 0x7EA0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10,
+ 0x7F20, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0,
+ 0x7EF0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F10, 0x7F10, 0x7EB0, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x6F60, 0x5750,
+ 0x3B50, 0x2290, 0x0A60, 0xF3C0, 0xDF20, 0xCBD0, 0xBCF0, 0xB120, 0xA8C0, 0xA240, 0x9E20, 0x9C10, 0x99F0, 0x9800, 0x9630, 0x9490,
+ 0x9370, 0x9240, 0x91E0, 0x92C0, 0x94F0, 0x98F0, 0x9E00, 0xA340, 0xA980, 0xAEA0, 0xB420, 0xBA10, 0xC0B0, 0xC830, 0xD060, 0xD980,
+ 0xE230, 0xEAB0, 0xF2C0, 0xFA70, 0x0300, 0x0A00, 0x10F0, 0x1880, 0x1FE0, 0x2800, 0x2F50, 0x3610, 0x3D60, 0x4440, 0x4A10, 0x4E90,
+ 0x51F0, 0x5700, 0x5A50, 0x5F70, 0x6420, 0x6840, 0x6DB0, 0x7260, 0x77A0, 0x7D50, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F40,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7350, 0x64B0, 0x5360, 0x4020, 0x29E0,
+ 0x13E0, 0xFC60, 0xE380, 0xC950, 0xAED0, 0x9550, 0x8780, 0x8550, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84F0, 0x8500,
+ 0x8500, 0x8500, 0x84F0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x8500, 0x84E0, 0x84E0, 0x84E0, 0x84F0,
+ 0x84F0, 0x8510, 0x8530, 0x8570, 0x85F0, 0x8690, 0x8790, 0x88C0, 0x8AA0, 0x8CF0, 0x90E0, 0x9500, 0x98B0, 0x9B80, 0x9D70, 0x9E60,
+ 0x9E70, 0x9D10, 0x9C20, 0x9AF0, 0x9930, 0x97A0, 0x9680, 0x9710, 0x9A60, 0xA080, 0xA810, 0xB0F0, 0xBA00, 0xC360, 0xCCC0, 0xD490,
+ 0xDAD0, 0xDF80, 0xE0F0, 0xDE50, 0xD6B0, 0xCAD0, 0xBBE0, 0xA9F0, 0x99F0, 0x8CB0, 0x86D0, 0x8580, 0x84F0, 0x84D0, 0x84C0, 0x84B0,
+ 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x84B0, 0x8490, 0x84C0, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x84F0,
+ 0x8500, 0x8510, 0x8550, 0x85F0, 0x8850, 0x90E0, 0x9E20, 0xABF0, 0xB9F0, 0xC880, 0xD7D0, 0xE6C0, 0xF4D0, 0x02A0, 0x0DA0, 0x16F0,
+ 0x1F90, 0x27B0, 0x2EE0, 0x34F0, 0x3970, 0x3BB0, 0x3B40, 0x3890, 0x3360, 0x2D00, 0x25A0, 0x1D50, 0x1500, 0x0CD0, 0x0560, 0xFE30,
+ 0xF880, 0xF570, 0xF3F0, 0xF3A0, 0xF520, 0xF780, 0xFB80, 0x0140, 0x0870, 0x1080, 0x1930, 0x2300, 0x2D80, 0x3850, 0x44D0, 0x5190,
+ 0x5D70, 0x6A30, 0x74B0, 0x7D60, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7F20, 0x7F10, 0x7F20, 0x7F00, 0x7EC0, 0x7ED0, 0x7F10, 0x7F30,
+ 0x7EE0, 0x7E90, 0x7EF0, 0x7EF0, 0x7C50, 0x6A00, 0x50C0, 0x31D0, 0x0EF0, 0xEBB0, 0xCC50, 0xB220, 0x9D00, 0x8F80, 0x8880, 0x8600,
+ 0x8530, 0x84F0, 0x84F0, 0x84F0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84F0, 0x84D0, 0x84E0, 0x8500, 0x8530, 0x85C0,
+ 0x8720, 0x8AE0, 0x9370, 0x9D90, 0xA810, 0xB2C0, 0xBE80, 0xCBB0, 0xD8F0, 0xE730, 0xF630, 0x0580, 0x1410, 0x2250, 0x3030, 0x3E10,
+ 0x4F30, 0x5EE0, 0x6DF0, 0x7AD0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7F00, 0x7F40, 0x7F10, 0x7E90, 0x7E90, 0x7F00, 0x7EF0, 0x7F10,
+ 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7220, 0x5A40, 0x3A00, 0x1510, 0xEC80,
+ 0xC3F0, 0x9D90, 0x8740, 0x84F0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8470,
+ 0x8470, 0x8490, 0x8460, 0x8460, 0x8410, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8480, 0x8460, 0x8480, 0x8440,
+ 0x8460, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84D0,
+ 0x84B0, 0x84D0, 0x84E0, 0x8510, 0x8550, 0x8600, 0x8810, 0x8E50, 0x9A10, 0xA590, 0xB260, 0xBDB0, 0xC830, 0xD160, 0xD9B0, 0xE1F0,
+ 0xEA30, 0xF160, 0xF870, 0xFF30, 0x0540, 0x0AD0, 0x0F10, 0x1330, 0x1760, 0x1B60, 0x1F90, 0x2290, 0x25B0, 0x2790, 0x2930, 0x2B70,
+ 0x2D00, 0x2ED0, 0x3020, 0x3120, 0x3250, 0x3300, 0x3360, 0x33A0, 0x3310, 0x33B0, 0x3370, 0x33C0, 0x3410, 0x34B0, 0x3630, 0x3710,
+ 0x37C0, 0x3800, 0x37B0, 0x37B0, 0x3800, 0x37C0, 0x36F0, 0x3690, 0x31C0, 0x2F60, 0x2E60, 0x2C80, 0x2B00, 0x29F0, 0x2970, 0x2B80,
+ 0x2EC0, 0x3430, 0x3A50, 0x4210, 0x4BB0, 0x5460, 0x5BE0, 0x6210, 0x6680, 0x6AA0, 0x6D20, 0x6F10, 0x70B0, 0x7230, 0x73A0, 0x7440,
+ 0x73C0, 0x7230, 0x6F00, 0x6AE0, 0x64D0, 0x5EF0, 0x5850, 0x5150, 0x4A70, 0x43C0, 0x3CD0, 0x3730, 0x31D0, 0x2EC0, 0x2CC0, 0x2A70,
+ 0x28B0, 0x2700, 0x2690, 0x26D0, 0x27A0, 0x2A80, 0x2E40, 0x3310, 0x3880, 0x3C80, 0x4130, 0x44B0, 0x4720, 0x48D0, 0x4850, 0x4550,
+ 0x3EE0, 0x3490, 0x27E0, 0x1920, 0x0980, 0xF910, 0xE960, 0xDB80, 0xCF30, 0xC5D0, 0xBDE0, 0xB7F0, 0xB470, 0xB280, 0xB300, 0xB3B0,
+ 0xB4B0, 0xB5E0, 0xB640, 0xB470, 0xB1B0, 0xAD10, 0xA830, 0xA1D0, 0x9B60, 0x9470, 0x8EA0, 0x8AA0, 0x8810, 0x86E0, 0x8640, 0x85F0,
+ 0x85B0, 0x8570, 0x8560, 0x8540, 0x8530, 0x8520, 0x8510, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84E0, 0x8530, 0x84E0, 0x84E0, 0x84F0,
+ 0x8500, 0x8510, 0x8540, 0x8590, 0x8630, 0x8770, 0x89E0, 0x90E0, 0x99C0, 0xA390, 0xAE00, 0xB8E0, 0xC420, 0xCF50, 0xDAF0, 0xE760,
+ 0xF470, 0x00C0, 0x0BD0, 0x1730, 0x20B0, 0x2970, 0x3180, 0x37B0, 0x3E20, 0x43C0, 0x48B0, 0x4E20, 0x51E0, 0x5650, 0x5A10, 0x5C70,
+ 0x5EA0, 0x5F80, 0x60C0, 0x60E0, 0x6090, 0x6030, 0x5E60, 0x5D40, 0x5B50, 0x59B0, 0x5920, 0x5940, 0x5B90, 0x5EB0, 0x6260, 0x66F0,
+ 0x69F0, 0x6B60, 0x6960, 0x63F0, 0x5B00, 0x4F50, 0x4150, 0x3270, 0x23C0, 0x1710, 0x0BB0, 0x01F0, 0xF8C0, 0xEEA0, 0xE510, 0xDB00,
+ 0xD020, 0xC480, 0xB8E0, 0xAD40, 0xA110, 0x9580, 0x8C60, 0x8810, 0x86A0, 0x85E0, 0x8590, 0x8580, 0x8590, 0x8580, 0x85A0, 0x85F0,
+ 0x8680, 0x87D0, 0x8A80, 0x9020, 0x9850, 0xA280, 0xAC20, 0xB650, 0xC180, 0xCB80, 0xD550, 0xDD90, 0xE570, 0xEC70, 0xF210, 0xF790,
+ 0xFBE0, 0x0020, 0x02C0, 0x04C0, 0x0750, 0x0980, 0x0B70, 0x0CA0, 0x0CB0, 0x0D00, 0x0CE0, 0x0B70, 0x0930, 0x05B0, 0x0120, 0xF9D0,
+ 0xEFD0, 0xBD00, 0xAFC0, 0xA3C0, 0x9AB0, 0x9310, 0x8D50, 0x8980, 0x8740, 0x85F0, 0x8550, 0x8510, 0x84E0, 0x84D0, 0x84C0, 0x84B0,
+ 0x84D0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8490, 0x8490, 0x8450, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x84A0, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84C0, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0,
+ 0x8500, 0x8500, 0x8520, 0x8550, 0x85B0, 0x8640, 0x8750, 0x8950, 0x8D10, 0x92C0, 0x9920, 0x9DE0, 0xA1C0, 0xA5E0, 0xA9D0, 0xAC90,
+ 0xAFB0, 0xB2D0, 0xB5F0, 0xB8B0, 0xBAC0, 0xBCD0, 0xBDE0, 0xBF30, 0xBFD0, 0xBF80, 0xBEE0, 0xBE30, 0xBD50, 0xBC30, 0xBAA0, 0xB940,
+ 0xB760, 0xB5B0, 0xB440, 0xB3D0, 0xB270, 0xB1D0, 0xB1C0, 0xB1B0, 0xB0D0, 0xB020, 0xAFC0, 0xAED0, 0xAE80, 0xAEE0, 0xAF00, 0xAEE0,
+ 0xAE10, 0xAC80, 0xAA70, 0xA890, 0xA780, 0xA720, 0xA6F0, 0xA630, 0xA620, 0xA6C0, 0xA740, 0xA7A0, 0xA7F0, 0xA7E0, 0xA820, 0xA870,
+ 0xA9D0, 0xABA0, 0xADF0, 0xB030, 0xB200, 0xB330, 0xB440, 0xB540, 0xB6B0, 0xB940, 0xBBC0, 0xBE30, 0xBFF0, 0xC100, 0xC210, 0xC310,
+ 0xC3F0, 0xC580, 0xC760, 0xC940, 0xCAC0, 0xCBC0, 0xCCF0, 0xCE80, 0xD000, 0xD250, 0xD450, 0xD760, 0xD9D0, 0xDBF0, 0xDEB0, 0xE160,
+ 0xE460, 0xE6F0, 0xE990, 0xEC60, 0xEFD0, 0xF380, 0xF760, 0xFAE0, 0xFDD0, 0x0030, 0x01C0, 0x02F0, 0x04B0, 0x0730, 0x0900, 0x0AD0,
+ 0x0C10, 0x0C90, 0x0C00, 0x0B40, 0x0950, 0x0850, 0x0710, 0x0600, 0x0560, 0x0580, 0x05D0, 0x06A0, 0x0750, 0x08D0, 0x0B00, 0x0E20,
+ 0x1330, 0x1960, 0x2100, 0x2A10, 0x3410, 0x3EA0, 0x49E0, 0x54F0, 0x6090, 0x6BE0, 0x76F0, 0x7E90, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F60, 0x7F40, 0x7F70, 0x7F20, 0x7EE0, 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7E80, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7E90, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F10, 0x7E70, 0x7EE0, 0x7EE0, 0x79E0, 0x7040, 0x6430, 0x5700, 0x4820, 0x3900, 0x2B30, 0x1E40, 0x1240, 0x0890,
+ 0xFF30, 0xF660, 0xEDA0, 0xE450, 0xDCA0, 0xD4A0, 0xCC80, 0xC3C0, 0xBB80, 0xB2F0, 0xAA00, 0xA110, 0x9800, 0x8FC0, 0x8A80, 0x8780,
+ 0x8630, 0x85A0, 0x8550, 0x8530, 0x8510, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84F0, 0x84D0, 0x84D0,
+ 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x8460, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0,
+ 0x84F0, 0x8500, 0x8510, 0x8510, 0x8520, 0x8530, 0x8530, 0x8540, 0x8550, 0x8550, 0x8580, 0x8590, 0x85B0, 0x85C0, 0x85E0, 0x85F0,
+ 0x85D0, 0x85B0, 0x85D0, 0x8590, 0x85B0, 0x8580, 0x8580, 0x8580, 0x8560, 0x8550, 0x8540, 0x8530, 0x8530, 0x8530, 0x8540, 0x8540,
+ 0x8550, 0x8580, 0x85C0, 0x8650, 0x8780, 0x8A70, 0x91D0, 0x9C50, 0xA6E0, 0xB220, 0xBD60, 0xC8F0, 0xD440, 0xDE60, 0xE690, 0xEDF0,
+ 0xF480, 0xF880, 0xFBF0, 0xFD80, 0xFD70, 0xF890, 0xF180, 0xE6E0, 0xDA50, 0xCC40, 0xBE60, 0xB150, 0xA5F0, 0x9C00, 0x9300, 0x8CC0,
+ 0x88D0, 0x86F0, 0x8600, 0x8580, 0x8540, 0x8520, 0x8500, 0x8500, 0x8500, 0x8530, 0x8500, 0x8500, 0x8500, 0x84E0, 0x8510, 0x8510,
+ 0x8530, 0x8530, 0x8550, 0x8570, 0x85A0, 0x85F0, 0x86A0, 0x8810, 0x8AE0, 0x8F50, 0xA150, 0xA4A0, 0xA7A0, 0xA9C0, 0xAA50, 0xA920,
+ 0xA4E0, 0x9F10, 0x9740, 0x8DC0, 0x87E0, 0x8580, 0x84F0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8460, 0x8470, 0x8470, 0x8480, 0x84A0, 0x8480, 0x8490,
+ 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x84D0, 0x84E0, 0x84E0, 0x8500, 0x84F0,
+ 0x84F0, 0x8500, 0x84B0, 0x8500, 0x8500, 0x8510, 0x8520, 0x8530, 0x8550, 0x8570, 0x8590, 0x85B0, 0x85E0, 0x8630, 0x86B0, 0x8790,
+ 0x8920, 0x8B10, 0x8DE0, 0x9280, 0x9820, 0x9F60, 0xA640, 0xAD80, 0xB6B0, 0xC020, 0xCA30, 0xD4D0, 0xDFB0, 0xEB90, 0xF780, 0x02B0,
+ 0x0CD0, 0x1470, 0x1B60, 0x2080, 0x23B0, 0x2520, 0x2440, 0x2380, 0x2200, 0x2180, 0x2110, 0x2030, 0x2020, 0x1E90, 0x1CC0, 0x1B90,
+ 0x1BC0, 0x1E80, 0x21F0, 0x2680, 0x2BA0, 0x30E0, 0x3610, 0x3BB0, 0x41A0, 0x4890, 0x4EC0, 0x54C0, 0x59C0, 0x5EB0, 0x6440, 0x69C0,
+ 0x6F90, 0x7530, 0x79F0, 0x7D90, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7F00, 0x7ED0, 0x7ED0, 0x76C0, 0x6A40, 0x5BD0,
+ 0x4A00, 0x34E0, 0x1EE0, 0x06C0, 0xECA0, 0xD490, 0xBDF0, 0xA9C0, 0x9840, 0x8C50, 0x87B0, 0x8650, 0x85E0, 0x85B0, 0x85B0, 0x8590,
+ 0x8560, 0x8530, 0x8510, 0x8500, 0x84F0, 0x84E0, 0x84E0, 0x8500, 0x84E0, 0x84F0, 0x8500, 0x8520, 0x8550, 0x85E0, 0x8780, 0x8CD0,
+ 0x97E0, 0xA3C0, 0xAFD0, 0xBB80, 0xC570, 0xCD30, 0xD1C0, 0xD2B0, 0xD140, 0xCC80, 0xC580, 0xBCF0, 0xB3C0, 0xA980, 0x9F90, 0x9540,
+ 0x8D30, 0x88B0, 0x86D0, 0x8600, 0x85B0, 0x8580, 0x8580, 0x85B0, 0x85F0, 0x8670, 0x8780, 0x8890, 0x89D0, 0x8AC0, 0x8BA0, 0x8CC0,
+ 0x8DC0, 0x8E60, 0x8DA0, 0x8C00, 0x8A40, 0x88A0, 0x8780, 0x8690, 0x8600, 0x8590, 0x8550, 0x8520, 0x8510, 0x8500, 0x84F0, 0x84F0,
+ 0x84F0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x8500, 0x8500, 0x8520, 0x8530, 0x8550, 0x8590, 0x85F0, 0x8690, 0x87E0, 0x8A60,
+ 0x8F70, 0x9680, 0x9E70, 0xA5E0, 0xADC0, 0xB580, 0xBD10, 0xC540, 0xCCA0, 0xD3E0, 0xDB50, 0xE310, 0xEAA0, 0xF1A0, 0xF7F0, 0xFDA0,
+ 0x0320, 0x08A0, 0x0ED0, 0x1510, 0x1AE0, 0x1FE0, 0x2550, 0x29D0, 0x2DE0, 0x31D0, 0x35B0, 0x3A40, 0x3DE0, 0x40D0, 0x4370, 0x4520,
+ 0x47C0, 0x4A50, 0x4C60, 0x4ED0, 0x50D0, 0x52E0, 0x54A0, 0x5660, 0x5890, 0x5A10, 0x5CA0, 0x5E10, 0x5E80, 0x5F00, 0x5F10, 0x5FD0,
+ 0x60B0, 0x6200, 0x64D0, 0x6670, 0x67C0, 0x68C0, 0x69B0, 0x6AB0, 0x6C00, 0x6D40, 0x6F50, 0x71B0, 0x7440, 0x7690, 0x78A0, 0x7AC0,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F20, 0x7EE0, 0x7E40, 0x7CD0, 0x7A90, 0x7760, 0x73D0, 0x7050, 0x6D40, 0x6A20,
+ 0x66D0, 0x6260, 0x5E70, 0x5910, 0x5290, 0x4AE0, 0x42C0, 0x3860, 0x2FE0, 0x2910, 0x2250, 0x1C00, 0x16A0, 0x1110, 0x0C90, 0x0960,
+ 0x0840, 0x0860, 0x0A00, 0x0C40, 0x1020, 0x1550, 0x1C50, 0x2490, 0x2DE0, 0x3830, 0x4090, 0x4880, 0x4FF0, 0x5730, 0x5E90, 0x6660,
+ 0x6E00, 0x7450, 0x7A30, 0x7D60, 0x7E50, 0x7E30, 0x7B30, 0x7460, 0x6890, 0x5940, 0x45B0, 0x2ED0, 0x1890, 0x02C0, 0xECD0, 0xD7A0,
+ 0xC3E0, 0xB180, 0xA070, 0x92E0, 0x8A30, 0x8740, 0x8640, 0x8600, 0x8620, 0x8690, 0x88B0, 0x8DC0, 0x95B0, 0x9E60, 0xA470, 0xA9B0,
+ 0xAD90, 0xB040, 0xB280, 0xB380, 0xB270, 0xAF50, 0xA990, 0xA1B0, 0x97C0, 0x8DB0, 0x8800, 0x85D0, 0x8520, 0x84F0, 0x84D0, 0x84C0,
+ 0x84B0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8490, 0x8490, 0x8490, 0x84A0, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84D0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84F0, 0x84E0,
+ 0x8530, 0x8550, 0x85F0, 0x8800, 0x8E90, 0x9980, 0xA420, 0xAEA0, 0xB720, 0xBDD0, 0xC2D0, 0xC740, 0xCAB0, 0xCDF0, 0xD010, 0xD2A0,
+ 0xD430, 0xD4E0, 0xD560, 0xD590, 0xD610, 0xD5C0, 0xD480, 0xD370, 0xD2B0, 0xD2D0, 0xD2D0, 0xD220, 0xD140, 0xCFF0, 0xCDD0, 0xCB90,
+ 0xC970, 0xC890, 0xC6C0, 0xC5C0, 0xC400, 0xC230, 0xC0E0, 0xBF00, 0xBD40, 0xBAE0, 0xB8F0, 0xB6C0, 0xB4D0, 0xB300, 0xB140, 0xAF80,
+ 0xAE10, 0xAC80, 0xAB10, 0xA9E0, 0xA920, 0xA8F0, 0xAA00, 0xABA0, 0xAE00, 0xB000, 0xB390, 0xB750, 0xBD00, 0xC2C0, 0xC970, 0xD0B0,
+ 0xD890, 0xE0F0, 0xE990, 0xF270, 0xFD00, 0x06C0, 0x1230, 0x1DC0, 0x2890, 0x3470, 0x3F70, 0x4B40, 0x55F0, 0x6050, 0x69F0, 0x7240,
+ 0x77F0, 0x7D00, 0x7EC0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7F00, 0x7EE0, 0x7F50, 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F10, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20,
+ 0x7EF0, 0x7F80, 0x7F10, 0x7EF0, 0x7F30, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7F10, 0x7F00, 0x7EE0, 0x7EF0,
+ 0x7F70, 0x7F20, 0x7EC0, 0x7EE0, 0x7ED0, 0x7F70, 0x7F10, 0x7EB0, 0x7EE0, 0x7C80, 0x7250, 0x68B0, 0x5D60, 0x5280, 0x46D0, 0x3C20,
+ 0x33A0, 0x2A60, 0x21D0, 0x1900, 0x1120, 0x0B20, 0x0650, 0x0440, 0x0480, 0x06D0, 0x0C70, 0x1320, 0x1B00, 0x21D0, 0x27A0, 0x2B70,
+ 0x2D30, 0x2E30, 0x2DE0, 0x2B80, 0x2850, 0x22D0, 0x1C70, 0x1590, 0x0F50, 0x0B20, 0x0A60, 0x0B90, 0x0E00, 0x10A0, 0x12E0, 0x1310,
+ 0x1170, 0x0E60, 0x09B0, 0x04E0, 0xFFC0, 0xFA90, 0xF6B0, 0xF360, 0xF140, 0xEFD0, 0xEF90, 0xF120, 0xF160, 0xF1D0, 0xF0D0, 0xEEE0,
+ 0xED70, 0xEB30, 0xE9B0, 0xE800, 0xE6F0, 0xE820, 0xE980, 0xEC40, 0xEFF0, 0xF350, 0xF800, 0xFC00, 0x00D0, 0x1EC0, 0x2810, 0x3080,
+ 0x3860, 0x40C0, 0x4900, 0x50E0, 0x5710, 0x5AB0, 0x5E80, 0x60E0, 0x62F0, 0x64D0, 0x6770, 0x6AD0, 0x6DD0, 0x7030, 0x7340, 0x75E0,
+ 0x7980, 0x7CB0, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F30, 0x7EF0, 0x7ED0, 0x7EE0,
+ 0x7F00, 0x7F50, 0x7F10, 0x7EA0, 0x7EC0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7EE0, 0x7F20, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7EE0,
+ 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7EA0, 0x7BE0, 0x7790, 0x72D0, 0x6D00, 0x66E0, 0x6050, 0x5990,
+ 0x5310, 0x4C60, 0x4680, 0x4080, 0x3AA0, 0x34C0, 0x2F10, 0x2A70, 0x2730, 0x24A0, 0x2370, 0x2300, 0x22F0, 0x2400, 0x2550, 0x2700,
+ 0x2960, 0x2B90, 0x2F10, 0x3260, 0x3640, 0x3910, 0x3A90, 0x3C00, 0x3B80, 0x3AF0, 0x39B0, 0x37A0, 0x3630, 0x3400, 0x3140, 0x2E10,
+ 0x29F0, 0x2680, 0x2240, 0x1EE0, 0x1B80, 0x1890, 0x1710, 0x15A0, 0x15C0, 0x16D0, 0x1880, 0x1BF0, 0x2020, 0x25D0, 0x2D10, 0x33B0,
+ 0x3BC0, 0x42F0, 0x4B30, 0x5280, 0x5940, 0x5FD0, 0x6550, 0x6AC0, 0x6E10, 0x6FB0, 0x70F0, 0x7040, 0x6D90, 0x69B0, 0x6520, 0x6000,
+ 0x5890, 0x4FF0, 0x4740, 0x3DC0, 0x33D0, 0x28F0, 0x1DA0, 0x12E0, 0x0730, 0xFB00, 0xEF50, 0xE3D0, 0xD980, 0xCE50, 0xC490, 0xBB10,
+ 0xB2A0, 0xAB00, 0xA320, 0x9D70, 0x98B0, 0x9580, 0x9410, 0x9480, 0x9670, 0x9830, 0x9A50, 0x9BF0, 0x9DF0, 0xA000, 0xA2F0, 0xA620,
+ 0xA9A0, 0xAC90, 0xAF80, 0xB1A0, 0xB3E0, 0xB690, 0xB830, 0xB920, 0xBA10, 0xBA90, 0xBB60, 0xBC10, 0xBCA0, 0xBE70, 0xBFB0, 0xC0D0,
+ 0xC230, 0xC310, 0xC480, 0xC590, 0xC790, 0xC9E0, 0xCC30, 0xCE60, 0xCFC0, 0xD0E0, 0xD220, 0xD330, 0xD3C0, 0xD460, 0xD4F0, 0xD4E0,
+ 0xD4B0, 0xD4D0, 0xD450, 0xD480, 0xD440, 0xD3B0, 0xD3D0, 0xD460, 0xD480, 0xD510, 0xD580, 0xD680, 0xD6B0, 0xD690, 0xD560, 0xD420,
+ 0xD3D0, 0xD3C0, 0xD470, 0xD470, 0xD4C0, 0xD530, 0xD580, 0xD550, 0xD5D0, 0xD680, 0xD710, 0xD6F0, 0xD630, 0xD640, 0xD5D0, 0xD630,
+ 0xD6F0, 0xD700, 0xD740, 0xD700, 0xD750, 0xD710, 0xD7E0, 0xD960, 0xDA80, 0xDB20, 0xDB70, 0xDB00, 0xDB80, 0xDBE0, 0xDCA0, 0xDD40,
+ 0xDDF0, 0xDEF0, 0xDEA0, 0xDE70, 0xDDE0, 0xDDB0, 0xDDD0, 0xDD60, 0xDD40, 0xDCD0, 0xDC20, 0xDC90, 0xDCD0, 0xDCD0, 0xDCC0, 0xDD30,
+ 0xDDB0, 0xDE30, 0xE020, 0xE350, 0xE6D0, 0xEB00, 0xEE60, 0xF170, 0xF3A0, 0xF670, 0xFA90, 0xFF10, 0x03F0, 0x0940, 0x0D90, 0x11F0,
+ 0x13A0, 0x1540, 0x1610, 0x16A0, 0x1680, 0x16B0, 0x1670, 0x1560, 0x13C0, 0x11F0, 0x0F60, 0x0CC0, 0x0900, 0x0550, 0x0160, 0xFE40,
+ 0xFA90, 0xF720, 0xF2E0, 0xEE00, 0xE8D0, 0xE310, 0xDDA0, 0xD890, 0xD340, 0xCE20, 0xC960, 0xC460, 0xBEF0, 0xB9E0, 0xB5A0, 0xB1E0,
+ 0xAE90, 0xAB70, 0xA860, 0xA5B0, 0xA450, 0xA3F0, 0xA3A0, 0xA4A0, 0xA5B0, 0xA770, 0xA940, 0xAB40, 0xADB0, 0xB080, 0xB470, 0xB8F0,
+ 0xBE00, 0xC320, 0xC840, 0xCD90, 0xD410, 0xDA30, 0xDFB0, 0xE580, 0xEAD0, 0xF010, 0xF4C0, 0xF960, 0xFF40, 0x04D0, 0x0950, 0x0CE0,
+ 0x1050, 0x12F0, 0x1530, 0x17A0, 0x1AC0, 0x1DD0, 0x20B0, 0x2310, 0x24C0, 0x2650, 0x2770, 0x2820, 0x2810, 0x2780, 0x26B0, 0x2500,
+ 0x22F0, 0x20F0, 0x1EA0, 0x1AE0, 0x1710, 0x1280, 0x0E50, 0x0A00, 0x05B0, 0x01E0, 0xFEE0, 0xFC70, 0xFB30, 0xFA10, 0xF9A0, 0xFA70,
+ 0xFBD0, 0xFD90, 0x0060, 0x03A0, 0x0730, 0x0B30, 0x0F00, 0x12C0, 0x15D0, 0x17F0, 0x19E0, 0x1BE0, 0x1E40, 0x20F0, 0x23B0, 0x2760,
+ 0x2AE0, 0x2D80, 0x2FB0, 0x31D0, 0x3490, 0x3790, 0x3B60, 0x3EB0, 0x4240, 0x4540, 0x4890, 0x4D20, 0x52A0, 0x5A50, 0x6290, 0x6B30,
+ 0x7440, 0x7C10, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7EE0, 0x7100, 0x6210, 0x5390, 0x4560,
+ 0x3910, 0x2D70, 0x2000, 0x11A0, 0x0050, 0xED50, 0xD8B0, 0xC460, 0xAFD0, 0xA070, 0x9500, 0x8EC0, 0x8C30, 0x8C60, 0x9060, 0x9A40,
+ 0xA690, 0xB780, 0xC7C0, 0xD760, 0xE5F0, 0xF1C0, 0xFC40, 0x0380, 0x0890, 0x0BF0, 0x0E80, 0x1010, 0x1160, 0x12E0, 0x1580, 0x17A0,
+ 0x1A30, 0x1CC0, 0x1F90, 0x2300, 0x2660, 0x2AC0, 0x2FC0, 0x3610, 0x3CF0, 0x4360, 0x4A80, 0x5180, 0x5830, 0x5DE0, 0x61D0, 0x6590,
+ 0x6800, 0x69A0, 0x6AF0, 0x6BB0, 0x6BB0, 0x6A50, 0x6860, 0x6400, 0x5DC0, 0x5650, 0x4CC0, 0x43A0, 0x3B00, 0x3230, 0x2960, 0x2060,
+ 0x1680, 0x0D10, 0x0310, 0xFA40, 0xF1F0, 0xE9D0, 0xE330, 0xDD60, 0xDA50, 0xD920, 0xD9C0, 0xDC40, 0xDEF0, 0xE2B0, 0xE530, 0xE7C0,
+ 0xEAB0, 0xED60, 0xF050, 0xF2F0, 0xF550, 0xF7A0, 0xFA40, 0xFCD0, 0x0070, 0x0540, 0x0B10, 0x10D0, 0x1700, 0x1DC0, 0x2550, 0x2E50,
+ 0x3820, 0x4300, 0x4E60, 0x5840, 0x6290, 0x6C30, 0x7600, 0x7D40, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F00,
+ 0x7F50, 0x7F10, 0x7F00, 0x7EF0, 0x7EB0, 0x73E0, 0x6660, 0x56F0, 0x47B0, 0x37F0, 0x2940, 0x1C50, 0x1070, 0x0570, 0xFC50, 0xF480,
+ 0xEE10, 0xE920, 0xE570, 0xE2B0, 0xE1B0, 0xE1A0, 0xE210, 0xE2F0, 0xE460, 0xE5D0, 0xE790, 0xE950, 0xEB60, 0xECA0, 0xECA0, 0xECA0,
+ 0xEBD0, 0xEAD0, 0xE9A0, 0xE7F0, 0xE6D0, 0xE520, 0xE360, 0xE0F0, 0xDE80, 0xDBF0, 0xD9A0, 0xD710, 0xD500, 0xD3A0, 0xD360, 0xD390,
+ 0xD510, 0xD870, 0xDB90, 0xE090, 0xE5C0, 0xEB10, 0xF050, 0xF5A0, 0xFB90, 0x00E0, 0x0670, 0x0B30, 0x0F00, 0x1280, 0x1590, 0x1830,
+ 0x1A40, 0x1AF0, 0x1BD0, 0x1B50, 0x19D0, 0x1830, 0x1600, 0x1480, 0x1290, 0x11B0, 0x1160, 0x1220, 0x1450, 0x17B0, 0x1C00, 0x2210,
+ 0x28B0, 0x30B0, 0x3920, 0x4220, 0x4C90, 0x5800, 0x6280, 0x6C90, 0x74B0, 0x7BB0, 0x7EC0, 0x7F40, 0x7F30, 0x7F20, 0x7F10, 0x7F00,
+ 0x7F40, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7D80, 0x78E0, 0x74F0, 0x7080, 0x6C90, 0x67F0, 0x6380, 0x5FD0, 0x5B90, 0x56F0,
+ 0x5290, 0x4DF0, 0x49E0, 0x44D0, 0x3FF0, 0x3AA0, 0x3570, 0x30D0, 0x2CD0, 0x28F0, 0x2610, 0x22D0, 0x2000, 0x1C30, 0x1820, 0x0EC0,
+ 0x0D80, 0x0D10, 0x0C90, 0x0CB0, 0x0CE0, 0x0CD0, 0x0D10, 0x0D30, 0x0DB0, 0x0E00, 0x0EA0, 0x1000, 0x1060, 0x11C0, 0x11E0, 0x1090,
+ 0x0FB0, 0x0E00, 0x0C20, 0x0AD0, 0x0890, 0x05E0, 0x0300, 0xFFF0, 0xFBB0, 0xF660, 0xF1D0, 0xEC80, 0xE750, 0xE1E0, 0xDC90, 0xD6F0,
+ 0xD0E0, 0xCA70, 0xC330, 0xBC30, 0xB5E0, 0xAF90, 0xAA60, 0xA5D0, 0xA1E0, 0x9F30, 0x9CA0, 0x9B20, 0x9AA0, 0x9B50, 0x9D00, 0x9F30,
+ 0xA2F0, 0xA6C0, 0xAAC0, 0xAF10, 0xB4B0, 0xBA20, 0xC0D0, 0xC730, 0xCE20, 0xD430, 0xD930, 0xDF90, 0xE490, 0xEB00, 0xF090, 0xF570,
+ 0xFAE0, 0xFF90, 0x0480, 0x0990, 0x0EA0, 0x1400, 0x1900, 0x1D80, 0x2210, 0x2650, 0x2BD0, 0x3170, 0x37A0, 0x3D50, 0x4310, 0x49C0,
+ 0x50E0, 0x57D0, 0x5EF0, 0x6630, 0x6DE0, 0x74D0, 0x7B70, 0x7EE0, 0x7F30, 0x7F00, 0x7F00, 0x7F90, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EF0,
+ 0x7F30, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7910, 0x6860, 0x54D0, 0x4210, 0x2F60, 0x1E00, 0x0D50, 0xFE30,
+ 0xF0B0, 0xE520, 0xDAB0, 0xD170, 0xCAC0, 0xC690, 0xC380, 0xC1F0, 0xC2A0, 0xC4F0, 0xC980, 0xCF70, 0xD810, 0xE1F0, 0xED70, 0xFAB0,
+ 0x07D0, 0x1530, 0x2230, 0x2DF0, 0x38F0, 0x41F0, 0x4840, 0x4D10, 0x5040, 0x52A0, 0x54D0, 0x5770, 0x59A0, 0x5AC0, 0x5A90, 0x56F0,
+ 0x4FF0, 0x4740, 0x3BB0, 0x3030, 0x2400, 0x1770, 0x0C50, 0x00A0, 0xF7C0, 0xEF40, 0xE750, 0xE070, 0xD900, 0xD140, 0xC980, 0xC1C0,
+ 0xB9E0, 0xB200, 0xAA90, 0xA370, 0x9BF0, 0x9530, 0x8EE0, 0x8A80, 0x87E0, 0x8650, 0x85E0, 0x8550, 0x8550, 0x8500, 0x84F0, 0x84F0,
+ 0x84E0, 0x84E0, 0x84E0, 0x84D0, 0x84E0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x84D0, 0x84F0, 0x8500,
+ 0x8510, 0x8530, 0x8540, 0x8580, 0x85E0, 0x8660, 0x8770, 0x8970, 0x8D10, 0x92C0, 0x9890, 0x9E80, 0xA4A0, 0xAB40, 0xB100, 0xB710,
+ 0xBD80, 0xC410, 0xCAA0, 0xD150, 0xD850, 0xDF50, 0xE5D0, 0xEB70, 0xF0B0, 0xF4E0, 0xF980, 0xFDE0, 0x02B0, 0x06E0, 0x0A40, 0x0E60,
+ 0x10A0, 0x1280, 0x1490, 0x1610, 0x1930, 0x1BA0, 0x1CD0, 0x1E50, 0x1EF0, 0x2090, 0x22B0, 0x2560, 0x2840, 0x2BB0, 0x2EF0, 0x3220,
+ 0x35F0, 0x3A70, 0x3F70, 0x4590, 0x4C50, 0x53B0, 0x5C20, 0x6410, 0x6CB0, 0x74F0, 0x7C70, 0x7F10, 0x7EA0, 0x7EC0, 0x7E80, 0x7F10,
+ 0x7F20, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7E30, 0x7150, 0x6500,
+ 0x5800, 0x4A90, 0x3CF0, 0x2EA0, 0x2190, 0x1370, 0x07A0, 0xFB10, 0xF250, 0xEB00, 0xE4D0, 0xDFB0, 0xDB50, 0xD6B0, 0xD220, 0xCC80,
+ 0xC5D0, 0xBFC0, 0xB990, 0xB390, 0xAD40, 0xA7C0, 0xA300, 0x9EC0, 0x9C60, 0x9AB0, 0x9B10, 0x9C60, 0x9DC0, 0x9F00, 0x9F30, 0x9F80,
+ 0x9FB0, 0x9F10, 0x9DD0, 0x9B60, 0x98F0, 0x9520, 0x9040, 0x8C20, 0x8910, 0x8720, 0x8630, 0x85A0, 0x8550, 0x8530, 0x8510, 0x8500,
+ 0x84F0, 0x8500, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x84F0, 0x84F0, 0x84F0,
+ 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x8500, 0x8500, 0x8500, 0x8510, 0x8510, 0x8520, 0x8530, 0x8550, 0x8560, 0x8580, 0x85B0, 0x8610,
+ 0x86A0, 0x8790, 0x88D0, 0x8AC0, 0x8C30, 0x8D20, 0x8D40, 0x8C70, 0x8B30, 0x8980, 0x8810, 0x86E0, 0x8600, 0x8580, 0x8540, 0x8510,
+ 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84A0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8520, 0x8530, 0x8540,
+ 0x8550, 0x8570, 0x8590, 0x85B0, 0x85D0, 0x85E0, 0x85E0, 0x85E0, 0x85E0, 0x8600, 0x85E0, 0x85D0, 0x85C0, 0x85B0, 0x8590, 0x8570,
+ 0x8560, 0x8550, 0x8540, 0x8530, 0x8530, 0x8530, 0x8520, 0x8550, 0x8520, 0x8520, 0x8520, 0x8510, 0x8510, 0x8510, 0x8510, 0x8510,
+ 0x8520, 0x8520, 0x8520, 0x8530, 0x8530, 0x8550, 0x8560, 0x8580, 0x85B0, 0x85F0, 0x8640, 0x86C0, 0x8780, 0x88F0, 0x9320, 0x96C0,
+ 0x9A90, 0x9EB0, 0xA3C0, 0xA970, 0xAF20, 0xB4B0, 0xBA70, 0xBFB0, 0xC480, 0xC940, 0xCEC0, 0xD390, 0xD910, 0xDDE0, 0xE310, 0xE8F0,
+ 0xEE30, 0xF300, 0xF680, 0xF990, 0xFC50, 0xFF30, 0x0270, 0x0580, 0x08E0, 0x0BB0, 0x0EB0, 0x11F0, 0x13E0, 0x15F0, 0x1950, 0x1C30,
+ 0x1F30, 0x2190, 0x2490, 0x27F0, 0x2AE0, 0x2DD0, 0x3210, 0x3530, 0x3970, 0x3C50, 0x3FB0, 0x41F0, 0x4370, 0x4690, 0x4870, 0x4B70,
+ 0x4E00, 0x4FD0, 0x5280, 0x5410, 0x5610, 0x5780, 0x57C0, 0x5860, 0x5840, 0x5830, 0x58C0, 0x5890, 0x5860, 0x5780, 0x5660, 0x5550,
+ 0x53B0, 0x52C0, 0x51E0, 0x5140, 0x5130, 0x5090, 0x50E0, 0x5160, 0x51C0, 0x53D0, 0x56B0, 0x5B20, 0x5FC0, 0x6490, 0x6A30, 0x6FA0,
+ 0x75E0, 0x7B10, 0x7EF0, 0x7F00, 0x7EC0, 0x7ED0, 0x7EF0, 0x7F60, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F10, 0x7E70, 0x7EC0,
+ 0x7ED0, 0x7F10, 0x7EE0, 0x7E90, 0x7F00, 0x7EA0, 0x75C0, 0x6D90, 0x64C0, 0x5C00, 0x5410, 0x4C50, 0x45E0, 0x4040, 0x3C80, 0x3AD0,
+ 0x3B90, 0x3EC0, 0x4380, 0x4840, 0x4C90, 0x5110, 0x5620, 0x59E0, 0x5C80, 0x5DB0, 0x5D20, 0x5BA0, 0x5840, 0x5330, 0x4C20, 0x44E0,
+ 0x3DF0, 0x37B0, 0x3320, 0x3240, 0x3510, 0x3C30, 0x4640, 0x5240, 0x5FB0, 0x6C20, 0x77C0, 0x7E80, 0x7F10, 0x7F00, 0x7EC0, 0x7F10,
+ 0x7F00, 0x7F20, 0x7EE0, 0x7E90, 0x7E30, 0x7B20, 0x7990, 0x7AE0, 0x7D60, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7ED0, 0x7F50, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F80, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F00,
+ 0x7D50, 0x7400, 0x6860, 0x5AC0, 0x4C50, 0x4170, 0x39C0, 0x3670, 0x3690, 0x3820, 0x3A50, 0x3A70, 0x3760, 0x31C0, 0x2850, 0x1D90,
+ 0x1070, 0x0240, 0xF5D0, 0xE9C0, 0xE1D0, 0xDC90, 0xDAA0, 0xDBE0, 0xDE90, 0xE2F0, 0xE8A0, 0xEEA0, 0xF610, 0xFD10, 0x0460, 0x0A20,
+ 0x0E40, 0x01E0, 0xF810, 0xEB50, 0xDA00, 0xC400, 0xA930, 0x8C50, 0x8500, 0x84A0, 0x8480, 0x8460, 0x8450, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8470, 0x8460, 0x8470, 0x8450,
+ 0x8440, 0x8430, 0x8440, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430,
+ 0x8470, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8450, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490,
+ 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x84F0, 0x8510, 0x8530, 0x8550, 0x8580, 0x85B0, 0x85F0, 0x8630, 0x86C0,
+ 0x87B0, 0x8910, 0x8B50, 0x8DF0, 0x9090, 0x9290, 0x9580, 0x9870, 0x9B50, 0x9F70, 0xA2D0, 0xA650, 0xA9E0, 0xAC90, 0xB090, 0xB430,
+ 0xB860, 0xBC80, 0xBFA0, 0xC260, 0xC490, 0xC630, 0xC900, 0xCBC0, 0xCFD0, 0xD260, 0xD480, 0xD620, 0xD7C0, 0xDA20, 0xDBE0, 0xDDD0,
+ 0xDFF0, 0xE130, 0xE360, 0xE590, 0xE850, 0xEB60, 0xEE10, 0xF0A0, 0xF200, 0xF2F0, 0xF330, 0xF3A0, 0xF500, 0xF690, 0xF7F0, 0xF940,
+ 0xF9A0, 0xFA10, 0xFAA0, 0xFA70, 0xFA40, 0xFAB0, 0xFB90, 0xFB20, 0xFA70, 0xFB10, 0xFBC0, 0xFCE0, 0xFE90, 0xFF90, 0x00C0, 0x00C0,
+ 0x00B0, 0x00A0, 0x0060, 0x00F0, 0x00C0, 0x00D0, 0x0160, 0x0040, 0x0010, 0xFF80, 0xFE30, 0xFCD0, 0xFAA0, 0xF8A0, 0xF610, 0xF350,
+ 0xF0E0, 0xEED0, 0xED70, 0xEB80, 0xE9E0, 0xE850, 0xE710, 0xE550, 0xE350, 0xE0C0, 0xDF80, 0xDCE0, 0xDB40, 0xD980, 0xD860, 0xD7E0,
+ 0xD690, 0xD550, 0xD380, 0xD120, 0xCF40, 0xCDB0, 0xCC60, 0xCA90, 0xC8B0, 0xC6B0, 0xC420, 0xC280, 0xC0E0, 0xBEE0, 0xBE10, 0xBCC0,
+ 0xBB90, 0xB9B0, 0xB870, 0xB710, 0xB5B0, 0xB560, 0xB5A0, 0xB610, 0xB6C0, 0xB7D0, 0xB8F0, 0xBB00, 0xBDC0, 0xC1B0, 0xC580, 0xC9D0,
+ 0xCE80, 0xD310, 0xD890, 0xDDA0, 0xE270, 0xE850, 0xEE40, 0xF4A0, 0xFAF0, 0x00A0, 0x05C0, 0x0AB0, 0x0FD0, 0x14C0, 0x1960, 0x1D50,
+ 0x2170, 0x2570, 0x2890, 0x2B90, 0x2E40, 0x3060, 0x32D0, 0x3470, 0x35B0, 0x3860, 0x39B0, 0x3BA0, 0x3C80, 0x3C50, 0x3D10, 0x3C70,
+ 0x3C60, 0x3C80, 0x3BB0, 0x3C60, 0x3D00, 0x3DC0, 0x3DC0, 0x3CD0, 0x3C70, 0x3C00, 0x3C60, 0x3DD0, 0x4080, 0x4520, 0x4980, 0x5010,
+ 0x57E0, 0x5FA0, 0x6880, 0x7110, 0x7990, 0x7E70, 0x7F10, 0x7F30, 0x7F00, 0x7F70, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7F90, 0x7F10,
+ 0x7F20, 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7ED0, 0x7EB0, 0x7C90, 0x7A60, 0x7980, 0x7990, 0x7B00, 0x7D20, 0x7ED0, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7EF0, 0x7F50, 0x7730, 0x67E0, 0x5840, 0x4850, 0x3840, 0x2860, 0x1A90, 0x0DB0, 0x03A0, 0xFB90, 0xF610, 0xF2A0,
+ 0xF010, 0xEE00, 0xEC50, 0xEAD0, 0xE950, 0xE840, 0xE6F0, 0xE620, 0xE540, 0xE4D0, 0xE400, 0xE450, 0xE520, 0xE650, 0xE7B0, 0xE830,
+ 0xE920, 0xEA00, 0xEA90, 0xEB50, 0xECE0, 0xEF10, 0xF0C0, 0xF220, 0xF3A0, 0xF4E0, 0xF680, 0xF7E0, 0xF9D0, 0xFBD0, 0xFD00, 0xFE80,
+ 0x0000, 0x01F0, 0x03E0, 0x0590, 0x0690, 0x07E0, 0x08B0, 0x09A0, 0x0B10, 0x0C70, 0x0DD0, 0x0F60, 0x1050, 0x1110, 0x11C0, 0x1200,
+ 0x12B0, 0x12B0, 0x1340, 0x1370, 0x1390, 0x12C0, 0x11C0, 0x1110, 0x1020, 0x0F20, 0x0E20, 0x0C90, 0x0B00, 0x08C0, 0x07C0, 0x0720,
+ 0x06E0, 0x05C0, 0x04C0, 0x0320, 0x01B0, 0x0050, 0xFF80, 0xFF00, 0xFEB0, 0xFE50, 0xFD60, 0xFD00, 0xFC40, 0xFC40, 0xFBB0, 0xFB20,
+ 0xFA40, 0xF950, 0xF830, 0xF740, 0xF660, 0xF600, 0xF5D0, 0xF5C0, 0xF510, 0xF430, 0xF390, 0xF360, 0xF2C0, 0xF1C0, 0xF0D0, 0xEFE0,
+ 0xEEF0, 0xEE90, 0xEE90, 0xEE40, 0xEDA0, 0xED50, 0xEC30, 0xEAC0, 0xE900, 0xE5B0, 0xE2E0, 0xDFF0, 0xDCB0, 0xD880, 0xD4C0, 0xD1B0,
+ 0xCDF0, 0xCB10, 0xC760, 0xC420, 0xC0F0, 0xBD30, 0xBA70, 0xB740, 0xB5C0, 0xB340, 0xB160, 0xB030, 0xAF50, 0xAE30, 0xAD10, 0xABF0,
+ 0xAB10, 0xAA90, 0xA960, 0xA850, 0xA6E0, 0xA6C0, 0xA620, 0xA540, 0xA4B0, 0xA460, 0xA450, 0xA4D0, 0xA530, 0xA620, 0xA670, 0xA690,
+ 0xA6A0, 0xA740, 0xA7B0, 0xA7D0, 0xA8A0, 0xA920, 0xAA20, 0xAB70, 0xACE0, 0xAE30, 0xAF70, 0xB0C0, 0xB1B0, 0xB2D0, 0xB4C0, 0xB5A0,
+ 0xB690, 0xB880, 0xBA40, 0xBC70, 0xBE50, 0xBFB0, 0xC1F0, 0xC380, 0xC4E0, 0xC690, 0xC7E0, 0xC980, 0xCB20, 0xD360, 0xD530, 0xD610,
+ 0xD7E0, 0xD910, 0xDB10, 0xDC30, 0xDC60, 0xDD30, 0xDD90, 0xDE40, 0xDEF0, 0xDFB0, 0xE080, 0xE160, 0xE260, 0xE2C0, 0xE350, 0xE4A0,
+ 0xE560, 0xE670, 0xE750, 0xE7A0, 0xE8D0, 0xEA30, 0xEBC0, 0xED60, 0xEF50, 0xF170, 0xF320, 0xF440, 0xF5D0, 0xF760, 0xF9C0, 0xFC60,
+ 0xFF10, 0x0180, 0x0360, 0x0590, 0x06D0, 0x08C0, 0x0B10, 0x0D30, 0x0FE0, 0x11D0, 0x12D0, 0x1560, 0x16A0, 0x1840, 0x1A30, 0x1BB0,
+ 0x1D80, 0x1E80, 0x1FD0, 0x20E0, 0x2220, 0x2450, 0x2580, 0x26A0, 0x2740, 0x27B0, 0x28B0, 0x2940, 0x2A90, 0x2BB0, 0x2BE0, 0x2CA0,
+ 0x2D10, 0x2E70, 0x2FE0, 0x3160, 0x3370, 0x3470, 0x35C0, 0x3610, 0x36F0, 0x37C0, 0x3A40, 0x3C90, 0x3F50, 0x41A0, 0x4510, 0x4830,
+ 0x4AA0, 0x4D00, 0x4F40, 0x5180, 0x5350, 0x5630, 0x5870, 0x5B60, 0x5EC0, 0x6200, 0x6430, 0x66C0, 0x6850, 0x6A10, 0x6B40, 0x6C60,
+ 0x6E50, 0x6FB0, 0x71E0, 0x7360, 0x74B0, 0x7640, 0x76E0, 0x7810, 0x7980, 0x79E0, 0x79E0, 0x7940, 0x7930, 0x7940, 0x7990, 0x7A70,
+ 0x7A60, 0x7AA0, 0x7A40, 0x7930, 0x7900, 0x7840, 0x7830, 0x77E0, 0x7700, 0x7680, 0x7590, 0x7470, 0x7400, 0x7340, 0x7330, 0x7280,
+ 0x71A0, 0x7040, 0x6EC0, 0x6EA0, 0x6EC0, 0x6F90, 0x7060, 0x7100, 0x7240, 0x7310, 0x74B0, 0x7560, 0x75E0, 0x76D0, 0x7880, 0x7AC0,
+ 0x7C60, 0x7D90, 0x7E30, 0x7E60, 0x7EC0, 0x7ED0, 0x7F70, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F10, 0x7E70, 0x7ED0, 0x7ED0,
+ 0x7F30, 0x7F20, 0x7EA0, 0x7ED0, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7EC0, 0x7F40, 0x7F30, 0x7F20,
+ 0x7F20, 0x7EF0, 0x7F50, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F30, 0x7E60, 0x7B10, 0x76B0, 0x7260, 0x6D50, 0x6850, 0x63D0, 0x6100,
+ 0x5F50, 0x5EB0, 0x5EF0, 0x5FD0, 0x6210, 0x6470, 0x6770, 0x6BD0, 0x7000, 0x7500, 0x79A0, 0x7CC0, 0x7EA0, 0x7EA0, 0x7F10, 0x7F10,
+ 0x7F20, 0x7EE0, 0x7EC0, 0x7F10, 0x7F00, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EE0, 0x7F30, 0x7F00, 0x7EF0,
+ 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F00, 0x7EF0,
+ 0x7F00, 0x7F60, 0x7F10, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7ED0, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7EB0, 0x7EF0,
+ 0x7EE0, 0x7EF0, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7F60, 0x7F20, 0x7F20, 0x7F20, 0x7F00, 0x7A40, 0x7190, 0x6860, 0x5F40, 0x55D0, 0x4C80, 0x4270, 0x3A90, 0x33B0,
+ 0x2CE0, 0x27C0, 0x22E0, 0x1DB0, 0x19B0, 0x15A0, 0x1190, 0x0F00, 0x0CD0, 0x0BF0, 0x0B70, 0x0BC0, 0x0C40, 0x0D30, 0x0F10, 0x1160,
+ 0x1440, 0x1810, 0x1B30, 0x2020, 0x24F0, 0x2990, 0x2F90, 0x3500, 0x3B70, 0x4120, 0x4700, 0x4E00, 0x5440, 0x5A10, 0x5F60, 0x63C0,
+ 0x6850, 0x6CC0, 0x7040, 0x7350, 0x7590, 0x77E0, 0x79C0, 0x7B90, 0x7CF0, 0x7E20, 0x7ED0, 0x7EB0, 0x7F60, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F00, 0x7F70, 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EA0, 0x7E60, 0x7E30, 0x7E10, 0x7E10, 0x7EA0, 0x7EE0,
+ 0x7F10, 0x7F10, 0x7E70, 0x7EE0, 0x7F10, 0x7F00, 0x7EF0, 0x7E90, 0x7E90, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F10, 0x7EE0, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F40, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7650, 0x6980, 0x5C60, 0x4F40, 0x41B0, 0x3490, 0x28B0, 0x1C80, 0x1110, 0x06F0, 0xFE60, 0xF650, 0xEF10, 0xE880, 0xE280,
+ 0xDD10, 0xD850, 0xD310, 0xCFA0, 0xCD90, 0xCD20, 0xCEC0, 0xD200, 0xD6B0, 0xDC80, 0xE2A0, 0xEB30, 0xF260, 0xFAB0, 0x03C0, 0x0DF0,
+ 0x1900, 0x24E0, 0x3210, 0x3E40, 0x49F0, 0x5540, 0x6130, 0x6E00, 0x7A60, 0x7EF0, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7950, 0x5B30,
+ 0x3E20, 0x20E0, 0x03F0, 0xE6F0, 0xCA90, 0xAEC0, 0x9210, 0x8660, 0x84F0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450,
+ 0x8450, 0x8440, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84E0, 0x8530, 0x85D0, 0x86C0, 0x8740,
+ 0x86B0, 0x85C0, 0x8530, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x8510,
+ 0x8520, 0x85C0, 0x87E0, 0x8FB0, 0x9930, 0xA070, 0xA4A0, 0xA630, 0xA440, 0x9F50, 0x9760, 0x8EC0, 0x8840, 0x85F0, 0x8540, 0x8500,
+ 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84D0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8430, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8440, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x84A0, 0x84E0, 0x8680, 0x9AA0, 0xAFB0, 0xBB90, 0xBF80, 0xBE00, 0xB9A0,
+ 0xB400, 0xADD0, 0xA6B0, 0x9F60, 0x9650, 0x8D30, 0x8760, 0x8550, 0x84E0, 0x84D0, 0x84B0, 0x8490, 0x8480, 0x8410, 0x8470, 0x8460,
+ 0x8450, 0x8440, 0x8440, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430,
+ 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8410,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8420, 0x8460, 0x8460, 0x8460, 0x8470, 0x8450, 0x8450, 0x8420, 0x8440,
+ 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8420, 0x8430, 0x8430,
+ 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8470, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x8500, 0x8550, 0x8650,
+ 0x8970, 0x92B0, 0x9E50, 0xA8B0, 0xB2C0, 0xBC10, 0xC5B0, 0xD070, 0xDA60, 0xE520, 0xF080, 0xFCE0, 0x0980, 0x1710, 0x25E0, 0x3560,
+ 0x45A0, 0x5380, 0x5ED0, 0x66A0, 0x6960, 0x66C0, 0x5C90, 0x4AB0, 0x3240, 0x1140, 0xEDB0, 0xC7D0, 0xA1F0, 0x87C0, 0x84E0, 0x84B0,
+ 0x8450, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x84A0, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x84A0, 0x84C0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8530, 0x8590, 0x8650, 0x8780, 0x8920, 0x8AB0, 0x8C90, 0x8E50, 0x90E0,
+ 0x9410, 0x9680, 0x98C0, 0x9A70, 0x9A80, 0x9930, 0x96E0, 0x9370, 0x8FC0, 0x8C30, 0x8990, 0x87A0, 0x8690, 0x8620, 0x8660, 0x8690,
+ 0x87F0, 0x8B10, 0x9190, 0x9890, 0x9D10, 0x9E40, 0x9750, 0x99A0, 0x9D40, 0xA1F0, 0xA730, 0xABE0, 0xAF90, 0xB2F0, 0xB520, 0xB870,
+ 0xBC80, 0xC2D0, 0xCAF0, 0xD4E0, 0xE1C0, 0xF000, 0xFE90, 0x0D70, 0x1A70, 0x2650, 0x2FC0, 0x3760, 0x3D90, 0x42E0, 0x47F0, 0x4CC0,
+ 0x50C0, 0x53B0, 0x5500, 0x54D0, 0x5210, 0x4E10, 0x4860, 0x40F0, 0x3950, 0x31A0, 0x2A30, 0x22E0, 0x1B30, 0x16A0, 0x1320, 0x1190,
+ 0x1210, 0x1400, 0x1840, 0x1CD0, 0x2210, 0x2960, 0x3010, 0x3770, 0x3F40, 0x4640, 0x4D90, 0x5400, 0x5970, 0x5E40, 0x62E0, 0x6820,
+ 0x6C80, 0x71C0, 0x7680, 0x7A60, 0x7DA0, 0x7ED0, 0x7F30, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F50, 0x7F20, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F60, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7EF0, 0x7F10, 0x7EF0, 0x7F80, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F30,
+ 0x7EE0, 0x7EC0, 0x7F10, 0x7F00, 0x7F40, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7EF0, 0x7F00,
+ 0x7EC0, 0x7F20, 0x7F00, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F60, 0x7F00, 0x7F20, 0x7F40, 0x7F00,
+ 0x7F30, 0x7EE0, 0x7EF0, 0x7F30, 0x7F10, 0x7F70, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7ED0, 0x7EB0, 0x7F60,
+ 0x7F10, 0x7EB0, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EE0, 0x7ED0, 0x7F20, 0x7F20, 0x7E90, 0x7ED0, 0x7F00, 0x7EE0, 0x7EF0,
+ 0x7EC0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7F10,
+ 0x7F60, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7EF0, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F80,
+ 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7F10, 0x7EF0, 0x7F40, 0x7F10,
+ 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F20, 0x7F20, 0x7F10, 0x7800, 0x6E70, 0x6520, 0x5B50, 0x52B0, 0x4880,
+ 0x3BF0, 0x2DB0, 0x1CA0, 0x0A40, 0xF510, 0xDD80, 0xC520, 0xAC00, 0x93D0, 0x86E0, 0x8510, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x8490,
+ 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84E0, 0x84B0, 0x84B0, 0x84D0, 0x84C0, 0x84D0, 0x84F0,
+ 0x8500, 0x8550, 0x8640, 0x8BA0, 0xA1F0, 0xC010, 0xE500, 0x10B0, 0x4530, 0x7520, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x58A0, 0xDF50, 0x8790, 0x8490, 0x8470, 0x8460, 0x8470, 0x8470, 0x8480, 0x84A0, 0x84D0,
+ 0x8500, 0x8520, 0x8510, 0x84E0, 0x84B0, 0x8490, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x84A0, 0x84F0,
+ 0x9330, 0xD740, 0x10F0, 0x3AA0, 0x4CC0, 0x44B0, 0x2660, 0xF820, 0xC090, 0x8B90, 0x84C0, 0x8490, 0x8470, 0x8450, 0x8450, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8490, 0x84B0, 0x84E0, 0x8580, 0x8A60,
+ 0xA360, 0xBAC0, 0xD370, 0xECB0, 0x0570, 0x1C70, 0x2EC0, 0x3B10, 0x4190, 0x4260, 0x4040, 0x3CF0, 0x3A80, 0x3A60, 0x3D40, 0x4250,
+ 0x4AB0, 0x54A0, 0x60A0, 0x6AE0, 0x7270, 0x7650, 0x75B0, 0x6FE0, 0x6420, 0x53F0, 0x4130, 0x2EA0, 0x1FF0, 0x1530, 0x0DB0, 0x0920,
+ 0x05D0, 0x0400, 0x04B0, 0x07B0, 0x0EC0, 0x1830, 0x23E0, 0x2FA0, 0x3AF0, 0x44B0, 0x4D60, 0x5500, 0x5C00, 0x6150, 0x6330, 0x60A0,
+ 0x57C0, 0x4890, 0x3480, 0x1EB0, 0x0A30, 0xFA40, 0xF070, 0xEDB0, 0xF030, 0xF630, 0xFDB0, 0x05A0, 0x0CB0, 0x12B0, 0x15E0, 0x1660,
+ 0x1330, 0x0D00, 0x0470, 0xFAE0, 0xF050, 0xE5D0, 0xDAC0, 0xCF20, 0xC170, 0xB400, 0xA700, 0x9A90, 0x8FD0, 0x8980, 0x86B0, 0x85B0,
+ 0x8540, 0x8510, 0x8500, 0x8500, 0x8500, 0x8510, 0x8530, 0x8560, 0x85F0, 0x8710, 0x89F0, 0x8EC0, 0x9230, 0x93E0, 0x9380, 0x9190,
+ 0x8ED0, 0x8C20, 0x8A20, 0x8860, 0x8760, 0x86C0, 0x8660, 0x8640, 0x8650, 0x8690, 0x8700, 0x87C0, 0x8920, 0x8C40, 0x9220, 0x9B50,
+ 0xA600, 0xB330, 0xC140, 0xD000, 0xE030, 0xF200, 0x0460, 0x1750, 0x2AD0, 0x3EE0, 0x5270, 0x6550, 0x75D0, 0x7F20, 0x7ED0, 0x7EB0,
+ 0x7F30, 0x7F00, 0x7F10, 0x7EB0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F20, 0x7EC0, 0x7E90, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F00, 0x7F20,
+ 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7F30, 0x7F00, 0x7F40, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F80, 0x7F10,
+ 0x7F20, 0x7F00, 0x7F10, 0x7F80, 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EB0,
+ 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x78A0, 0x70D0, 0x68B0, 0x60E0, 0x5980, 0x5390,
+ 0x4F70, 0x4CA0, 0x4C20, 0x4C80, 0x4D30, 0x4EE0, 0x50D0, 0x5490, 0x5880, 0x5CC0, 0x60B0, 0x6390, 0x6660, 0x67A0, 0x68F0, 0x6A30,
+ 0x6AF0, 0x6C50, 0x6D90, 0x6E80, 0x7020, 0x7140, 0x7230, 0x7330, 0x73D0, 0x7510, 0x75B0, 0x7740, 0x7890, 0x7A30, 0x7C00, 0x7D20,
+ 0x7DD0, 0x7E40, 0x7ED0, 0x7E90, 0x7E30, 0x7EC0, 0x7EF0, 0x7F10, 0x7F00, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10,
+ 0x7F00, 0x7EF0, 0x7F10, 0x7EA0, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F80, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F60, 0x7EE0,
+ 0x7EF0, 0x7F20, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F10, 0x7F00,
+ 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7720, 0x6890, 0x5950, 0x4970, 0x3C60, 0x3050, 0x2630, 0x12C0, 0x13B0, 0x1530, 0x1740, 0x19A0,
+ 0x1C50, 0x1FE0, 0x2360, 0x2690, 0x2A90, 0x2D90, 0x30A0, 0x3260, 0x3360, 0x34D0, 0x34B0, 0x34E0, 0x3640, 0x39F0, 0x4030, 0x46C0,
+ 0x4DC0, 0x5380, 0x57E0, 0x5B80, 0x5D90, 0x6060, 0x62A0, 0x63E0, 0x6490, 0x6400, 0x6230, 0x6040, 0x5C60, 0x5910, 0x5500, 0x50E0,
+ 0x4BE0, 0x4650, 0x4190, 0x3C20, 0x3640, 0x30D0, 0x2B80, 0x2730, 0x2340, 0x20A0, 0x1F40, 0x1D50, 0x1D90, 0x1D60, 0x1CA0, 0x1C50,
+ 0x1BF0, 0x1C00, 0x1C00, 0x1BF0, 0x1CB0, 0x1BF0, 0x1BC0, 0x1A90, 0x1930, 0x1820, 0x1680, 0x1580, 0x1440, 0x12A0, 0x1150, 0x0F30,
+ 0x0E20, 0x0D40, 0x0BE0, 0x0BB0, 0x0A10, 0x0950, 0x08D0, 0x07D0, 0x07C0, 0x0710, 0x0790, 0x06B0, 0x0640, 0x0710, 0x0800, 0x0940,
+ 0x0AE0, 0x0C30, 0x0DD0, 0x0EC0, 0x1050, 0x1270, 0x1500, 0x1870, 0x1AE0, 0x1E10, 0x2150, 0x2430, 0x27A0, 0x2AC0, 0x2EF0, 0x33B0,
+ 0x3780, 0x3BC0, 0x3FF0, 0x43F0, 0x48E0, 0x4DE0, 0x52D0, 0x5730, 0x5BF0, 0x6040, 0x6480, 0x6920, 0x6D00, 0x7090, 0x7430, 0x7760,
+ 0x7AC0, 0x7D30, 0x7E70, 0x7EC0, 0x7E90, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7EC0, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F40, 0x7F00, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0, 0x7F90, 0x7F10,
+ 0x7F20, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7F10, 0x7EB0, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F20, 0x7EC0,
+ 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7E90, 0x7F00, 0x7F20, 0x7F10, 0x7F20, 0x7EC0, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7EC0, 0x7F30,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F40, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F50, 0x7EE0,
+ 0x7A60, 0x7490, 0x6DF0, 0x6840, 0x62C0, 0x5E10, 0x5AB0, 0x57E0, 0x5570, 0x5410, 0x5360, 0x53D0, 0x5390, 0x52F0, 0x51F0, 0x5010,
+ 0x4EB0, 0x4CB0, 0x4AF0, 0x49C0, 0x4870, 0x47D0, 0x4700, 0x45C0, 0x4600, 0x45C0, 0x46F0, 0x4820, 0x49A0, 0x4B90, 0x4DA0, 0x5020,
+ 0x52A0, 0x53D0, 0x55E0, 0x5760, 0x58E0, 0x5990, 0x5B00, 0x5D00, 0x5E00, 0x5E90, 0x5EE0, 0x5EE0, 0x5ED0, 0x5E20, 0x5D20, 0x5C40,
+ 0x5A90, 0x59E0, 0x58A0, 0x5890, 0x59D0, 0x5CB0, 0x5FE0, 0x6370, 0x6670, 0x6960, 0x6AC0, 0x6BB0, 0x6B60, 0x69F0, 0x6910, 0x6730,
+ 0x6720, 0x66D0, 0x66F0, 0x67B0, 0x6770, 0x6780, 0x6690, 0x6580, 0x64A0, 0x6280, 0x6180, 0x6000, 0x5D60, 0x5B90, 0x5910, 0x5670,
+ 0x5280, 0x4EE0, 0x4BA0, 0x4880, 0x45B0, 0x42A0, 0x3FC0, 0x3D50, 0x3A80, 0x37B0, 0x3510, 0x31D0, 0x2F30, 0x2C40, 0x2920, 0x2630,
+ 0x2390, 0x2230, 0x2140, 0x2230, 0x24A0, 0x27F0, 0x2C90, 0x30B0, 0x33A0, 0x3590, 0x36C0, 0x37B0, 0x3840, 0x3900, 0x38F0, 0x3880,
+ 0x3870, 0x3840, 0x38B0, 0x3990, 0x3AE0, 0x3CE0, 0x3E50, 0x3F30, 0x3ED0, 0x3D70, 0x3BE0, 0x3A60, 0x3A30, 0x3AF0, 0x3CC0, 0x4070,
+ 0x45E0, 0x4CB0, 0x5560, 0x5EC0, 0x6910, 0x72B0, 0x7B20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F50, 0x7F30, 0x79E0, 0x6D60, 0x6040,
+ 0x5370, 0x4AA0, 0x4480, 0x42B0, 0x4490, 0x4A20, 0x5240, 0x5AD0, 0x63B0, 0x6CC0, 0x7350, 0x7910, 0x7DA0, 0x7F10, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7B40, 0x6510, 0x4E50, 0x36A0, 0x1EF0, 0x07F0, 0xF5B0, 0xE6D0,
+ 0xDB10, 0xD2F0, 0xCDC0, 0xCBA0, 0xCCD0, 0xD090, 0xD850, 0xE250, 0xEE20, 0xFAF0, 0x07D0, 0x1510, 0x20D0, 0x2C40, 0x35C0, 0x3ED0,
+ 0x46A0, 0x4DA0, 0x5560, 0x5CB0, 0x6290, 0x67B0, 0x6BC0, 0x6E10, 0x6EB0, 0x6D20, 0x6940, 0x6410, 0x5E00, 0x56C0, 0x5010, 0x4A00,
+ 0x44D0, 0x3F00, 0x3910, 0x32F0, 0x2C00, 0x23C0, 0x1B30, 0x1170, 0x0730, 0xFD70, 0xF290, 0xE940, 0xE100, 0xD9D0, 0xD3A0, 0xCF20,
+ 0xCC50, 0xCA10, 0xC8C0, 0xC7B0, 0xC780, 0xC8B0, 0xCB10, 0xCE80, 0xD3B0, 0xDA00, 0xE070, 0xE6B0, 0xEBC0, 0xEE30, 0xEF60, 0xEED0,
+ 0xED60, 0xEAF0, 0xE870, 0xE4A0, 0xDFF0, 0xDCD0, 0xDBE0, 0xDBF0, 0xDF30, 0xE310, 0xE560, 0xE4B0, 0xDE20, 0xD150, 0xBB10, 0x9F60,
+ 0x87F0, 0x84E0, 0x84D0, 0x8490, 0x8470, 0x8470, 0x84A0, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490,
+ 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x8510, 0x8500, 0x8530, 0x85A0, 0x8630, 0x8730, 0x88D0, 0x8AE0, 0x8D50, 0x8F10, 0x8FC0,
+ 0x8FB0, 0x8E50, 0x8C30, 0x8A20, 0x8820, 0x86D0, 0x85E0, 0x8560, 0x8520, 0x8500, 0x84F0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84A0,
+ 0x8490, 0x84C0, 0x8490, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8490, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470,
+ 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x8500, 0x8550, 0x85E0, 0x8710, 0x89C0, 0x8E70, 0x9420,
+ 0x99B0, 0x9EF0, 0xA490, 0xA9B0, 0xAE10, 0xB120, 0xB270, 0xB2B0, 0xB0B0, 0xAD80, 0xA940, 0xA510, 0xA0C0, 0x9C30, 0x97C0, 0x9310,
+ 0x8E20, 0x8A70, 0x87E0, 0x8680, 0x85F0, 0x85A0, 0x8590, 0x8590, 0x85C0, 0x8620, 0x86E0, 0x8870, 0x8C10, 0x9250, 0x9930, 0xA190,
+ 0xAA40, 0xB300, 0xBB10, 0xC320, 0xC9A0, 0xCF80, 0xD380, 0xD6C0, 0xD990, 0xDBE0, 0xDEE0, 0xE080, 0xE190, 0xE1D0, 0xE120, 0xE040,
+ 0xDF90, 0xDEC0, 0xDE20, 0xDD30, 0xDC90, 0xDBB0, 0xDA60, 0xD950, 0xD990, 0xDA70, 0xDC10, 0xDD70, 0xDF70, 0xE130, 0xE4D0, 0xE810,
+ 0xECC0, 0xF180, 0xF630, 0xFB00, 0x00A0, 0x04C0, 0x09D0, 0x0E40, 0x1320, 0x1790, 0x1B10, 0x1E80, 0x20D0, 0x2310, 0x2530, 0x2760,
+ 0x2910, 0x2A50, 0x2B40, 0x2C10, 0x2BE0, 0x2BA0, 0x2AD0, 0x2990, 0x2850, 0x2660, 0x24F0, 0x23F0, 0x2320, 0x1EA0, 0x1D00, 0x1B90,
+ 0x1970, 0x1860, 0x1640, 0x1470, 0x1380, 0x1260, 0x11B0, 0x10F0, 0x0F50, 0x0EB0, 0x0DA0, 0x0CD0, 0x0B80, 0x0A30, 0x0A40, 0x0A10,
+ 0x0B50, 0x0CB0, 0x0EA0, 0x1170, 0x1360, 0x1750, 0x1B00, 0x1EA0, 0x2240, 0x24B0, 0x2840, 0x2A60, 0x2CB0, 0x2F00, 0x3050, 0x31B0,
+ 0x3130, 0x2FA0, 0x2F80, 0x2E90, 0x2E20, 0x2D80, 0x2C90, 0x2C10, 0x2B00, 0x2A00, 0x2990, 0x2A30, 0x2B90, 0x2C90, 0x2DB0, 0x2E20,
+ 0x2E90, 0x2F30, 0x30E0, 0x33E0, 0x3800, 0x3D10, 0x4260, 0x4800, 0x4D50, 0x5330, 0x5920, 0x5FC0, 0x65D0, 0x6C30, 0x71F0, 0x76F0,
+ 0x7C20, 0x7EE0, 0x7F70, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F70, 0x7ED0, 0x7EA0, 0x7EE0,
+ 0x7F10, 0x7F30, 0x7EB0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F20, 0x7F00, 0x7F70, 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0,
+ 0x7F30, 0x7F20, 0x7EA0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F10, 0x7E90, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7F10,
+ 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7EF0, 0x7F30, 0x7F20,
+ 0x7F10, 0x7F50, 0x7EF0, 0x7F00, 0x7EF0, 0x7ED0, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F70, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7F20, 0x7EC0, 0x7910, 0x7130, 0x68E0, 0x60D0, 0x59B0, 0x5500, 0x5040, 0x4BF0, 0x4710, 0x4100,
+ 0x3A20, 0x3140, 0x27A0, 0x1C80, 0x1040, 0x0340, 0xF420, 0xE2E0, 0xD050, 0xBCC0, 0xA670, 0x9110, 0x8680, 0x84F0, 0x84C0, 0x8480,
+ 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8450,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8460, 0x8470, 0x84A0, 0x8470, 0x84A0, 0x8470, 0x8470, 0x8480, 0x8470, 0x8480,
+ 0x84B0, 0x84B0, 0x8480, 0x8480, 0x8440, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8430,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84C0, 0x8490,
+ 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8510,
+ 0x8550, 0x8550, 0x85A0, 0x8620, 0x8710, 0x88A0, 0x8B30, 0x8EF0, 0x9390, 0x9820, 0x9C40, 0xA090, 0xA560, 0xA930, 0xACF0, 0xB150,
+ 0xB530, 0xB8C0, 0xBCE0, 0xC090, 0xC3E0, 0xC640, 0xC860, 0xCA80, 0xCC50, 0xCE90, 0xD160, 0xD320, 0xD530, 0xD6E0, 0xD8A0, 0xD9D0,
+ 0xDB80, 0xDD80, 0xDEC0, 0xE040, 0xE110, 0xE220, 0xE3B0, 0xE4D0, 0xE6A0, 0xE810, 0xE910, 0xE9E0, 0xEAB0, 0xEBE0, 0xED50, 0xEEF0,
+ 0xEFA0, 0xF050, 0xF050, 0xF100, 0xF1F0, 0xF2C0, 0xF3D0, 0xF500, 0xF690, 0xF710, 0xF7A0, 0xF7B0, 0xF890, 0xF990, 0xFB10, 0xFCB0,
+ 0xFE40, 0xFF50, 0xFFB0, 0xFFB0, 0x00A0, 0x0150, 0x0230, 0x02E0, 0x03E0, 0x0450, 0x04C0, 0x0520, 0x0550, 0x0550, 0x04E0, 0x04A0,
+ 0x04C0, 0x0500, 0x05F0, 0x0720, 0x0790, 0x0870, 0x0860, 0x0820, 0x0850, 0x0810, 0x0860, 0x08E0, 0x0900, 0x0930, 0x0960, 0x0960,
+ 0x0950, 0x09E0, 0x0AA0, 0x0B00, 0x0B10, 0x0AF0, 0x0AC0, 0x0AD0, 0x0AF0, 0x0AE0, 0x0B60, 0x0B90, 0x0BD0, 0x0C20, 0x0D40, 0x0E70,
+ 0x0EE0, 0x0F50, 0x0F50, 0x0F90, 0x0F90, 0x0F60, 0x1030, 0x1190, 0x1310, 0x13D0, 0x1460, 0x1500, 0x1680, 0x17F0, 0x1930, 0x1B00,
+ 0x1BC0, 0x1C10, 0x1C30, 0x1CE0, 0x1E40, 0x1FB0, 0x2130, 0x22C0, 0x23C0, 0x25B0, 0x2620, 0x2710, 0x2810, 0x2930, 0x2B20, 0x2C20,
+ 0x2DD0, 0x3000, 0x3210, 0x3450, 0x3660, 0x3940, 0x3AB0, 0x3BD0, 0x3D60, 0x3EE0, 0x4080, 0x4250, 0x43E0, 0x4640, 0x4790, 0x4930,
+ 0x4AE0, 0x4B40, 0x4D70, 0x4F60, 0x5110, 0x5320, 0x5400, 0x5550, 0x5680, 0x5860, 0x5B10, 0x5D80, 0x6020, 0x6220, 0x63C0, 0x65D0,
+ 0x6790, 0x6A20, 0x6CA0, 0x6EF0, 0x7150, 0x72C0, 0x7580, 0x7730, 0x7870, 0x7A10, 0x7A50, 0x7B20, 0x7B70, 0x7B40, 0x7BD0, 0x7B30,
+ 0x7C00, 0x7BD0, 0x7B50, 0x7B60, 0x7B00, 0x7B40, 0x7B90, 0x7C10, 0x7CB0, 0x7CB0, 0x7D00, 0x7D40, 0x7D10, 0x7DE0, 0x7E20, 0x7EC0,
+ 0x7ED0, 0x7EB0, 0x7EC0, 0x7EC0, 0x7F10, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F80, 0x7EE0, 0x7F10, 0x7F10, 0x7F20, 0x7F80, 0x7EF0,
+ 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7EC0, 0x7ED0, 0x7E30, 0x7D20, 0x7C00, 0x7AC0, 0x79B0, 0x78C0, 0x7690, 0x74B0, 0x7220,
+ 0x70C0, 0x6F50, 0x6E00, 0x6DA0, 0x6C80, 0x6C20, 0x6B40, 0x6AD0, 0x6B30, 0x6BA0, 0x6CE0, 0x6E10, 0x6F50, 0x7160, 0x73C0, 0x7640,
+ 0x7920, 0x7C40, 0x7EC0, 0x7F10, 0x7F70, 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7F70, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7F70, 0x7F10,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7E90, 0x7ED0, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7EA0,
+ 0x7ED0, 0x7F10, 0x7F10, 0x7F20, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EE0, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F40, 0x7BF0, 0x7390, 0x6BE0, 0x6400, 0x5DC0, 0x57B0, 0x52E0, 0x4F80, 0x4D50, 0x4B60, 0x4F50,
+ 0x5280, 0x5650, 0x5950, 0x5D70, 0x60E0, 0x6430, 0x6730, 0x6920, 0x6BC0, 0x6D50, 0x6EE0, 0x6FF0, 0x70F0, 0x72B0, 0x7460, 0x7690,
+ 0x7910, 0x7C10, 0x7E70, 0x7F10, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7F10, 0x7F30, 0x7EC0,
+ 0x7E90, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7EC0,
+ 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7F20, 0x7F10, 0x7F30, 0x7EE0, 0x7F70, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7F70,
+ 0x7F20, 0x7F10, 0x7EF0, 0x7EF0, 0x7DF0, 0x7090, 0x64D0, 0x5B60, 0x5300, 0x49A0, 0x41C0, 0x3930, 0x3170, 0x2930, 0x20C0, 0x1850,
+ 0x0EB0, 0x05F0, 0xFBC0, 0xF1E0, 0xE8B0, 0xE010, 0xD710, 0xCEB0, 0xC680, 0xBF50, 0xB820, 0xB130, 0xAC20, 0xA810, 0xA560, 0xA3B0,
+ 0xA270, 0xA1B0, 0xA030, 0x9E00, 0x9B80, 0x9870, 0x9580, 0x9240, 0x8F30, 0x8BE0, 0x8970, 0x87B0, 0x8680, 0x85E0, 0x8590, 0x8560,
+ 0x8550, 0x8530, 0x8530, 0x8520, 0x8520, 0x8520, 0x8520, 0x8520, 0x8520, 0x8520, 0x8520, 0x8510, 0x8510, 0x8510, 0x8500, 0x8500,
+ 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84C0, 0x84D0, 0x84F0, 0x84C0, 0x84D0, 0x84E0,
+ 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x84F0, 0x84F0, 0x8510, 0x8510, 0x8520, 0x8530, 0x8530, 0x8520, 0x8510, 0x8530, 0x8520,
+ 0x8500, 0x84F0, 0x8500, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84F0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x8500, 0x84D0, 0x84E0, 0x84E0, 0x84F0, 0x8500,
+ 0x8510, 0x8520, 0x8530, 0x8530, 0x8550, 0x8550, 0x8570, 0x8580, 0x85C0, 0x85F0, 0x8610, 0x8650, 0x8680, 0x86F0, 0x8760, 0x8820,
+ 0x8900, 0x89E0, 0x8AF0, 0x8C10, 0x8D00, 0x8EF0, 0x9160, 0x9470, 0x9720, 0x9980, 0x9C70, 0x9E80, 0xA140, 0xA440, 0xA770, 0xAB20,
+ 0xADF0, 0xB0F0, 0xB420, 0xB680, 0xB8F0, 0xBB80, 0xBE30, 0xC010, 0xC190, 0xC390, 0xC500, 0xC740, 0xC960, 0xCBC0, 0xCE00, 0xCF60,
+ 0xD080, 0xD1A0, 0xD2E0, 0xD430, 0xD520, 0xD5A0, 0xD5C0, 0xD5C0, 0xD5F0, 0xD5C0, 0xD610, 0xD600, 0xD550, 0xD430, 0xD320, 0xD280,
+ 0xD230, 0xD1F0, 0xD1B0, 0xD070, 0xCF10, 0xCDD0, 0xCCA0, 0xCC90, 0xCC80, 0xCD70, 0xCD50, 0xCCC0, 0xCC90, 0xCB90, 0xCAF0, 0xCA50,
+ 0xCA00, 0xCA20, 0xCA30, 0xC920, 0xC820, 0xC750, 0xC720, 0xC710, 0xC710, 0xC700, 0xC720, 0xC6A0, 0xC630, 0xC600, 0xC5C0, 0xC610,
+ 0xC750, 0xC840, 0xC8F0, 0xC8F0, 0xC910, 0xC8F0, 0xC8E0, 0xC880, 0xC850, 0xC840, 0xC870, 0xC900, 0xC920, 0xC8C0, 0xC8E0, 0xC910,
+ 0xC960, 0xC9A0, 0xC9D0, 0xC9E0, 0xCA40, 0xCA70, 0xCB20, 0xCBD0, 0xCCF0, 0xCE20, 0xCF40, 0xD070, 0xD190, 0xD2F0, 0xD440, 0xD570,
+ 0xD6E0, 0xD8B0, 0xD9C0, 0xDB70, 0xDD80, 0xDF10, 0xE120, 0xE2F0, 0xE510, 0xE730, 0xE990, 0xEC40, 0xEE90, 0xF140, 0xF3F0, 0xF5F0,
+ 0xF910, 0xFC30, 0xFEA0, 0x0110, 0x03E0, 0x0710, 0x09D0, 0x0CB0, 0x0FA0, 0x12F0, 0x1590, 0x1790, 0x19C0, 0x1C70, 0x1F10, 0x2150,
+ 0x2370, 0x2560, 0x2760, 0x28F0, 0x2B10, 0x2CC0, 0x2F00, 0x3120, 0x33C0, 0x35D0, 0x37B0, 0x3900, 0x3A40, 0x3B70, 0x3D70, 0x3FB0,
+ 0x41E0, 0x4410, 0x4610, 0x4740, 0x4920, 0x4A90, 0x4B70, 0x4CB0, 0x4EA0, 0x5000, 0x5150, 0x52C0, 0x54D0, 0x5730, 0x5950, 0x5B20,
+ 0x5D40, 0x5EC0, 0x5FF0, 0x6120, 0x6330, 0x6530, 0x6690, 0x6800, 0x68A0, 0x6990, 0x6A60, 0x6C40, 0x6E10, 0x6F30, 0x7040, 0x7070,
+ 0x7050, 0x70D0, 0x7160, 0x71C0, 0x71A0, 0x70F0, 0x7090, 0x6FB0, 0x6E60, 0x6D20, 0x6BF0, 0x69B0, 0x6720, 0x64C0, 0x6250, 0x6030,
+ 0x5E20, 0x5B40, 0x5800, 0x54D0, 0x5160, 0x4DE0, 0x4A10, 0x46A0, 0x42E0, 0x3F40, 0x3BB0, 0x37B0, 0x3460, 0x31D0, 0x2FF0, 0x2F30,
+ 0x2DE0, 0x2CD0, 0x2AF0, 0x2A00, 0x29F0, 0x2A60, 0x2C90, 0x2EF0, 0x3240, 0x3580, 0x38D0, 0x3D00, 0x41C0, 0x4690, 0x4C10, 0x51B0,
+ 0x57A0, 0x5E50, 0x64B0, 0x6AA0, 0x71D0, 0x7850, 0x7D70, 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F50, 0x7E90, 0x7EB0, 0x7EF0,
+ 0x7EE0, 0x7EF0, 0x7E80, 0x7E70, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7ED0, 0x7F00, 0x7F20, 0x7F00, 0x7F00, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7ED0, 0x7C30, 0x72E0, 0x6A70, 0x6380, 0x5D90, 0x5860, 0x54A0, 0x51A0, 0x50A0,
+ 0x4FE0, 0x50D0, 0x5270, 0x54F0, 0x5970, 0x5EF0, 0x6430, 0x6AE0, 0x7000, 0x74F0, 0x79A0, 0x7CC0, 0x7E80, 0x7E90, 0x7F10, 0x7F20,
+ 0x7F10, 0x7EB0, 0x7C40, 0x78F0, 0x74B0, 0x6F00, 0x69C0, 0x63C0, 0x5E80, 0x5900, 0x5540, 0x53B0, 0x5400, 0x5560, 0x5750, 0x5990,
+ 0x5CE0, 0x5FC0, 0x6390, 0x67B0, 0x6B60, 0x7040, 0x73D0, 0x7710, 0x7920, 0x7B40, 0x7C80, 0x7CC0, 0x7C60, 0x7B50, 0x7970, 0x77A0,
+ 0x7600, 0x74D0, 0x7430, 0x7360, 0x7290, 0x71E0, 0x7070, 0x7040, 0x6FD0, 0x7030, 0x7040, 0x6F90, 0x6F10, 0x6E20, 0x6DD0, 0x6CB0,
+ 0x6BB0, 0x6B70, 0x6A80, 0x6A90, 0x6BA0, 0x6C40, 0x6ED0, 0x7080, 0x7260, 0x7440, 0x7590, 0x77B0, 0x7960, 0x7B40, 0x7D10, 0x7E20,
+ 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7F10, 0x7EF0, 0x7EB0, 0x7EE0, 0x7E30, 0x7CB0, 0x7A60, 0x7850, 0x75D0, 0x7330, 0x7020, 0x6DC0,
+ 0x6AD0, 0x6760, 0x63A0, 0x6080, 0x5E30, 0x5C20, 0x59B0, 0x5750, 0x5430, 0x5200, 0x4F80, 0x4D70, 0x4C60, 0x4A90, 0x4950, 0x4720,
+ 0x44F0, 0x43C0, 0x4110, 0x3F60, 0x3DC0, 0x3A70, 0x3700, 0x3160, 0x2BE0, 0x2610, 0x1F60, 0x18E0, 0x1090, 0x0A10, 0x0360, 0xFD40,
+ 0xF890, 0xF4E0, 0xF160, 0xEE00, 0xEA70, 0xE6A0, 0xE3E0, 0xE200, 0xE0B0, 0xDF10, 0xDD30, 0xDA10, 0xD620, 0xD1D0, 0xCC50, 0xC810,
+ 0xC280, 0xBBB0, 0xB380, 0xAA80, 0xA060, 0x95A0, 0x8C80, 0x8790, 0x85C0, 0x8520, 0x84F0, 0x84D0, 0x84C0, 0x84B0, 0x84B0, 0x84A0,
+ 0x84A0, 0x8490, 0x8490, 0x8490, 0x84D0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x8500, 0x8510, 0x8520, 0x8530, 0x8560, 0x8590, 0x85C0, 0x8620,
+ 0x8680, 0x8710, 0x8790, 0x8830, 0x8960, 0x8AA0, 0x8BD0, 0x8D10, 0x8E20, 0x8FB0, 0x9180, 0x93B0, 0x94F0, 0x95B0, 0x9580, 0x9530,
+ 0x95C0, 0x9680, 0x9780, 0x98A0, 0x98A0, 0x98D0, 0x9830, 0x9760, 0x9710, 0x96C0, 0x9710, 0x96A0, 0x9610, 0x9580, 0x9500, 0x9480,
+ 0x9430, 0x9490, 0x94C0, 0x9410, 0x93C0, 0x93C0, 0x9410, 0x94D0, 0x9520, 0x9580, 0x95A0, 0x9580, 0x9600, 0x9600, 0x9680, 0x96F0,
+ 0x9630, 0x95C0, 0x9460, 0x9390, 0x92F0, 0x9280, 0x9300, 0x92C0, 0x91D0, 0x9060, 0x8F10, 0x8DD0, 0x8D70, 0x8D20, 0x8C80, 0x8BA0,
+ 0x8AD0, 0x89E0, 0x88D0, 0x8830, 0x87C0, 0x8770, 0x8730, 0x86C0, 0x8660, 0x8620, 0x85E0, 0x85C0, 0x85C0, 0x8570, 0x8570, 0x8560,
+ 0x8550, 0x8520, 0x8550, 0x8530, 0x8530, 0x8520, 0x8510, 0x8510, 0x8500, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84E0,
+ 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84C0, 0x84D0, 0x8460, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0,
+ 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x8450, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84D0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84E0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8530, 0x8580, 0x85F0, 0x8710, 0x8930, 0x8CE0, 0x91F0,
+ 0x9840, 0x9E70, 0xA4D0, 0xAB60, 0xB0C0, 0xB610, 0xBA80, 0xBE00, 0xC1A0, 0xC570, 0xC900, 0xCC90, 0xD010, 0xD260, 0xD440, 0xD5A0,
+ 0xD690, 0xD830, 0xDA40, 0xDC40, 0xDE70, 0xDFB0, 0xE060, 0xE150, 0xE1C0, 0xE270, 0xE330, 0xE350, 0xE3D0, 0xE450, 0xE500, 0xE630,
+ 0xE710, 0xE790, 0xE740, 0xE6A0, 0xE630, 0xE590, 0xE530, 0xE5C0, 0xE5E0, 0xE620, 0xE5A0, 0xE4A0, 0xE380, 0xE2A0, 0xE240, 0xE200,
+ 0xE190, 0xE190, 0xE0B0, 0xE0D0, 0xE160, 0xE1A0, 0xE270, 0xE250, 0xE2B0, 0xE370, 0xE430, 0xE570, 0xE780, 0xE9E0, 0xEC90, 0xEF10,
+ 0xF1A0, 0xF3B0, 0xF6B0, 0xF980, 0xFD80, 0x0190, 0x0590, 0x09B0, 0x0E40, 0x1300, 0x1790, 0x1C80, 0x2180, 0x2650, 0x2B20, 0x2FA0,
+ 0x34D0, 0x3980, 0x3EE0, 0x4420, 0x4940, 0x4D90, 0x51E0, 0x5610, 0x5A90, 0x5E80, 0x62A0, 0x65E0, 0x68F0, 0x6BE0, 0x6DE0, 0x6FC0,
+ 0x71F0, 0x7420, 0x75A0, 0x76D0, 0x7780, 0x77D0, 0x77D0, 0x7850, 0x78D0, 0x7940, 0x7950, 0x78D0, 0x7750, 0x7600, 0x7560, 0x7580,
+ 0x75A0, 0x75A0, 0x7550, 0x7510, 0x74A0, 0x7520, 0x75F0, 0x76F0, 0x7820, 0x7950, 0x7A10, 0x7B90, 0x7CC0, 0x7E40, 0x7EF0, 0x7F00,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7EE0, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7ED0, 0x7E10, 0x7D30, 0x7C00, 0x7BC0, 0x7B50, 0x7950, 0x7860, 0x77D0, 0x7690, 0x7610, 0x75A0,
+ 0x75C0, 0x75F0, 0x7630, 0x76A0, 0x7680, 0x75E0, 0x7560, 0x7540, 0x7580, 0x7630, 0x7760, 0x78F0, 0x7A80, 0x7C80, 0x7DE0, 0x7ED0,
+ 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F00, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10,
+ 0x7F00, 0x7F10, 0x7EF0, 0x7F30, 0x7EF0, 0x7E90, 0x7F00, 0x7F00, 0x7F00, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7E80,
+ 0x7EF0, 0x7F10, 0x7EF0, 0x7ED0, 0x7EB0, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60,
+ 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F50, 0x7F00, 0x7F00, 0x7F00, 0x7F10, 0x7F70, 0x7F00,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7F40, 0x7E90, 0x7C50, 0x7920, 0x7510, 0x70B0, 0x6D10, 0x6940, 0x6680, 0x6350, 0x6030, 0x5DA0, 0x5970,
+ 0x5660, 0x5370, 0x5090, 0x4F00, 0x4E00, 0x4D60, 0x4C40, 0x4C90, 0x4E00, 0x4F10, 0x5110, 0x5270, 0x5360, 0x5450, 0x5490, 0x5530,
+ 0x5660, 0x5660, 0x56E0, 0x5720, 0x5670, 0x5600, 0x54A0, 0x5440, 0x5240, 0x4FF0, 0x4D70, 0x4B10, 0x4980, 0x4760, 0x4500, 0x4350,
+ 0x4150, 0x3FA0, 0x3D60, 0x3B30, 0x3A00, 0x38A0, 0x37C0, 0x36F0, 0x3670, 0x3660, 0x3510, 0x3490, 0x32C0, 0x3090, 0x2F50, 0x2D00,
+ 0x2C00, 0x2940, 0x26D0, 0x2410, 0x2060, 0x1D80, 0x1A60, 0x16C0, 0x13D0, 0x1050, 0x0C60, 0x08C0, 0x0450, 0x00C0, 0xFCE0, 0xF940,
+ 0xF610, 0xF230, 0xEF60, 0xEBF0, 0xE830, 0xE490, 0xE070, 0xDC30, 0xD7F0, 0xD470, 0xD140, 0xCEA0, 0xCC60, 0xCA90, 0xC8F0, 0xC7D0,
+ 0xC600, 0xC4B0, 0xC370, 0xC340, 0xC2A0, 0xC250, 0xC310, 0xC3E0, 0xC540, 0xC700, 0xC9F0, 0xCD20, 0xD030, 0xD290, 0xD580, 0xD780,
+ 0xDA00, 0xDD00, 0xE040, 0xED40, 0xEFE0, 0xF2D0, 0xF5E0, 0xF8B0, 0xFB50, 0xFD60, 0x0000, 0x0180, 0x03F0, 0x06C0, 0x0950, 0x0BB0,
+ 0x0D00, 0x0EF0, 0x0FD0, 0x1090, 0x10A0, 0x0F90, 0x0EF0, 0x0D90, 0x0B50, 0x0A30, 0x0860, 0x06E0, 0x0520, 0x0250, 0xFFB0, 0xFC00,
+ 0xF820, 0xF450, 0xF0C0, 0xEE50, 0xEBF0, 0xEA30, 0xE7E0, 0xE460, 0xE110, 0xDDF0, 0xDB60, 0xD9A0, 0xD7F0, 0xD740, 0xD5D0, 0xD3F0,
+ 0xD2D0, 0xD1D0, 0xD1F0, 0xD1B0, 0xD230, 0xD330, 0xD3A0, 0xD460, 0xD4D0, 0xD550, 0xD6D0, 0xD800, 0xDA10, 0xDB90, 0xDCF0, 0xDEF0,
+ 0xE060, 0xE210, 0xE400, 0xE5C0, 0xE7A0, 0xE8E0, 0xEA40, 0xEBC0, 0xEDD0, 0xEFE0, 0xF160, 0xF2A0, 0xF450, 0xF5E0, 0xF910, 0xFBA0,
+ 0xFED0, 0x0180, 0x0340, 0x0510, 0x06B0, 0x0940, 0x0B70, 0x0E00, 0x10E0, 0x1350, 0x1550, 0x1750, 0x18C0, 0x1B10, 0x1CB0, 0x1E70,
+ 0x1F40, 0x2090, 0x2230, 0x23E0, 0x2550, 0x2710, 0x2890, 0x2A40, 0x2B80, 0x2B70, 0x2BE0, 0x2C40, 0x2D90, 0x2EA0, 0x2F20, 0x2FC0,
+ 0x2F50, 0x2EB0, 0x2F50, 0x2FB0, 0x30B0, 0x30C0, 0x30F0, 0x3050, 0x2F20, 0x2FC0, 0x3000, 0x3070, 0x3100, 0x3110, 0x3200, 0x3200,
+ 0x32C0, 0x32C0, 0x3370, 0x3430, 0x3440, 0x33B0, 0x33D0, 0x3340, 0x33F0, 0x34F0, 0x3500, 0x35C0, 0x3540, 0x3570, 0x34E0, 0x33F0,
+ 0x33F0, 0x3370, 0x3360, 0x3250, 0x3090, 0x2F30, 0x2D30, 0x2C30, 0x2A30, 0x2950, 0x27C0, 0x24D0, 0x2290, 0x2060, 0x1E00, 0x1C70,
+ 0x1A40, 0x1940, 0x1770, 0x1540, 0x1460, 0x1290, 0x1130, 0x0F90, 0x0C90, 0x0B10, 0x0900, 0x0740, 0x0590, 0x0490, 0x0420, 0x03A0,
+ 0x0280, 0x01A0, 0x0020, 0xFFB0, 0xFF50, 0xFF80, 0xFFE0, 0x0040, 0x0130, 0x0130, 0x0190, 0x0180, 0x0190, 0x02C0, 0x03C0, 0x0410,
+ 0x04A0, 0x0470, 0x04D0, 0x05A0, 0x06C0, 0x0800, 0x08F0, 0x0A40, 0x0A40, 0x0AF0, 0x0C30, 0x0CA0, 0x0E10, 0x0ED0, 0x0EE0, 0x0F40,
+ 0x0F80, 0x1030, 0x1130, 0x11F0, 0x12D0, 0x1300, 0x1380, 0x1310, 0x1310, 0x13A0, 0x13C0, 0x1450, 0x1450, 0x1520, 0x1530, 0x15B0,
+ 0x15E0, 0x1640, 0x15D0, 0x1630, 0x1610, 0x1670, 0x1710, 0x17B0, 0x1920, 0x1990, 0x1980, 0x19C0, 0x18E0, 0x1950, 0x19B0, 0x19E0,
+ 0x1A10, 0x19B0, 0x1960, 0x1900, 0x1840, 0x1820, 0x1740, 0x16A0, 0x15D0, 0x1520, 0x14E0, 0x1430, 0x1470, 0x1400, 0x1420, 0x14F0,
+ 0x14E0, 0x1590, 0x1550, 0x1530, 0x1560, 0x1520, 0x1590, 0x1510, 0x14E0, 0x1460, 0x1340, 0x12F0, 0x1240, 0x1110, 0x1060, 0x0F80,
+ 0x0EC0, 0x0DB0, 0x0CB0, 0x0BB0, 0x0980, 0x0860, 0x0640, 0x03A0, 0x0180, 0xFF10, 0xFD00, 0xFA40, 0xF7B0, 0xF450, 0xF180, 0xEEC0,
+ 0xEC50, 0xE960, 0xE6C0, 0xE490, 0xE2A0, 0xDFE0, 0xDD80, 0xDB20, 0xD930, 0xD750, 0xD620, 0xD530, 0xD490, 0xD3F0, 0xD2F0, 0xD240,
+ 0xD160, 0xD0C0, 0xD070, 0xD040, 0xD060, 0xD0F0, 0xD150, 0xD1A0, 0xD280, 0xD340, 0xD400, 0xD4A0, 0xD440, 0xD3F0, 0xD390, 0xD3D0,
+ 0xD480, 0xD520, 0xD620, 0xD680, 0xD6E0, 0xD610, 0xD530, 0xD330, 0xD2F0, 0xD2D0, 0xD290, 0xD2D0, 0xD310, 0xD2F0, 0xD340, 0xD2D0,
+ 0xD250, 0xD1B0, 0xD170, 0xD190, 0xD1E0, 0xD140, 0xD0D0, 0xD030, 0xCFC0, 0xCF30, 0xCF10, 0xCED0, 0xCED0, 0xCF60, 0xCFE0, 0xD000,
+ 0xCFF0, 0xD010, 0xD050, 0xD030, 0xD040, 0xD050, 0xD000, 0xD010, 0xD120, 0xD130, 0xD180, 0xD210, 0xD220, 0xD230, 0xD1F0, 0xD1A0,
+ 0xD1F0, 0xD300, 0xD410, 0xD4C0, 0xD550, 0xD5A0, 0xD600, 0xD5C0, 0xD5B0, 0xD5A0, 0xD560, 0xD5C0, 0xD5C0, 0xD5A0, 0xD580, 0xD550,
+ 0xD530, 0xD500, 0xD4C0, 0xD450, 0xD450, 0xD400, 0xD440, 0xD4C0, 0xD520, 0xD570, 0xD5D0, 0xD510, 0xD590, 0xD5C0, 0xD650, 0xD710,
+ 0xD730, 0xD790, 0xD710, 0xD710, 0xD6A0, 0xD6E0, 0xD6B0, 0xD6D0, 0xD730, 0xD7C0, 0xD850, 0xD8C0, 0xD990, 0xDA40, 0xDA70, 0xDAD0,
+ 0xDB50, 0xDBF0, 0xDC90, 0xDCC0, 0xDDD0, 0xDE70, 0xDED0, 0xDF00, 0xDFA0, 0xDF70, 0xDFF0, 0xE0C0, 0xE130, 0xE1C0, 0xE2B0, 0xE370,
+ 0xE490, 0xE530, 0xE570, 0xE590, 0xE560, 0xE510, 0xE5C0, 0xE6D0, 0xE7D0, 0xE900, 0xEA60, 0xEB00, 0xEB10, 0xEAF0, 0xEAD0, 0xEAE0,
+ 0xEC00, 0xECE0, 0xEEE0, 0xF080, 0xF250, 0xF320, 0xF380, 0xF430, 0xF490, 0xF470, 0xF4B0, 0xF610, 0xF750, 0xF870, 0xFA10, 0xFAD0,
+ 0xFC40, 0xFD70, 0xFE40, 0xFF80, 0xFFF0, 0x0100, 0x0100, 0x0150, 0x0200, 0x02B0, 0x0390, 0x03D0, 0x0440, 0x04C0, 0x04F0, 0x05E0,
+ 0x0660, 0x0670, 0x06E0, 0x06C0, 0x06C0, 0x0750, 0x0790, 0x0820, 0x0840, 0x0910, 0x0930, 0x0940, 0x09B0, 0x0980, 0x09A0, 0x0A10,
+ 0x09D0, 0x0A30, 0x0A60, 0x0A40, 0x0AA0, 0x0AA0, 0x0B40, 0x0B50, 0x0AC0, 0x0AC0, 0x0AC0, 0x0AB0, 0x0A70, 0x09B0, 0x09D0, 0x0990,
+ 0x0970, 0x0990, 0x08F0, 0x0920, 0x08C0, 0x0880, 0x0900, 0x0940, 0x0940, 0x08D0, 0x0830, 0x0800, 0x07F0, 0x07D0, 0x07D0, 0x0810,
+ 0x07E0, 0x07B0, 0x0870, 0x0840, 0x0910, 0x08B0, 0x07E0, 0x07D0, 0x06E0, 0x0700, 0x06C0, 0x0630, 0x0630, 0x0600, 0x0600, 0x0610,
+ 0x0570, 0x0640, 0x0600, 0x05A0, 0x05C0, 0x0470, 0x0430, 0x0430, 0x0440, 0x0470, 0x0470, 0x04C0, 0x03E0, 0x0250, 0x01E0, 0x00A0,
+ 0x0040, 0xFF70, 0xFEE0, 0xFDF0, 0xFD50, 0xFD50, 0xFC60, 0xFBC0, 0xFBB0, 0xFAF0, 0xFAC0, 0xF940, 0xF7F0, 0xF700, 0xF640, 0xF5D0,
+ 0xF5F0, 0xF5C0, 0xF5D0, 0xF4D0, 0xF430, 0xF3C0, 0xF2B0, 0xF1F0, 0xF140, 0xF090, 0xF000, 0xEF00, 0xEF60, 0xEF80, 0xEF80, 0xEF80,
+ 0xEEF0, 0xEE50, 0xEDA0, 0xED20, 0xED50, 0xEDB0, 0xEE70, 0xEEE0, 0xEE80, 0xEEA0, 0xEE40, 0xEEB0, 0xEEF0, 0xEF50, 0xF070, 0xF0F0,
+ 0xF1B0, 0xF2C0, 0xF410, 0xF5E0, 0xF7E0, 0xFAC0, 0xFCC0, 0xFF80, 0x0270, 0x0590, 0x09D0, 0x0E20, 0x12F0, 0x1790, 0x1BA0, 0x2000,
+ 0x2500, 0x2970, 0x2F60, 0x3460, 0x3A50, 0x3F90, 0x4420, 0x4960, 0x4DC0, 0x5280, 0x5640, 0x5980, 0x5CB0, 0x5E40, 0x6020, 0x6180,
+ 0x6230, 0x6370, 0x6380, 0x63F0, 0x6460, 0x63A0, 0x6380, 0x6280, 0x60C0, 0x5E60, 0x5B90, 0x58B0, 0x55B0, 0x5280, 0x4F70, 0x4B30,
+ 0x4780, 0x4310, 0x3DB0, 0x37A0, 0x3100, 0x1400, 0x0B40, 0x0310, 0xFAB0, 0xF360, 0xED00, 0xE750, 0xE270, 0xDD60, 0xD810, 0xD150,
+ 0xCA70, 0xC340, 0xBB00, 0xB290, 0xA970, 0xA1D0, 0x9D30, 0x9BE0, 0x9EF0, 0xA6C0, 0xB0A0, 0xBB00, 0xC300, 0xC870, 0xC8C0, 0xC4D0,
+ 0xBCD0, 0xB250, 0xA590, 0x97A0, 0x8AB0, 0x85A0, 0x84E0, 0x84B0, 0x8490, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84F0,
+ 0x8520, 0x8550, 0x85B0, 0x8690, 0x8860, 0x8BF0, 0x9130, 0x96C0, 0x9BB0, 0xA150, 0xA620, 0xAA70, 0xADE0, 0xB1F0, 0xB5E0, 0xB8A0,
+ 0xBC30, 0xC010, 0xC400, 0xC9D0, 0xD000, 0xD740, 0xDFD0, 0xE8B0, 0xF300, 0xFD80, 0x08C0, 0x1450, 0x1E20, 0x27D0, 0x3000, 0x3730,
+ 0x3D70, 0x42C0, 0x4880, 0x4D00, 0x5160, 0x5590, 0x5860, 0x5B00, 0x5C40, 0x5DB0, 0x5F20, 0x60E0, 0x6310, 0x6490, 0x65E0, 0x6670,
+ 0x6610, 0x66B0, 0x67E0, 0x6990, 0x6AB0, 0x6B30, 0x6B70, 0x6B10, 0x6A60, 0x69A0, 0x6880, 0x6890, 0x6780, 0x65E0, 0x6550, 0x64D0,
+ 0x6640, 0x6890, 0x6A90, 0x6E30, 0x7200, 0x7650, 0x7AB0, 0x7DA0, 0x7F00, 0x7EB0, 0x7F20, 0x7F00, 0x7E10, 0x79B0, 0x7440, 0x6EC0,
+ 0x6990, 0x63B0, 0x5EE0, 0x5980, 0x5510, 0x5180, 0x4E20, 0x4B90, 0x4970, 0x4730, 0x4540, 0x42B0, 0x4220, 0x4260, 0x4250, 0x42D0,
+ 0x4340, 0x4420, 0x4530, 0x46F0, 0x4A00, 0x4D10, 0x5210, 0x55F0, 0x59F0, 0x5E90, 0x62D0, 0x6900, 0x6EC0, 0x7590, 0x7BA0, 0x7E80,
+ 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7E90, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F10,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F60, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F20, 0x7EF0, 0x7F50, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F20, 0x7F60, 0x7F00, 0x7EF0, 0x7F00, 0x7EE0, 0x7F60, 0x7A90, 0x7120, 0x6CC0, 0x6AF0, 0x6BF0, 0x6FC0, 0x74D0,
+ 0x7B50, 0x7EF0, 0x7F20, 0x7ED0, 0x7EA0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7EC0, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10,
+ 0x7EE0, 0x7EF0, 0x7F40, 0x7F10, 0x7F60, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F80, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0,
+ 0x7F10, 0x7F10, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7ED0, 0x7EF0, 0x7F30, 0x7F20, 0x7E90,
+ 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7E70, 0x7EC0, 0x6B40, 0x4E30, 0x2F40, 0x0BE0, 0xEB50, 0xC9F0, 0xA7B0, 0x86C0, 0x84C0, 0x8490,
+ 0x8470, 0x8450, 0x8430, 0x8420, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8430, 0x8460, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460,
+ 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8470, 0x8470, 0x8480, 0x8470, 0x8470, 0x8480, 0x8470, 0x8470,
+ 0x8480, 0x8490, 0x8490, 0x84B0, 0x84D0, 0x8500, 0x9B90, 0xA6F0, 0xB010, 0xB8B0, 0xBFF0, 0xC6A0, 0xCD00, 0xD2C0, 0xD640, 0xD870,
+ 0xD920, 0xD970, 0xD950, 0xD9E0, 0xDAD0, 0xDBD0, 0xDC60, 0xDC00, 0xDAE0, 0xD850, 0xD4F0, 0xD040, 0xCB30, 0xC4D0, 0xBF90, 0xBA60,
+ 0xB630, 0xB410, 0xB390, 0xB4F0, 0xB740, 0xB9C0, 0xBCF0, 0xC060, 0xC430, 0xC9A0, 0xCF00, 0xD500, 0xDAF0, 0xE210, 0xE9E0, 0xF2D0,
+ 0xFBF0, 0x05C0, 0x0E70, 0x16B0, 0x1EB0, 0x2600, 0x2C00, 0x30D0, 0x3350, 0x3350, 0x31F0, 0x2F70, 0x2C50, 0x29A0, 0x25A0, 0x20B0,
+ 0x1B30, 0x1470, 0x0DC0, 0x06D0, 0x00B0, 0xFBE0, 0xF6F0, 0xF350, 0xEF70, 0xEBA0, 0xE840, 0xE4B0, 0xE180, 0xDF10, 0xDC50, 0xD950,
+ 0xD4E0, 0xD0C0, 0xCB40, 0xC550, 0xC040, 0xB9B0, 0xB230, 0xAAC0, 0xA250, 0x99C0, 0x9140, 0x8AD0, 0x8760, 0x85D0, 0x8540, 0x8500,
+ 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84E0, 0x8520, 0x8620, 0x8B20, 0x9A70,
+ 0xAA60, 0xB800, 0xC430, 0xCF10, 0xD920, 0xE270, 0xEB10, 0xF3E0, 0xFB60, 0x02F0, 0x0940, 0x0D60, 0x1050, 0x1200, 0x1350, 0x14C0,
+ 0x1580, 0x1740, 0x1820, 0x1800, 0x1740, 0x1580, 0x1320, 0x10C0, 0x0DB0, 0x0BF0, 0x0A70, 0x0A70, 0x0BB0, 0x0DB0, 0x11F0, 0x16F0,
+ 0x1C90, 0x2340, 0x2A50, 0x32B0, 0x3B60, 0x4340, 0x4A10, 0x4FB0, 0x5520, 0x5940, 0x5D50, 0x6120, 0x6420, 0x6810, 0x6AB0, 0x6CF0,
+ 0x6E90, 0x6F90, 0x70F0, 0x71E0, 0x7240, 0x7350, 0x7320, 0x7400, 0x74D0, 0x74B0, 0x74C0, 0x7400, 0x7350, 0x72B0, 0x71E0, 0x71B0,
+ 0x7030, 0x6FA0, 0x6E60, 0x6CD0, 0x6C10, 0x6B40, 0x6AE0, 0x6AD0, 0x6A40, 0x6A40, 0x6990, 0x6900, 0x6870, 0x67C0, 0x6890, 0x68E0,
+ 0x6930, 0x6990, 0x69E0, 0x6AE0, 0x6C40, 0x6DD0, 0x7030, 0x7220, 0x7440, 0x7650, 0x7870, 0x7A60, 0x7C50, 0x7E70, 0x7F00, 0x7F70,
+ 0x7ED0, 0x7EB0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7EC0, 0x7F00, 0x7F00, 0x7F10, 0x7F10,
+ 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F60, 0x7EE0, 0x7F10, 0x7F20, 0x7EF0,
+ 0x7F80, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7EE0, 0x7F50,
+ 0x7F20, 0x7EE0, 0x7ED0, 0x7ED0, 0x7F30, 0x7EF0, 0x7E90, 0x7ED0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EE0, 0x7ED0,
+ 0x7F10, 0x77A0, 0x6DA0, 0x64C0, 0x5B90, 0x52A0, 0x4B70, 0x4400, 0x3E70, 0x38E0, 0x33B0, 0x2FD0, 0x2C80, 0x2A80, 0x2950, 0x2950,
+ 0x2C00, 0x2E40, 0x3290, 0x3880, 0x3E40, 0x4580, 0x4C90, 0x5220, 0x5670, 0x59D0, 0x5C30, 0x5DE0, 0x5F30, 0x5F90, 0x5F70, 0x5FA0,
+ 0x5EF0, 0x5DF0, 0x5CA0, 0x5B40, 0x5A90, 0x5A30, 0x5A70, 0x5B20, 0x5B90, 0x5D50, 0x5EE0, 0x61F0, 0x66E0, 0x6C60, 0x7350, 0x7A00,
+ 0x7E70, 0x7EE0, 0x7EC0, 0x7F10, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F00, 0x7F00,
+ 0x7F10, 0x7F00, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F50, 0x7F10, 0x7F20, 0x7EF0,
+ 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0, 0x7ED0, 0x7F70, 0x7F20, 0x7EA0, 0x7ED0, 0x7ED0,
+ 0x7F00, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7EF0, 0x7F30, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F50, 0x7ED0, 0x6110, 0x4370, 0x25F0, 0x0830, 0xEEF0, 0xD720, 0xC150,
+ 0xADF0, 0x9BD0, 0x8E90, 0x88A0, 0x86F0, 0x86C0, 0x8790, 0x8AA0, 0x92B0, 0x9DF0, 0xA910, 0xB410, 0xBE70, 0xC790, 0xD050, 0xD830,
+ 0xDEE0, 0xE590, 0xEBF0, 0xF220, 0xF780, 0xFB50, 0xFFF0, 0x02C0, 0x0510, 0x06E0, 0x0840, 0x09F0, 0x0AB0, 0x0B50, 0x0BE0, 0x0C60,
+ 0x0E30, 0x0FA0, 0x11A0, 0x1430, 0x16B0, 0x1AA0, 0x1EC0, 0x23D0, 0x29F0, 0x3020, 0x3650, 0x3B30, 0x3FF0, 0x4420, 0x4790, 0x4B10,
+ 0x4D20, 0x4DF0, 0x4D90, 0x4B70, 0x4940, 0x4640, 0x43F0, 0x42A0, 0x40E0, 0x40F0, 0x4190, 0x4320, 0x4650, 0x4A90, 0x50C0, 0x57C0,
+ 0x5F90, 0x68B0, 0x7100, 0x7960, 0x7E90, 0x7F30, 0x7F00, 0x7E90, 0x7ED0, 0x7F10, 0x7F20, 0x7F10, 0x7EB0, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F10, 0x7EC0, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7E10, 0x5E70, 0x3AF0, 0x1490, 0xEAE0,
+ 0xC400, 0x9D90, 0x8660, 0x84C0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8420, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8440,
+ 0x8480, 0x8460, 0x8470, 0x8480, 0x8480, 0x84B0, 0x84E0, 0x8530, 0x86A0, 0x8DB0, 0x9D20, 0xAB40, 0xB7F0, 0xC4C0, 0xD130, 0xDD30,
+ 0xE8D0, 0xF3B0, 0xFE00, 0x06A0, 0x0E10, 0x1420, 0x19C0, 0x1F30, 0x2310, 0x2570, 0x2790, 0x2830, 0x27F0, 0x2540, 0x2150, 0x1AE0,
+ 0x12E0, 0x0890, 0xFD50, 0xF0A0, 0xE460, 0xD8B0, 0xCD10, 0xC1D0, 0xB660, 0xAB80, 0xA180, 0x98E0, 0x9180, 0x8BD0, 0x8870, 0x86C0,
+ 0x85F0, 0x8590, 0x8570, 0x8570, 0x8570, 0x85C0, 0x85E0, 0x8680, 0x8820, 0x8C40, 0x95F0, 0xA030, 0xAAB0, 0xB510, 0xBFB0, 0xCA30,
+ 0xD440, 0xDCD0, 0xE380, 0xE900, 0xEC90, 0xF030, 0xF390, 0xF7E0, 0xFC70, 0x00D0, 0x04C0, 0x0860, 0x0BD0, 0x0EA0, 0x1170, 0x1430,
+ 0x1650, 0x18E0, 0x1BD0, 0x1F80, 0x22B0, 0x2640, 0x28C0, 0x2A50, 0x2BA0, 0x2C60, 0x2D70, 0x2E50, 0x30B0, 0x3360, 0x36D0, 0x3990,
+ 0x3BC0, 0x3E10, 0x3FF0, 0x42B0, 0x4640, 0x4A20, 0x4D80, 0x5160, 0x54E0, 0x58D0, 0x5D30, 0x6120, 0x65A0, 0x69C0, 0x6DF0, 0x71B0,
+ 0x75F0, 0x78D0, 0x7BD0, 0x7DF0, 0x7EF0, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F00, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F70, 0x7F20, 0x7EF0, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7EB0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EB0,
+ 0x7EA0, 0x7ED0, 0x7F30, 0x7F30, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7F40, 0x7ED0, 0x7F00, 0x7EF0, 0x7F30, 0x7F30, 0x7E70,
+ 0x7ED0, 0x7EE0, 0x7F10, 0x7F30, 0x7E70, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F30, 0x7F00, 0x7F40, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F00, 0x7F40, 0x7EF0,
+ 0x7F10, 0x7F00, 0x7F20, 0x7F80, 0x7EF0, 0x7EB0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F40, 0x7EF0, 0x7EB0,
+ 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F20,
+ 0x7EF0, 0x7F00, 0x7F00, 0x7EE0, 0x7F50, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7F70, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7F00, 0x7EF0, 0x7EB0, 0x7F60, 0x7EF0, 0x7E90, 0x7EE0, 0x7EE0, 0x7F50, 0x7F20, 0x7EA0,
+ 0x7ED0, 0x7ED0, 0x7F10, 0x7F00, 0x7EA0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7EC0, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F50, 0x7F20, 0x7F40, 0x7F20, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F10,
+ 0x7F10, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7EF0, 0x7F10, 0x7EE0, 0x7F60, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F30, 0x7F00, 0x7EC0,
+ 0x7F10, 0x7F10, 0x7EF0, 0x7E10, 0x7D30, 0x7D20, 0x7CC0, 0x7BF0, 0x7B60, 0x7A00, 0x7880, 0x76B0, 0x7500, 0x73E0, 0x7230, 0x71B0,
+ 0x7170, 0x7110, 0x7190, 0x7250, 0x7340, 0x74C0, 0x7630, 0x7840, 0x7A40, 0x7BD0, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F00,
+ 0x7F30, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F90, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F80, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F70,
+ 0x7F20, 0x7ED0, 0x7EB0, 0x7EE0, 0x7F50, 0x7F10, 0x7E70, 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F10, 0x7F10,
+ 0x7E90, 0x7EB0, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F20, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7EE0,
+ 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F60,
+ 0x7EF0, 0x7F00, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F30, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F40, 0x7F10,
+ 0x7E00, 0x6EE0, 0x5E70, 0x4C30, 0x3BC0, 0x2A90, 0x1AD0, 0x0C00, 0xFDC0, 0xF090, 0xE300, 0xD590, 0xC750, 0xB980, 0xACE0, 0xA110,
+ 0x9730, 0x8F50, 0x8A50, 0x8800, 0x8720, 0x86E0, 0x8710, 0x8790, 0x8860, 0x89A0, 0x8B10, 0x8D40, 0x9030, 0x9460, 0x9930, 0x9CF0,
+ 0xA100, 0xA460, 0xA700, 0xA990, 0xAC70, 0xAF40, 0xB1C0, 0xB410, 0xB540, 0xB630, 0xB770, 0xB830, 0xB8C0, 0xB980, 0xBA50, 0xBB00,
+ 0xBAB0, 0xBAC0, 0xBA80, 0xBAC0, 0xBB40, 0xBB80, 0xBC20, 0xBB80, 0xBAE0, 0xBB40, 0xBC40, 0xBDE0, 0xBFB0, 0xC200, 0xC4E0, 0xC770,
+ 0xCA80, 0xCDB0, 0xD180, 0xD5E0, 0xDA20, 0xDE40, 0xE340, 0xE830, 0xEE00, 0xF3F0, 0xF9D0, 0xFF90, 0x0370, 0x07A0, 0x0B50, 0x0F30,
+ 0x1320, 0x1660, 0x1990, 0x1D30, 0x2070, 0x2390, 0x2670, 0x2980, 0x2C00, 0x2DF0, 0x30A0, 0x3260, 0x3440, 0x3710, 0x3830, 0x3A80,
+ 0x3B50, 0x3AF0, 0x3930, 0x3660, 0x32D0, 0x2F00, 0x2A60, 0x24F0, 0x1ED0, 0x1840, 0x1140, 0x0A10, 0x03F0, 0xFDE0, 0xF840, 0xF120,
+ 0xEA90, 0xE440, 0xDE80, 0xDB10, 0xD860, 0xD840, 0xD990, 0xDC70, 0xE0E0, 0xE680, 0xED30, 0xF520, 0xFD40, 0x06C0, 0x0FD0, 0x18F0,
+ 0x2340, 0x2E30, 0x38E0, 0x4440, 0x4F40, 0x5A50, 0x63B0, 0x6D20, 0x7550, 0x7C10, 0x7EE0, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F10,
+ 0x7E90, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7E70, 0x7EE0, 0x7F10, 0x7F20, 0x7EA0, 0x7A80, 0x7600, 0x6F60, 0x6880, 0x6180, 0x59A0,
+ 0x5220, 0x4B70, 0x44D0, 0x3F50, 0x3960, 0x3380, 0x2ED0, 0x2AA0, 0x2840, 0x2510, 0x2270, 0x1FA0, 0x1C00, 0x1880, 0x1330, 0x0E50,
+ 0x0990, 0x06D0, 0x05E0, 0x0780, 0x0BB0, 0x11B0, 0x1900, 0x20F0, 0x27B0, 0x2CF0, 0x3160, 0x34B0, 0x3890, 0x3C00, 0x3F60, 0x4310,
+ 0x44A0, 0x4550, 0x4360, 0x3FA0, 0x3AF0, 0x35D0, 0x3040, 0x2B90, 0x2880, 0x2560, 0x22C0, 0x20D0, 0x1F30, 0x1E30, 0x1E80, 0x2030,
+ 0x2200, 0x2470, 0x2650, 0x2840, 0x29C0, 0x2B00, 0x2B80, 0x2BF0, 0x2BC0, 0x2AD0, 0x2980, 0x2870, 0x2700, 0x25B0, 0x2450, 0x2310,
+ 0x2230, 0x2160, 0x20E0, 0x2140, 0x2220, 0x2340, 0x2490, 0x25E0, 0x27A0, 0x2970, 0x2BB0, 0x2D40, 0x2F90, 0x3190, 0x3380, 0x35E0,
+ 0x3800, 0x3A80, 0x3C70, 0x3E90, 0x3FF0, 0x4130, 0x42B0, 0x4480, 0x4680, 0x4890, 0x4A20, 0x4AF0, 0x4B10, 0x4B50, 0x4B20, 0x4B80,
+ 0x4BF0, 0x4CB0, 0x4D70, 0x4D80, 0x4CD0, 0x4C70, 0x4C80, 0x4C80, 0x4CD0, 0x4C40, 0x4B40, 0x4910, 0x4680, 0x43B0, 0x4150, 0x3EB0,
+ 0x3C10, 0x3940, 0x3640, 0x32F0, 0x2F30, 0x2B30, 0x27D0, 0x24B0, 0x21A0, 0x1EA0, 0x1C10, 0x1A30, 0x1870, 0x1730, 0x1650, 0x1490,
+ 0x1270, 0x0F70, 0x0C70, 0x09E0, 0x0760, 0x05D0, 0x03F0, 0x0230, 0xFF20, 0xFC40, 0xF9F0, 0xF730, 0xF580, 0xF390, 0xF180, 0xEF20,
+ 0xEC20, 0xE9C0, 0xE7A0, 0xE4C0, 0xE230, 0xDE90, 0xDB00, 0xD860, 0xD680, 0xD530, 0xD510, 0xD470, 0xD340, 0xD210, 0xD130, 0xD090,
+ 0xD0C0, 0xD270, 0xD4A0, 0xD7C0, 0xDB80, 0xDEF0, 0xE140, 0xE3C0, 0xE5F0, 0xE7A0, 0xE870, 0xE8F0, 0xE8B0, 0xE7C0, 0xE800, 0xE890,
+ 0xE990, 0xEBB0, 0xEDC0, 0xF030, 0xF250, 0xF440, 0xF6D0, 0xF900, 0xFB20, 0xFC80, 0xFD60, 0xFE80, 0xFFF0, 0x0160, 0x02C0, 0x0300,
+ 0x0230, 0xFFA0, 0xFC10, 0xF7F0, 0xF480, 0xF140, 0xED70, 0xEA30, 0xE6A0, 0xE2C0, 0xDDB0, 0xD910, 0xD4F0, 0xD0A0, 0xCC90, 0xC8F0,
+ 0xC5E0, 0xC2F0, 0xC0B0, 0xBEA0, 0xBD50, 0xBC20, 0xBA40, 0xB920, 0xB7C0, 0xB780, 0xB850, 0xB880, 0xB8C0, 0xB880, 0xB7C0, 0xB6C0,
+ 0xB590, 0xB580, 0xB570, 0xB560, 0xB5B0, 0xB520, 0xB4F0, 0xB460, 0xB450, 0xB590, 0xB630, 0xB820, 0xB890, 0xB960, 0xBAA0, 0xBC50,
+ 0xBEB0, 0xC180, 0xC4C0, 0xC700, 0xC950, 0xCBD0, 0xCDC0, 0xCF30, 0xD100, 0xD1F0, 0xD220, 0xD1B0, 0xD090, 0xCFF0, 0xCF90, 0xD060,
+ 0xD0E0, 0xD190, 0xD280, 0xD320, 0xD400, 0xD560, 0xD710, 0xDAC0, 0xDE50, 0xE3C0, 0xE9B0, 0xF0E0, 0xF9C0, 0x0340, 0x0DA0, 0x1960,
+ 0x2600, 0x32B0, 0x3E80, 0x49C0, 0x53D0, 0x5B90, 0x61F0, 0x65C0, 0x6750, 0x6860, 0x6920, 0x6AD0, 0x6BF0, 0x6DC0, 0x6FE0, 0x7150,
+ 0x73F0, 0x7720, 0x7B90, 0x7EB0, 0x7F00, 0x7EE0, 0x7ED0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0,
+ 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F20, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F00, 0x78C0, 0x7080, 0x6710, 0x5CB0, 0x5190,
+ 0x44E0, 0x3890, 0x2B30, 0x1EB0, 0x1280, 0x06F0, 0xFC90, 0xF390, 0xED60, 0xE8F0, 0xE600, 0xE520, 0xE560, 0xE650, 0xE780, 0xE8A0,
+ 0xEA50, 0xEB10, 0xECB0, 0xEEF0, 0xF180, 0xF470, 0xF670, 0xF8E0, 0xFBF0, 0xFF00, 0x02A0, 0x05D0, 0x0A10, 0x0DD0, 0x10A0, 0x1320,
+ 0x14B0, 0x1520, 0x1510, 0x1340, 0x1150, 0x0EA0, 0x0A70, 0x0630, 0x00F0, 0xFAE0, 0xF360, 0xE830, 0xDC40, 0xCE30, 0xC080, 0xB3B0,
+ 0xA830, 0x9EF0, 0x97B0, 0x9410, 0x93E0, 0x9690, 0x9C00, 0xA280, 0xA8E0, 0xAE50, 0xB160, 0xB2F0, 0xB220, 0xB030, 0xAD20, 0xA890,
+ 0xA250, 0x99F0, 0x8F70, 0x8840, 0x8590, 0x8500, 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450,
+ 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8450, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8460, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480,
+ 0x8470, 0x8470, 0x8470, 0x84A0, 0x8470, 0x8470, 0x84B0, 0x84B0, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8480,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x84C0, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84D0, 0x84A0, 0x84A0, 0x84B0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84D0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84E0, 0x84C0, 0x84C0, 0x84F0, 0x84F0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84E0, 0x84D0, 0x84F0, 0x8510, 0x8550, 0x8590, 0x8630, 0x8780, 0x89D0,
+ 0x8E30, 0x9460, 0x9C00, 0xA330, 0xAAD0, 0xB320, 0xBB50, 0xC270, 0xC9B0, 0xD030, 0xD680, 0xDCB0, 0xE300, 0xE9C0, 0xEF80, 0xF710,
+ 0xFEC0, 0x0630, 0x0DD0, 0x1480, 0x1B20, 0x21D0, 0x2880, 0x3090, 0x39C0, 0x4240, 0x4B00, 0x52A0, 0x5A10, 0x6010, 0x6670, 0x6C70,
+ 0x71F0, 0x7870, 0x7CE0, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7ED0,
+ 0x7F10, 0x7F20, 0x7F50, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F50, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EB0,
+ 0x7EE0, 0x7ED0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7E90, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F00, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F40, 0x7F20, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10,
+ 0x7F20, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7320,
+ 0x6620, 0x58D0, 0x4D30, 0x4270, 0x38C0, 0x2FF0, 0x26B0, 0x1D80, 0x1400, 0x0AD0, 0x0330, 0xFCC0, 0xF690, 0xF1B0, 0xEDD0, 0xE9D0,
+ 0xE550, 0xE060, 0xDB30, 0xD6C0, 0xD2F0, 0xD110, 0xD110, 0xD250, 0xD3A0, 0xD4E0, 0xD4C0, 0xD3E0, 0xD3A0, 0xD4C0, 0xD870, 0xDEF0,
+ 0xE560, 0xEA70, 0xEC00, 0xE9F0, 0xE440, 0xDD50, 0xD630, 0xD110, 0xCED0, 0xCF30, 0xD1B0, 0xD680, 0xDDE0, 0xE940, 0xF850, 0x0A70,
+ 0x1D60, 0x30B0, 0x3E50, 0x4620, 0x4840, 0x4650, 0x4130, 0x3BE0, 0x3760, 0x3450, 0x32A0, 0x3210, 0x3040, 0x2D80, 0x28A0, 0x21A0,
+ 0x18F0, 0x0F10, 0x0550, 0xFCC0, 0xF6B0, 0xF130, 0xEC40, 0xE6C0, 0xE010, 0xD920, 0xD270, 0xCC00, 0xC730, 0xC460, 0xC3A0, 0xC4D0,
+ 0xC7F0, 0xCC10, 0xD180, 0xD750, 0xDCD0, 0xE210, 0xE6B0, 0xEAD0, 0xEFB0, 0xF5E0, 0xFD20, 0x0410, 0x0AE0, 0x0FB0, 0x1330, 0x1490,
+ 0x1360, 0x0F20, 0x08F0, 0x00C0, 0xF700, 0xEDA0, 0xE5A0, 0xDEC0, 0xDA00, 0xD670, 0xD310, 0xD070, 0xCE20, 0xCB70, 0xC990, 0xC890,
+ 0xC7A0, 0xC750, 0xC650, 0xC5B0, 0xC500, 0xC4D0, 0xC4F0, 0xC500, 0xC580, 0xC580, 0xC620, 0xC720, 0xC820, 0xC9F0, 0xCC00, 0xCE60,
+ 0xD150, 0xD2E0, 0xD510, 0xD640, 0xD650, 0xD670, 0xD560, 0xD2A0, 0xCE80, 0xC800, 0xBFE0, 0xB550, 0xAAC0, 0xA050, 0x9580, 0x8C90,
+ 0x87E0, 0x8600, 0x8560, 0x8520, 0x8500, 0x84F0, 0x84F0, 0x84E0, 0x84F0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84A0, 0x84A0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x84B0, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8490, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x84A0, 0x8470, 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8490, 0x8480, 0x8470, 0x8480, 0x8490,
+ 0x8480, 0x8480, 0x84B0, 0x8490, 0x8480, 0x8480, 0x8410, 0x8480, 0x8480, 0x8490, 0x8490, 0x8480, 0x8490, 0x8460, 0x8490, 0x8480,
+ 0x84A0, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8490, 0x8490, 0x84A0, 0x8440, 0x84A0, 0x84A0, 0x84D0, 0x84A0, 0x84A0, 0x84A0, 0x84E0,
+ 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x84B0, 0x8450, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0,
+ 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84F0, 0x8500, 0x84E0, 0x8530, 0x8540, 0x8570, 0x85B0, 0x8610, 0x86F0, 0x8890, 0x8C10, 0x9300,
+ 0x9A20, 0xA190, 0xAA10, 0xB2F0, 0xBCE0, 0xC760, 0xD300, 0xDF70, 0xEE40, 0xFD40, 0x0B90, 0x18B0, 0x2300, 0x29E0, 0x2CF0, 0x2CB0,
+ 0x2C60, 0x2B00, 0x2BD0, 0x37E0, 0x3A70, 0x3CD0, 0x3D60, 0x3CE0, 0x3AD0, 0x38B0, 0x3A00, 0x4070, 0x5010, 0x63B0, 0x74C0, 0x7D50,
+ 0x7D70, 0x7470, 0x5FF0, 0x4380, 0x2730, 0x0B90, 0xF200, 0xDA60, 0xC240, 0xAB30, 0x93E0, 0x8720, 0x8500, 0x84C0, 0x8460, 0x8450,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8440, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470,
+ 0x8480, 0x84A0, 0x84E0, 0x8540, 0x8730, 0x90F0, 0xA020, 0xAD80, 0xBA30, 0xC670, 0xD0B0, 0xD9F0, 0xDF10, 0xE050, 0xE010, 0xDDA0,
+ 0xDA90, 0xD7B0, 0xD4C0, 0xD180, 0xCCA0, 0xC650, 0xBE00, 0xB4D0, 0xAA00, 0x9D30, 0x8FB0, 0x8730, 0x8520, 0x84D0, 0x84A0, 0x8480,
+ 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0,
+ 0x8400, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83E0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83C0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8430, 0x8420, 0x8420, 0x8420, 0x8450, 0x8430, 0x8430,
+ 0x8430, 0x8450, 0x8440, 0x8450, 0x8410, 0x8450, 0x8460, 0x8480, 0x8470, 0x8480, 0x8490, 0x84C0, 0x84F0, 0x85C0, 0x9040, 0xAD20,
+ 0xCAB0, 0xE560, 0xFEC0, 0x1780, 0x2E50, 0x4530, 0x5A40, 0x6D40, 0x7C90, 0x7F00, 0x7F10, 0x7F00, 0x7F30, 0x7F00, 0x7F40, 0x7F10,
+ 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0,
+ 0x7F60, 0x7F10, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0, 0x7E90, 0x7EB0, 0x7EE0, 0x7F10,
+ 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F00, 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F40, 0x7F20, 0x7F10, 0x7F20,
+ 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F50, 0x7860, 0x6CD0, 0x6210, 0x55B0, 0x4820, 0x3AD0, 0x2DB0, 0x2250, 0x18C0,
+ 0x11D0, 0x0DF0, 0x0D20, 0x0F10, 0x13F0, 0x1AB0, 0x2300, 0x2B90, 0x3570, 0x3F60, 0x48B0, 0x5250, 0x5C00, 0x66C0, 0x70D0, 0x7A90,
+ 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7EB0, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F10, 0x7F80, 0x7F00, 0x7F20, 0x7EF0, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F80, 0x7F10, 0x7EF0, 0x7F10, 0x7EF0,
+ 0x7F30, 0x7F00, 0x7EE0, 0x7ED0, 0x7EF0, 0x7F20, 0x7F10, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F10, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F00, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F00,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F50, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7980,
+ 0x6EC0, 0x61F0, 0x5490, 0x4880, 0x3E20, 0x34F0, 0x2D90, 0x28A0, 0x2420, 0x1F10, 0x1980, 0x12A0, 0x0B80, 0x0470, 0xFDA0, 0xF850,
+ 0xF450, 0xF0D0, 0xECD0, 0xE8E0, 0xE3D0, 0xDEB0, 0xDA60, 0xD510, 0xD100, 0xCD50, 0xC9E0, 0xC7B0, 0xC5D0, 0xC5F0, 0xC730, 0xC9C0,
+ 0xCE10, 0xD210, 0xD5A0, 0xD990, 0xDD40, 0xE0B0, 0xE420, 0xE780, 0xEB10, 0xEF20, 0xF280, 0xF580, 0xF7B0, 0xF8A0, 0xF8E0, 0xF6D0,
+ 0xF3F0, 0xF1E0, 0xEF80, 0xEDD0, 0xEBC0, 0xE940, 0xE640, 0xE370, 0xDFD0, 0xDD10, 0xDA40, 0xD8A0, 0xD730, 0xD620, 0xD560, 0xD510,
+ 0xD500, 0xD600, 0xD800, 0xDB10, 0xDDF0, 0xE0F0, 0xE3E0, 0xE6A0, 0xEA10, 0xED20, 0xF080, 0xF3F0, 0xF740, 0xFA10, 0xFDA0, 0x01E0,
+ 0x0610, 0x0AB0, 0x0E60, 0x10F0, 0x13D0, 0x15B0, 0x1870, 0x1AD0, 0x1D20, 0x1FA0, 0x20A0, 0x2190, 0x21B0, 0x21B0, 0x2160, 0x2030,
+ 0x1FB0, 0x1F40, 0x1D40, 0x1C70, 0x1B60, 0x1AC0, 0x1A30, 0x1930, 0x1860, 0x1730, 0x15E0, 0x1520, 0x14A0, 0x14F0, 0x1550, 0x15E0,
+ 0x1610, 0x1600, 0x1770, 0x18A0, 0x1A50, 0x1D50, 0x2030, 0x2320, 0x25B0, 0x27B0, 0x2A40, 0x2C70, 0x2F90, 0x3370, 0x3650, 0x39D0,
+ 0x3CD0, 0x4030, 0x4340, 0x4630, 0x4970, 0x4C00, 0x4EF0, 0x50D0, 0x5220, 0x5440, 0x55C0, 0x5730, 0x57C0, 0x5770, 0x57B0, 0x5700,
+ 0x5720, 0x5780, 0x5710, 0x5780, 0x5780, 0x5730, 0x56C0, 0x5680, 0x5780, 0x5890, 0x59B0, 0x5A40, 0x5A50, 0x5A90, 0x5A60, 0x5A50,
+ 0x5AB0, 0x5A60, 0x5B40, 0x5B90, 0x5B30, 0x5B70, 0x5B70, 0x5DB0, 0x5F60, 0x60E0, 0x6280, 0x6390, 0x6520, 0x6700, 0x68D0, 0x6B90,
+ 0x6DE0, 0x7090, 0x7290, 0x7470, 0x7760, 0x7950, 0x7BD0, 0x7E20, 0x7F00, 0x7F10, 0x7EA0, 0x7EE0, 0x7F10, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7EC0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F50,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F70, 0x7EF0, 0x7EF0, 0x7F20, 0x7F10, 0x7F80, 0x7F00,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7F30, 0x7ED0, 0x7E90, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EA0, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7E90,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7F50, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F20, 0x7F00, 0x7F00, 0x7F10,
+ 0x7F00, 0x7F30, 0x7F00, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7F00, 0x7F10,
+ 0x7F70, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7F10, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00,
+ 0x7EF0, 0x7E90, 0x7EF0, 0x7EE0, 0x7F50, 0x7F00, 0x7440, 0x3C80, 0x0310, 0xC930, 0x90A0, 0x84F0, 0x84A0, 0x8480, 0x8470, 0x8470,
+ 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x84A0, 0x8470,
+ 0x8470, 0x8470, 0x8460, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84E0, 0x84F0, 0x8550, 0x8720, 0x92F0, 0xA780, 0xB6C0,
+ 0xC2F0, 0xCA30, 0xCE00, 0xCC70, 0xC790, 0xC030, 0xB690, 0xAB30, 0x9F80, 0x9470, 0x8BC0, 0x8750, 0x85D0, 0x8540, 0x8500, 0x84E0,
+ 0x84B0, 0x84A0, 0x8480, 0x8480, 0x8470, 0x8470, 0x8450, 0x8460, 0x8450, 0x8450, 0x8440, 0x8410, 0x8440, 0x8430, 0x8430, 0x8430,
+ 0x8420, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8460,
+ 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8520, 0x8560, 0x8600, 0x8740, 0x8A70, 0x9170, 0x9A40,
+ 0xA170, 0xA890, 0xAD80, 0xB1E0, 0xB450, 0xB5E0, 0xB560, 0xB360, 0xB050, 0xAD90, 0xAB80, 0xACC0, 0xB160, 0xB9A0, 0xC3D0, 0xCF10,
+ 0xD8B0, 0xDF10, 0xE300, 0xE4E0, 0xE640, 0xE7D0, 0xEA60, 0xEF40, 0xF460, 0xFA90, 0x0240, 0x0800, 0x0DD0, 0x1280, 0x1660, 0x1980,
+ 0x1C70, 0x2080, 0x2460, 0x2890, 0x2D30, 0x3260, 0x3840, 0x3E10, 0x4370, 0x48E0, 0x4CE0, 0x50B0, 0x5400, 0x55F0, 0x5850, 0x5A00,
+ 0x5C00, 0x5DC0, 0x5E10, 0x5F10, 0x5E40, 0x5B90, 0x5830, 0x52A0, 0x4B60, 0x4290, 0x38A0, 0x2D20, 0x2050, 0x13B0, 0x0500, 0xF6C0,
+ 0xE8B0, 0xDAA0, 0xCD70, 0xC0A0, 0xB480, 0xA9D0, 0xA090, 0x9910, 0x9470, 0x91F0, 0x9180, 0x91E0, 0x9440, 0x9770, 0x9BC0, 0xA110,
+ 0xA6F0, 0xAD40, 0xB410, 0xB9F0, 0xC0E0, 0xC780, 0xCE10, 0xD3F0, 0xD8B0, 0xDD70, 0xE150, 0xE5A0, 0xE940, 0xEC70, 0xF030, 0xF280,
+ 0xF540, 0xF850, 0xFB70, 0xFEE0, 0x0280, 0x05B0, 0x0940, 0x0CD0, 0x1200, 0x15E0, 0x1950, 0x1CB0, 0x20D0, 0x2500, 0x2940, 0x2DD0,
+ 0x3200, 0x3640, 0x3A70, 0x3F30, 0x4360, 0x4800, 0x4D50, 0x52F0, 0x5860, 0x5D70, 0x6240, 0x6720, 0x6BE0, 0x7060, 0x7530, 0x79A0,
+ 0x7CE0, 0x7ED0, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7F30,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F20, 0x7A60, 0x73F0, 0x6DA0, 0x6800, 0x61D0,
+ 0x5BB0, 0x5670, 0x5160, 0x4D40, 0x4A00, 0x46A0, 0x4370, 0x40B0, 0x3DD0, 0x3B60, 0x38A0, 0x3610, 0x33B0, 0x31B0, 0x2F70, 0x2C90,
+ 0x29B0, 0x2660, 0x22E0, 0x1F50, 0x1B70, 0x1760, 0x13E0, 0x0FB0, 0x0BE0, 0x0900, 0x0570, 0x01B0, 0xFE00, 0xFAA0, 0xF690, 0xF3F0,
+ 0xF0E0, 0xEE90, 0xEBF0, 0xE870, 0xE470, 0xE040, 0xDC50, 0xD830, 0xD4A0, 0xD130, 0xCEE0, 0xCBD0, 0xC8C0, 0xC5B0, 0xC280, 0xBF90,
+ 0xBD50, 0xBA50, 0xB7B0, 0xB500, 0xB220, 0xAF60, 0xABE0, 0xA920, 0xA590, 0xA240, 0x9EC0, 0x9A50, 0x96D0, 0x92A0, 0x8ED0, 0x8B60,
+ 0x88F0, 0x8770, 0x8690, 0x8600, 0x85B0, 0x8580, 0x8550, 0x8530, 0x8520, 0x8520, 0x8510, 0x8510, 0x8520, 0x8520, 0x8530, 0x8530,
+ 0x8530, 0x8540, 0x8550, 0x8550, 0x8560, 0x8570, 0x8570, 0x8570, 0x8580, 0x8570, 0x8580, 0x8590, 0x85B0, 0x85D0, 0x85F0, 0x8610,
+ 0x8630, 0x8640, 0x8670, 0x8670, 0x8680, 0x86C0, 0x86F0, 0x8720, 0x8740, 0x8760, 0x87B0, 0x87C0, 0x87F0, 0x8810, 0x8850, 0x8890,
+ 0x88D0, 0x8980, 0x8A10, 0x8AF0, 0x8BF0, 0x8D20, 0x8F10, 0x9140, 0x93B0, 0x96F0, 0x9A00, 0x9CF0, 0x9F50, 0xA0F0, 0xA340, 0xA550,
+ 0xA7A0, 0xA9C0, 0xAC10, 0xAEB0, 0xB040, 0xB2E0, 0xB4A0, 0xB6D0, 0xB8F0, 0xBB90, 0xBE50, 0xC160, 0xC450, 0xC710, 0xC960, 0xCBF0,
+ 0xCE50, 0xD030, 0xD270, 0xD390, 0xD5D0, 0xD7E0, 0xD990, 0xDBF0, 0xDDA0, 0xDEB0, 0xDFF0, 0xE040, 0xE010, 0xE000, 0xDFD0, 0xE010,
+ 0xE070, 0xE110, 0xE150, 0xE110, 0xE0C0, 0xE0A0, 0xE090, 0xE0C0, 0xE110, 0xE180, 0xE130, 0xE160, 0xE0E0, 0xE070, 0xDF50, 0xDEC0,
+ 0xDE50, 0xDE90, 0xDEA0, 0xDF20, 0xDEF0, 0xDF90, 0xE0E0, 0xE250, 0xE480, 0xE720, 0xE8C0, 0xE970, 0xEAB0, 0xEC00, 0xED90, 0xF010,
+ 0xF300, 0xF670, 0xFBB0, 0x0110, 0x07E0, 0x0DF0, 0x1410, 0x1A80, 0x1F60, 0x22F0, 0x2650, 0x2930, 0x2C40, 0x2F10, 0x31D0, 0x33B0,
+ 0x3300, 0x3110, 0x2D30, 0x27A0, 0x1FF0, 0x17F0, 0x0F60, 0x0400, 0xF710, 0xE8D0, 0xD810, 0xC500, 0xAE90, 0x9320, 0x8610, 0x84D0,
+ 0x84A0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8430, 0x8430, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8420, 0x8460, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8450, 0x8430, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84B0, 0x84B0, 0x84D0, 0x84C0, 0x84C0, 0x84C0,
+ 0x84D0, 0x84E0, 0x84F0, 0x8510, 0x8540, 0x8520, 0x8530, 0x8510, 0x8570, 0x85B0, 0x8630, 0x8690, 0x8740, 0x8860, 0x8A70, 0x8C40,
+ 0x8DE0, 0x8EF0, 0x8F90, 0x90A0, 0x9280, 0x9560, 0x98A0, 0x9B60, 0x9D70, 0x9F70, 0xA130, 0xA360, 0xA4B0, 0xA5F0, 0xA720, 0xA870,
+ 0xA9F0, 0xAC80, 0xB0B0, 0xB610, 0xBBD0, 0xC210, 0xC880, 0xCF70, 0xD7A0, 0xDFF0, 0xE9E0, 0xF4A0, 0x01A0, 0x1000, 0x1E20, 0x2D40,
+ 0x3CF0, 0x4D70, 0x5D00, 0x6AF0, 0x7750, 0x7E80, 0x7EF0, 0x7EF0, 0x7F70, 0x7F20, 0x7ED0, 0x7ED0, 0x7EB0, 0x7F30, 0x7EF0, 0x7EB0,
+ 0x7EE0, 0x7ED0, 0x7F30, 0x7F20, 0x7EA0, 0x7ED0, 0x7F10, 0x7F10, 0x7F10, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20,
+ 0x7F40, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F70, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7F10,
+ 0x7F10, 0x7EF0, 0x7EE0, 0x7F30, 0x7EE0, 0x7F00, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7EF0, 0x7F00, 0x7F50, 0x7EF0, 0x7EB0,
+ 0x7EE0, 0x7EF0, 0x7F90, 0x7F20, 0x7F00, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F20, 0x7EE0, 0x7EE0,
+ 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7E00, 0x5DF0,
+ 0x3E20, 0x2360, 0x0C00, 0xF7D0, 0xE790, 0xDB20, 0xD3D0, 0xD090, 0xD190, 0xD4C0, 0xD790, 0xD9F0, 0xD890, 0xD360, 0xCA10, 0xBDE0,
+ 0xB1F0, 0xA550, 0x9A70, 0x92E0, 0x8D50, 0x8980, 0x8770, 0x8640, 0x85B0, 0x8580, 0x8590, 0x8600, 0x8730, 0x8B20, 0x9440, 0x9CE0,
+ 0xA200, 0xA3D0, 0xA310, 0x9F40, 0x9980, 0x9360, 0x8D30, 0x8950, 0x86F0, 0x85E0, 0x8570, 0x8530, 0x8510, 0x84F0, 0x84E0, 0x84D0,
+ 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84C0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x8510, 0x85E0, 0x8AE0, 0x9D60, 0xB050, 0xC290, 0xD5B0,
+ 0xE610, 0xF420, 0xFE80, 0x0550, 0x0690, 0x0460, 0xFEE0, 0xF7E0, 0xF2A0, 0xF100, 0xF450, 0xFC10, 0x0730, 0x1420, 0x20E0, 0x2C10,
+ 0x3480, 0x39F0, 0x3D30, 0x3E70, 0x3F00, 0x3F40, 0x3FB0, 0x4190, 0x42A0, 0x44C0, 0x46B0, 0x4920, 0x4C80, 0x5000, 0x53E0, 0x5800,
+ 0x5B40, 0x5E00, 0x5F00, 0x5F80, 0x5E50, 0x5A70, 0x5420, 0x49E0, 0x3C50, 0x2C90, 0x1B20, 0x0980, 0xF630, 0xE550, 0xD5C0, 0xC750,
+ 0xBA70, 0xAFD0, 0xA680, 0x9F20, 0x9920, 0x94C0, 0x9200, 0x90D0, 0x9070, 0x90B0, 0x9200, 0x93C0, 0x95F0, 0x9930, 0x9E10, 0xA4C0,
+ 0xAD90, 0xB850, 0xC490, 0xD320, 0xE4D0, 0xF620, 0x07C0, 0x19C0, 0x2A30, 0x38A0, 0x4570, 0x4F90, 0x57F0, 0x5F40, 0x6470, 0x68B0,
+ 0x6C00, 0x6E10, 0x6FB0, 0x7030, 0x7070, 0x7120, 0x7190, 0x7200, 0x7290, 0x7290, 0x7170, 0x6FC0, 0x6DC0, 0x6C30, 0x6B70, 0x6C10,
+ 0x6E70, 0x72B0, 0x7790, 0x7C20, 0x7EE0, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7C70, 0x7480, 0x6AC0, 0x5F10, 0x5230, 0x44D0, 0x3810,
+ 0x2B70, 0x1EA0, 0x1390, 0x0890, 0xFDB0, 0xF3E0, 0xEB00, 0xE390, 0xDD30, 0xD790, 0xD1D0, 0xCCB0, 0xC7E0, 0xC2E0, 0xBE70, 0xBA70,
+ 0xB6B0, 0xB3B0, 0xB110, 0xADF0, 0xAB90, 0xA910, 0xA720, 0xA4F0, 0xA3C0, 0xA230, 0xA250, 0xA3D0, 0xA7E0, 0xAC90, 0xB2F0, 0xB9D0,
+ 0xC1A0, 0xC910, 0xD140, 0xD930, 0xE140, 0xEA50, 0xF330, 0xFC70, 0x0560, 0x0EC0, 0x1780, 0x1FC0, 0x2790, 0x2F50, 0x3700, 0x3DE0,
+ 0x44D0, 0x4B50, 0x5160, 0x5600, 0x59C0, 0x5C30, 0x5D80, 0x5E10, 0x5E10, 0x5D50, 0x5B40, 0x58E0, 0x5580, 0x51E0, 0x4DB0, 0x4970,
+ 0x4470, 0x4030, 0x3CA0, 0x3880, 0x3490, 0x3160, 0x2E20, 0x2B50, 0x2980, 0x27F0, 0x2710, 0x2530, 0x23D0, 0x20E0, 0x1D40, 0x1850,
+ 0x12D0, 0x0D00, 0x0600, 0xFED0, 0xF780, 0xF060, 0xE940, 0xE190, 0xDAD0, 0xD400, 0xCD50, 0xC660, 0xC0C0, 0xBB80, 0xB6E0, 0xB320,
+ 0xB070, 0xAD70, 0xAAC0, 0xA830, 0xA630, 0xA4E0, 0xA400, 0xA3E0, 0xA380, 0xA350, 0xA2C0, 0xA300, 0xA310, 0xA370, 0xA4B0, 0xA580,
+ 0xA5F0, 0xA660, 0xA6C0, 0xA740, 0xA7C0, 0xA820, 0xA8A0, 0xA9A0, 0xAA90, 0xAB50, 0xAC30, 0xACB0, 0xAE40, 0xB020, 0xB1A0, 0xB370,
+ 0xB590, 0xB7F0, 0xBAE0, 0xBE90, 0xC230, 0xC5A0, 0xC920, 0xCBC0, 0xCF80, 0xD280, 0xD6C0, 0xDAB0, 0xDEF0, 0xE2A0, 0xE5A0, 0xE990,
+ 0xED00, 0xF140, 0xF530, 0xF870, 0xFB60, 0xFD80, 0xFFD0, 0x0260, 0x04A0, 0x07D0, 0x0B00, 0x0D60, 0x0ED0, 0x0F80, 0x10B0, 0x1160,
+ 0x1150, 0x1190, 0x1100, 0x1070, 0x0FB0, 0x0F70, 0x0EC0, 0x0E40, 0x0E60, 0x0D60, 0x0CE0, 0x0C50, 0x0B20, 0x0B20, 0x0B90, 0x0BF0,
+ 0x0C70, 0x0C60, 0x0C80, 0x0D30, 0x0E20, 0x0F90, 0x10A0, 0x1230, 0x1360, 0x13D0, 0x1600, 0x1700, 0x1920, 0x1B30, 0x1CB0, 0x1E40,
+ 0x1F10, 0x2070, 0x21F0, 0x2420, 0x2790, 0x2A90, 0x2DF0, 0x3010, 0x3330, 0x36E0, 0x3A40, 0x3F40, 0x4580, 0x4B60, 0x5240, 0x5880,
+ 0x5E80, 0x6440, 0x6910, 0x6FB0, 0x75E0, 0x7BE0, 0x7ED0, 0x7F20, 0x7F00, 0x7EF0, 0x7F90, 0x7F20, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60,
+ 0x7EE0, 0x7ED0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F10, 0x7EC0, 0x7EB0, 0x7EB0, 0x7EF0, 0x7EF0,
+ 0x7EB0, 0x7F00, 0x7F20, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7ED0, 0x7F30, 0x7F20, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F50, 0x7F20, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F50,
+ 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F60, 0x7EF0, 0x7EB0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0,
+ 0x7EB0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F50, 0x7C30, 0x6F70, 0x5F80, 0x4DD0, 0x3A30, 0x2520, 0x1040, 0xFB70, 0xE900, 0xD840, 0xC9F0, 0xBD30, 0xB480, 0xAE20, 0xA930,
+ 0xA750, 0xA620, 0xA5D0, 0xA4D0, 0xA3B0, 0xA260, 0xA0E0, 0xA080, 0xA0A0, 0xA1E0, 0xA3B0, 0xA6F0, 0xAA90, 0xAFC0, 0xB590, 0xBB30,
+ 0xC1A0, 0xC740, 0xCD30, 0xD220, 0xD680, 0xD930, 0xDA20, 0xD950, 0xD820, 0xD590, 0xD370, 0xD050, 0xCD90, 0xCBA0, 0xCA40, 0xC900,
+ 0xCA00, 0xCB70, 0xCDF0, 0xD140, 0xD4B0, 0xD860, 0xDB30, 0xDE00, 0xE160, 0xE5B0, 0xEAD0, 0xEFC0, 0xF560, 0xFB50, 0x0100, 0x0730,
+ 0x0CC0, 0x1220, 0x1850, 0x1E50, 0x25F0, 0x2D90, 0x37E0, 0x4270, 0x4D50, 0x5990, 0x6520, 0x6F60, 0x7790, 0x7D70, 0x7EF0, 0x7F10,
+ 0x7F30, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7C10, 0x6CC0, 0x5B60, 0x47F0, 0x3430, 0x1F70, 0x0BC0, 0xF880, 0xE670,
+ 0xD660, 0xC5C0, 0xB700, 0xA960, 0x9B50, 0x8EC0, 0x87F0, 0x85B0, 0x8510, 0x84F0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84A0,
+ 0x84A0, 0x8490, 0x8490, 0x8470, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x8490, 0x84C0,
+ 0x84E0, 0x8530, 0x8620, 0x89F0, 0x9440, 0x9D20, 0xA120, 0xA050, 0x9B40, 0x9190, 0x8910, 0x85C0, 0x8500, 0x84D0, 0x84C0, 0x84B0,
+ 0x8490, 0x84B0, 0x84A0, 0x84B0, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84F0,
+ 0x8500, 0x8520, 0x8540, 0x8580, 0x85E0, 0x8690, 0x8800, 0x8B90, 0x9410, 0xA290, 0xB290, 0xC3E0, 0xD610, 0xE710, 0xF680, 0x0360,
+ 0x0CC0, 0x1350, 0x1640, 0x16F0, 0x1490, 0x0FF0, 0x0920, 0x01C0, 0xFA70, 0xF3B0, 0xEDE0, 0xE890, 0xE480, 0xE0A0, 0xDC40, 0xD690,
+ 0xCFB0, 0xC750, 0xBE00, 0xB2F0, 0xA7C0, 0x9E70, 0x95B0, 0x8E30, 0x8980, 0x8700, 0x85E0, 0x8550, 0x8510, 0x84F0, 0x84E0, 0x84D0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84F0, 0x8500, 0x8510, 0x8510, 0x8520, 0x8540, 0x8550, 0x8580, 0x85A0, 0x85C0, 0x85A0, 0x8560, 0x8520, 0x84F0, 0x84C0, 0x84B0,
+ 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8460, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8420, 0x8470, 0x8420, 0x83F0, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x84C0, 0x8480, 0x8490,
+ 0x8480, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8510, 0x8590, 0x86E0, 0x8B70, 0x9610, 0xA0B0, 0xADF0, 0xB8A0, 0xC300, 0xCE20,
+ 0xDAB0, 0xE990, 0xF9D0, 0x0AC0, 0x1C10, 0x2C30, 0x3A60, 0x4410, 0x4AB0, 0x4F40, 0x5220, 0x5480, 0x56F0, 0x5A30, 0x5DA0, 0x6090,
+ 0x62B0, 0x63A0, 0x63D0, 0x62F0, 0x6280, 0x6320, 0x6560, 0x6A50, 0x7160, 0x79C0, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7D00, 0x7540, 0x6E50, 0x6830, 0x63E0,
+ 0x61D0, 0x61D0, 0x63C0, 0x67B0, 0x6AB0, 0x6D50, 0x6EA0, 0x6C70, 0x6570, 0x5920, 0x4780, 0x3480, 0x20A0, 0x1180, 0x05E0, 0xFE00,
+ 0xF890, 0xF520, 0xF200, 0xEE10, 0xEA10, 0xE710, 0xE670, 0xE890, 0xEE40, 0xF880, 0x06F0, 0x1870, 0x2B20, 0x3E20, 0x51B0, 0x6230,
+ 0x7040, 0x7B90, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F50, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7840, 0x68F0, 0x5730, 0x4330, 0x3000, 0x1EC0, 0x0FF0, 0x0800, 0x0440, 0x03F0, 0x0530,
+ 0x06A0, 0x08E0, 0x0C90, 0x12F0, 0x1EA0, 0x2DB0, 0x3EB0, 0x4D20, 0x5640, 0x57D0, 0x5310, 0x4AB0, 0x42C0, 0x3DB0, 0x3CF0, 0x40A0,
+ 0x46D0, 0x4D80, 0x5420, 0x59A0, 0x5EE0, 0x6330, 0x67A0, 0x6A80, 0x6D70, 0x7010, 0x71F0, 0x73C0, 0x74B0, 0x7530, 0x7520, 0x74D0,
+ 0x7370, 0x72A0, 0x7340, 0x7580, 0x7850, 0x7BE0, 0x7E40, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F70, 0x7F10, 0x7E90, 0x7F20, 0x7F20, 0x7EF0, 0x7EF0, 0x7EA0, 0x7F40, 0x7F10, 0x7F00, 0x7EC0, 0x7E90, 0x7EB0, 0x7EB0,
+ 0x7F00, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7F00, 0x7F20, 0x7EE0, 0x7F10,
+ 0x7D30, 0x6D60, 0x5DF0, 0x4DC0, 0x3C90, 0x2A50, 0x1940, 0x08B0, 0xFB90, 0xF0F0, 0xEB50, 0xE9C0, 0xEBC0, 0xF100, 0xF7B0, 0xFD60,
+ 0x01A0, 0x03F0, 0x0710, 0x09C0, 0x0DC0, 0x1250, 0x1630, 0x1A60, 0x1C30, 0x1DE0, 0x1F00, 0x2090, 0x2550, 0x2BB0, 0x3520, 0x4060,
+ 0x4C70, 0x56A0, 0x5B60, 0x5990, 0x4DB0, 0x37E0, 0x1BD0, 0xFD30, 0xE170, 0xCAD0, 0xBD10, 0xB630, 0xB300, 0xB1A0, 0xB110, 0xB0B0,
+ 0xB060, 0xB150, 0xB450, 0xB820, 0xBD40, 0xC2D0, 0xC8B0, 0xCE30, 0xD340, 0xD580, 0xD770, 0xD800, 0xD7F0, 0xD850, 0xDA10, 0xDCA0,
+ 0xE050, 0xE4F0, 0xE970, 0xECD0, 0xF060, 0xF270, 0xF450, 0xF690, 0xF8B0, 0xFCA0, 0xFF40, 0x0230, 0x05B0, 0x0810, 0x0A30, 0x0AB0,
+ 0x0A40, 0x0A40, 0x0910, 0x08A0, 0x08C0, 0x0840, 0x0980, 0x0A00, 0x0B10, 0x0B80, 0x0BE0, 0x0CC0, 0x0D40, 0x0D90, 0x0E60, 0x0F50,
+ 0x1010, 0x1090, 0x1260, 0x13F0, 0x15B0, 0x1850, 0x1A70, 0x1C30, 0x1F70, 0x22A0, 0x2740, 0x2BD0, 0x2FF0, 0x3540, 0x3910, 0x3DF0,
+ 0x41F0, 0x45D0, 0x4990, 0x4CB0, 0x50E0, 0x53D0, 0x5590, 0x5700, 0x55C0, 0x5430, 0x5070, 0x4A90, 0x4390, 0x3B30, 0x32E0, 0x2A40,
+ 0x2210, 0x1BF0, 0x1600, 0x11D0, 0x0E90, 0x0C40, 0x0AE0, 0x0A10, 0x09B0, 0x09D0, 0x0870, 0x07B0, 0x0600, 0x03E0, 0x0190, 0xFEC0,
+ 0xFBC0, 0xF800, 0xF3F0, 0xEF30, 0xE920, 0xE2D0, 0xDCB0, 0xD670, 0xD060, 0xC9D0, 0xC330, 0xBB90, 0xB2C0, 0xA970, 0x9FD0, 0x9800,
+ 0x9120, 0x8D10, 0x8B30, 0x8A90, 0x8B30, 0x8D30, 0x8FA0, 0x9340, 0x9670, 0x98B0, 0x9530, 0x93C0, 0x9230, 0x90E0, 0x8F90, 0x8E40,
+ 0x8CD0, 0x8B20, 0x8990, 0x8870, 0x87C0, 0x8760, 0x8710, 0x86E0, 0x86C0, 0x86B0, 0x8690, 0x8680, 0x8670, 0x8670, 0x8670, 0x8670,
+ 0x8690, 0x86D0, 0x8750, 0x8820, 0x8980, 0x8C30, 0x8FC0, 0x9360, 0x9670, 0x98F0, 0x9AE0, 0x9C20, 0x9E70, 0xA0B0, 0xA3A0, 0xA6D0,
+ 0xAA30, 0xADE0, 0xB150, 0xB430, 0xB6B0, 0xBA10, 0xBDA0, 0xC250, 0xC750, 0xCCC0, 0xD220, 0xD790, 0xDD00, 0xE240, 0xE8F0, 0xEF30,
+ 0xF5B0, 0xFD10, 0x02F0, 0x08F0, 0x0F40, 0x1610, 0x1D20, 0x23F0, 0x2BE0, 0x32D0, 0x3A60, 0x4080, 0x4670, 0x4C70, 0x5170, 0x57C0,
+ 0x5D90, 0x6330, 0x69E0, 0x7030, 0x7620, 0x7BA0, 0x7E90, 0x7F10, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7F10, 0x7F00, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F00, 0x7F60, 0x7EE0, 0x7ED0, 0x7F10, 0x7F20, 0x7F70, 0x7DF0, 0x7AA0, 0x78E0, 0x7790, 0x76B0, 0x7720, 0x7800, 0x7A50,
+ 0x7CE0, 0x7E90, 0x7ED0, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F10,
+ 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F10, 0x7F10, 0x7E90, 0x7EB0,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F20, 0x7E60, 0x6E40, 0x5F50, 0x50B0, 0x4120, 0x3380, 0x2680, 0x1A60, 0x0F90,
+ 0x06B0, 0x0010, 0xFB20, 0xF8F0, 0xF950, 0xFB60, 0x0000, 0x0580, 0x0D30, 0x1500, 0x1D10, 0x2600, 0x2D80, 0x3460, 0x3A10, 0x3EB0,
+ 0x42A0, 0x4580, 0x47F0, 0x49A0, 0x4B80, 0x4D80, 0x4E80, 0x4EF0, 0x4F80, 0x4F70, 0x4EC0, 0x4BE0, 0x47B0, 0x4290, 0x3CA0, 0x3720,
+ 0x3080, 0x2930, 0x21B0, 0x18D0, 0x1130, 0x0930, 0x0250, 0xFCD0, 0xF850, 0xF430, 0xF060, 0xEC40, 0xE8E0, 0xE540, 0xE050, 0xDAE0,
+ 0xD330, 0xCAD0, 0xC1C0, 0xB8D0, 0xB030, 0xA770, 0x9FD0, 0x9880, 0x9210, 0x8D30, 0x89A0, 0x87C0, 0x86A0, 0x8600, 0x85A0, 0x8550,
+ 0x8520, 0x8500, 0x84F0, 0x84E0, 0x84C0, 0x84C0, 0x84B0, 0x8490, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430,
+ 0x8430, 0x8420, 0x8410, 0x8400, 0x83F0, 0x83D0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83D0, 0x83C0, 0x83C0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83C0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8410, 0x8410, 0x8420, 0x8420,
+ 0x8410, 0x8430, 0x8430, 0x8450, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x84B0, 0x8520, 0x8C20, 0xB580, 0xDB30, 0xFF20,
+ 0x2000, 0x3EC0, 0x5B10, 0x7540, 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7EF0, 0x6CD0, 0x57F0, 0x4040, 0x2350, 0x0660, 0xE7E0, 0xC930, 0xAB30, 0x9050, 0x8620, 0x84F0, 0x84C0,
+ 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84D0, 0x8530, 0x8B10, 0xB130,
+ 0xD720, 0xFD70, 0x24E0, 0x46E0, 0x6470, 0x7BB0, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7EB0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F40, 0x7EF0, 0x7F20, 0x7F00, 0x7ED0,
+ 0x7ED0, 0x7EE0, 0x7F40, 0x7EF0, 0x7F10, 0x7F60, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F40,
+ 0x7F10, 0x7ED0, 0x7F00, 0x7F00, 0x7F40, 0x7F10, 0x7EB0, 0x7EE0, 0x7F10, 0x7F30, 0x7EC0, 0x7E90, 0x7F10, 0x7F20, 0x7F20, 0x6740,
+ 0x4E00, 0x32E0, 0x1A10, 0x0050, 0xE860, 0xD1C0, 0xBF40, 0xAF10, 0xA280, 0x9840, 0x8F10, 0x89B0, 0x8730, 0x8610, 0x85A0, 0x8580,
+ 0x8590, 0x85D0, 0x8670, 0x8810, 0x8B40, 0x90E0, 0x98E0, 0xA1C0, 0xAB30, 0xB520, 0xBE60, 0xC6E0, 0xCFD0, 0xD750, 0xDDC0, 0xE2F0,
+ 0xE7D0, 0xEBF0, 0xF080, 0xF490, 0xF970, 0x0080, 0x07D0, 0x1250, 0x1E90, 0x2CB0, 0x3B80, 0x4800, 0x50B0, 0x5160, 0x4610, 0x30B0,
+ 0x0F40, 0xE7A0, 0xBCA0, 0x92C0, 0x8540, 0x84C0, 0x84A0, 0x8490, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470,
+ 0x8480, 0x84A0, 0x84B0, 0x8580, 0x94C0, 0xB5F0, 0xCF30, 0xDFF0, 0xE7D0, 0xE6E0, 0xDF90, 0xD4B0, 0xC960, 0xC170, 0xBF00, 0xC210,
+ 0xCB50, 0xD960, 0xEC20, 0xFF70, 0x1580, 0x2C90, 0x4550, 0x5F60, 0x7720, 0x7F30, 0x7ED0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F30, 0x7F00,
+ 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7EA0, 0x7EE0, 0x7EF0, 0x62D0, 0x3D80, 0x1500, 0xE850, 0xB7B0, 0x8880, 0x84C0, 0x8480,
+ 0x8460, 0x8460, 0x8440, 0x8440, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8430, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8470, 0x8480, 0x84A0, 0x84D0, 0x8560, 0x8D30, 0xAD50,
+ 0xC890, 0xE290, 0xF6F0, 0x06B0, 0x1460, 0x1D40, 0x2450, 0x2990, 0x2C30, 0x2CC0, 0x2A00, 0x2500, 0x1670, 0x1970, 0x1D30, 0x2020,
+ 0x2360, 0x2450, 0x2590, 0x2600, 0x2640, 0x2840, 0x2A10, 0x2D40, 0x2F90, 0x3230, 0x3500, 0x3800, 0x3B80, 0x3FB0, 0x4370, 0x48A0,
+ 0x4D50, 0x52A0, 0x56E0, 0x58F0, 0x59B0, 0x5720, 0x52E0, 0x4DD0, 0x49B0, 0x4740, 0x4630, 0x46B0, 0x46E0, 0x4690, 0x46C0, 0x46D0,
+ 0x4720, 0x4810, 0x4AE0, 0x4E60, 0x5280, 0x5770, 0x5C90, 0x6120, 0x6440, 0x6250, 0x59B0, 0x4910, 0x3390, 0x1BF0, 0x0580, 0xF350,
+ 0xE710, 0xE020, 0xDEF0, 0xE1A0, 0xE850, 0xF1A0, 0xFB90, 0x06B0, 0x1100, 0x19C0, 0x2190, 0x2880, 0x2FA0, 0x3770, 0x3EB0, 0x4660,
+ 0x4C40, 0x50D0, 0x54B0, 0x57E0, 0x5D40, 0x6280, 0x67E0, 0x6C80, 0x6FD0, 0x7230, 0x7270, 0x71A0, 0x6FC0, 0x6C80, 0x6920, 0x6410,
+ 0x5FF0, 0x5C70, 0x58A0, 0x5690, 0x5470, 0x5330, 0x52F0, 0x5340, 0x54B0, 0x5870, 0x5E50, 0x6580, 0x6C20, 0x7300, 0x77C0, 0x7910,
+ 0x7870, 0x7390, 0x6CB0, 0x6260, 0x54C0, 0x44C0, 0x3190, 0x1C80, 0x0500, 0xEB50, 0xD0A0, 0xB700, 0x9E00, 0x8A40, 0x8550, 0x84E0,
+ 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x8500, 0x8550, 0x8680, 0x8B90, 0x9990, 0xA650,
+ 0xB160, 0xBA90, 0xC260, 0xC970, 0xD0D0, 0xD8B0, 0xE030, 0xE780, 0xEBE0, 0xEE70, 0xEF60, 0xEE10, 0xEBF0, 0xE7A0, 0xE0C0, 0xD850,
+ 0xCB20, 0xBD70, 0xAD70, 0x9CA0, 0x8CD0, 0x8620, 0x84F0, 0x84C0, 0x84A0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430,
+ 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0,
+ 0x84C0, 0x84F0, 0x8590, 0x8970, 0x9C30, 0xAEB0, 0xC120, 0xD070, 0xDDD0, 0xEA10, 0xF560, 0x0060, 0x0D90, 0x1D00, 0x2F60, 0x44B0,
+ 0x5970, 0x6C60, 0x7B80, 0x7F10, 0x7F00, 0x7F60, 0x7EE0, 0x7ED0, 0x7EE0, 0x7EF0, 0x7F80, 0x7F00, 0x7EE0, 0x7F00, 0x7F10, 0x7F30,
+ 0x7EE0, 0x7EB0, 0x7F00, 0x7EE0, 0x7F30, 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7F00,
+ 0x7EC0, 0x7F30, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F80, 0x7EE0, 0x7EF0, 0x7F10, 0x7F10,
+ 0x7F70, 0x7F00, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F00,
+ 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7EF0, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F00, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F50, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F30, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F10, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7FB0, 0x7F30, 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7ED0, 0x7EF0, 0x7F20, 0x7F40, 0x7F40, 0x7EB0,
+ 0x7F00, 0x7F00, 0x7F30, 0x7F30, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F20, 0x7F00, 0x7ED0, 0x7EE0, 0x7F00, 0x7F10, 0x7F30, 0x7E90, 0x7EE0,
+ 0x7EE0, 0x7EF0, 0x7F20, 0x7E80, 0x7ED0, 0x7F00, 0x7F20, 0x7F10, 0x7EC0, 0x7F10, 0x7F00, 0x7F10, 0x7F00, 0x7EC0, 0x7F00, 0x7F10,
+ 0x7F20, 0x7F40, 0x7F00, 0x7F50, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F50, 0x7F00, 0x7F20,
+ 0x7F00, 0x7F10, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F00, 0x7F60, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7EB0, 0x7E70, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7EE0, 0x7F40, 0x7F10,
+ 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7EF0, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F20,
+ 0x7EF0, 0x7EF0, 0x7F60, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7E30, 0x7B00, 0x7790, 0x73F0, 0x7180, 0x6ED0, 0x6CB0,
+ 0x6A30, 0x6720, 0x65C0, 0x64D0, 0x6540, 0x6640, 0x67B0, 0x69F0, 0x6CA0, 0x6F90, 0x72B0, 0x7570, 0x7920, 0x7BC0, 0x7E60, 0x7EE0,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F40, 0x7F10, 0x7F10, 0x7F10, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F70, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7E90, 0x7F00,
+ 0x7EE0, 0x7EF0, 0x7EB0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F20, 0x7EF0,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F80, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F60, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F80, 0x7EC0, 0x7F10,
+ 0x7F10, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7F30, 0x7EF0, 0x7F60, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F90, 0x7F20,
+ 0x7F10, 0x7EF0, 0x7EF0, 0x7F80, 0x7ED0, 0x7DB0, 0x7C00, 0x7A40, 0x78F0, 0x77B0, 0x75E0, 0x74E0, 0x73B0, 0x72E0, 0x7310, 0x7290,
+ 0x7370, 0x7400, 0x7440, 0x75C0, 0x7630, 0x7760, 0x7890, 0x79E0, 0x7BE0, 0x7C90, 0x7E00, 0x7EB0, 0x7EE0, 0x7EF0, 0x7EA0, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7F00,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F70, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F70, 0x7ED0, 0x7EB0,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7E90, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00,
+ 0x7EF0, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F30, 0x7600, 0x5D80, 0x4380,
+ 0x2940, 0x1040, 0xF810, 0xE1B0, 0xCBF0, 0xB770, 0xA0B0, 0x8CC0, 0x85B0, 0x84E0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8410, 0x8430, 0x8430, 0x8430, 0x8460, 0x8430, 0x8430,
+ 0x8430, 0x8440, 0x8430, 0x8430, 0x8460, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430,
+ 0x8430, 0x8430, 0x8450, 0x8430, 0x8420, 0x8410, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8410,
+ 0x8400, 0x8400, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8430, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8460, 0x8440, 0x8460, 0x8460,
+ 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8470, 0x8430, 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8440, 0x8440, 0x8480, 0x8460, 0x8460, 0x84B0, 0x8490, 0x84A0, 0x84D0, 0x8530, 0x8810, 0x9CB0, 0xB390, 0xC420, 0xCD90, 0xCF10,
+ 0xC810, 0xB9A0, 0xA4F0, 0x8FB0, 0x8660, 0x8500, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8460, 0x8450, 0x83E0,
+ 0x8430, 0x8420, 0x8420, 0x8420, 0x8430, 0x8460, 0x8440, 0x8460, 0x8480, 0x84A0, 0x84F0, 0x85B0, 0x8950, 0x9530, 0xA2D0, 0xB180,
+ 0xC2A0, 0xD230, 0xDF20, 0xE770, 0xEA10, 0xE6A0, 0xDAE0, 0xC4C0, 0xA010, 0x8550, 0x84A0, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8470, 0x8490, 0x84D0, 0x8780, 0xB350, 0xDE50, 0x0290, 0x2130,
+ 0x3B80, 0x5290, 0x67D0, 0x7AA0, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x62D0, 0x5B20, 0x57B0,
+ 0x5910, 0x5DE0, 0x6420, 0x6AC0, 0x7130, 0x7720, 0x7BC0, 0x7EB0, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F50, 0x7F10, 0x7EA0, 0x7F20, 0x7EF0, 0x7EF0, 0x7EE0, 0x7E80, 0x7EF0, 0x7F20, 0x7F00,
+ 0x7F00, 0x7E80, 0x7EB0, 0x7EA0, 0x7F10, 0x7EB0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F30, 0x7F00, 0x7F90, 0x7F20, 0x7F40, 0x7F10,
+ 0x7F10, 0x7F30, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F80, 0x7F00, 0x7EE0, 0x7D60, 0x7C80, 0x7CB0, 0x7D70, 0x7E40, 0x7ED0, 0x7EE0,
+ 0x7F60, 0x7EF0, 0x7EB0, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7ED0, 0x7EB0, 0x7F00, 0x7EE0, 0x7E90, 0x7F10, 0x7F20, 0x7F00,
+ 0x7ED0, 0x7300, 0x6700, 0x5A10, 0x4D10, 0x42B0, 0x3B40, 0x3840, 0x3980, 0x3E70, 0x4800, 0x5140, 0x59E0, 0x6160, 0x66F0, 0x6B30,
+ 0x6D30, 0x6E30, 0x6E40, 0x6CB0, 0x6BA0, 0x6940, 0x6790, 0x66E0, 0x67A0, 0x6B10, 0x7050, 0x7730, 0x7E40, 0x7F10, 0x7F00, 0x7EF0,
+ 0x7F60, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F60, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7F10, 0x7EF0, 0x7EF0,
+ 0x7EB0, 0x7EC0, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F40, 0x72E0, 0x5EA0, 0x4960, 0x33D0, 0x2090,
+ 0x0CC0, 0xFBD0, 0xEDB0, 0xE260, 0xD960, 0xD380, 0xD030, 0xCF90, 0xD060, 0xD340, 0xD5C0, 0xD7C0, 0xD940, 0xDAB0, 0xDC30, 0xDE20,
+ 0xDF50, 0xE0B0, 0xE160, 0xE2C0, 0xE430, 0xE4B0, 0xE610, 0xE6D0, 0xE790, 0xE780, 0xE670, 0xE550, 0xE460, 0xE460, 0xE500, 0xE530,
+ 0xE820, 0xEB60, 0xF110, 0xF870, 0x01C0, 0x0BD0, 0x1710, 0x2300, 0x2FC0, 0x3CC0, 0x4A80, 0x5720, 0x6340, 0x6F20, 0x7820, 0x7E70,
+ 0x7F10, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F80, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F10,
+ 0x7F70, 0x7EE0, 0x7ED0, 0x7F10, 0x7F20, 0x7F60, 0x7EE0, 0x7E90, 0x7F00, 0x7F10, 0x7F30, 0x7EB0, 0x7E70, 0x7EF0, 0x7F10, 0x7F20,
+ 0x7EE0, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F40, 0x7ED0, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7F20,
+ 0x7F20, 0x7F40, 0x7F00, 0x7F30, 0x7EE0, 0x7EF0, 0x7F30, 0x7F10, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7F00, 0x7F00,
+ 0x7E60, 0x7AB0, 0x7740, 0x7380, 0x6F90, 0x6C70, 0x6960, 0x66F0, 0x64D0, 0x6310, 0x6100, 0x5E50, 0x5A30, 0x56E0, 0x52F0, 0x5090,
+ 0x4D60, 0x4980, 0x46A0, 0x41F0, 0x3F40, 0x3BE0, 0x3810, 0x34B0, 0x30A0, 0x2CC0, 0x28C0, 0x2500, 0x21E0, 0x1FC0, 0x1E30, 0x1CC0,
+ 0x1A80, 0x1850, 0x1620, 0x1440, 0x1240, 0x1010, 0x0F20, 0x0E00, 0x0DB0, 0x0D20, 0x0C60, 0x0CF0, 0x0CC0, 0x0BF0, 0x0B10, 0x0AD0,
+ 0x0B10, 0x0B20, 0x0BC0, 0x0C50, 0x0CA0, 0x0D70, 0x0DF0, 0x0F30, 0x10E0, 0x1360, 0x17B0, 0x1CB0, 0x2130, 0x25F0, 0x2AC0, 0x3100,
+ 0x3770, 0x3D50, 0x4400, 0x49A0, 0x4F50, 0x53D0, 0x56F0, 0x5AA0, 0x5CC0, 0x5FB0, 0x6260, 0x63C0, 0x65D0, 0x6700, 0x67C0, 0x6850,
+ 0x68D0, 0x69F0, 0x6A80, 0x6B10, 0x6C90, 0x6E60, 0x7170, 0x7450, 0x77D0, 0x7B20, 0x7D80, 0x7F10, 0x7F20, 0x7F80, 0x7F10, 0x7F10,
+ 0x7EF0, 0x7EF0, 0x7F80, 0x7F10, 0x7F10, 0x7EF0, 0x7F10, 0x7F70, 0x7F10, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F00, 0x7EE0, 0x7EE0,
+ 0x7ED0, 0x7F30, 0x7F20, 0x7E60, 0x7CD0, 0x7B30, 0x7990, 0x78D0, 0x77B0, 0x77E0, 0x7820, 0x78C0, 0x7A90, 0x7C00, 0x7D20, 0x7E60,
+ 0x7EE0, 0x7F10, 0x7EC0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7EF0, 0x7F20,
+ 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F80, 0x7EF0, 0x7EB0, 0x7F10, 0x7F10, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0,
+ 0x7F10, 0x7F30, 0x7EE0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7EB0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F20, 0x7EE0, 0x7E90, 0x7F10, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F40, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7F00, 0x7F10,
+ 0x7F30, 0x7EF0, 0x7F70, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7F90, 0x7F20, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0, 0x7EE0,
+ 0x7EE0, 0x7F50, 0x7F10, 0x7EA0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7EA0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7F00, 0x7F20,
+ 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7ED0, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10,
+ 0x7F00, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F20, 0x7F00, 0x7F40, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7B50, 0x75B0, 0x6EF0, 0x6880, 0x61E0, 0x5B70,
+ 0x5540, 0x4FB0, 0x4CD0, 0x4BB0, 0x4D20, 0x5180, 0x56A0, 0x5D60, 0x6350, 0x6870, 0x6B50, 0x6AE0, 0x66C0, 0x5EB0, 0x5270, 0x4490,
+ 0x3600, 0x27E0, 0x1B00, 0x1030, 0x06C0, 0xFE80, 0xF520, 0xEA50, 0xDF60, 0xD460, 0xC950, 0xBED0, 0xB670, 0xAFE0, 0xAAE0, 0xA7D0,
+ 0xA520, 0xA3D0, 0xA240, 0xA050, 0x9DB0, 0x99A0, 0x9510, 0x9020, 0x8C80, 0x8A30, 0x8930, 0x88F0, 0x8940, 0x89A0, 0x8AA0, 0x8C10,
+ 0x8DF0, 0x90F0, 0x9530, 0x99C0, 0x9ED0, 0xA340, 0xA770, 0xABD0, 0xAF50, 0xB370, 0xB790, 0xBBA0, 0xBF60, 0xC2B0, 0xC580, 0xC840,
+ 0xCAA0, 0xCD40, 0xCFD0, 0xD220, 0xD3D0, 0xD530, 0xD640, 0xD800, 0xD9D0, 0xDBF0, 0xDDD0, 0xDFB0, 0xE040, 0xE090, 0xE0D0, 0xE140,
+ 0xE180, 0xE200, 0xE2A0, 0xE1D0, 0xE0D0, 0xE060, 0xE070, 0xE080, 0xE090, 0xE0B0, 0xE0C0, 0xE080, 0xDFD0, 0xDFF0, 0xE070, 0xE190,
+ 0xE230, 0xE2D0, 0xE3C0, 0xE450, 0xE470, 0xE5A0, 0xE640, 0xE660, 0xE540, 0xE300, 0xE090, 0xDE10, 0xDBF0, 0xDA50, 0xD8C0, 0xD600,
+ 0xD2A0, 0xCDB0, 0xC900, 0xC530, 0xC260, 0xBF40, 0xBBB0, 0xB850, 0xB4D0, 0xB0F0, 0xAE50, 0xAC50, 0xAA20, 0xA780, 0xA410, 0xA0E0,
+ 0x9DE0, 0x9B80, 0x9A10, 0x98C0, 0x97C0, 0x95C0, 0x9340, 0x90A0, 0x8E30, 0x8C50, 0x8B00, 0x89F0, 0x8900, 0x8850, 0x87C0, 0x8730,
+ 0x86D0, 0x8690, 0x8660, 0x8620, 0x8620, 0x85C0, 0x8590, 0x8570, 0x8560, 0x8550, 0x8540, 0x8530, 0x8520, 0x8520, 0x8510, 0x8510,
+ 0x8510, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84C0, 0x84D0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84C0, 0x84B0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84B0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84C0, 0x84E0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84B0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84D0, 0x84F0, 0x84F0, 0x8500,
+ 0x8500, 0x8510, 0x8530, 0x8540, 0x8560, 0x8590, 0x85D0, 0x8600, 0x8660, 0x86B0, 0x8740, 0x87D0, 0x8860, 0x88E0, 0x8940, 0x89C0,
+ 0x8A50, 0x8B60, 0x8C10, 0x8C90, 0x8D10, 0x8D60, 0x8E00, 0x8E30, 0x8E90, 0x8F30, 0x8FC0, 0x8FE0, 0x9020, 0x9090, 0x9130, 0x9200,
+ 0x92F0, 0x93F0, 0x9480, 0x9520, 0x95C0, 0x96F0, 0x9920, 0x9BB0, 0x9E30, 0xA070, 0xA320, 0xA640, 0xAA80, 0xAF70, 0xB550, 0xBC70,
+ 0xC400, 0xCBD0, 0xD3F0, 0xDBF0, 0xE460, 0xEC60, 0xF3D0, 0xFCD0, 0x0360, 0x0930, 0x0E50, 0x11E0, 0x1520, 0x16D0, 0x1870, 0x18F0,
+ 0x1890, 0x1770, 0x14A0, 0x10A0, 0x0BD0, 0x05B0, 0xFF30, 0xF6C0, 0xEC90, 0xE1C0, 0xD680, 0xCA50, 0xBDB0, 0xB070, 0xA360, 0x95F0,
+ 0x8B20, 0x8670, 0x8520, 0x84F0, 0x84D0, 0x84C0, 0x84A0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8460, 0x8440, 0x8450, 0x8440,
+ 0x8430, 0x8420, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0,
+ 0x83B0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83D0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8450, 0x8460,
+ 0x8470, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8470, 0x8470, 0x8460, 0x8450, 0x8450, 0x8460,
+ 0x8430, 0x8430, 0x8460, 0x8420, 0x8430, 0x8410, 0x8410, 0x8420, 0x8420, 0x8410, 0x8420, 0x8420, 0x8420, 0x8450, 0x8430, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8450, 0x8450, 0x8470, 0x8460, 0x8470, 0x8480, 0x8480, 0x8490, 0x84B0,
+ 0x84D0, 0x8500, 0x8570, 0x86C0, 0x89E0, 0x8EE0, 0x93C0, 0x97E0, 0x9B80, 0x9EF0, 0xA0F0, 0xA310, 0xA510, 0xA780, 0xAAD0, 0xB070,
+ 0xB820, 0xC330, 0xD0C0, 0xE1D0, 0xF3A0, 0x07F0, 0x19F0, 0x2AC0, 0x3BA0, 0x4BF0, 0x5C70, 0x6C30, 0x79E0, 0x7EF0, 0x7F00, 0x7F60,
+ 0x7EF0, 0x7EB0, 0x7F00, 0x7F00, 0x7F50, 0x7ED0, 0x7EA0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7F20, 0x7F00, 0x7F10,
+ 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F40, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F60, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F00, 0x7F20, 0x7F10, 0x7EF0, 0x7F70, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F70,
+ 0x7F10, 0x7EB0, 0x7EE0, 0x7EF0, 0x72A0, 0x5FE0, 0x4B50, 0x3610, 0x1FE0, 0x0900, 0xF3D0, 0xE030, 0xD020, 0xC2C0, 0xB930, 0xB2F0,
+ 0xAD90, 0xA750, 0xA110, 0x99C0, 0x92A0, 0x8BD0, 0x87D0, 0x8630, 0x8580, 0x8510, 0x84F0, 0x8510, 0x84C0, 0x84B0, 0x84A0, 0x84A0,
+ 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8490, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8480, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84A0, 0x8500, 0x84D0,
+ 0x84E0, 0x8500, 0x8530, 0x85B0, 0x86D0, 0x8A30, 0x9240, 0x9B80, 0xA4D0, 0xADB0, 0xB690, 0xBF90, 0xC8E0, 0xD2F0, 0xDE10, 0xE8D0,
+ 0xF3D0, 0xFF30, 0x0B00, 0x1640, 0x20F0, 0x2C30, 0x3660, 0x4050, 0x48D0, 0x4F50, 0x56F0, 0x5BC0, 0x5FA0, 0x62B0, 0x64A0, 0x65C0,
+ 0x6690, 0x6750, 0x6760, 0x6720, 0x66E0, 0x6650, 0x6620, 0x6690, 0x67D0, 0x6990, 0x6C80, 0x70E0, 0x75B0, 0x7B10, 0x7EB0, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7D20,
+ 0x6AF0, 0x5A30, 0x49D0, 0x39F0, 0x2B30, 0x1D30, 0x0F40, 0x0270, 0xF660, 0xEBA0, 0xE220, 0xDB70, 0xD6D0, 0xD400, 0xD280, 0xD130,
+ 0xCF80, 0xCD00, 0xCA20, 0xC6C0, 0xC320, 0xBFD0, 0xBDA0, 0xBAF0, 0xB8A0, 0xB6A0, 0xB490, 0xB260, 0xB090, 0xAEB0, 0xACD0, 0xAB20,
+ 0xA8A0, 0xA5B0, 0xA110, 0x9AF0, 0x9470, 0x8E50, 0x8A00, 0x8790, 0x86B0, 0x8650, 0x8660, 0x8690, 0x8710, 0x87C0, 0x88B0, 0x89E0,
+ 0x8BB0, 0x8D90, 0x9070, 0x93C0, 0x9890, 0x9E40, 0xA560, 0xADD0, 0xB7A0, 0xC3A0, 0xCF90, 0xDCA0, 0xE9F0, 0xF7D0, 0x0600, 0x14A0,
+ 0x22C0, 0x3180, 0x4130, 0x4FC0, 0x5D90, 0x6A10, 0x7560, 0x7DF0, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7EF0, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7EB0, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F10, 0x7EC0, 0x7F10, 0x7EF0, 0x7EB0, 0x7EE0, 0x7E80, 0x7ED0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F00, 0x7F20, 0x7F00,
+ 0x7F10, 0x7F30, 0x7EE0, 0x7F50, 0x7F00, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60, 0x7F20, 0x7F10, 0x7F00, 0x7F00, 0x7F70, 0x7F10, 0x7EF0,
+ 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EA0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7E90, 0x7EB0, 0x7EC0, 0x7EF0, 0x7EF0, 0x7E70, 0x7ED0,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7EF0,
+ 0x7EE0, 0x7EF0, 0x7F60, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7F30, 0x7EB0, 0x7EA0, 0x7EF0,
+ 0x7B50, 0x7430, 0x6DC0, 0x6710, 0x6260, 0x5F60, 0x5CD0, 0x5B50, 0x5760, 0x5140, 0x4800, 0x3C50, 0x2FA0, 0x2150, 0x1510, 0x09D0,
+ 0xFF80, 0xF750, 0xEFB0, 0xE830, 0xDFE0, 0xD550, 0xC7F0, 0xB990, 0xA850, 0x96E0, 0x89C0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x8520, 0x85B0, 0x87B0, 0x8E00,
+ 0x97B0, 0xA1A0, 0xA970, 0xB020, 0xB5B0, 0xBA70, 0xBD10, 0xBE20, 0xBCB0, 0xBA80, 0xB6B0, 0xB320, 0xB060, 0xAD40, 0xAA10, 0xA7E0,
+ 0xA660, 0xA5B0, 0xA5F0, 0xA7A0, 0xAA10, 0xAC70, 0xAF60, 0xB1A0, 0xB510, 0xB940, 0xBE10, 0xC340, 0xC800, 0xCC90, 0xD0C0, 0xD2D0,
+ 0xD550, 0xD680, 0xD6B0, 0xD5C0, 0xD400, 0xD1D0, 0xCEE0, 0xCCF0, 0xCB80, 0xCA20, 0xC910, 0xC730, 0xC4A0, 0xC120, 0xBD30, 0xBA20,
+ 0xB730, 0xB3D0, 0xB170, 0xAE00, 0x9E70, 0x9B90, 0x9900, 0x9670, 0x9380, 0x9150, 0x8F80, 0x8EB0, 0x8F00, 0x9060, 0x9350, 0x9720,
+ 0x9BB0, 0xA180, 0xA990, 0xB320, 0xBE60, 0xCB70, 0xD7F0, 0xE420, 0xF210, 0xFF90, 0x0D90, 0x1B00, 0x2740, 0x33F0, 0x40B0, 0x4D00,
+ 0x5850, 0x62B0, 0x6D60, 0x7660, 0x7D90, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0,
+ 0x7F20, 0x7EF0, 0x7EF0, 0x7F70, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F70, 0x7ED0, 0x7F10, 0x7F00, 0x7EE0, 0x7F80, 0x7EF0, 0x7EE0,
+ 0x7F00, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7EF0, 0x7F00, 0x7F20, 0x7ED0, 0x7EB0, 0x7F20, 0x7EF0, 0x7F30, 0x7F00, 0x7EA0, 0x7F10,
+ 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F30, 0x7F00,
+ 0x7F00, 0x7EF0, 0x7F10, 0x7F80, 0x7F20, 0x7F10, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7F00, 0x7EE0, 0x7EF0, 0x7F70, 0x7F20, 0x7EF0,
+ 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F00, 0x7EC0, 0x7EC0, 0x7ED0, 0x7E80, 0x7D60, 0x7B80, 0x7A10,
+ 0x7930, 0x7780, 0x7690, 0x7500, 0x7440, 0x73D0, 0x7350, 0x73B0, 0x7400, 0x7440, 0x74B0, 0x74A0, 0x75A0, 0x7680, 0x77F0, 0x79E0,
+ 0x7AD0, 0x7BF0, 0x7D10, 0x7DE0, 0x7E90, 0x7F00, 0x7F00, 0x7F10, 0x7F50, 0x7EF0, 0x7F00, 0x7EF0, 0x7F00, 0x7F40, 0x7EF0, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7F70, 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7EB0, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7EF0, 0x7F20, 0x7EF0, 0x7E00, 0x7BB0, 0x79B0, 0x7780, 0x7610, 0x7460, 0x71E0, 0x6EF0,
+ 0x6C30, 0x6A40, 0x6800, 0x65D0, 0x6370, 0x6100, 0x5FA0, 0x5E10, 0x5C30, 0x5A80, 0x5790, 0x5570, 0x5330, 0x4FE0, 0x4D50, 0x49B0,
+ 0x46C0, 0x4400, 0x40F0, 0x3E60, 0x3C00, 0x3AD0, 0x3B50, 0x3CF0, 0x4040, 0x42C0, 0x45B0, 0x4800, 0x4A10, 0x4DB0, 0x5180, 0x5640,
+ 0x5AD0, 0x5E90, 0x62B0, 0x66A0, 0x6B30, 0x7030, 0x7460, 0x7950, 0x7D10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7F70, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F70, 0x7F00, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7EF0, 0x7F00, 0x7F30, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10,
+ 0x7BF0, 0x69E0, 0x5A10, 0x48B0, 0x38A0, 0x29A0, 0x1BF0, 0x1100, 0x06A0, 0xFE40, 0xF690, 0xF0A0, 0xEAD0, 0xE770, 0xE550, 0xE3F0,
+ 0xE3F0, 0xE570, 0xE8C0, 0xECF0, 0xF220, 0xF780, 0xFC70, 0x00C0, 0x0410, 0x06C0, 0x0930, 0x0A30, 0x0AB0, 0x09F0, 0x0830, 0x04F0,
+ 0x00D0, 0xFAE0, 0xF3B0, 0xECE0, 0xE610, 0xE000, 0xD930, 0xD1D0, 0xC790, 0xB900, 0xA320, 0x8940, 0x84E0, 0x8490, 0x8470, 0x8450,
+ 0x8440, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420,
+ 0x8420, 0x8430, 0x8440, 0x8460, 0x8470, 0x8490, 0x84C0, 0x84E0, 0x8500, 0x8520, 0x8550, 0x85E0, 0x8790, 0x8DE0, 0x9840, 0x9F50,
+ 0x9F10, 0x9950, 0x8F70, 0x8830, 0x8590, 0x8510, 0x84F0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84C0, 0x84B0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84B0, 0x84B0, 0x84A0, 0x84C0, 0x84C0, 0x84D0,
+ 0x84F0, 0x8510, 0x8540, 0x85D0, 0x86F0, 0x8950, 0x8DC0, 0x9250, 0x96B0, 0x98B0, 0x99A0, 0x9900, 0x9720, 0x9540, 0x93B0, 0x92F0,
+ 0x9250, 0x9240, 0x9270, 0x9230, 0x9200, 0x9160, 0x90D0, 0x9090, 0x9000, 0x8FE0, 0x8FC0, 0x9060, 0x9080, 0x9100, 0x9060, 0x8F40,
+ 0x8DE0, 0x8BA0, 0x89A0, 0x8840, 0x8760, 0x86D0, 0x8650, 0x85F0, 0x85A0, 0x8590, 0x8530, 0x8510, 0x84F0, 0x84F0, 0x84E0, 0x84D0,
+ 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8470, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450,
+ 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x84A0, 0x8480, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490,
+ 0x8490, 0x84B0, 0x8490, 0x84A0, 0x8470, 0x84B0, 0x84C0, 0x84F0, 0x84E0, 0x8500, 0x8520, 0x8590, 0x85E0, 0x86F0, 0x88D0, 0x8CB0,
+ 0x91F0, 0x9760, 0x9D40, 0xA230, 0xA780, 0xACB0, 0xB180, 0xB540, 0xB8B0, 0xBB60, 0xBE80, 0xC1D0, 0xC5E0, 0xCA40, 0xCE50, 0xD300,
+ 0xD6E0, 0xDB10, 0xDF00, 0xE260, 0xE680, 0xE9F0, 0xED50, 0xF160, 0xF440, 0xF7D0, 0xFA30, 0xFCC0, 0xFD90, 0xFDF0, 0xFF10, 0x0020,
+ 0x0060, 0x00F0, 0x0020, 0xFEF0, 0xFCF0, 0xFA90, 0xF8A0, 0xF690, 0xF530, 0xF3E0, 0xF240, 0xF1E0, 0xEFF0, 0xEDE0, 0xEAF0, 0xE890,
+ 0xE770, 0xE560, 0xE490, 0xE410, 0xE400, 0xE420, 0xE350, 0xE360, 0xE3E0, 0xE3A0, 0xE520, 0xE700, 0xE960, 0xECC0, 0xF010, 0xF4C0,
+ 0xF900, 0xFEB0, 0x0430, 0x0A20, 0x1050, 0x1710, 0x1DF0, 0x25C0, 0x2C10, 0x33F0, 0x3BC0, 0x42F0, 0x4A10, 0x50E0, 0x5800, 0x5EF0,
+ 0x65E0, 0x6BA0, 0x7190, 0x76F0, 0x7BB0, 0x7EE0, 0x7EF0, 0x7EB0, 0x7EF0, 0x7F10, 0x7F70, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F30,
+ 0x7EE0, 0x7EC0, 0x7F20, 0x7F20, 0x7F40, 0x7ED0, 0x7EA0, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F00, 0x7F30, 0x7EE0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F80, 0x7F00, 0x7F40, 0x7F10, 0x7EF0,
+ 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F70, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F50,
+ 0x7F10, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7E80, 0x7EB0, 0x7F00, 0x7EF0, 0x7E90, 0x7F00, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F40, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10,
+ 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7EB0, 0x7F20, 0x7F10, 0x7F20, 0x7F40, 0x7F00, 0x7F30, 0x7EE0, 0x7F10, 0x7F30,
+ 0x7F10, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00,
+ 0x7F70, 0x7F10, 0x7EB0, 0x7F00, 0x7B90, 0x7530, 0x6F70, 0x68A0, 0x6210, 0x5A80, 0x5070, 0x4580, 0x3720, 0x28C0, 0x1940, 0x0770,
+ 0xF650, 0xE330, 0xD090, 0xBD80, 0xAB20, 0x9960, 0x8C70, 0x86D0, 0x8560, 0x8500, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8480, 0x8480,
+ 0x8480, 0x8470, 0x8470, 0x8480, 0x8470, 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8490, 0x8480, 0x8480, 0x8480, 0x84B0, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8510, 0x8560, 0x85F0, 0x8770, 0x8B00,
+ 0x9250, 0x9AA0, 0xA1D0, 0xA910, 0xB020, 0xB760, 0xBED0, 0xC430, 0xC9A0, 0xCCF0, 0xD050, 0xD370, 0xD610, 0xD900, 0xDB50, 0xDD60,
+ 0xDF60, 0xE110, 0xE3D0, 0xE620, 0xE850, 0xEAF0, 0xED80, 0xF140, 0xF550, 0xF9D0, 0xFF40, 0x0490, 0x0A50, 0x10A0, 0x1570, 0x1AF0,
+ 0x1FD0, 0x25A0, 0x2B60, 0x3180, 0x37A0, 0x3D20, 0x42D0, 0x47D0, 0x4C10, 0x50E0, 0x5450, 0x57B0, 0x59A0, 0x5AF0, 0x5C50, 0x5D30,
+ 0x5E60, 0x5F80, 0x5F90, 0x6000, 0x5F40, 0x5EB0, 0x5E20, 0x5D60, 0x5D40, 0x5CF0, 0x5C30, 0x5C00, 0x5AF0, 0x5AE0, 0x5AC0, 0x59D0,
+ 0x5990, 0x5830, 0x56E0, 0x54C0, 0x5250, 0x5060, 0x4DC0, 0x4B90, 0x49D0, 0x47E0, 0x4790, 0x4780, 0x4910, 0x4B00, 0x4CF0, 0x4F30,
+ 0x5040, 0x5150, 0x5250, 0x53E0, 0x5700, 0x59C0, 0x5CD0, 0x5F20, 0x60D0, 0x6350, 0x6670, 0x6970, 0x6CE0, 0x7030, 0x7310, 0x74E0,
+ 0x76B0, 0x77E0, 0x7900, 0x7A00, 0x79D0, 0x7930, 0x77E0, 0x7590, 0x7350, 0x7070, 0x6DD0, 0x6A80, 0x6660, 0x62C0, 0x5E50, 0x59D0,
+ 0x55A0, 0x5020, 0x4B10, 0x45E0, 0x4000, 0x3A80, 0x3480, 0x2F00, 0x2A40, 0x2530, 0x20D0, 0x1BA0, 0x1680, 0x1190, 0x0C70, 0x08E0,
+ 0x0490, 0xFFF0, 0xFC30, 0xF870, 0xF4F0, 0xF200, 0xF040, 0xEEE0, 0xED80, 0xEE30, 0xEEE0, 0xEE40, 0xEEF0, 0xEF50, 0xF0A0, 0xF1F0,
+ 0xF3A0, 0xF590, 0xF790, 0xF9C0, 0xFC10, 0xFED0, 0x00E0, 0x02D0, 0x0450, 0x0610, 0x07A0, 0x0910, 0x0AF0, 0x0C00, 0x0CE0, 0x0DB0,
+ 0x0E80, 0x1030, 0x1260, 0x1510, 0x1750, 0x1950, 0x1A50, 0x1AF0, 0x1C20, 0x1DA0, 0x1F10, 0x20F0, 0x2300, 0x2560, 0x27F0, 0x2980,
+ 0x2B20, 0x2CD0, 0x2E10, 0x2EB0, 0x2EB0, 0x2E90, 0x2E30, 0x2DE0, 0x2DE0, 0x2E50, 0x2E70, 0x2E30, 0x2DD0, 0x2CB0, 0x2D00, 0x2C60,
+ 0x2B10, 0x29B0, 0x2800, 0x2620, 0x23F0, 0x2230, 0x21B0, 0x21E0, 0x2150, 0x21B0, 0x2250, 0x2350, 0x2450, 0x2560, 0x2680, 0x27D0,
+ 0x2910, 0x2A70, 0x2C00, 0x2E50, 0x3050, 0x31A0, 0x3310, 0x3410, 0x33B0, 0x3340, 0x3270, 0x3160, 0x3010, 0x2E70, 0x2C40, 0x29F0,
+ 0x2710, 0x2400, 0x20E0, 0x1DD0, 0x19E0, 0x1650, 0x1350, 0x1070, 0x0E70, 0x0CC0, 0x0C10, 0x0BB0, 0x0B00, 0x0A90, 0x0A70, 0x09A0,
+ 0x0900, 0x0870, 0x07A0, 0x06A0, 0x0500, 0x0350, 0x0040, 0xFD40, 0xFAD0, 0xF870, 0xF680, 0xF470, 0xF230, 0xEFD0, 0xECD0, 0xE990,
+ 0xE610, 0xE230, 0xDE90, 0xDA90, 0xD630, 0xD1D0, 0xCD00, 0xC880, 0xC3E0, 0xBF00, 0xBAE0, 0xB5E0, 0xB180, 0xAD70, 0xA960, 0xA5A0,
+ 0xA1B0, 0x9E60, 0x9B40, 0x9990, 0x9880, 0x98C0, 0x99D0, 0x9A80, 0x9B90, 0x9BF0, 0x9CB0, 0x9D80, 0x9EA0, 0xA090, 0xA2E0, 0xA530,
+ 0xA800, 0xAB10, 0xAD90, 0xB060, 0xB360, 0xB580, 0xB860, 0xBAA0, 0xBCA0, 0xBED0, 0xC180, 0xC400, 0xC6B0, 0xC790, 0xC7B0, 0xC7A0,
+ 0xC6F0, 0xC650, 0xC5F0, 0xC580, 0xC4E0, 0xC460, 0xC380, 0xC250, 0xC110, 0xBFB0, 0xBEE0, 0xBD80, 0xBC60, 0xBB30, 0xB950, 0xB7D0,
+ 0xB5C0, 0xB400, 0xB1F0, 0xAEF0, 0xAC60, 0xA970, 0xA6B0, 0xA350, 0x9FB0, 0x9BA0, 0x96A0, 0x9170, 0x8CB0, 0x8940, 0x8740, 0x8610,
+ 0x8580, 0x8540, 0x8510, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8480, 0x8470, 0x84A0, 0x8480, 0x8490, 0x8490, 0x84A0, 0x8490, 0x84D0, 0x84F0, 0x8530, 0x85C0, 0x88C0, 0x90F0, 0x9CB0,
+ 0xA680, 0xB010, 0xB7D0, 0xBF50, 0xC530, 0xCA50, 0xCED0, 0xD200, 0xD530, 0xD7D0, 0xDA20, 0xDC90, 0xDE00, 0xDFE0, 0xE1A0, 0xE2E0,
+ 0xE510, 0xE6A0, 0xE7E0, 0xEA80, 0xEC30, 0xEEE0, 0xF1E0, 0xF3B0, 0xF660, 0xF840, 0xFA70, 0xFC30, 0xFE20, 0x00B0, 0x0310, 0x0690,
+ 0x0920, 0x0B50, 0x0D10, 0x0DA0, 0x0DC0, 0x0E00, 0x0D50, 0x0CC0, 0x0B10, 0x08F0, 0x0670, 0x0370, 0x0140, 0xFF50, 0xFDA0, 0xFCE0,
+ 0xFBD0, 0xFBB0, 0xFAA0, 0xF9D0, 0xF850, 0xF7B0, 0xF760, 0xF690, 0xF5E0, 0xF580, 0xF550, 0xF5C0, 0xF650, 0xF720, 0xF900, 0xFB30,
+ 0xFDC0, 0x00E0, 0x04B0, 0x08B0, 0x0CF0, 0x11C0, 0x1650, 0x1AB0, 0x1FA0, 0x24D0, 0x2A80, 0x2F60, 0x3410, 0x3A00, 0x3F30, 0x44A0,
+ 0x4A50, 0x4ED0, 0x5470, 0x5900, 0x5D50, 0x61E0, 0x65E0, 0x6A60, 0x6E10, 0x71B0, 0x7530, 0x7810, 0x7AB0, 0x7C70, 0x7E40, 0x7ED0,
+ 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F20, 0x7F40, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F30, 0x7F20, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10,
+ 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EF0, 0x7E90, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7EC0,
+ 0x7F40, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F40, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F50,
+ 0x7F00, 0x7F20, 0x7ED0, 0x7F10, 0x7F60, 0x7EE0, 0x7EC0, 0x7F10, 0x7EF0, 0x7F70, 0x7EF0, 0x7EB0, 0x7EC0, 0x7E10, 0x7CB0, 0x7C20,
+ 0x7B40, 0x7B50, 0x7AF0, 0x7AA0, 0x7AD0, 0x7A00, 0x79C0, 0x79E0, 0x7910, 0x76B0, 0x75B0, 0x74E0, 0x7400, 0x7280, 0x7220, 0x70C0,
+ 0x70D0, 0x70B0, 0x7070, 0x7110, 0x7100, 0x7290, 0x73B0, 0x7520, 0x77C0, 0x7A40, 0x7D00, 0x7EA0, 0x7F10, 0x7F10, 0x7F10, 0x7F60,
+ 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7E40, 0x79D0, 0x7530, 0x6FE0, 0x6A10,
+ 0x6330, 0x5C00, 0x5310, 0x48D0, 0x3DD0, 0x31E0, 0x25C0, 0x18F0, 0x0A20, 0xFBD0, 0xED10, 0xE000, 0xD360, 0xC7B0, 0xBCC0, 0xB2B0,
+ 0xA8A0, 0x9F30, 0x9660, 0x8E90, 0x8980, 0x86D0, 0x85B0, 0x8530, 0x8500, 0x84F0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84C0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84C0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x8500, 0x8500, 0x8500, 0x8530, 0x8510,
+ 0x8510, 0x8520, 0x84F0, 0x8530, 0x8520, 0x8520, 0x84C0, 0x8500, 0x84F0, 0x8500, 0x84F0, 0x84E0, 0x84E0, 0x8490, 0x84F0, 0x84E0,
+ 0x84F0, 0x84D0, 0x84C0, 0x84C0, 0x84D0, 0x84B0, 0x8490, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x84A0, 0x8490, 0x8490, 0x8490, 0x84B0,
+ 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84C0, 0x84E0, 0x84B0, 0x84B0, 0x84F0, 0x84C0, 0x84D0, 0x84E0, 0x8510, 0x84E0,
+ 0x84F0, 0x84F0, 0x8510, 0x8520, 0x8530, 0x8550, 0x8560, 0x8570, 0x8580, 0x8590, 0x8590, 0x8580, 0x85A0, 0x8570, 0x8560, 0x8550,
+ 0x8550, 0x8530, 0x8530, 0x8520, 0x8510, 0x8510, 0x8500, 0x8500, 0x8500, 0x8500, 0x8500, 0x8500, 0x8500, 0x8500, 0x8510, 0x8530,
+ 0x8550, 0x85A0, 0x8640, 0x87B0, 0x8BD0, 0x94C0, 0x9FE0, 0xABE0, 0xB9E0, 0xC750, 0xD560, 0xE300, 0xF070, 0xFCD0, 0x08D0, 0x1400,
+ 0x1EE0, 0x2D30, 0x3940, 0x4620, 0x5270, 0x5E80, 0x69E0, 0x7410, 0x7CF0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F50, 0x7F30, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x76A0, 0x6B60, 0x5F90, 0x54E0, 0x4AC0, 0x4180, 0x39D0, 0x34D0, 0x3220,
+ 0x3180, 0x3200, 0x3230, 0x3140, 0x2E50, 0x29D0, 0x2520, 0x2070, 0x1CD0, 0x1990, 0x1640, 0x1320, 0x0F50, 0x0B00, 0x0630, 0x01F0,
+ 0xFC40, 0xF7D0, 0xF510, 0xF420, 0xF6B0, 0xFBF0, 0x01A0, 0x0680, 0x09D0, 0x0990, 0x0760, 0x0320, 0xFE00, 0xF920, 0xF5F0, 0xF3D0,
+ 0xF230, 0xF0D0, 0xEF70, 0xED90, 0xEBC0, 0xE9B0, 0xE810, 0xE660, 0xE600, 0xE700, 0xEA00, 0xED50, 0xEFF0, 0xEFC0, 0xEB60, 0xE230,
+ 0xD690, 0xC960, 0xBD40, 0xB230, 0xA9D0, 0xA460, 0x9FC0, 0x9D70, 0x9CD0, 0x9E30, 0xA000, 0xA2B0, 0xA640, 0xA910, 0xABF0, 0xAE80,
+ 0xB180, 0xB450, 0xB710, 0xB900, 0xBA50, 0xBAD0, 0xBB50, 0xBC60, 0xBD80, 0xBF70, 0xC2E0, 0xC6A0, 0xCA60, 0xCD20, 0xCF10, 0xCFA0,
+ 0xCE30, 0xCAF0, 0xC5B0, 0xBDB0, 0xB310, 0xA530, 0x9500, 0x8870, 0x8540, 0x84E0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8470,
+ 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8470, 0x8450, 0x8440, 0x8450, 0x8440, 0x8450, 0x8440, 0x8440, 0x83E0, 0x8440, 0x8440,
+ 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8440, 0x8430, 0x8460, 0x8440, 0x8440, 0x8440, 0x8460, 0x8440, 0x8440, 0x8430, 0x8440,
+ 0x8430, 0x8430, 0x83E0, 0x8430, 0x8430, 0x8430, 0x83E0, 0x8430, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8400, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8450, 0x8440, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8420, 0x8440, 0x8430, 0x8430, 0x83F0,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8440, 0x8430, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410,
+ 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8450, 0x8450, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84F0, 0x8560, 0x8970, 0x94E0, 0x9C40, 0x9E50, 0x9C20, 0x95B0,
+ 0x8D60, 0x87C0, 0x8590, 0x8500, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8490, 0x84A0, 0x84A0, 0x84C0, 0x84F0, 0x8590, 0x8910, 0x9D10, 0xB280, 0xC670, 0xD860, 0xE820, 0xF510, 0x00E0, 0x0980,
+ 0x10C0, 0x1650, 0x1A60, 0x1D20, 0x2010, 0x2230, 0x2360, 0x2480, 0x24F0, 0x2520, 0x25A0, 0x2570, 0x2630, 0x2620, 0x2760, 0x2830,
+ 0x28E0, 0x2A40, 0x2B50, 0x2C90, 0x2E30, 0x3040, 0x3390, 0x3780, 0x3BF0, 0x4140, 0x4630, 0x4B80, 0x5060, 0x5510, 0x62C0, 0x6600,
+ 0x6880, 0x6A20, 0x6CC0, 0x6EC0, 0x7110, 0x7360, 0x75F0, 0x7910, 0x7B20, 0x7CA0, 0x7D80, 0x7E30, 0x7E70, 0x7EC0, 0x7F50, 0x7F10,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7F70, 0x7F20, 0x7ED0, 0x7ED0, 0x7EB0, 0x7F20, 0x7F10, 0x7EB0, 0x7EC0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7F10, 0x7E90, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10,
+ 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7F20, 0x7F50, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F30, 0x7EE0,
+ 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F70, 0x7EE0, 0x7E70, 0x7EF0, 0x7F10, 0x7F30, 0x7F00, 0x7EB0,
+ 0x7F00, 0x7F20, 0x7F40, 0x7EF0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EE0, 0x7EC0, 0x7F10, 0x7F00, 0x7F20, 0x7F40, 0x7F00, 0x7F30,
+ 0x7EE0, 0x7F10, 0x7F20, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7F00, 0x7F40, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0,
+ 0x7EF0, 0x7F00, 0x7F00, 0x7F90, 0x7F10, 0x7F00, 0x7EF0, 0x7ED0, 0x7F30, 0x7F00, 0x7EA0, 0x7ED0, 0x7EE0, 0x6FC0, 0x5AB0, 0x4400,
+ 0x2E20, 0x1860, 0x03F0, 0xF230, 0xE1E0, 0xD330, 0xC790, 0xBDF0, 0xB780, 0xB330, 0xB1C0, 0xB440, 0xB9A0, 0xC1B0, 0xCD40, 0xDA90,
+ 0xE940, 0xF850, 0x07A0, 0x1580, 0x2110, 0x2AB0, 0x3220, 0x3850, 0x4610, 0x4920, 0x4BA0, 0x4D90, 0x5020, 0x5180, 0x5340, 0x53B0,
+ 0x5460, 0x55C0, 0x56C0, 0x5890, 0x5B40, 0x5D40, 0x6010, 0x6230, 0x6440, 0x66A0, 0x6880, 0x6AB0, 0x6CE0, 0x6E70, 0x7010, 0x70B0,
+ 0x7120, 0x70E0, 0x7060, 0x6F80, 0x6DC0, 0x6C30, 0x6A70, 0x68F0, 0x6800, 0x65F0, 0x64A0, 0x61D0, 0x5E90, 0x5B00, 0x55E0, 0x5160,
+ 0x4BD0, 0x45B0, 0x4030, 0x3A10, 0x33A0, 0x2D20, 0x2740, 0x2240, 0x1CA0, 0x1720, 0x1250, 0x0D10, 0x0890, 0x0340, 0xFF10, 0xFB90,
+ 0xF7E0, 0xF550, 0xF290, 0xF090, 0xEE40, 0xEBA0, 0xE9B0, 0xE800, 0xE650, 0xE580, 0xE460, 0xE4C0, 0xE550, 0xE680, 0xE790, 0xE8E0,
+ 0xEA00, 0xEB30, 0xEC40, 0xED20, 0xEF50, 0xF290, 0xF5A0, 0xF850, 0xFBA0, 0xFD60, 0xFF10, 0x00B0, 0x01E0, 0x0420, 0x0660, 0x08C0,
+ 0x0AF0, 0x0CF0, 0x0E70, 0x0F10, 0x1070, 0x1240, 0x1480, 0x1730, 0x1980, 0x1BE0, 0x1DB0, 0x1EA0, 0x2020, 0x2190, 0x2370, 0x2460,
+ 0x2540, 0x2670, 0x26C0, 0x27C0, 0x2750, 0x25B0, 0x2440, 0x2250, 0x2070, 0x1EB0, 0x1CC0, 0x1BA0, 0x1930, 0x1760, 0x1650, 0x15C0,
+ 0x1770, 0x1A60, 0x1ED0, 0x2770, 0x3010, 0x39D0, 0x4520, 0x50E0, 0x5C40, 0x66D0, 0x6FB0, 0x7620, 0x7AE0, 0x7DC0, 0x7ED0, 0x7F00,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F50, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F60, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7E60, 0x7A30, 0x7670, 0x7340, 0x7040, 0x6CB0, 0x6820, 0x6240, 0x5AB0, 0x5290, 0x4AD0, 0x45F0, 0x42F0, 0x4220, 0x4300, 0x44F0,
+ 0x47B0, 0x4B00, 0x4EA0, 0x5330, 0x5740, 0x5C40, 0x6120, 0x6590, 0x6AB0, 0x6F40, 0x7360, 0x76D0, 0x7960, 0x7A40, 0x7970, 0x7710,
+ 0x7360, 0x6F40, 0x6A30, 0x64F0, 0x5F60, 0x5880, 0x5230, 0x4B90, 0x44C0, 0x3E00, 0x36B0, 0x3010, 0x29E0, 0x2540, 0x2100, 0x1EC0,
+ 0x1D90, 0x1D80, 0x1DB0, 0x1EC0, 0x20A0, 0x2350, 0x2650, 0x28C0, 0x29D0, 0x2890, 0x24D0, 0x1FE0, 0x1990, 0x12D0, 0x0BB0, 0x0320,
+ 0xF950, 0xED30, 0xE060, 0xD230, 0xC330, 0xB520, 0xA720, 0x9A50, 0x8FD0, 0x8920, 0x86A0, 0x85B0, 0x8540, 0x8500, 0x84E0, 0x84D0,
+ 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0,
+ 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84F0, 0x8510, 0x8550, 0x85D0, 0x8700, 0x89C0, 0x8F90, 0x96F0, 0x9EA0, 0xA5A0, 0xACD0,
+ 0xB490, 0xBB20, 0xC110, 0xC620, 0xC980, 0xCDC0, 0xD110, 0xD4C0, 0xD880, 0xDAB0, 0xDD80, 0xDF30, 0xE0F0, 0xE240, 0xE350, 0xE640,
+ 0xE8C0, 0xEB40, 0xEF20, 0xF2C0, 0xF790, 0xFC90, 0x02D0, 0x0900, 0x0FD0, 0x16D0, 0x1D40, 0x23C0, 0x2AD0, 0x3130, 0x3820, 0x3DC0,
+ 0x4370, 0x4960, 0x4DF0, 0x53B0, 0x58B0, 0x5D60, 0x6190, 0x64F0, 0x67B0, 0x6960, 0x69F0, 0x6A00, 0x67E0, 0x6590, 0x6130, 0x5B30,
+ 0x5470, 0x4C00, 0x43D0, 0x3B00, 0x30B0, 0x2750, 0x1E60, 0x15C0, 0x0EE0, 0x0890, 0x0460, 0x0100, 0xFDD0, 0xFC20, 0xFB20, 0xFA70,
+ 0xFAA0, 0xFA60, 0xFA60, 0xF9E0, 0xF9B0, 0xF900, 0xF850, 0xF880, 0xF880, 0xF9A0, 0xF9B0, 0xF990, 0xFAB0, 0xFBA0, 0xFDD0, 0x0020,
+ 0x0300, 0x0680, 0x0950, 0x0D30, 0x11A0, 0x16D0, 0x1C50, 0x2270, 0x2940, 0x2F80, 0x35E0, 0x3C80, 0x4340, 0x4A30, 0x5190, 0x5760,
+ 0x5D80, 0x61B0, 0x65A0, 0x6890, 0x6AC0, 0x6D00, 0x6E00, 0x6E50, 0x6E90, 0x6DC0, 0x6D80, 0x6C90, 0x6C00, 0x6A70, 0x6890, 0x67B0,
+ 0x6620, 0x6500, 0x64D0, 0x64C0, 0x6720, 0x68F0, 0x6C50, 0x7070, 0x75C0, 0x7C40, 0x7EF0, 0x7F60, 0x7EF0, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F80, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F10, 0x7F70, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F20, 0x7F60, 0x7EE0, 0x7E90, 0x7F00, 0x7F10, 0x7F30,
+ 0x7EF0, 0x7F60, 0x7F00, 0x7F10, 0x7F00, 0x7EE0, 0x7F70, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F70, 0x7F00, 0x7EC0, 0x7F10, 0x7F10,
+ 0x7F20, 0x7EE0, 0x7E90, 0x7EE0, 0x7EF0, 0x7F30, 0x7AE0, 0x6E40, 0x61D0, 0x5490, 0x46B0, 0x3A70, 0x2D30, 0x22A0, 0x1960, 0x10C0,
+ 0x0990, 0x0420, 0x0060, 0xFE40, 0xFC80, 0xFBA0, 0xFBA0, 0xFC80, 0xFD50, 0xFD70, 0xFD50, 0xFB70, 0xF870, 0xF440, 0xEE60, 0xE920,
+ 0xE320, 0xDDE0, 0xD9F0, 0xD7B0, 0xD6E0, 0xD7C0, 0xD910, 0xDA60, 0xDB40, 0xDB60, 0xDB30, 0xDBC0, 0xDBE0, 0xDC50, 0xDDD0, 0xE060,
+ 0xE2B0, 0xE600, 0xE910, 0xED40, 0xF110, 0xF560, 0xFA00, 0xFE10, 0x02D0, 0x0640, 0x08D0, 0x0BF0, 0x0E00, 0x0FA0, 0x10C0, 0x1050,
+ 0x1060, 0x0FC0, 0x0EA0, 0x0CA0, 0x0A00, 0x0790, 0x05F0, 0x02E0, 0x0060, 0xFD30, 0xFA50, 0xF6A0, 0xF2B0, 0xEF30, 0xEC20, 0xE940,
+ 0xE610, 0xE3F0, 0xE260, 0xE0E0, 0xDFB0, 0xDEA0, 0xDD90, 0xDC70, 0xDB10, 0xD940, 0xD5E0, 0xD270, 0xD000, 0xCE20, 0xCD50, 0xCF10,
+ 0xD1A0, 0xD500, 0xD8C0, 0xDCE0, 0xDF40, 0xE210, 0xE590, 0xE920, 0xEDF0, 0xF3D0, 0xFA30, 0x0170, 0x0840, 0x0EF0, 0x14F0, 0x19A0,
+ 0x1D10, 0x2000, 0x21F0, 0x2500, 0x2850, 0x2CF0, 0x3260, 0x3870, 0x3FF0, 0x4670, 0x4D90, 0x5490, 0x5A60, 0x5FC0, 0x6460, 0x6990,
+ 0x6E70, 0x73A0, 0x7790, 0x7B10, 0x7DA0, 0x7EC0, 0x7F50, 0x7F20, 0x7EE0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7E90, 0x7D90, 0x7C60,
+ 0x7BF0, 0x7C90, 0x7D80, 0x7EC0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7F10, 0x7F00, 0x7EF0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7B30,
+ 0x7790, 0x7400, 0x70E0, 0x6E10, 0x6BB0, 0x6A00, 0x6900, 0x6830, 0x6770, 0x66C0, 0x6710, 0x67A0, 0x6920, 0x6A50, 0x6BA0, 0x6D40,
+ 0x6EF0, 0x70B0, 0x71B0, 0x7260, 0x72D0, 0x7250, 0x7130, 0x6F90, 0x6CF0, 0x6A90, 0x67E0, 0x6480, 0x6150, 0x5D70, 0x59A0, 0x54C0,
+ 0x4EF0, 0x4B60, 0x4790, 0x45B0, 0x4500, 0x45F0, 0x4990, 0x5000, 0x5770, 0x5F90, 0x6530, 0x6930, 0x6AC0, 0x6BC0, 0x6B50, 0x6A60,
+ 0x6A00, 0x6980, 0x68A0, 0x67A0, 0x6450, 0x6050, 0x59A0, 0x2DA0, 0x1E80, 0x1000, 0x0360, 0xF590, 0xE990, 0xDE30, 0xD2D0, 0xC700,
+ 0xBA10, 0xACE0, 0x9F90, 0x9420, 0x8C30, 0x8860, 0x86F0, 0x8610, 0x85D0, 0x85B0, 0x8590, 0x8590, 0x8560, 0x8540, 0x8540, 0x8530,
+ 0x8530, 0x8530, 0x8530, 0x8540, 0x8540, 0x8550, 0x8560, 0x8560, 0x8570, 0x8570, 0x8570, 0x8560, 0x8550, 0x8540, 0x8530, 0x8520,
+ 0x8510, 0x8500, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84B0, 0x84D0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0,
+ 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x84F0, 0x8500, 0x8520, 0x8530, 0x8560, 0x8590, 0x85E0, 0x8640, 0x86F0, 0x87D0, 0x88E0,
+ 0x8A60, 0x8C20, 0x8E50, 0x9050, 0x9240, 0x93D0, 0x9520, 0x9660, 0x97B0, 0x98C0, 0x9940, 0x9930, 0x9930, 0x9890, 0x9880, 0x97D0,
+ 0x97A0, 0x9780, 0x9760, 0x96B0, 0x9560, 0x94E0, 0x9460, 0x93D0, 0x93E0, 0x93B0, 0x93E0, 0x93B0, 0x9410, 0x94A0, 0x95B0, 0x96C0,
+ 0x98B0, 0x99E0, 0x9BA0, 0x9D70, 0x9FC0, 0xA250, 0xA5B0, 0xA8A0, 0xAB80, 0xAE00, 0xB150, 0xB520, 0xB970, 0xBDC0, 0xC110, 0xC440,
+ 0xC690, 0xC890, 0xCA30, 0xCD20, 0xCFA0, 0xD2F0, 0xD600, 0xD940, 0xDC30, 0xDE60, 0xE0E0, 0xE310, 0xE530, 0xE7E0, 0xEA60, 0xEC80,
+ 0xEDD0, 0xEE60, 0xEE70, 0xEDD0, 0xEC70, 0xEA70, 0xE7B0, 0xE430, 0xE010, 0xDB80, 0xD5D0, 0xD0C0, 0xCBB0, 0xC760, 0xC380, 0xBE70,
+ 0xB8D0, 0xB350, 0xAD40, 0xA6A0, 0xA0F0, 0x9BD0, 0x9690, 0x9200, 0x8DB0, 0x8AA0, 0x88A0, 0x8750, 0x8680, 0x8600, 0x85B0, 0x8580,
+ 0x8560, 0x8540, 0x8530, 0x8530, 0x8530, 0x8520, 0x8520, 0x8530, 0x8530, 0x8530, 0x8530, 0x8540, 0x8550, 0x8550, 0x8570, 0x8590,
+ 0x85C0, 0x85E0, 0x8620, 0x8660, 0x86B0, 0x8710, 0x87C0, 0x8880, 0x89E0, 0x8B80, 0x8D30, 0x8F80, 0x9210, 0x9590, 0x98F0, 0x9CC0,
+ 0xA100, 0xA4C0, 0xA990, 0xAE50, 0xB3F0, 0xBA50, 0xC0B0, 0xC790, 0xCE00, 0xD500, 0xDB40, 0xE130, 0xE770, 0xECD0, 0xF1E0, 0xF6F0,
+ 0xFAF0, 0xFF30, 0x0340, 0x06B0, 0x0A10, 0x0C80, 0x0F90, 0x1190, 0x1370, 0x1660, 0x1980, 0x1DF0, 0x22E0, 0x26B0, 0x2A80, 0x2DA0,
+ 0x3180, 0x34C0, 0x36D0, 0x38E0, 0x3940, 0x38D0, 0x3760, 0x3520, 0x31F0, 0x2E00, 0x2A40, 0x25E0, 0x2010, 0x1B00, 0x1560, 0x0FD0,
+ 0x0A50, 0x0530, 0x0040, 0xFA40, 0xF410, 0xEDD0, 0xE680, 0xE070, 0xD980, 0xD220, 0xCAB0, 0xC2B0, 0xBB80, 0xB3A0, 0xACA0, 0xA670,
+ 0xA110, 0x9C70, 0x9800, 0x9460, 0x9120, 0x8ED0, 0x8D50, 0x8CE0, 0x8D10, 0x8DB0, 0x8E70, 0x9050, 0x9240, 0x94E0, 0x9800, 0x9B00,
+ 0x9DD0, 0xA120, 0xA430, 0xA850, 0xABD0, 0xB040, 0xB3D0, 0xB6F0, 0xBA70, 0xBD80, 0xC080, 0xC420, 0xC780, 0xCB60, 0xCE90, 0xD1A0,
+ 0xD4A0, 0xD710, 0xDA60, 0xDD60, 0xDFF0, 0xE1B0, 0xE2A0, 0xE380, 0xE3A0, 0xE3D0, 0xE4B0, 0xE4E0, 0xE580, 0xE550, 0xE570, 0xE530,
+ 0xE530, 0xE580, 0xE580, 0xE4C0, 0xE410, 0xE2C0, 0xE1B0, 0xE170, 0xE090, 0xDFF0, 0xDDB0, 0xDBE0, 0xDA00, 0xD7E0, 0xD680, 0xD550,
+ 0xD480, 0xD350, 0xD180, 0xCF50, 0xCC60, 0xCA90, 0xC880, 0xC720, 0xC5F0, 0xC510, 0xC4D0, 0xC520, 0xC770, 0xCC60, 0xD320, 0xDE40,
+ 0xEC70, 0xFC30, 0x5030, 0x6230, 0x72F0, 0x7D70, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7E90,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F50, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F60,
+ 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F10, 0x7F60, 0x7EE0, 0x7ED0, 0x7F10, 0x7F20, 0x7F60, 0x7ED0,
+ 0x7E90, 0x7F00, 0x7F10, 0x7F30, 0x7EB0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7EC0, 0x7F30, 0x7EB0, 0x7B80, 0x78C0, 0x7590, 0x7290, 0x7040, 0x6C30, 0x69B0, 0x66C0, 0x63F0,
+ 0x6180, 0x5E40, 0x5BA0, 0x5710, 0x51D0, 0x4BC0, 0x4550, 0x3FF0, 0x3A30, 0x34F0, 0x30F0, 0x2CA0, 0x29A0, 0x2760, 0x2550, 0x2410,
+ 0x22E0, 0x2180, 0x2030, 0x1E70, 0x1DC0, 0x1D10, 0x1D80, 0x1E60, 0x1F50, 0x20E0, 0x2180, 0x2380, 0x2550, 0x26B0, 0x28B0, 0x2A00,
+ 0x2A80, 0x2AB0, 0x2A20, 0x2A10, 0x2A40, 0x2A80, 0x29F0, 0x2810, 0x2610, 0x2200, 0x1E50, 0x1AB0, 0x1660, 0x1250, 0x0D80, 0x07F0,
+ 0x0270, 0xFD40, 0xF920, 0xF520, 0xF0F0, 0xEC90, 0xE750, 0xE1C0, 0xDBC0, 0xD590, 0xCF80, 0xC7F0, 0xBFE0, 0xB6A0, 0xACF0, 0xA240,
+ 0x9690, 0x8C50, 0x8730, 0x8570, 0x8500, 0x8490, 0x84C0, 0x84B0, 0x84A0, 0x8430, 0x8490, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84B0,
+ 0x84A0, 0x84A0, 0x84B0, 0x84A0, 0x84C0, 0x84D0, 0x84E0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8550, 0x8590, 0x85E0, 0x8650, 0x86F0,
+ 0x8790, 0x8850, 0x8930, 0x8A30, 0x8BA0, 0x8D10, 0x8EC0, 0x90E0, 0x92F0, 0x9560, 0x9810, 0x9BC0, 0x9ED0, 0xA1F0, 0xA520, 0xA850,
+ 0xAB50, 0xADB0, 0xB030, 0xB290, 0xB420, 0xB5A0, 0xB650, 0xB690, 0xB670, 0xB640, 0xB5A0, 0xB4E0, 0xB340, 0xB110, 0xAEC0, 0xAC60,
+ 0xAA80, 0xA810, 0xA610, 0xA330, 0xA070, 0x9CD0, 0x98B0, 0x9580, 0x9280, 0x8F80, 0x8CE0, 0x8B30, 0x8A20, 0x8930, 0x8850, 0x87A0,
+ 0x8710, 0x86B0, 0x8670, 0x8650, 0x8630, 0x8630, 0x8640, 0x8650, 0x8660, 0x86B0, 0x8700, 0x8760, 0x87A0, 0x8810, 0x88C0, 0x8930,
+ 0x8A40, 0x8B30, 0x8C00, 0x8D10, 0x8E60, 0x8FC0, 0x9190, 0x9330, 0x9500, 0x9650, 0x9820, 0x9990, 0x9B20, 0x9CF0, 0x9F50, 0xA120,
+ 0xA330, 0xA500, 0xA680, 0xA890, 0xA9D0, 0xABB0, 0xAD00, 0xADF0, 0xAE20, 0xAE30, 0xAE70, 0xAE50, 0xAE90, 0xAE10, 0xADE0, 0xAD60,
+ 0xAD00, 0xACD0, 0xAD10, 0xAD60, 0xAD70, 0xADC0, 0xAE70, 0xAF00, 0xB040, 0xB1A0, 0xB370, 0xB5D0, 0xB880, 0xBAE0, 0xBEA0, 0xC2A0,
+ 0xC7C0, 0xCDD0, 0xD440, 0xDBE0, 0xE3F0, 0xEB40, 0x06E0, 0x0DF0, 0x1410, 0x1A60, 0x2130, 0x2790, 0x2EE0, 0x36F0, 0x3ED0, 0x46C0,
+ 0x4F10, 0x5750, 0x5EE0, 0x6720, 0x6F50, 0x7670, 0x7C90, 0x7F10, 0x7F30, 0x7F40, 0x7F40, 0x7F50, 0x7F30, 0x7F40, 0x7F40, 0x7F30,
+ 0x7F40, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F30, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7CA0, 0x7360, 0x6AB0, 0x6230, 0x5A30, 0x5260, 0x4B90, 0x44F0, 0x3D60, 0x36C0, 0x3070, 0x2B20, 0x2740, 0x24C0,
+ 0x22F0, 0x21F0, 0x2140, 0x2180, 0x2190, 0x2280, 0x2340, 0x23F0, 0x2490, 0x25C0, 0x2750, 0x2910, 0x2B20, 0x2D40, 0x2F30, 0x3170,
+ 0x3360, 0x3560, 0x3680, 0x37D0, 0x38C0, 0x3970, 0x39E0, 0x39F0, 0x3A80, 0x3AF0, 0x3B90, 0x3BE0, 0x3C40, 0x3C80, 0x3C00, 0x3A40,
+ 0x3800, 0x3480, 0x2FF0, 0x2980, 0x2090, 0x1640, 0x0A10, 0xFBF0, 0xEE70, 0xE0D0, 0xD420, 0xC7F0, 0xBD10, 0xB270, 0xA830, 0x9F60,
+ 0x9630, 0x8F30, 0x8A90, 0x8800, 0x86A0, 0x85F0, 0x8590, 0x8550, 0x8530, 0x8510, 0x8500, 0x8500, 0x8500, 0x8500, 0x8500, 0x8500,
+ 0x8510, 0x8510, 0x8530, 0x8510, 0x8510, 0x8510, 0x8530, 0x8530, 0x8540, 0x8570, 0x85C0, 0x8660, 0x8750, 0x88E0, 0x8BF0, 0x9040,
+ 0x9560, 0x9A40, 0x9F30, 0xA4B0, 0xAAA0, 0xB010, 0xB4D0, 0xB920, 0xBCF0, 0xC070, 0xC3A0, 0xC700, 0xC970, 0xCCE0, 0xCE70, 0xCF70,
+ 0xCEB0, 0xCD00, 0xCB80, 0xC9E0, 0xC870, 0xC700, 0xC520, 0xC3B0, 0xC190, 0xBF60, 0xBCE0, 0xBA40, 0xB780, 0xB480, 0xB1C0, 0xAF20,
+ 0xAD70, 0xAC90, 0xABF0, 0xAD00, 0xAEA0, 0xB100, 0xB520, 0xBA30, 0xC030, 0xC5B0, 0xCB60, 0xD1E0, 0xD7C0, 0xDDD0, 0xE490, 0xEAA0,
+ 0xF110, 0xF780, 0xFD00, 0x0140, 0x0460, 0x0720, 0x0860, 0x0880, 0x0870, 0x0730, 0x06A0, 0x06B0, 0x0830, 0x0BE0, 0x1040, 0x1480,
+ 0x1750, 0x1720, 0x1480, 0x0EF0, 0x0820, 0x0220, 0xFDF0, 0xFC00, 0xFD30, 0x00C0, 0x0480, 0x07B0, 0x0950, 0x07D0, 0x03A0, 0xFD00,
+ 0xF490, 0xEB90, 0xE1F0, 0xD860, 0xCF90, 0xC720, 0xC0E0, 0xBCF0, 0xBAD0, 0xB990, 0xB7F0, 0xB7B0, 0xB790, 0xB780, 0xB8D0, 0xBB40,
+ 0xBF70, 0xC4A0, 0xC9D0, 0xCF10, 0xD330, 0xD720, 0xD940, 0xDB70, 0xDDE0, 0xE0D0, 0xE530, 0xEB60, 0xF2B0, 0xFB20, 0x0390, 0x0C30,
+ 0x14C0, 0x1B90, 0x2130, 0x2580, 0x2940, 0x2B10, 0x2BB0, 0x2B70, 0x2970, 0x25B0, 0x1FF0, 0x17F0, 0x0DD0, 0x01D0, 0xF6E0, 0xED10,
+ 0xE6D0, 0xE510, 0xE810, 0xEEF0, 0xF830, 0x0170, 0x0AC0, 0x1150, 0x1750, 0x1B00, 0x1D50, 0x1FF0, 0x2140, 0x2220, 0x23D0, 0x2530,
+ 0x2730, 0x2940, 0x2B50, 0x2D20, 0x2E80, 0x3080, 0x31C0, 0x32E0, 0x33D0, 0x3430, 0x3530, 0x3520, 0x35A0, 0x3610, 0x3640, 0x38B0,
+ 0x3B10, 0x3DD0, 0x4100, 0x4390, 0x4510, 0x4430, 0x4080, 0x3B10, 0x3370, 0x2DE0, 0x28D0, 0x25F0, 0x2530, 0x2570, 0x2690, 0x26B0,
+ 0x2560, 0x21D0, 0x1D70, 0x1750, 0x0F80, 0x0540, 0xFA90, 0xEE60, 0xE210, 0xD650, 0xCB00, 0xC020, 0xB600, 0xAC10, 0xA180, 0x9790,
+ 0x8FB0, 0x8A20, 0x8780, 0x8670, 0x85B0, 0x8580, 0x8560, 0x8540, 0x8530, 0x8520, 0x8510, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x84E0,
+ 0x84E0, 0x84F0, 0x84D0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x84F0, 0x8500, 0x8500, 0x8500, 0x8510, 0x8510, 0x8510, 0x8500, 0x8500,
+ 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84D0,
+ 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84F0, 0x84E0, 0x84E0,
+ 0x84F0, 0x8500, 0x8530, 0x8550, 0x85B0, 0x86A0, 0x8840, 0x8C20, 0x92A0, 0x9A90, 0xA1E0, 0xA8F0, 0xB020, 0xB610, 0xBB90, 0xC160,
+ 0xC6C0, 0xCAF0, 0xCF20, 0xD320, 0xD6C0, 0xDA30, 0xDCE0, 0xDF00, 0xDF90, 0xDF80, 0xDDC0, 0xDAF0, 0xD630, 0xCF80, 0xC6C0, 0xBBA0,
+ 0xAD80, 0x9D40, 0x8E50, 0x8700, 0x8530, 0x84E0, 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8460, 0x8470, 0x8470, 0x84B0, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84D0, 0x84F0, 0x8550,
+ 0x8670, 0x8A60, 0x9470, 0x9E10, 0xA6B0, 0xADF0, 0xB2F0, 0xB750, 0xBB10, 0xBDE0, 0xBF80, 0xC210, 0xC560, 0xC920, 0xD030, 0xD720,
+ 0xDEC0, 0xE7C0, 0xF100, 0xFB00, 0x05C0, 0x1000, 0x1B50, 0x27C0, 0x33D0, 0x4030, 0x4D20, 0x5AE0, 0x6750, 0x7320, 0x7BC0, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F50, 0x7EF0, 0x7390, 0x6670, 0x5860, 0x4B60, 0x3FD0, 0x3610, 0x2FD0,
+ 0x2C00, 0x2A40, 0x2B00, 0x2DA0, 0x3210, 0x3710, 0x3DB0, 0x46C0, 0x51C0, 0x5F50, 0x6E00, 0x7C50, 0x7ED0, 0x7EA0, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7EC0, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F20, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F20,
+ 0x7F40, 0x7F10, 0x7F90, 0x7F00, 0x7F20, 0x7EF0, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F80, 0x7F10, 0x7EB0, 0x7F10,
+ 0x7EF0, 0x7F70, 0x7F20, 0x7ED0, 0x7ED0, 0x7EE0, 0x7F30, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7E70, 0x7ED0, 0x7F10,
+ 0x7F20, 0x7EF0, 0x7E90, 0x7F00, 0x7F20, 0x7F10, 0x7E90, 0x6200, 0x4A60, 0x3740, 0x2710, 0x1C70, 0x1200, 0x08C0, 0x0080, 0xF900,
+ 0xF4E0, 0xF200, 0xF0F0, 0xF0A0, 0xEFF0, 0xEE60, 0xEA80, 0xE490, 0xDCF0, 0xD2C0, 0xC660, 0xB780, 0xA4A0, 0x9160, 0x86D0, 0x8510,
+ 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84E0, 0x8510, 0x85C0, 0x8840, 0x91A0, 0x9DA0, 0xA7F0, 0xB220, 0xBB50,
+ 0xC520, 0xCF70, 0xDB20, 0xE6F0, 0xF420, 0x00D0, 0x0DF0, 0x1B80, 0x27A0, 0x3390, 0x3FD0, 0x4B60, 0x5770, 0x63E0, 0x7010, 0x7A50,
+ 0x7F00, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7910, 0x6DF0, 0x61B0, 0x5740, 0x4BB0, 0x4140, 0x36C0, 0x2C10, 0x2100, 0x15B0, 0x09A0,
+ 0xFD70, 0xF160, 0xE440, 0xD920, 0xCE50, 0xC350, 0xB880, 0xACE0, 0xA170, 0x9680, 0x8D80, 0x87F0, 0x8600, 0x8550, 0x8510, 0x8530,
+ 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0,
+ 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x8500, 0x8500, 0x8510, 0x8520, 0x8540, 0x8560, 0x85A0, 0x8600, 0x8680, 0x8760, 0x8890, 0x8AA0,
+ 0x8D70, 0x9180, 0x9600, 0x9A90, 0x9F10, 0xAC50, 0xAF40, 0xB290, 0xB5C0, 0xB840, 0xBA80, 0xBC30, 0xBDA0, 0xBE40, 0xBEA0, 0xBE70,
+ 0xBDD0, 0xBCF0, 0xBAD0, 0xB9A0, 0xB7D0, 0xB620, 0xB570, 0xB4F0, 0xB5E0, 0xB6B0, 0xB790, 0xB870, 0xB9B0, 0xBA20, 0xBA10, 0xB980,
+ 0xB990, 0xB950, 0xB8F0, 0xB8D0, 0xB820, 0xB790, 0xB620, 0xB4C0, 0xB2E0, 0xB190, 0xAFF0, 0xAE80, 0xACA0, 0xAB50, 0xAB20, 0xAAF0,
+ 0xAAD0, 0xAAE0, 0xAAF0, 0xAAE0, 0xAAA0, 0xAB30, 0xABA0, 0xAC90, 0xADB0, 0xAEA0, 0xAF60, 0xB050, 0xB120, 0xB200, 0xB370, 0xB4F0,
+ 0xB620, 0xB620, 0xB650, 0xB650, 0xB650, 0xB5F0, 0xB4F0, 0xB440, 0xB2A0, 0xB140, 0xAFC0, 0xAE40, 0xAD80, 0xACD0, 0xABB0, 0xAA10,
+ 0xA8C0, 0xA600, 0xA3E0, 0xA1F0, 0xA010, 0x9DC0, 0x9B10, 0x9760, 0x93C0, 0x9030, 0x8C90, 0x8A00, 0x8800, 0x86B0, 0x85D0, 0x8560,
+ 0x8520, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84E0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480,
+ 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8490, 0x8490, 0x84A0, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84B0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84B0, 0x84B0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x8480, 0x84C0,
+ 0x84C0, 0x84C0, 0x8490, 0x84D0, 0x84E0, 0x84E0, 0x8510, 0x84F0, 0x8500, 0x8540, 0x8530, 0x8560, 0x85A0, 0x8620, 0x86F0, 0x8800,
+ 0x8990, 0x8BD0, 0x8ED0, 0x91C0, 0x9390, 0x9550, 0x9610, 0x9490, 0x91B0, 0x8D30, 0x8970, 0x86E0, 0x85A0, 0x8530, 0x8500, 0x84D0,
+ 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8520, 0x85C0, 0x87E0, 0x9030,
+ 0x9D90, 0xAC30, 0xB8B0, 0xC410, 0xCF70, 0xD8B0, 0xE0A0, 0xE780, 0xEED0, 0xF5D0, 0xFC80, 0x0310, 0x09D0, 0x1010, 0x16C0, 0x1D00,
+ 0x2350, 0x2A40, 0x3160, 0x3B10, 0x4440, 0x4F00, 0x5A70, 0x6600, 0x72B0, 0x7C70, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F60,
+ 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F60, 0x7ED0,
+ 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F40, 0x74F0, 0x71A0, 0x7340, 0x7910, 0x7EB0, 0x7E90, 0x7F10, 0x7EF0, 0x7EF0,
+ 0x7F10, 0x7EA0, 0x6000, 0x3B80, 0x1650, 0xF320, 0xD640, 0xBBD0, 0xA370, 0x8D10, 0x8590, 0x84E0, 0x84A0, 0x8490, 0x8470, 0x8460,
+ 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8450, 0x8450, 0x8470, 0x8480, 0x84A0,
+ 0x84D0, 0x8510, 0x85A0, 0x8760, 0x8D50, 0x9A80, 0xAA50, 0xBC20, 0xCF10, 0xE290, 0xF390, 0x03B0, 0x11A0, 0x1E20, 0x2A00, 0x3480,
+ 0x3F70, 0x4980, 0x5410, 0x5D00, 0x6440, 0x6B70, 0x7040, 0x7480, 0x7760, 0x7890, 0x7990, 0x7840, 0x75C0, 0x71D0, 0x6B60, 0x6460,
+ 0x5C50, 0x53B0, 0x49F0, 0x4060, 0x3690, 0x2E70, 0x26A0, 0x1FE0, 0x1A10, 0x1570, 0x11A0, 0x0D40, 0x0910, 0x0300, 0xFCC0, 0xF5B0,
+ 0xEE30, 0xE660, 0xDD60, 0xD580, 0xCD80, 0xC660, 0xBFA0, 0xB9E0, 0xB4C0, 0xAFB0, 0xAA70, 0xA6A0, 0xA400, 0xA390, 0xA4C0, 0xA940,
+ 0xAF90, 0xB760, 0xBE80, 0xC490, 0xC8F0, 0xCC10, 0xCD40, 0xCCF0, 0xCBB0, 0xCA20, 0xC8D0, 0xC7B0, 0xC7A0, 0xC6A0, 0xC3D0, 0xBE90,
+ 0xB7B0, 0xAED0, 0xA680, 0x9FB0, 0x9A60, 0x9680, 0x9270, 0x8FD0, 0x8D80, 0x8C00, 0x8B30, 0x8B00, 0x8B60, 0x8CB0, 0x8F80, 0x9520,
+ 0x9E00, 0xA9C0, 0xB6B0, 0xC680, 0xD3F0, 0xE0B0, 0xEC20, 0xF6A0, 0x00D0, 0x0A30, 0x11B0, 0x17C0, 0x1930, 0x17E0, 0x1380, 0x0CB0,
+ 0x05A0, 0xFF40, 0xF9C0, 0xF5B0, 0xF290, 0xF260, 0xF380, 0xF5D0, 0xF900, 0xFC80, 0x00D0, 0x0580, 0x0AC0, 0x1140, 0x1900, 0x2100,
+ 0x2840, 0x2ED0, 0x3570, 0x3AC0, 0x4080, 0x4610, 0x4BB0, 0x51C0, 0x5650, 0x5AF0, 0x5FA0, 0x63F0, 0x6810, 0x6C30, 0x7100, 0x74E0,
+ 0x78B0, 0x7B70, 0x7DC0, 0x7EF0, 0x7F10, 0x7F60, 0x7EE0, 0x7E90, 0x7F00, 0x7F10, 0x7F30, 0x7EB0, 0x7E70, 0x7EF0, 0x7F10, 0x7F30,
+ 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F30, 0x7F10, 0x7EB0, 0x7F20, 0x7EF0, 0x7F10, 0x7F30, 0x7EC0, 0x7F30, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F10, 0x7F70, 0x7EE0, 0x7F10, 0x7F20, 0x7F00, 0x7F70, 0x7EF0, 0x7F20, 0x7F10, 0x7F00, 0x7F90, 0x7F00, 0x7F40, 0x7EF0, 0x7EF0,
+ 0x7F60, 0x7EF0, 0x7ED0, 0x7EF0, 0x7F00, 0x7F50, 0x7F10, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F00, 0x7E90, 0x7ED0, 0x7F10, 0x7EF0,
+ 0x7F10, 0x7EB0, 0x7EE0, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F00, 0x7EF0, 0x7EC0, 0x7F20, 0x7F20, 0x7F40, 0x7F10,
+ 0x7F10, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F60, 0x7F00, 0x7ED0, 0x7F00, 0x7EF0,
+ 0x7EF0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7EE0, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F50, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F40, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7B50, 0x7570, 0x6FE0, 0x6A80, 0x6690, 0x63A0, 0x6240, 0x6180, 0x6190, 0x6320, 0x6540, 0x6750, 0x6A30,
+ 0x6CE0, 0x7030, 0x72B0, 0x75B0, 0x7800, 0x79C0, 0x7B10, 0x7BF0, 0x7C60, 0x7C70, 0x7BF0, 0x7B60, 0x7AC0, 0x7A50, 0x79F0, 0x7940,
+ 0x7840, 0x7790, 0x76E0, 0x7600, 0x7550, 0x7530, 0x7530, 0x7440, 0x73D0, 0x7350, 0x72E0, 0x7290, 0x7250, 0x72E0, 0x7320, 0x73C0,
+ 0x7450, 0x74B0, 0x74E0, 0x7590, 0x7610, 0x76E0, 0x77E0, 0x7990, 0x7AF0, 0x7C60, 0x7DA0, 0x7E50, 0x7EE0, 0x7F20, 0x7F30, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F00, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F00, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7DA0, 0x7740, 0x7050, 0x6930, 0x62A0, 0x5C00,
+ 0x5490, 0x4DB0, 0x4740, 0x4160, 0x3B70, 0x3570, 0x2F60, 0x28E0, 0x21C0, 0x1940, 0x11A0, 0x0A90, 0x0430, 0xFEB0, 0xF970, 0xF450,
+ 0xEF90, 0xE9E0, 0xE420, 0xDF10, 0xD990, 0xD470, 0xD080, 0xCC50, 0xC950, 0xC600, 0xC350, 0xC0B0, 0xBE30, 0xBB90, 0xB910, 0xB6B0,
+ 0xB570, 0xB540, 0xB4C0, 0xB4A0, 0xB8D0, 0xBA60, 0xBCE0, 0xBFB0, 0xC230, 0xC520, 0xC770, 0xCAC0, 0xCDC0, 0xD150, 0xD4E0, 0xD720,
+ 0xD950, 0xDB70, 0xDBE0, 0xDD00, 0xDD20, 0xDD10, 0xDC80, 0xDB80, 0xDB50, 0xDAE0, 0xDC00, 0xDC80, 0xDCE0, 0xDDE0, 0xDDE0, 0xDDE0,
+ 0xDD40, 0xDD00, 0xDDF0, 0xDEB0, 0xDF30, 0xE010, 0xE110, 0xE230, 0xE310, 0xE330, 0xE3C0, 0xE300, 0xE2B0, 0xE150, 0xDF90, 0xDD20,
+ 0xDA00, 0xD690, 0xD220, 0xCD80, 0xC840, 0xC260, 0xBD20, 0xB7F0, 0xB310, 0xAEA0, 0xAA10, 0xA5F0, 0xA200, 0x9E90, 0x9A90, 0x9760,
+ 0x9530, 0x9340, 0x9120, 0x8FE0, 0x8FC0, 0x8F90, 0x8FD0, 0x9070, 0x91D0, 0x9310, 0x9490, 0x9690, 0x99A0, 0x9D70, 0xA120, 0xA550,
+ 0xA9B0, 0xAE80, 0xB370, 0xB900, 0xBE90, 0xC530, 0xCB60, 0xD120, 0xD640, 0xDBA0, 0xE0A0, 0xE590, 0xEB30, 0xF070, 0xF670, 0xFBB0,
+ 0xFFE0, 0x04A0, 0x0970, 0x0DB0, 0x11F0, 0x15A0, 0x1970, 0x1C90, 0x1FF0, 0x2280, 0x2530, 0x2790, 0x28E0, 0x29D0, 0x2AD0, 0x2AC0,
+ 0x2B00, 0x2A90, 0x2960, 0x27C0, 0x25F0, 0x2450, 0x21B0, 0x1EC0, 0x1C40, 0x1890, 0x1500, 0x1090, 0x0CB0, 0x0980, 0x0640, 0x03F0,
+ 0x01B0, 0xFF00, 0xFCC0, 0xF950, 0xF700, 0xF3F0, 0xF170, 0xF070, 0xEF00, 0xEDF0, 0xED50, 0xEC30, 0xEB80, 0xEA80, 0xEA10, 0xEA20,
+ 0xE980, 0xE910, 0xE890, 0xE860, 0xE830, 0xE860, 0xE8D0, 0xE8D0, 0xE8D0, 0xE8D0, 0xE830, 0xE840, 0xE7D0, 0xE680, 0xE540, 0xE440,
+ 0xE3E0, 0xE340, 0xE230, 0xE170, 0xDFB0, 0xDEE0, 0xDD20, 0xDB30, 0xDAA0, 0xD910, 0xD920, 0xD920, 0xD940, 0xD940, 0xD8D0, 0xD910,
+ 0xD950, 0xD9D0, 0xDAE0, 0xDBA0, 0xDCC0, 0xDE10, 0xDF30, 0xE060, 0xE160, 0xE230, 0xE260, 0xE1F0, 0xE1B0, 0xE130, 0xE100, 0xE0D0,
+ 0xE0A0, 0xE0C0, 0xDFF0, 0xDF70, 0xDE40, 0xDC90, 0xDB70, 0xDAA0, 0xD940, 0xD560, 0xD4A0, 0xD440, 0xD310, 0xD2A0, 0xD210, 0xD120,
+ 0xD010, 0xCE40, 0xCD30, 0xCC70, 0xCB70, 0xCAA0, 0xC9C0, 0xC980, 0xC880, 0xC7E0, 0xC7B0, 0xC720, 0xC730, 0xC6E0, 0xC740, 0xC8A0,
+ 0xC9D0, 0xCBA0, 0xCDE0, 0xD040, 0xD360, 0xD5D0, 0xD870, 0xDB60, 0xDE90, 0xE310, 0xE780, 0xEC90, 0xF190, 0xF620, 0xFB20, 0xFF80,
+ 0x04F0, 0x0B20, 0x10A0, 0x1790, 0x1EC0, 0x2580, 0x2C80, 0x32B0, 0x39B0, 0x4000, 0x45D0, 0x4B30, 0x50A0, 0x56F0, 0x5B70, 0x5F60,
+ 0x6260, 0x6490, 0x6670, 0x66A0, 0x65C0, 0x6490, 0x62E0, 0x61E0, 0x6040, 0x5EF0, 0x5DC0, 0x5BD0, 0x5A50, 0x5890, 0x5660, 0x5450,
+ 0x51F0, 0x5070, 0x4EF0, 0x4D10, 0x4C00, 0x4A40, 0x49D0, 0x48C0, 0x4740, 0x4660, 0x44B0, 0x4380, 0x41C0, 0x4090, 0x40D0, 0x4180,
+ 0x42C0, 0x4500, 0x4690, 0x4980, 0x4C00, 0x4F10, 0x5230, 0x5500, 0x5810, 0x5B10, 0x5E20, 0x6140, 0x63F0, 0x6700, 0x6980, 0x6CB0,
+ 0x6F90, 0x71A0, 0x7470, 0x77B0, 0x7AE0, 0x7D60, 0x7ED0, 0x7F10, 0x7F20, 0x7F70, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F30, 0x7EE0,
+ 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7EF0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EC0,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0, 0x7F50, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F70,
+ 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7F70, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F70, 0x7F20, 0x7EF0, 0x7ED0, 0x7EB0, 0x7F30, 0x7EF0,
+ 0x7EB0, 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7EA0, 0x7ED0, 0x7F10, 0x7F00, 0x7F00, 0x7EC0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7F20, 0x7F10, 0x7F20, 0x7F00, 0x7F50,
+ 0x7EF0, 0x7F20, 0x7EE0, 0x7EF0, 0x7F80, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F80, 0x7ED0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7F50, 0x7EE0,
+ 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7E70, 0x6C20, 0x5750, 0x42B0, 0x2CE0, 0x16A0, 0xFF90, 0xE850, 0xD400, 0xC160,
+ 0xB3D0, 0xA920, 0xA380, 0xA340, 0xA630, 0xACC0, 0xB790, 0xC590, 0xD750, 0xEB20, 0x0250, 0x1830, 0x2D00, 0x3F40, 0x4C10, 0x5170,
+ 0x4E20, 0x40F0, 0x2CD0, 0x12E0, 0xFA00, 0xE510, 0xD380, 0xC590, 0xB820, 0xA990, 0x9980, 0x8BB0, 0x8610, 0x8520, 0x84F0, 0x84E0,
+ 0x84D0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x84C0, 0x84C0, 0x8480, 0x8470, 0x8490, 0x8480, 0x8490, 0x84B0, 0x8510, 0x8540, 0x8630,
+ 0x8810, 0x8A00, 0x89F0, 0x88F0, 0x87A0, 0x8690, 0x85D0, 0x8540, 0x8510, 0x84F0, 0x84E0, 0x84D0, 0x84E0, 0x8500, 0x8570, 0x8630,
+ 0x8A20, 0x95C0, 0xA100, 0xA910, 0xAEA0, 0xB220, 0xB610, 0xBAD0, 0xC1A0, 0xCA20, 0xD380, 0xDCC0, 0xE3D0, 0xE790, 0xE830, 0xE550,
+ 0xE100, 0xDD30, 0xDB00, 0xDB90, 0xDED0, 0xE4F0, 0xED60, 0xF760, 0x0400, 0x1080, 0x1D40, 0x2A00, 0x35D0, 0x41F0, 0x4DC0, 0x5910,
+ 0x6350, 0x6C20, 0x7240, 0x75D0, 0x7840, 0x79D0, 0x7B10, 0x7C00, 0x7C70, 0x7CC0, 0x7BF0, 0x7AA0, 0x77C0, 0x72D0, 0x6C90, 0x6470,
+ 0x5AA0, 0x5090, 0x45B0, 0x3B00, 0x3240, 0x2A80, 0x2520, 0x20E0, 0x1E50, 0x1E00, 0x1F90, 0x21F0, 0x23F0, 0x2530, 0x2470, 0x2240,
+ 0x1DD0, 0x17F0, 0x1160, 0x09E0, 0x0110, 0xF5A0, 0xE960, 0xDA40, 0xC810, 0xB4F0, 0xA1D0, 0x9080, 0x8810, 0x85D0, 0x8540, 0x8520,
+ 0x8500, 0x84E0, 0x84D0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8520, 0x8550, 0x8590, 0x8630, 0x8770,
+ 0x89A0, 0x8E80, 0x96D0, 0x9E40, 0xA600, 0xAF00, 0xB710, 0xBFD0, 0xC720, 0xCE60, 0xD440, 0xD8D0, 0xDBF0, 0xDEE0, 0xE240, 0xE590,
+ 0xE9A0, 0xEEC0, 0xF480, 0xFAF0, 0x0320, 0x0A70, 0x1040, 0x1490, 0x1640, 0x1540, 0x12E0, 0x0ED0, 0x0AA0, 0x06C0, 0x0400, 0x0230,
+ 0x00E0, 0xFE40, 0xFAB0, 0xF520, 0xEEA0, 0xE770, 0xDF40, 0xD880, 0xD220, 0xCCF0, 0xC960, 0xC6A0, 0xC4F0, 0xC410, 0xC3D0, 0xC4C0,
+ 0xC570, 0xC650, 0xC760, 0xC900, 0xCB70, 0xCED0, 0xD250, 0xD6A0, 0xDB20, 0xDF50, 0xE320, 0xE730, 0xEAB0, 0xEE00, 0xF120, 0xF440,
+ 0xF790, 0xFB60, 0xFE40, 0x00D0, 0x0220, 0x02A0, 0x0290, 0x0210, 0x02B0, 0x0400, 0x0790, 0x0C00, 0x10E0, 0x1710, 0x1C10, 0x2100,
+ 0x25C0, 0x2AD0, 0x3030, 0x35F0, 0x3B10, 0x3FF0, 0x4410, 0x4860, 0x4B70, 0x4F10, 0x5300, 0x55E0, 0x59B0, 0x5BA0, 0x5DC0, 0x5E50,
+ 0x5ED0, 0x6020, 0x60C0, 0x6200, 0x6390, 0x64C0, 0x6610, 0x6580, 0x6460, 0x63A0, 0x6180, 0x60B0, 0x6030, 0x5FE0, 0x5FF0, 0x5FF0,
+ 0x6070, 0x5F50, 0x5D30, 0x5A20, 0x5580, 0x5050, 0x4A10, 0x41E0, 0x3910, 0x30B0, 0x27E0, 0x1DE0, 0x12C0, 0x06A0, 0xF880, 0xE920,
+ 0xD580, 0xC160, 0xAC30, 0x84F0, 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8480, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8510, 0x8530,
+ 0x8550, 0x8590, 0x8600, 0x86B0, 0x87F0, 0x8A50, 0x8E60, 0x9420, 0x99D0, 0x9F00, 0xA500, 0xAB00, 0xB120, 0xB7C0, 0xBD60, 0xC300,
+ 0xC830, 0xCD70, 0xD210, 0xD710, 0xDCD0, 0xE270, 0xE8B0, 0xEEF0, 0xF4A0, 0xFA80, 0x00B0, 0x0670, 0x0D40, 0x13B0, 0x1AF0, 0x2160,
+ 0x2750, 0x2CB0, 0x3120, 0x35F0, 0x3A80, 0x3D30, 0x4020, 0x4240, 0x44B0, 0x44E0, 0x4510, 0x4550, 0x4530, 0x4520, 0x4470, 0x4450,
+ 0x4410, 0x43C0, 0x4410, 0x4460, 0x4460, 0x45C0, 0x4650, 0x4710, 0x4820, 0x48E0, 0x4990, 0x4900, 0x48A0, 0x47C0, 0x46F0, 0x4700,
+ 0x4680, 0x4590, 0x4490, 0x4180, 0x3F90, 0x3CB0, 0x3A30, 0x38E0, 0x36F0, 0x3610, 0x3500, 0x3320, 0x31D0, 0x3100, 0x30D0, 0x3090,
+ 0x3130, 0x3230, 0x3360, 0x3550, 0x3830, 0x3BE0, 0x4010, 0x44F0, 0x4B00, 0x5180, 0x5890, 0x7700, 0x7D80, 0x7F00, 0x7F00, 0x7EF0,
+ 0x7ED0, 0x7F30, 0x7F00, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7520, 0x6960, 0x5BB0, 0x4E30, 0x4200, 0x3750, 0x2DD0,
+ 0x22B0, 0x1820, 0x0BC0, 0xFE00, 0xEE20, 0xDA30, 0xC750, 0xB3A0, 0xA0A0, 0x9110, 0x88E0, 0x8650, 0x85A0, 0x8570, 0x8570, 0x8580,
+ 0x85D0, 0x8670, 0x8820, 0x8CC0, 0x9540, 0x9EF0, 0xA820, 0xB190, 0xBA50, 0xC270, 0xCA70, 0xD270, 0xD9F0, 0xE240, 0xE9C0, 0xF050,
+ 0xF500, 0xF6A0, 0xF530, 0xF060, 0xE960, 0xE280, 0xDC80, 0xD930, 0xD9C0, 0xDDF0, 0xE430, 0xEBF0, 0xF380, 0xF8F0, 0xFB10, 0xF880,
+ 0xF1C0, 0xE810, 0xDA20, 0xCCC0, 0xC0D0, 0xB5B0, 0xAD60, 0xA690, 0xA110, 0x9BE0, 0x9680, 0x9110, 0x8D00, 0x8A30, 0x88D0, 0x8840,
+ 0x88D0, 0x8A80, 0x8E20, 0x93F0, 0x9B70, 0xA300, 0xAAE0, 0xB2A0, 0xB9E0, 0xC190, 0xC990, 0xD110, 0xD7F0, 0xDF50, 0xE580, 0xEB20,
+ 0xF040, 0xF4F0, 0xFA90, 0x0020, 0x06F0, 0x0D30, 0x13A0, 0x19F0, 0x1E90, 0x22F0, 0x26A0, 0x2950, 0x2CD0, 0x3000, 0x3400, 0x38F0,
+ 0x3D40, 0x4200, 0x45C0, 0x49B0, 0x4C20, 0x4D00, 0x4E90, 0x4ED0, 0x4E70, 0x4D80, 0x4C80, 0x4B80, 0x4B80, 0x4D80, 0x5070, 0x5520,
+ 0x5A60, 0x6010, 0x64B0, 0x68A0, 0x6AF0, 0x6CD0, 0x6DC0, 0x6EC0, 0x6F90, 0x7110, 0x73E0, 0x7650, 0x7930, 0x7BB0, 0x7D40, 0x7E40,
+ 0x7E80, 0x7D30, 0x79F0, 0x7390, 0x6BA0, 0x6160, 0x5510, 0x4930, 0x3CE0, 0x3180, 0x26D0, 0x1BF0, 0x12A0, 0x0950, 0x0060, 0xF680,
+ 0xEC40, 0xE1C0, 0xD730, 0xCC20, 0xC040, 0xB290, 0xA410, 0x9420, 0x8870, 0x8540, 0x84E0, 0x84E0, 0x84A0, 0x8490, 0x8480, 0x8470,
+ 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8490, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490,
+ 0x8490, 0x84A0, 0x84A0, 0x84F0, 0x84C0, 0x84D0, 0x84F0, 0x8540, 0x8610, 0x8800, 0x8BC0, 0x90E0, 0x92A0, 0x9240, 0x8FB0, 0x8CD0,
+ 0x8A40, 0x8830, 0x8710, 0x8670, 0x8620, 0x85F0, 0x8600, 0x8630, 0x86B0, 0x87B0, 0x89F0, 0x8EE0, 0x9670, 0x9F90, 0xA7D0, 0xAFA0,
+ 0xB560, 0xB9D0, 0xBC60, 0xBCE0, 0xBBF0, 0xB9A0, 0xB5E0, 0xB1D0, 0xAD70, 0xA8B0, 0xA460, 0x9FB0, 0x9B10, 0x96C0, 0x92E0, 0x8F10,
+ 0x8C30, 0x89F0, 0x88B0, 0x87F0, 0x8790, 0x8780, 0x87B0, 0x8820, 0x88D0, 0x89A0, 0x8A90, 0x8C30, 0x8E50, 0x9170, 0x9590, 0x9940,
+ 0x9E40, 0xA260, 0xA530, 0xA840, 0xA9F0, 0xAAE0, 0xABF0, 0xADC0, 0xB020, 0xB2B0, 0xB530, 0xB840, 0xBB40, 0xBDF0, 0xC0B0, 0xC370,
+ 0xC5F0, 0xC870, 0xCB20, 0xCDD0, 0xD080, 0xD3C0, 0xD7D0, 0xDBF0, 0xDFF0, 0xE370, 0xE660, 0xE810, 0xE910, 0xE9A0, 0xE9E0, 0xE980,
+ 0xE930, 0xE8A0, 0xE850, 0xE7E0, 0xE780, 0xE730, 0xE6E0, 0xE590, 0xE4B0, 0xE3E0, 0xE380, 0xE3B0, 0xE490, 0xE510, 0xE680, 0xE680,
+ 0xE680, 0xE650, 0xE680, 0xE630, 0xE560, 0xE4D0, 0xE480, 0xE440, 0xE3A0, 0xE310, 0xE330, 0xE3D0, 0xE4C0, 0xE610, 0xE720, 0xE830,
+ 0xE930, 0xEA80, 0xEBC0, 0xED00, 0xEDB0, 0xEDD0, 0xEE20, 0xEDD0, 0xEDD0, 0xED90, 0xECC0, 0xEBD0, 0xEA90, 0xE990, 0xE870, 0xE770,
+ 0xE6D0, 0xE5C0, 0xE4C0, 0xE450, 0xE3D0, 0xE3E0, 0xE400, 0xE4D0, 0xE580, 0xE660, 0xE750, 0xE870, 0xE9E0, 0xEBE0, 0xEDB0, 0xF080,
+ 0xF2D0, 0xF620, 0xF980, 0xFD90, 0x00C0, 0x0490, 0x0830, 0x0BB0, 0x0EE0, 0x1260, 0x16F0, 0x1AA0, 0x1E70, 0x2270, 0x25B0, 0x27A0,
+ 0x29C0, 0x2BB0, 0x2D30, 0x2EE0, 0x3090, 0x31E0, 0x3340, 0x3480, 0x35F0, 0x36D0, 0x37E0, 0x3A00, 0x3C90, 0x3F80, 0x4420, 0x4980,
+ 0x4F50, 0x5670, 0x5DB0, 0x64F0, 0x6B90, 0x71E0, 0x7690, 0x7A00, 0x7B70, 0x7BB0, 0x7A80, 0x7740, 0x7230, 0x6B70, 0x6250, 0x58B0,
+ 0x4D40, 0x4220, 0x36C0, 0x2C50, 0x2280, 0x1AA0, 0x13A0, 0x0CE0, 0x06C0, 0xFF20, 0xF650, 0xEB20, 0xDCE0, 0xCAC0, 0xB470, 0x9A80,
+ 0x86E0, 0x84E0, 0x84A0, 0x8480, 0x8490, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83E0,
+ 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x83A0, 0x8380,
+ 0x8380, 0x8370, 0x8370, 0x8370, 0x8360, 0x8390, 0x8360, 0x8360, 0x8360, 0x8370, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360,
+ 0x8390, 0x83A0, 0x8370, 0x8380, 0x83B0, 0x8390, 0x8380, 0x8390, 0x8390, 0x8380, 0x8380, 0x83B0, 0x8380, 0x8380, 0x8380, 0x8390,
+ 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0,
+ 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8420, 0x8470, 0x8430, 0x8430, 0x8440,
+ 0x8430, 0x8440, 0x8450, 0x8460, 0x8460, 0x8470, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84D0, 0x84D0, 0x84C0, 0x84C0, 0x84D0,
+ 0x84E0, 0x84E0, 0x8500, 0x8550, 0x86B0, 0x94F0, 0xAFF0, 0xCBD0, 0xE440, 0xF480, 0xFAF0, 0xF8E0, 0xF170, 0xEA90, 0xE560, 0xE4F0,
+ 0xE8F0, 0xEEF0, 0xF6E0, 0xFE40, 0x03D0, 0x0810, 0x09A0, 0x0A30, 0x08D0, 0x0760, 0x05E0, 0x04D0, 0x05E0, 0x0900, 0x0E40, 0x1650,
+ 0x2000, 0x2B80, 0x3910, 0x46B0, 0x5660, 0x6650, 0x7590, 0x7EE0, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F00,
+ 0x7F50, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F70, 0x7F20, 0x7F40, 0x7F10, 0x7EF0, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7F80,
+ 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7EF0,
+ 0x7EB0, 0x7EF0, 0x7EF0, 0x7F50, 0x7EF0, 0x7EA0, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7F00, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F30, 0x7EF0, 0x7F00, 0x7F10, 0x7F20, 0x7F10,
+ 0x7EB0, 0x7F20, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F60, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0,
+ 0x7F80, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EA0, 0x7EC0, 0x7EF0, 0x7F60, 0x7F20, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0,
+ 0x7EF0, 0x7EB0, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F30, 0x7EF0, 0x7F00, 0x7ED0, 0x7F10, 0x7F60, 0x7F00, 0x7F30, 0x7F00, 0x7F00,
+ 0x7F50, 0x7EF0, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F70, 0x7EE0, 0x7ED0, 0x7F10, 0x7F20, 0x7F60, 0x7ED0, 0x7E90, 0x7EE0, 0x7EF0, 0x7F30,
+ 0x7EC0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7EF0, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7F00, 0x7EF0,
+ 0x7F70, 0x7F00, 0x7EE0, 0x7EF0, 0x7EE0, 0x7F70, 0x7F10, 0x7EE0, 0x7F00, 0x7EE0, 0x7F30, 0x7F10, 0x7ED0, 0x7ED0, 0x7EB0, 0x7F20,
+ 0x7EF0, 0x7E90, 0x7EE0, 0x7F20, 0x7E60, 0x7890, 0x7160, 0x6A80, 0x6380, 0x5CB0, 0x57C0, 0x5300, 0x5010, 0x4DB0, 0x4BE0, 0x4C50,
+ 0x4B80, 0x4B80, 0x4B00, 0x4910, 0x4830, 0x4670, 0x4460, 0x41B0, 0x3FB0, 0x3E60, 0x3C50, 0x39F0, 0x3770, 0x3500, 0x32D0, 0x30B0,
+ 0x2EC0, 0x2D50, 0x2AB0, 0x2840, 0x2560, 0x2230, 0x1E90, 0x1B20, 0x1840, 0x1390, 0x1040, 0x0D80, 0x0AF0, 0x0910, 0x0740, 0x05C0,
+ 0x0550, 0x0530, 0x0590, 0x0590, 0x0570, 0x0620, 0x06B0, 0x0750, 0x07F0, 0x08C0, 0x0A40, 0x0C00, 0x0E60, 0x0FF0, 0x1190, 0x1380,
+ 0x15E0, 0x1890, 0x1AD0, 0x1C70, 0x1E80, 0x1F60, 0x1EA0, 0x1C20, 0x1770, 0x1110, 0x0890, 0xFF60, 0xF4D0, 0xE830, 0xDC40, 0xCF00,
+ 0xC090, 0xB190, 0xA1A0, 0x9250, 0x8850, 0x8570, 0x84F0, 0x84D0, 0x84B0, 0x84A0, 0x84A0, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460,
+ 0x8460, 0x8470, 0x8450, 0x8450, 0x8450, 0x8460, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490,
+ 0x84E0, 0x84B0, 0x84C0, 0x84E0, 0x8520, 0x85D0, 0x8980, 0x9930, 0xAAE0, 0xBCE0, 0xCFD0, 0xE110, 0xF2B0, 0x0420, 0x16B0, 0x2930,
+ 0x3BF0, 0x4E60, 0x60D0, 0x7500, 0x7EE0, 0x7F50, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F50,
+ 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F20, 0x7F10, 0x7F10, 0x5FF0, 0x3260, 0x0190, 0xD6B0, 0xAE80, 0x8C40, 0x8500, 0x84B0, 0x8490, 0x8470, 0x8470, 0x8460, 0x8460,
+ 0x8450, 0x8460, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84C0, 0x84F0, 0x8530, 0x8620, 0x8A00, 0x9670, 0xA1E0, 0xAAE0, 0xB280,
+ 0xBC70, 0xC970, 0xDC30, 0xF4C0, 0x1260, 0x33A0, 0x5350, 0x6D10, 0x7B90, 0x7EC0, 0x7A50, 0x67B0, 0x4A40, 0x2740, 0x0180, 0xDA90,
+ 0xAE80, 0x8750, 0x84B0, 0x8470, 0x8450, 0x8440, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0,
+ 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x8400, 0x8400, 0x8410, 0x83F0, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430, 0x83F0, 0x8430,
+ 0x8440, 0x83F0, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84D0, 0x8520, 0x86F0,
+ 0x9880, 0xB440, 0xCE20, 0xE650, 0xFD20, 0x1260, 0x2630, 0x38C0, 0x4A90, 0x59D0, 0x6840, 0x7500, 0x7E30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7F30,
+ 0x7F40, 0x7F10, 0x7EB0, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F00, 0x7F00, 0x7F30, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7EE0,
+ 0x7ED0, 0x7F10, 0x7EF0, 0x7F50, 0x7F20, 0x7EC0, 0x7F20, 0x7EF0, 0x7F10, 0x7EE0, 0x7E70, 0x7F10, 0x7EE0, 0x7F20, 0x7ED0, 0x7EB0,
+ 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7EC0, 0x7F30, 0x7F00, 0x7F20, 0x7F20, 0x7F00, 0x7F40,
+ 0x7ED0, 0x7F10, 0x7F30, 0x7EE0, 0x7F80, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7F10,
+ 0x7EF0, 0x7EE0, 0x7EF0, 0x7F50, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EC0, 0x7F10, 0x7F20, 0x7EA0,
+ 0x7F00, 0x7EF0, 0x7F20, 0x7F20, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F50,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F10, 0x7F30, 0x7EE0,
+ 0x7EF0, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F00, 0x7F00, 0x7F10, 0x7F50, 0x7EB0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F30, 0x7ED0, 0x7E90,
+ 0x7F10, 0x7F20, 0x7F40, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F00, 0x7F30,
+ 0x7F10, 0x7F10, 0x7F30, 0x7F00, 0x7F40, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F80, 0x7F00, 0x7F40, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0,
+ 0x7ED0, 0x7F00, 0x7EE0, 0x7F80, 0x7F10, 0x7F00, 0x7F00, 0x7ED0, 0x7F30, 0x7F00, 0x7EA0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0,
+ 0x7EC0, 0x7F00, 0x7F10, 0x7F10, 0x7EC0, 0x7ED0, 0x7F10, 0x7F00, 0x7EF0, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F40,
+ 0x7F10, 0x7F10, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7EE0, 0x7F40, 0x7F40, 0x7F10, 0x7F10, 0x7EE0,
+ 0x7F60, 0x7ED0, 0x7F20, 0x7F00, 0x7EF0, 0x7F50, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7EE0, 0x7F70,
+ 0x7EF0, 0x7F20, 0x7F20, 0x7EF0, 0x7F70, 0x7EE0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F70, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F30, 0x7F10,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7EA0, 0x7ED0, 0x7EF0, 0x7F30, 0x7EF0, 0x7EB0, 0x7EE0, 0x7F00, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7F00, 0x7F10, 0x7F00, 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7F50,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F70, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EE0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F90, 0x7F00,
+ 0x7EE0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EB0, 0x7EF0, 0x7EE0, 0x7F30, 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x79E0, 0x7110,
+ 0x6680, 0x5990, 0x4920, 0x3850, 0x2580, 0x11A0, 0xFBE0, 0xE2F0, 0xCA50, 0xAF80, 0x9470, 0x8660, 0x84E0, 0x84B0, 0x8490, 0x8480,
+ 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x83E0, 0x8430, 0x8420, 0x8420, 0x8410, 0x8400, 0x8400, 0x83B0,
+ 0x8400, 0x8400, 0x8420, 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8450, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8480,
+ 0x84D0, 0x84A0, 0x84B0, 0x84D0, 0x84F0, 0x85B0, 0x88F0, 0x9530, 0xA320, 0xB0A0, 0xBBA0, 0xC530, 0xCCB0, 0xD120, 0xD390, 0xD470,
+ 0xD360, 0xD220, 0xD010, 0xCD30, 0xCA90, 0xC830, 0xC710, 0xC200, 0xB060, 0x8FE0, 0x84E0, 0x8490, 0x8460, 0x8430, 0x8430, 0x8420,
+ 0x8410, 0x8400, 0x8400, 0x83E0, 0x8400, 0x83E0, 0x83E0, 0x83D0, 0x83F0, 0x83C0, 0x83C0, 0x83A0, 0x83B0, 0x83C0, 0x83C0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83F0,
+ 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8420,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83E0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0,
+ 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83D0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83F0, 0x83F0, 0x83F0,
+ 0x8400, 0x8400, 0x8400, 0x8410, 0x8420, 0x8420, 0x8430, 0x8440, 0x8440, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x84B0,
+ 0x84B0, 0x84C0, 0x84F0, 0x8530, 0x85C0, 0x87B0, 0x8F00, 0x9D10, 0xAB20, 0xB880, 0xC430, 0xCF00, 0xD640, 0xDB10, 0xDDB0, 0xDEE0,
+ 0xDFE0, 0xE0A0, 0xE150, 0xE0F0, 0xDE50, 0xD7F0, 0xCD20, 0xBCE0, 0xA810, 0x9000, 0x85A0, 0x84D0, 0x84A0, 0x8490, 0x8480, 0x8480,
+ 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8460, 0x8490, 0x8470, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84D0,
+ 0x8510, 0x8670, 0x9510, 0xB180, 0xCF10, 0xEE60, 0x0FA0, 0x32B0, 0x5900, 0x7760, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F00, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F00, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F50, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F70, 0x7F20, 0x7EC0, 0x7F00,
+ 0x7F10, 0x7EF0, 0x7EF0, 0x7E70, 0x7EF0, 0x7EC0, 0x7EE0, 0x7ED0, 0x7E80, 0x7EE0, 0x7F00, 0x7F10, 0x7F10, 0x7EC0, 0x7ED0, 0x7F10,
+ 0x7F00, 0x7EF0, 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F30, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F00, 0x7EE0, 0x7F40, 0x7EF0, 0x7EE0, 0x7F40, 0x7F10, 0x7F40, 0x7F00, 0x7EC0, 0x7EF0,
+ 0x7F00, 0x7F50, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7EA0, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7E90, 0x7F00, 0x7EE0,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F00, 0x7F20, 0x7EF0, 0x7F00, 0x7F40, 0x7EF0, 0x7F30,
+ 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F70, 0x7EE0, 0x73F0, 0x6290, 0x50E0, 0x3EF0, 0x2D50, 0x19F0, 0x09A0,
+ 0xFA40, 0xECB0, 0xE230, 0xD960, 0xD340, 0xCD90, 0xC9D0, 0xC810, 0xC650, 0xC630, 0xC660, 0xC660, 0xC6F0, 0xC750, 0xC800, 0xC860,
+ 0xC810, 0xC820, 0xC760, 0xC6D0, 0xC6C0, 0xC6E0, 0xC8E0, 0xCB40, 0xCE30, 0xD1C0, 0xD440, 0xD730, 0xD9E0, 0xDBC0, 0xDD50, 0xDED0,
+ 0xE0E0, 0xE2E0, 0xE5D0, 0xE910, 0xEC50, 0xEF90, 0xF200, 0xF3A0, 0xF4B0, 0xF480, 0xF3E0, 0xF2C0, 0xF0F0, 0xEF60, 0xECE0, 0xEA80,
+ 0xE7F0, 0xE4A0, 0xE1F0, 0xDEC0, 0xDB90, 0xD800, 0xD4D0, 0xD180, 0xCE10, 0xCBA0, 0xC8E0, 0xC5D0, 0xC360, 0xBFA0, 0xBD80, 0xBB10,
+ 0xB8E0, 0xB6D0, 0xB4A0, 0xB310, 0xB120, 0xAF10, 0xACD0, 0xAAE0, 0xA8D0, 0xA6F0, 0xA510, 0xA320, 0x9FF0, 0x9C70, 0x9900, 0x94F0,
+ 0x9140, 0x8D70, 0x8A10, 0x87E0, 0x8680, 0x85C0, 0x8560, 0x8520, 0x8500, 0x8520, 0x84E0, 0x84E0, 0x84C0, 0x84C0, 0x84C0, 0x84D0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84D0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84B0,
+ 0x84B0, 0x84C0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84E0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84D0, 0x8500, 0x8530,
+ 0x8580, 0x8650, 0x8830, 0x8CA0, 0x9400, 0x9CB0, 0xA430, 0xAC10, 0xB370, 0xBA90, 0xC390, 0xCBD0, 0xD580, 0xDEC0, 0xE840, 0xF210,
+ 0xFC10, 0x06B0, 0x1140, 0x1CB0, 0x26A0, 0x2FC0, 0x39F0, 0x4290, 0x4A70, 0x5260, 0x58D0, 0x5F30, 0x6480, 0x6890, 0x6C90, 0x7020,
+ 0x7440, 0x7890, 0x7BB0, 0x7E30, 0x7EC0, 0x7F10, 0x7F20, 0x7F40, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7EC0, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F00, 0x7F20, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F50, 0x7F10,
+ 0x7F40, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7F00, 0x7EE0, 0x7ED0, 0x7F30, 0x7F00, 0x7EA0,
+ 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7F00, 0x7EE0, 0x7F50, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F70, 0x7ED0, 0x7EB0, 0x7F00,
+ 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F40, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F70, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F70, 0x7F10, 0x7EE0,
+ 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7ED0, 0x7EB0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7E70, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7ED0,
+ 0x7F10, 0x7F00, 0x7F10, 0x7E90, 0x7EE0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F20,
+ 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F10, 0x7F30, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F00, 0x7EF0, 0x7ED0, 0x7F30, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7F70, 0x7ED0, 0x7EB0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7E90, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F00, 0x7EA0, 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F50, 0x7F10, 0x7F20, 0x7F30, 0x7F10, 0x7F70, 0x7D20, 0x5D10, 0x40B0, 0x2400, 0x0840, 0xEE30, 0xD660,
+ 0xC1C0, 0xAF00, 0x9F50, 0x9250, 0x8B60, 0x8820, 0x86D0, 0x85F0, 0x85D0, 0x8580, 0x8550, 0x8510, 0x84F0, 0x84D0, 0x84F0, 0x84B0,
+ 0x84A0, 0x8490, 0x84B0, 0x8480, 0x8470, 0x8430, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84E0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0,
+ 0x8490, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8460, 0x8470, 0x8470, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8460, 0x8490, 0x8410,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8470, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x8520, 0x85B0,
+ 0x87B0, 0x8E70, 0x9950, 0xA330, 0xAAD0, 0xB040, 0xB350, 0xB4B0, 0xB570, 0xB470, 0xB260, 0xAF80, 0xABD0, 0xA810, 0xA2B0, 0x9D40,
+ 0x96B0, 0x9070, 0x8B90, 0x8860, 0x86D0, 0x8600, 0x85D0, 0x8570, 0x8560, 0x8560, 0x8590, 0x85C0, 0x8650, 0x87A0, 0x8B40, 0x9380,
+ 0x9F10, 0xAAB0, 0xB620, 0xC0D0, 0xC940, 0xCF80, 0xD360, 0xD4B0, 0xD360, 0xCFB0, 0xCA90, 0xC3B0, 0xBAE0, 0xB010, 0xA330, 0x94A0,
+ 0x89A0, 0x85B0, 0x84F0, 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84F0, 0x8670, 0x9DC0, 0xBF90, 0xE0F0, 0x03B0, 0x2A70, 0x4E90, 0x6FD0,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F70, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F00, 0x7F50, 0x7EF0, 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F10, 0x7ED0, 0x7EB0, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F20,
+ 0x7F60, 0x7F10, 0x7F20, 0x7F10, 0x7EF0, 0x7F30, 0x7F30, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F40, 0x7F50, 0x7EB0, 0x7F00, 0x7EE0, 0x7B80,
+ 0x6630, 0x4E00, 0x3540, 0x1B30, 0x0420, 0xEFA0, 0xDC00, 0xC950, 0xB610, 0xA220, 0x8FB0, 0x8710, 0x8530, 0x84F0, 0x84E0, 0x84E0,
+ 0x84E0, 0x84F0, 0x8530, 0x8570, 0x8600, 0x8730, 0x8900, 0x8BE0, 0x8E70, 0x90B0, 0x9230, 0x9310, 0x92D0, 0x9180, 0x8FF0, 0x8E30,
+ 0x8D40, 0x8C70, 0x8C10, 0x8C20, 0x8BD0, 0x8B80, 0x8B70, 0x8BB0, 0x8C20, 0x8CA0, 0x8D70, 0x8F10, 0x90C0, 0x9300, 0x9530, 0x9680,
+ 0x97B0, 0x9880, 0x99F0, 0x9B50, 0x9CB0, 0x9E20, 0x9FA0, 0xA0B0, 0xA1D0, 0xA220, 0xA290, 0xA2E0, 0xA370, 0xA3F0, 0xA300, 0xA160,
+ 0x9F00, 0x9B60, 0x96B0, 0x9150, 0x8BC0, 0x87E0, 0x85E0, 0x8530, 0x84F0, 0x84D0, 0x84C0, 0x84B0, 0x8490, 0x8490, 0x8480, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8470, 0x8470, 0x8480, 0x84A0, 0x84E0, 0x8790, 0xB3E0, 0xE6B0, 0x1220, 0x37F0,
+ 0x5850, 0x7100, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20, 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10,
+ 0x7EA0, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F80, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F70, 0x7EE0, 0x7ED0, 0x7F10, 0x7F20, 0x7F70, 0x7EF0, 0x7BB0, 0x4AA0, 0x1F10, 0xF790,
+ 0xD690, 0xBB30, 0xA890, 0x9D10, 0x9B60, 0xA110, 0xAB60, 0xB7E0, 0xC2A0, 0xCAA0, 0xCE90, 0xCCA0, 0xC730, 0xC110, 0xBB30, 0xB9E0,
+ 0xBCE0, 0xC510, 0xD2E0, 0xE370, 0xF380, 0x0080, 0x0800, 0x12E0, 0x1A70, 0x24E0, 0x31C0, 0x4090, 0x4F10, 0x5D30, 0x6960, 0x7390,
+ 0x7C80, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F50, 0x7F00, 0x7F20, 0x7EF0, 0x7F00, 0x7F60, 0x7EF0, 0x7F30, 0x7F20,
+ 0x7F00, 0x7F90, 0x7F10, 0x7EF0, 0x7F10, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EE0, 0x7F00, 0x7EF0,
+ 0x7F30, 0x7F00, 0x7E70, 0x7EC0, 0x7EF0, 0x7F10, 0x7EF0, 0x7E90, 0x7ED0, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F40, 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F70, 0x7F00, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7EF0, 0x7F10, 0x7EF0, 0x7F80, 0x7F00, 0x7EE0, 0x7F00, 0x7F10,
+ 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7E20, 0x7C40, 0x7A50, 0x7800, 0x75E0, 0x7440, 0x7210, 0x7100, 0x6F20, 0x6DD0, 0x6CB0, 0x6B70,
+ 0x6B20, 0x6A00, 0x6910, 0x6820, 0x6700, 0x6650, 0x6520, 0x63C0, 0x6290, 0x60B0, 0x5F70, 0x5D60, 0x5AD0, 0x58B0, 0x54E0, 0x5190,
+ 0x4D30, 0x4820, 0x4340, 0x3DD0, 0x38B0, 0x32E0, 0x2D20, 0x2730, 0x20E0, 0x1B10, 0x1490, 0x0F30, 0x09A0, 0x04A0, 0x00D0, 0xFCD0,
+ 0xF790, 0xF250, 0xEBF0, 0xE5F0, 0xDED0, 0xD6F0, 0xD050, 0xC880, 0xC0C0, 0xB780, 0xAE90, 0xA650, 0x9DB0, 0x95C0, 0x8E60, 0x8960,
+ 0x86C0, 0x85B0, 0x8530, 0x8500, 0x84E0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8530,
+ 0x85E0, 0x8800, 0x8F90, 0x9BF0, 0xA910, 0xB400, 0xBBF0, 0xC1F0, 0xC5F0, 0xC820, 0xC760, 0xC4E0, 0xC0F0, 0xBAB0, 0xB450, 0x9DA0,
+ 0x9A10, 0x99F0, 0x9BA0, 0xA080, 0xA7D0, 0xB060, 0xBBE0, 0xC770, 0xD500, 0xE250, 0xF090, 0xFFB0, 0x0EC0, 0x1E70, 0x2E00, 0x3E90,
+ 0x4E50, 0x5C70, 0x69C0, 0x7410, 0x7BB0, 0x7F00, 0x7EC0, 0x7EC0, 0x7EE0, 0x7F30, 0x7F10, 0x7E90, 0x7EB0, 0x7EF0, 0x7EF0, 0x7F10,
+ 0x7F00, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7EC0, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F00,
+ 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F70, 0x7EF0, 0x7F20, 0x7F00, 0x7F10, 0x7F70,
+ 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F50, 0x7ED0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F20, 0x7EE0,
+ 0x7E90, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F20, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F00, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7EB0, 0x63E0, 0x4780, 0x2A10, 0x0D20, 0xF1F0, 0xD980, 0xC490, 0xB480, 0xA5F0,
+ 0x99A0, 0x8EC0, 0x87D0, 0x8590, 0x8510, 0x84E0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84C0, 0x84B0, 0x8490, 0x8480,
+ 0x8470, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420,
+ 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x83E0, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420,
+ 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x8500, 0x8550,
+ 0x8680, 0x8AB0, 0x9790, 0xA740, 0xB7D0, 0xC880, 0xDA50, 0xEC20, 0xFD00, 0x0D50, 0x1B80, 0x2760, 0x31F0, 0x3B10, 0x4470, 0x4DC0,
+ 0x5810, 0x6310, 0x6E40, 0x7820, 0x7E90, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F80, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F20, 0x7F20, 0x7EF0,
+ 0x7ED0, 0x7F10, 0x7F20, 0x7EF0, 0x7EB0, 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7C40, 0x6680, 0x4C30, 0x3370, 0x1AB0, 0x0580,
+ 0xF3A0, 0xE4D0, 0xDA50, 0xD220, 0xCC10, 0xC650, 0xC180, 0xBC50, 0xB5C0, 0xADD0, 0xA560, 0x9CC0, 0x9520, 0x8EA0, 0x89F0, 0x8790,
+ 0x8640, 0x85B0, 0x84F0, 0x8530, 0x8520, 0x8510, 0x8540, 0x8510, 0x8510, 0x8530, 0x8570, 0x85B0, 0x86B0, 0x8980, 0x90A0, 0x9A40,
+ 0xA450, 0xAD50, 0xB630, 0xBE70, 0xC660, 0xCF10, 0xD7F0, 0xE0E0, 0xE940, 0xF1D0, 0xF8D0, 0xFE80, 0x0310, 0x0750, 0x0B30, 0x0EE0,
+ 0x10F0, 0x1250, 0x1400, 0x1450, 0x1470, 0x13E0, 0x11C0, 0x0F90, 0x0D30, 0x0B00, 0x0960, 0x0830, 0x0890, 0x09A0, 0x0B80, 0x0EA0,
+ 0x1230, 0x16C0, 0x1B80, 0x2010, 0x24E0, 0x28F0, 0x2DB0, 0x3250, 0x36A0, 0x3B50, 0x3FF0, 0x4570, 0x49C0, 0x4D90, 0x5070, 0x5300,
+ 0x56C0, 0x59F0, 0x5D70, 0x6100, 0x6440, 0x67B0, 0x6AE0, 0x6D90, 0x70B0, 0x7340, 0x7680, 0x7980, 0x7BB0, 0x7DE0, 0x7E70, 0x7F10,
+ 0x7F00, 0x7F20, 0x7ED0, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7ED0, 0x7F30, 0x7F00,
+ 0x7F40, 0x7F30, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F80, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F10,
+ 0x7EF0, 0x7EE0, 0x7F60, 0x7F10, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F60, 0x7EF0, 0x7E90, 0x7EB0,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F00, 0x7F20, 0x7F20, 0x7E90, 0x7F00, 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F00, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F60, 0x7F00,
+ 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7EB0,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EA0, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7E90, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40,
+ 0x7F10, 0x7D60, 0x70A0, 0x62E0, 0x5510, 0x4760, 0x3A20, 0x2DF0, 0x2110, 0x1520, 0x06F0, 0xF880, 0xE770, 0xD2C0, 0xBB10, 0xA190,
+ 0x8AB0, 0x84F0, 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8480, 0x84B0, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8480,
+ 0x8480, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8400,
+ 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x8400, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x84D0, 0x8500, 0x8570, 0x8760,
+ 0x9100, 0x9F00, 0xA8E0, 0xAE20, 0xAE30, 0xA9D0, 0xA180, 0x9750, 0x8D00, 0x8720, 0x8550, 0x84F0, 0x84C0, 0x84C0, 0x8490, 0x8490,
+ 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8480, 0x8450, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8420, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480,
+ 0x8490, 0x8480, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8520, 0x8580, 0x8650, 0x8830, 0x8CF0, 0x93F0, 0x9BC0, 0xA250,
+ 0xA920, 0xAE40, 0xB340, 0xB830, 0xBC30, 0xC090, 0xC3F0, 0xC710, 0xCA40, 0xCC10, 0xCD50, 0xCDE0, 0xCDF0, 0xCED0, 0xCFD0, 0xD100,
+ 0xD230, 0xD330, 0xD450, 0xD560, 0xD600, 0xD5D0, 0xD4C0, 0xD400, 0xD280, 0xD130, 0xCFC0, 0xCEF0, 0xCE30, 0xCCB0, 0xC7E0, 0xC660,
+ 0xC550, 0xC480, 0xC340, 0xC280, 0xC2E0, 0xC320, 0xC4B0, 0xC580, 0xC6E0, 0xC820, 0xC8A0, 0xCA00, 0xCB20, 0xCC90, 0xCF80, 0xD270,
+ 0xD540, 0xD7B0, 0xDA50, 0xDCB0, 0xDF60, 0xE210, 0xE5B0, 0xEA30, 0xEE60, 0xF300, 0xF660, 0xF890, 0xFA30, 0xFB30, 0xFAB0, 0xFA50,
+ 0xF9A0, 0xF990, 0xFB40, 0xFE40, 0x0270, 0x0700, 0x0B90, 0x0F90, 0x1190, 0x1250, 0x10E0, 0x0D90, 0x0880, 0x0240, 0xFBD0, 0xF450,
+ 0xEC80, 0xE3C0, 0xDB00, 0xD180, 0xC6E0, 0xBC00, 0xAFA0, 0xA200, 0x92F0, 0x8850, 0x8550, 0x84E0, 0x84B0, 0x84A0, 0x8490, 0x8480,
+ 0x8480, 0x8470, 0x8470, 0x8470, 0x8440, 0x8470, 0x8470, 0x8450, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0,
+ 0x84E0, 0x8500, 0x8540, 0x8600, 0x8810, 0x8E30, 0x9850, 0xA180, 0xAAB0, 0xB260, 0xB930, 0xBF30, 0xC590, 0xCB00, 0xD000, 0xD530,
+ 0xDA30, 0xDF80, 0xE3D0, 0xE7B0, 0xEB00, 0xEE80, 0xF210, 0xF610, 0xFA30, 0xFE00, 0x01B0, 0x0520, 0x0880, 0x0BB0, 0x0DE0, 0x0F70,
+ 0x1070, 0x1120, 0x11D0, 0x1280, 0x1330, 0x1440, 0x1580, 0x1670, 0x16B0, 0x1750, 0x1810, 0x1890, 0x1980, 0x1AB0, 0x1C00, 0x1D70,
+ 0x1F50, 0x2110, 0x2270, 0x2450, 0x25A0, 0x2770, 0x2970, 0x2BB0, 0x2DB0, 0x3040, 0x3320, 0x3590, 0x3800, 0x3AE0, 0x3DD0, 0x4130,
+ 0x4500, 0x48C0, 0x4C10, 0x4F30, 0x5190, 0x54C0, 0x5730, 0x5A30, 0x5CE0, 0x5F50, 0x6150, 0x6310, 0x6470, 0x65A0, 0x6690, 0x67B0,
+ 0x68A0, 0x6930, 0x68F0, 0x68B0, 0x68E0, 0x68F0, 0x68D0, 0x6860, 0x67D0, 0x6780, 0x6700, 0x66A0, 0x6600, 0x65D0, 0x6550, 0x6440,
+ 0x63D0, 0x62E0, 0x6240, 0x6210, 0x6230, 0x6320, 0x6500, 0x6630, 0x66F0, 0x6770, 0x67C0, 0x6770, 0x6750, 0x6790, 0x6820, 0x68D0,
+ 0x6B30, 0x6E30, 0x7150, 0x75B0, 0x7980, 0x7D00, 0x7EC0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F20, 0x7ED0, 0x7F10, 0x7EB0, 0x7EE0, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F60, 0x7F10, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F40, 0x7F50, 0x7EB0, 0x7F00, 0x7ED0, 0x7F30, 0x7F40,
+ 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00, 0x7F20, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7E90,
+ 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7F30, 0x7F20, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F20, 0x7EE0, 0x7EF0, 0x7F50,
+ 0x7F00, 0x7F30, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F60, 0x7EE0,
+ 0x7E90, 0x7EF0, 0x7EF0, 0x7F30, 0x7EB0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EB0,
+ 0x7F20, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F90, 0x7F00, 0x7F20, 0x7EF0, 0x7EF0, 0x7F80,
+ 0x7F10, 0x7F20, 0x7F00, 0x7ED0, 0x7F30, 0x7F00, 0x7EE0, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0, 0x7EF0, 0x7F00, 0x7F40, 0x7F10,
+ 0x7C60, 0x7A40, 0x7A50, 0x7BF0, 0x7EA0, 0x7EA0, 0x7ED0, 0x7F10, 0x7F20, 0x7F00, 0x7EC0, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F20, 0x7840, 0x6DB0, 0x6740, 0x6280, 0x6130, 0x63F0, 0x6980, 0x7110, 0x7810, 0x7D70, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F50,
+ 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F60, 0x7EC0, 0x7840, 0x6ED0, 0x6430, 0x57F0, 0x4AC0, 0x3C90, 0x2F30, 0x20C0, 0x15F0, 0x0F90,
+ 0x0F40, 0x1580, 0x2090, 0x2F70, 0x41E0, 0x5550, 0x6AB0, 0x7B70, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7E90,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7EF0, 0x7F10, 0x7E60, 0x7900,
+ 0x7380, 0x6FB0, 0x6D30, 0x6CC0, 0x6ED0, 0x7230, 0x7710, 0x7C30, 0x7EB0, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F00, 0x7EF0, 0x7F10,
+ 0x7F70, 0x7F00, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F40, 0x7EF0, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EF0, 0x7F00,
+ 0x7EF0, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7EF0,
+ 0x7F10, 0x7F60, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F80, 0x7EE0, 0x7EF0, 0x7F10, 0x7F10,
+ 0x7F70, 0x7F00, 0x7ED0, 0x7F00, 0x7EE0, 0x7F90, 0x7EF0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F00, 0x7F50,
+ 0x7ED0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F20, 0x7ED0, 0x70B0, 0x6130,
+ 0x4F00, 0x3F90, 0x3280, 0x29A0, 0x2560, 0x25D0, 0x2910, 0x2F20, 0x3640, 0x3EB0, 0x46E0, 0x4F40, 0x5810, 0x60F0, 0x6940, 0x6FA0,
+ 0x73F0, 0x75B0, 0x73D0, 0x7010, 0x6A30, 0x6270, 0x59E0, 0x5110, 0x48B0, 0x40A0, 0x3910, 0x31B0, 0x2C20, 0x2800, 0x25D0, 0x2470,
+ 0x2460, 0x24C0, 0x25B0, 0x26B0, 0x26F0, 0x2720, 0x2540, 0x2350, 0x20D0, 0x1DA0, 0x1A70, 0x1600, 0x1160, 0x0D20, 0x08C0, 0x05D0,
+ 0x02D0, 0x0020, 0xFD90, 0xFB40, 0xF9D0, 0xF820, 0xF640, 0xF3B0, 0xF090, 0xED20, 0xE8C0, 0xE370, 0xDD20, 0xD5F0, 0xCE50, 0xC720,
+ 0xC020, 0xBA20, 0xB480, 0xB0A0, 0xADD0, 0xAAE0, 0xA7F0, 0xA460, 0xA040, 0x9BB0, 0x96B0, 0x9200, 0x8E10, 0x8B80, 0x89B0, 0x88D0,
+ 0x88A0, 0x8910, 0x8A40, 0x8C60, 0x9080, 0x9580, 0x9B40, 0xA140, 0xA7C0, 0xADF0, 0xB560, 0xBC30, 0xC2E0, 0xC900, 0xCEC0, 0xD510,
+ 0xDA80, 0xDF80, 0xE540, 0xE980, 0xEE20, 0xF1D0, 0xF590, 0xF990, 0xFD40, 0x00F0, 0x0420, 0x06B0, 0x0A30, 0x0C30, 0x0EA0, 0x1000,
+ 0x10D0, 0x10D0, 0x10E0, 0x1190, 0x1290, 0x13C0, 0x1490, 0x1520, 0x1570, 0x14F0, 0x1450, 0x1430, 0x14A0, 0x1690, 0x1850, 0x1A70,
+ 0x1CC0, 0x1DD0, 0x1F40, 0x2020, 0x20C0, 0x2190, 0x2290, 0x2360, 0x2310, 0x21B0, 0x1FE0, 0x1C60, 0x17C0, 0x1210, 0x0B60, 0x03A0,
+ 0xFA90, 0xF220, 0xEA20, 0xE190, 0xDA10, 0xD270, 0xCBA0, 0xC590, 0xC0E0, 0xBD80, 0xBB60, 0xBB30, 0xBB40, 0xBC10, 0xBEF0, 0xC2A0,
+ 0xC7C0, 0xCCC0, 0xD320, 0xD7C0, 0xDB90, 0xDF80, 0xE290, 0xE570, 0xE950, 0xEC00, 0xEEF0, 0xF090, 0xF1D0, 0xF200, 0xF0F0, 0xEF30,
+ 0xEBD0, 0xE720, 0xE120, 0xD7B0, 0xCED0, 0xC480, 0xB990, 0xAE00, 0xA200, 0x95D0, 0x8BD0, 0x86B0, 0x8550, 0x84F0, 0x84D0, 0x84B0,
+ 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8460, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8470, 0x8460, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84D0, 0x84F0, 0x8530, 0x85C0, 0x87E0, 0x9080,
+ 0x9D20, 0xA9F0, 0xB740, 0xC430, 0xD0E0, 0xDD70, 0xEA00, 0xF670, 0x0350, 0x0F60, 0x1B10, 0x2630, 0x30C0, 0x54E0, 0x5CC0, 0x63B0,
+ 0x6A20, 0x70D0, 0x7630, 0x7AA0, 0x7DD0, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F00, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7EE0, 0x7CC0, 0x7990, 0x75E0, 0x7140, 0x6BA0, 0x6690, 0x61F0, 0x5E20,
+ 0x5B40, 0x58D0, 0x56D0, 0x55A0, 0x55E0, 0x56E0, 0x58C0, 0x5B50, 0x5E30, 0x6170, 0x6470, 0x6820, 0x6B50, 0x6E10, 0x7120, 0x7410,
+ 0x76D0, 0x7990, 0x7B70, 0x7D80, 0x7EB0, 0x7F10, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20,
+ 0x7F40, 0x7F10, 0x7F30, 0x7F00, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F70, 0x7F40, 0x7EC0, 0x7F10, 0x7F40, 0x7F50, 0x7F10, 0x7E70, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F00, 0x7E80, 0x7EC0,
+ 0x7F00, 0x7F20, 0x7EE0, 0x7980, 0x7270, 0x6B70, 0x6460, 0x5E80, 0x57A0, 0x52E0, 0x4E10, 0x4900, 0x44A0, 0x3F80, 0x3910, 0x32B0,
+ 0x2BC0, 0x2450, 0x1D70, 0x1740, 0x12C0, 0x0F30, 0x0E20, 0x0E60, 0x0FD0, 0x1280, 0x15A0, 0x1970, 0x1D30, 0x2120, 0x25E0, 0x2B80,
+ 0x3330, 0x3BB0, 0x45A0, 0x5160, 0x5C40, 0x66F0, 0x70B0, 0x7930, 0x7EC0, 0x7E90, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7EB0, 0x7EE0,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F00, 0x7EF0, 0x7EC0, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F40, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7BB0, 0x6DA0, 0x5F10, 0x5010, 0x4220, 0x3420, 0x26E0, 0x1AC0, 0x0F60,
+ 0x03D0, 0xF9A0, 0xEFA0, 0xE650, 0xDCF0, 0xD2F0, 0xC8B0, 0xBD30, 0xB010, 0x9FD0, 0x8FE0, 0x8720, 0x8520, 0x84E0, 0x84C0, 0x84C0,
+ 0x84A0, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0,
+ 0x84E0, 0x8510, 0x8590, 0x8790, 0x9180, 0x9FA0, 0xABC0, 0xB700, 0xC0D0, 0xCA90, 0xD3A0, 0xDC60, 0xE4E0, 0xEE90, 0xF7E0, 0x0110,
+ 0x0A10, 0x11E0, 0x1840, 0x1DD0, 0x2210, 0x2530, 0x2880, 0x2B90, 0x2FA0, 0x33E0, 0x3A70, 0x4230, 0x4AD0, 0x5440, 0x5C90, 0x6580,
+ 0x6C20, 0x7150, 0x7610, 0x7960, 0x7C40, 0x7E50, 0x7EF0, 0x7F00, 0x7E90, 0x7ED0, 0x7D60, 0x78A0, 0x72D0, 0x6AD0, 0x61E0, 0x57E0,
+ 0x4C10, 0x3F40, 0x3380, 0x2800, 0x1CE0, 0x1260, 0x0950, 0x0030, 0xF750, 0xEF20, 0xE690, 0xE030, 0xDA90, 0xD5A0, 0xD290, 0xD110,
+ 0xD100, 0xD320, 0xD6D0, 0xDE70, 0xE750, 0xF230, 0xFEB0, 0x0C60, 0x1B70, 0x2A40, 0x39E0, 0x4820, 0x55D0, 0x7B20, 0x7ED0, 0x7EF0,
+ 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F90, 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7960, 0x6550, 0x4C50,
+ 0x3100, 0x1480, 0xF650, 0xDB30, 0xC040, 0xA750, 0x9020, 0x8690, 0x8510, 0x84E0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x84F0, 0x8510, 0x8550, 0x8600, 0x87D0, 0x8DF0, 0x9850, 0xA390,
+ 0xADF0, 0xB820, 0xC1F0, 0xCB70, 0xD490, 0xDCC0, 0xE5A0, 0xECC0, 0xF2D0, 0xF850, 0xFC20, 0x00A0, 0x0390, 0x05B0, 0x07A0, 0x0740,
+ 0x0640, 0x0410, 0x0020, 0xFC80, 0xF790, 0xF250, 0xEC60, 0xE660, 0xDE30, 0xD4A0, 0xCA10, 0xBE10, 0xB0B0, 0xA230, 0x9340, 0x88E0,
+ 0x85B0, 0x8500, 0x84E0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0,
+ 0x84A0, 0x84B0, 0x84C0, 0x84F0, 0x8510, 0x8570, 0x86B0, 0x8B50, 0x9690, 0xA2D0, 0xAEE0, 0xBA00, 0xC580, 0xCF80, 0xD920, 0xE210,
+ 0xEBD0, 0xF570, 0xFFA0, 0x0AC0, 0x1680, 0x2400, 0x2F90, 0x39E0, 0x42B0, 0x4A00, 0x50C0, 0x5510, 0x57A0, 0x5860, 0x5500, 0x4F20,
+ 0x4480, 0x3690, 0x2730, 0x1660, 0x0500, 0xF4B0, 0xE530, 0xD580, 0xC820, 0xBD20, 0xB340, 0xAAF0, 0xA460, 0x9FE0, 0x9C00, 0x9920,
+ 0x9780, 0x9670, 0x9630, 0x9510, 0x9500, 0x9520, 0x94A0, 0x9300, 0x8F70, 0x8B70, 0x8840, 0x8650, 0x8570, 0x8510, 0x8520, 0x84D0,
+ 0x84C0, 0x84B0, 0x84A0, 0x84C0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x84A0, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84E0, 0x8500, 0x8530, 0x8580, 0x8660,
+ 0x8890, 0x8F70, 0x9AF0, 0xA710, 0xB340, 0xBE80, 0xC970, 0xD0D0, 0xD590, 0xD7D0, 0xD740, 0xD4C0, 0xCF20, 0xC770, 0xBE20, 0xB1F0,
+ 0xA3F0, 0x9430, 0x88B0, 0x8560, 0x84E0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8460, 0x8450, 0x8450,
+ 0x8460, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84F0,
+ 0x8550, 0x8550, 0x85A0, 0x8620, 0x86B0, 0x8710, 0x8780, 0x87B0, 0x87C0, 0x87E0, 0x87B0, 0x8790, 0x8760, 0x8700, 0x86D0, 0x86A0,
+ 0x8680, 0x8670, 0x8650, 0x8630, 0x8610, 0x85F0, 0x8560, 0x8580, 0x8550, 0x8530, 0x8510, 0x84F0, 0x8500, 0x84D0, 0x84C0, 0x8480,
+ 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0,
+ 0x84C0, 0x84D0, 0x8500, 0x8540, 0x8610, 0x8810, 0x8D90, 0x9770, 0xA050, 0xA890, 0xB030, 0xB560, 0xB920, 0xBAF0, 0xBC50, 0xBCC0,
+ 0xBC60, 0xBB10, 0xB980, 0xB6D0, 0xB3F0, 0xAF60, 0xA9C0, 0xA390, 0x9CA0, 0x94E0, 0x8DF0, 0x88F0, 0x8660, 0x8560, 0x8500, 0x84E0,
+ 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x84A0,
+ 0x84A0, 0x84C0, 0x84D0, 0x8500, 0x8540, 0x85F0, 0x8750, 0x8A20, 0x8E60, 0x9370, 0x9960, 0x9F80, 0xA5F0, 0xACD0, 0xB2A0, 0xB690,
+ 0xB820, 0xB6D0, 0xB190, 0xA7E0, 0x9B20, 0x8D70, 0x8630, 0x8500, 0x84C0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8470, 0x8480,
+ 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0,
+ 0x84B0, 0x84D0, 0x84F0, 0x8530, 0x8600, 0x8730, 0x8AB0, 0x9160, 0x98C0, 0x9F80, 0xA600, 0xAC70, 0xB260, 0xB7F0, 0xBCE0, 0xC1C0,
+ 0xC670, 0xCB20, 0xCFB0, 0xD400, 0xD820, 0xDBA0, 0xDEB0, 0xE1B0, 0xE500, 0xE780, 0xE8E0, 0xE960, 0xE6E0, 0xE500, 0xE310, 0xE050,
+ 0xDD10, 0xD930, 0xD4C0, 0xD0D0, 0xCCE0, 0xC880, 0xC560, 0xC2E0, 0xBFE0, 0xBCA0, 0xB9D0, 0xB740, 0xB490, 0xB200, 0xAFD0, 0xAE20,
+ 0xADE0, 0xADB0, 0xADF0, 0xADF0, 0xAE40, 0xAE90, 0xAEA0, 0xAED0, 0xAFC0, 0xB090, 0xB190, 0xB2C0, 0xB4C0, 0xB6B0, 0xB920, 0xBBA0,
+ 0xBE00, 0xBFF0, 0xC220, 0xC430, 0xC710, 0xC9F0, 0xCD00, 0xD050, 0xD3F0, 0xD6D0, 0xDA40, 0xDC70, 0xDE80, 0xE0F0, 0xE360, 0xE590,
+ 0xE750, 0xE9A0, 0xEB80, 0xED80, 0xEFC0, 0xF180, 0xF330, 0xF470, 0xF5E0, 0xF7C0, 0xF930, 0xFAD0, 0xFC60, 0xFCF0, 0xFD30, 0xFD80,
+ 0xFD60, 0xFD90, 0xFD30, 0xFD90, 0xFDA0, 0xFDB0, 0xFDB0, 0xFCE0, 0xFCD0, 0xFCB0, 0xFC10, 0xFC20, 0xFBC0, 0xFC60, 0xFCD0, 0xFCD0,
+ 0xFDB0, 0xFE20, 0xFEA0, 0xFE90, 0xFE60, 0xFF60, 0x0040, 0x0190, 0x02A0, 0x0420, 0x0640, 0x0860, 0x0A70, 0x0CC0, 0x0EF0, 0x11F0,
+ 0x1560, 0x1870, 0x1B70, 0x1F80, 0x23F0, 0x28F0, 0x2EA0, 0x3510, 0x3AD0, 0x4130, 0x4660, 0x4C50, 0x5200, 0x5640, 0x5B60, 0x5F90,
+ 0x63B0, 0x67A0, 0x6A50, 0x6D30, 0x6F60, 0x7070, 0x71C0, 0x7210, 0x72A0, 0x7300, 0x7210, 0x7150, 0x6F60, 0x6E00, 0x6BB0, 0x68B0,
+ 0x6660, 0x6340, 0x6080, 0x5DB0, 0x5AD0, 0x5910, 0x5800, 0x5800, 0x5950, 0x5B90, 0x5F70, 0x63C0, 0x68F0, 0x6F20, 0x74E0, 0x7B60,
+ 0x7ED0, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F50, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7EF0, 0x7280, 0x6460, 0x55C0, 0x44A0,
+ 0x3560, 0x26F0, 0x1910, 0x0DB0, 0x02E0, 0xFA10, 0xF400, 0xEF60, 0xEC90, 0xEB60, 0xEAB0, 0xEB00, 0xEBD0, 0xED30, 0xEEB0, 0xF020,
+ 0xF350, 0xF700, 0xFB40, 0x00B0, 0x05E0, 0x0BA0, 0x1090, 0x1610, 0x1BE0, 0x2140, 0x2810, 0x2E80, 0x3570, 0x3B40, 0x40D0, 0x45F0,
+ 0x49C0, 0x4CD0, 0x4F10, 0x5040, 0x50D0, 0x5010, 0x4E90, 0x4C60, 0x4940, 0x4610, 0x4100, 0x3A70, 0x3270, 0x2910, 0x1E40, 0x1270,
+ 0x05B0, 0xF920, 0xEC20, 0xDFC0, 0xD450, 0xC8A0, 0xBF20, 0xB610, 0xAE20, 0xA6F0, 0xA020, 0x9B80, 0x9770, 0x9440, 0x9170, 0x8F00,
+ 0x8D40, 0x8B90, 0x8A80, 0x8990, 0x88F0, 0x88A0, 0x8830, 0x87F0, 0x87D0, 0x8790, 0x8780, 0x8740, 0x8700, 0x86C0, 0x86B0, 0x8710,
+ 0x8770, 0x87F0, 0x88B0, 0x89E0, 0x8C00, 0x8EE0, 0x9270, 0x9600, 0x98A0, 0x9A70, 0x9B90, 0x9C20, 0x9C30, 0x9BF0, 0x9BF0, 0x9A70,
+ 0x99B0, 0x9850, 0x9620, 0x9480, 0x9240, 0x90F0, 0x8FA0, 0x8E50, 0x8DA0, 0x8D00, 0x8C40, 0x8B90, 0x8B00, 0x8AA0, 0x8A60, 0x8A50,
+ 0x8AB0, 0x8B70, 0x8CC0, 0x8F10, 0x9210, 0x95C0, 0x9A10, 0x9EB0, 0xA320, 0xA950, 0xAF30, 0xB4A0, 0xBB60, 0xC150, 0xC800, 0xCEA0,
+ 0xD470, 0xDAB0, 0xE140, 0xE750, 0xED70, 0xF1D0, 0xF6C0, 0xFAB0, 0xFF30, 0x0450, 0x0920, 0x0F10, 0x13C0, 0x18C0, 0x1DF0, 0x23D0,
+ 0x2AA0, 0x30C0, 0x36F0, 0x3BB0, 0x3FF0, 0x44B0, 0x4870, 0x4CF0, 0x50D0, 0x5430, 0x5870, 0x5C00, 0x5F70, 0x6330, 0x65C0, 0x68C0,
+ 0x6B50, 0x6D70, 0x6FE0, 0x7110, 0x72B0, 0x7430, 0x7540, 0x7630, 0x7600, 0x7620, 0x7650, 0x7650, 0x76B0, 0x7640, 0x75C0, 0x7520,
+ 0x7420, 0x7380, 0x7290, 0x7170, 0x6FE0, 0x6D10, 0x6B80, 0x68A0, 0x6510, 0x62B0, 0x5EB0, 0x5B60, 0x57F0, 0x5490, 0x50B0, 0x4C80,
+ 0x4890, 0x44F0, 0x4140, 0x3E20, 0x3B80, 0x3980, 0x3760, 0x3590, 0x34F0, 0x33B0, 0x33D0, 0x3390, 0x3430, 0x3540, 0x3590, 0x3710,
+ 0x38A0, 0x3A40, 0x3C30, 0x3DE0, 0x3F60, 0x4000, 0x40B0, 0x41B0, 0x4240, 0x42D0, 0x4270, 0x4100, 0x3FD0, 0x3E00, 0x3C60, 0x3C10,
+ 0x3BD0, 0x3CB0, 0x3D60, 0x3E50, 0x3F50, 0x4090, 0x4210, 0x4320, 0x4460, 0x45D0, 0x4710, 0x4770, 0x4660, 0x4470, 0x4230, 0x3EB0,
+ 0x3B70, 0x3780, 0x3380, 0x2FA0, 0x2C00, 0x28F0, 0x2600, 0x21F0, 0x1F10, 0x1B70, 0x1830, 0x14C0, 0x1150, 0x0DB0, 0x0860, 0x0290,
+ 0xFB10, 0xF2F0, 0xEB20, 0xE330, 0xDCD0, 0xD820, 0xD4C0, 0xD330, 0xD300, 0xD3B0, 0xD450, 0xD5E0, 0xD8C0, 0xDC60, 0xE0B0, 0xE5B0,
+ 0xEBC0, 0xF380, 0xFC40, 0x04F0, 0x0E80, 0x1820, 0x22C0, 0x2D90, 0x37F0, 0x4160, 0x48F0, 0x5150, 0x5670, 0x5A60, 0x5CF0, 0x5D90,
+ 0x5D20, 0x5AA0, 0x55F0, 0x4ED0, 0x4420, 0x39A0, 0x2D50, 0x2030, 0x11E0, 0x01F0, 0xF270, 0xE280, 0xD3A0, 0xC4D0, 0xB840, 0xACB0,
+ 0xA250, 0x9890, 0x90D0, 0x8B30, 0x8840, 0x86C0, 0x8600, 0x85C0, 0x8590, 0x8590, 0x8550, 0x8590, 0x85B0, 0x85D0, 0x8610, 0x85E0,
+ 0x85F0, 0x8610, 0x8630, 0x8650, 0x86A0, 0x86C0, 0x86E0, 0x86E0, 0x86C0, 0x86C0, 0x86B0, 0x86A0, 0x8690, 0x8670, 0x8660, 0x8640,
+ 0x8640, 0x8630, 0x8620, 0x8630, 0x8640, 0x8650, 0x8660, 0x8670, 0x86A0, 0x8700, 0x87B0, 0x88C0, 0x8AB0, 0x8DE0, 0x9200, 0x9730,
+ 0x9D00, 0xA2F0, 0xA940, 0xB040, 0xB7C0, 0xBF30, 0xC6F0, 0xD150, 0xD930, 0xE140, 0xE880, 0xEF50, 0xF680, 0xFD80, 0x0550, 0x0DD0,
+ 0x1600, 0x1F00, 0x28F0, 0x3280, 0x3BC0, 0x4520, 0x4EF0, 0x57F0, 0x6060, 0x6840, 0x6F40, 0x7520, 0x7970, 0x7CB0, 0x7E70, 0x7EE0,
+ 0x7F00, 0x7ED0, 0x7D90, 0x7A20, 0x74D0, 0x6E70, 0x6720, 0x5E40, 0x5430, 0x48B0, 0x3CE0, 0x2FA0, 0x2210, 0x1440, 0x0760, 0xFBD0,
+ 0xF0D0, 0xE720, 0xDF80, 0xD8F0, 0xD3B0, 0xCF60, 0xCC40, 0xCA70, 0xC960, 0xC910, 0xC910, 0xC9B0, 0xCAC0, 0xCB70, 0xCBD0, 0xCC50,
+ 0xCBE0, 0xCAD0, 0xCA30, 0xC8B0, 0xC820, 0xC780, 0xC7B0, 0xC810, 0xC7B0, 0xC7B0, 0xC6E0, 0xC600, 0xC580, 0xC4B0, 0xC420, 0xC2C0,
+ 0xC120, 0xBE90, 0xBC20, 0xBA20, 0xB8D0, 0xB830, 0xB6C0, 0xB530, 0xB310, 0xB090, 0xADE0, 0xAB70, 0xA930, 0xA740, 0xA5A0, 0xA470,
+ 0xA2E0, 0xA190, 0xA0E0, 0xA0C0, 0xA030, 0x9F50, 0x9E20, 0x9DA0, 0x9D10, 0x9C00, 0x9AF0, 0x98C0, 0x95F0, 0x9360, 0x90A0, 0x8E90,
+ 0x8D10, 0x8BB0, 0x8AF0, 0x8AD0, 0x8AB0, 0x8A70, 0x8AE0, 0x8BC0, 0x8E60, 0x9320, 0x9A90, 0xA440, 0xAE60, 0xB940, 0xC560, 0xD130,
+ 0xDC70, 0xE730, 0xF150, 0xFAB0, 0x0340, 0x0AC0, 0x1130, 0x18C0, 0x1FF0, 0x2770, 0x2E00, 0x3340, 0x35B0, 0x3300, 0x29C0, 0x1A80,
+ 0x0530, 0xEF70, 0xDB20, 0xCB20, 0xBF60, 0xB730, 0xB1C0, 0xAD00, 0xA810, 0xA180, 0x9AE0, 0x93D0, 0x8DD0, 0x89C0, 0x8760, 0x8610,
+ 0x8580, 0x8530, 0x8500, 0x84E0, 0x84D0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470,
+ 0x8450, 0x8470, 0x8470, 0x8470, 0x8490, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84B0,
+ 0x84C0, 0x84F0, 0x8570, 0x8920, 0x9F80, 0xB7A0, 0xD0A0, 0xE550, 0xF730, 0x0670, 0x1340, 0x1E90, 0x2860, 0x2FC0, 0x35F0, 0x3930,
+ 0x3900, 0x3590, 0x3010, 0x29B0, 0x2220, 0x19D0, 0x11C0, 0x08A0, 0x0040, 0xF7C0, 0xEE70, 0xCB00, 0xBE20, 0xAFA0, 0x9EE0, 0x8E30,
+ 0x8630, 0x84F0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8480, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8430, 0x8420, 0x8420, 0x8430, 0x8420, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8490,
+ 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8510, 0x8540, 0x85B0, 0x8690, 0x8860, 0x8C40, 0x9260, 0x99A0, 0xA000,
+ 0xA650, 0xABD0, 0xB020, 0xB400, 0xB710, 0xBAA0, 0xBDC0, 0xC070, 0xC430, 0xC770, 0xC8F0, 0xCA00, 0xC940, 0xC860, 0xC600, 0xC3B0,
+ 0xC0C0, 0xBE50, 0xBCC0, 0xBB90, 0xB9D0, 0xB870, 0xB770, 0xB6B0, 0xB5C0, 0xB650, 0xB7E0, 0xBB70, 0xBFA0, 0xC4A0, 0xC9E0, 0xCF00,
+ 0xD400, 0xDA20, 0xE0B0, 0xE770, 0xEEF0, 0xF690, 0xFE90, 0x0570, 0x0BF0, 0x1320, 0x18D0, 0x2000, 0x26C0, 0x2D20, 0x3350, 0x39E0,
+ 0x4010, 0x45B0, 0x4B70, 0x5160, 0x55C0, 0x5B10, 0x5FD0, 0x6460, 0x6950, 0x6D00, 0x7080, 0x73A0, 0x75D0, 0x7830, 0x79B0, 0x7B20,
+ 0x7BD0, 0x7C60, 0x7D40, 0x7D90, 0x7DF0, 0x7DC0, 0x7DC0, 0x7D90, 0x7D90, 0x7D40, 0x7C90, 0x7BB0, 0x7AB0, 0x78E0, 0x7650, 0x7310,
+ 0x6EE0, 0x56F0, 0x4F30, 0x4870, 0x4180, 0x3AB0, 0x3430, 0x2E60, 0x29A0, 0x25C0, 0x2290, 0x1FD0, 0x1CC0, 0x1AE0, 0x19C0, 0x1930,
+ 0x1AA0, 0x1C40, 0x1F50, 0x2230, 0x2570, 0x2960, 0x2D10, 0x3120, 0x3560, 0x39F0, 0x4100, 0x46A0, 0x4CC0, 0x52D0, 0x58B0, 0x5F20,
+ 0x6540, 0x6A90, 0x6FF0, 0x7490, 0x78F0, 0x7BC0, 0x7DC0, 0x7EC0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7E70, 0x7E20, 0x7E40, 0x7EB0,
+ 0x7F30, 0x7F00, 0x7F00, 0x7F10, 0x7EF0, 0x7DB0, 0x79A0, 0x7400, 0x6D90, 0x6750, 0x6260, 0x5EA0, 0x5D80, 0x5E80, 0x6120, 0x64C0,
+ 0x69C0, 0x6F10, 0x7570, 0x7BE0, 0x7EF0, 0x7F00, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10,
+ 0x7EA0, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F50, 0x7F10, 0x7F10, 0x7F40, 0x7F10, 0x7F60, 0x7EE0, 0x7F10, 0x7F10, 0x7F10,
+ 0x7F60, 0x7F10, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60,
+ 0x7F10, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F30, 0x7EF0, 0x7E90, 0x7ED0, 0x7F00, 0x7F10, 0x7F10, 0x7E90, 0x7F00, 0x6050, 0x4390, 0x3110,
+ 0x2800, 0x27C0, 0x2E40, 0x39A0, 0x4900, 0x59D0, 0x6BD0, 0x79E0, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7F50, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7D20, 0x6360, 0x3EB0, 0x14E0, 0xE7D0, 0xBAD0, 0x9200, 0x8570, 0x84E0, 0x84C0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8510, 0x8520, 0x8540, 0x8560, 0x8570, 0x8550, 0x8530, 0x8520,
+ 0x8510, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x8500, 0x8500, 0x8520, 0x8560, 0x85E0, 0x8740, 0x8B20, 0x9540, 0x9F20, 0xA860, 0xAFC0,
+ 0xB4F0, 0xB8E0, 0xBA80, 0xBB50, 0xBA60, 0xB830, 0xB450, 0xAEF0, 0xA7D0, 0x9F40, 0x95F0, 0x8DD0, 0x88A0, 0x8670, 0x8590, 0x8540,
+ 0x8520, 0x8500, 0x8500, 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x84F0, 0x8500,
+ 0x8510, 0x8520, 0x8550, 0x8580, 0x85E0, 0x8670, 0x8770, 0x8930, 0x8C40, 0x9130, 0x9580, 0x9A80, 0x9F60, 0xA3C0, 0xA8A0, 0xAD80,
+ 0xB240, 0xB710, 0xBB20, 0xBF10, 0xC200, 0xC510, 0xC820, 0xCAC0, 0xCD40, 0xCF80, 0xD160, 0xD380, 0xD520, 0xD7E0, 0xDA40, 0xDC50,
+ 0xE000, 0xE3F0, 0xE860, 0xECC0, 0xF230, 0xF780, 0xFC60, 0x0200, 0x07E0, 0x0DC0, 0x1480, 0x1A50, 0x20E0, 0x27F0, 0x2E90, 0x35F0,
+ 0x3CE0, 0x4450, 0x4BF0, 0x5300, 0x5A40, 0x6040, 0x6760, 0x6DF0, 0x7490, 0x7C00, 0x7ED0, 0x7F10, 0x7EF0, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F40, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x78A0, 0x6A30, 0x5AF0, 0x4C30, 0x3E40, 0x3090, 0x2380, 0x16B0, 0x0B20, 0x00E0, 0xF850,
+ 0xF230, 0xED70, 0xE8F0, 0xE450, 0xDE30, 0xD810, 0xD280, 0xCD40, 0xCA00, 0xC960, 0xCB50, 0xCFF0, 0xD580, 0xDC30, 0xE330, 0xE9E0,
+ 0xF000, 0xF410, 0xF620, 0xF510, 0xF230, 0xEC30, 0xE440, 0xDB30, 0xD080, 0xC4A0, 0xB880, 0xAAB0, 0x9D70, 0x90A0, 0x88E0, 0x8630,
+ 0x8560, 0x8520, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0,
+ 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84C0, 0x84C0,
+ 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x84D0, 0x8500, 0x84F0, 0x84F0, 0x84B0, 0x8520, 0x8540, 0x8580, 0x85E0, 0x86A0, 0x8800, 0x8AE0,
+ 0x8FD0, 0x96E0, 0x9D50, 0xA350, 0xA9F0, 0xB080, 0xB640, 0xBBF0, 0xC1D0, 0xC710, 0xCCB0, 0xD310, 0xD870, 0xDD90, 0xE2C0, 0xE740,
+ 0xEAF0, 0xED80, 0xEFE0, 0xF260, 0xF420, 0xF600, 0xF790, 0xF810, 0xF910, 0xF920, 0xF900, 0xF950, 0xF910, 0xF940, 0xFA40, 0xFB40,
+ 0xFC20, 0xFD20, 0xFD60, 0xFE10, 0xFF30, 0x0000, 0x00D0, 0x0190, 0x0360, 0x04E0, 0x0640, 0x07F0, 0x08B0, 0x0960, 0x0A00, 0x0A30,
+ 0x0B60, 0x0C50, 0x0D30, 0x0ED0, 0x1050, 0x12A0, 0x1440, 0x15F0, 0x1810, 0x1A70, 0x1CA0, 0x1F20, 0x22E0, 0x2710, 0x2BB0, 0x31B0,
+ 0x3760, 0x3D20, 0x4280, 0x4780, 0x4BF0, 0x4FF0, 0x5360, 0x5590, 0x5780, 0x5970, 0x5B70, 0x5DC0, 0x6010, 0x6280, 0x64A0, 0x65A0,
+ 0x6690, 0x6730, 0x66C0, 0x66D0, 0x6730, 0x6810, 0x68E0, 0x68B0, 0x68B0, 0x6740, 0x6660, 0x6480, 0x62C0, 0x6080, 0x5D10, 0x5A90,
+ 0x5730, 0x5360, 0x5010, 0x4C10, 0x4780, 0x4280, 0x3C60, 0x36C0, 0x3000, 0x2A50, 0x2420, 0x1D40, 0x1650, 0x0E10, 0x0600, 0xFE40,
+ 0xF680, 0xF000, 0xE940, 0xE300, 0xDDB0, 0xD790, 0xD1A0, 0xCC50, 0xC730, 0xC2E0, 0xBE60, 0xB9C0, 0xB540, 0xB100, 0xADA0, 0xAA70,
+ 0xA810, 0xA640, 0xA410, 0xA2D0, 0xA170, 0xA0A0, 0x9F40, 0x9D80, 0x9BA0, 0x9A00, 0x9890, 0x97B0, 0x9700, 0x9760, 0x9720, 0x96E0,
+ 0x96B0, 0x9570, 0x94B0, 0x9460, 0x94B0, 0x94A0, 0x9440, 0x93E0, 0x9350, 0x92B0, 0x9130, 0x9040, 0x8F00, 0x8DC0, 0x8CA0, 0x8C00,
+ 0x8B10, 0x8A70, 0x89C0, 0x8940, 0x88E0, 0x8840, 0x87F0, 0x8770, 0x8730, 0x86E0, 0x8660, 0x8640, 0x8620, 0x8600, 0x85E0, 0x85C0,
+ 0x85A0, 0x8590, 0x8570, 0x8560, 0x8540, 0x8530, 0x8530, 0x8520, 0x8520, 0x8560, 0x8520, 0x8510, 0x8510, 0x8510, 0x8500, 0x8500,
+ 0x8510, 0x8500, 0x8510, 0x8510, 0x8520, 0x8520, 0x8520, 0x8520, 0x8520, 0x8530, 0x8530, 0x8540, 0x8550, 0x8560, 0x8580, 0x85A0,
+ 0x85B0, 0x85D0, 0x85D0, 0x85E0, 0x8600, 0x85D0, 0x85E0, 0x85E0, 0x85F0, 0x8610, 0x8630, 0x8660, 0x8680, 0x8680, 0x8690, 0x86B0,
+ 0x86E0, 0x8710, 0x8760, 0x87D0, 0x8840, 0x88E0, 0x89A0, 0x8A40, 0x8A90, 0x8AB0, 0x8B10, 0x8B60, 0x8C30, 0x8D40, 0x8DB0, 0x8EF0,
+ 0x8FB0, 0x9010, 0x9090, 0x9120, 0x9230, 0x9350, 0x9410, 0x9560, 0x9680, 0x97A0, 0x9890, 0x9990, 0x9AF0, 0x9B90, 0x9C70, 0x9CD0,
+ 0x9D10, 0x9D30, 0x9E00, 0x9E40, 0x9D40, 0x9C90, 0x9CD0, 0x9CB0, 0x9C60, 0x9C20, 0x9C10, 0x9BC0, 0x9B70, 0x9B60, 0x9B50, 0x9B60,
+ 0x9B40, 0x9AD0, 0x9A30, 0x9A20, 0x99B0, 0x99E0, 0x99A0, 0x9930, 0x9810, 0x9720, 0x96C0, 0x9680, 0x96A0, 0x9700, 0x9690, 0x9630,
+ 0x95C0, 0x94F0, 0x94A0, 0x93A0, 0x9350, 0x9290, 0x91A0, 0x9090, 0x8F50, 0x8E40, 0x8D40, 0x8C90, 0x8C30, 0x8B90, 0x8B40, 0x8AA0,
+ 0x8A30, 0x89F0, 0x89B0, 0x8970, 0x8940, 0x8930, 0x8980, 0x89D0, 0x8AD0, 0x8BD0, 0x8CC0, 0x8DF0, 0x8EE0, 0x9010, 0x9140, 0x92C0,
+ 0x9530, 0x9720, 0x9970, 0x9B10, 0x9D20, 0x9F70, 0xA160, 0xA380, 0xA580, 0xA770, 0xA960, 0xAB60, 0xADC0, 0xAF70, 0xB190, 0xB3D0,
+ 0xB5F0, 0xB840, 0xBA60, 0xBCC0, 0xBF90, 0xC240, 0xC510, 0xC7A0, 0xC910, 0xCBA0, 0xCD70, 0xD060, 0xD2C0, 0xD4F0, 0xD750, 0xDA40,
+ 0xDCA0, 0xDF30, 0xE1B0, 0xE570, 0xE830, 0xEB90, 0xEF40, 0xF240, 0xF560, 0xF840, 0xFC40, 0xFF50, 0x0390, 0x0870, 0x0CE0, 0x1180,
+ 0x1630, 0x1A60, 0x1F60, 0x2340, 0x2700, 0x2B40, 0x2FC0, 0x34D0, 0x3960, 0x3D90, 0x41B0, 0x4470, 0x4840, 0x4AF0, 0x4DF0, 0x50E0,
+ 0x5320, 0x55B0, 0x57B0, 0x59B0, 0x5BC0, 0x5D50, 0x5F30, 0x60E0, 0x61F0, 0x6310, 0x6370, 0x6440, 0x6450, 0x63B0, 0x63C0, 0x6310,
+ 0x6390, 0x63B0, 0x63A0, 0x63F0, 0x62B0, 0x6220, 0x6140, 0x5FF0, 0x6000, 0x5F20, 0x5E80, 0x5DD0, 0x5C40, 0x5BC0, 0x5A10, 0x5930,
+ 0x5860, 0x5770, 0x57D0, 0x57A0, 0x5770, 0x5780, 0x56A0, 0x5690, 0x5690, 0x56B0, 0x5760, 0x57C0, 0x5880, 0x58E0, 0x5920, 0x58F0,
+ 0x57F0, 0x57A0, 0x56A0, 0x55D0, 0x5490, 0x5370, 0x5220, 0x5010, 0x4E70, 0x4D20, 0x4AD0, 0x4980, 0x4780, 0x4540, 0x43D0, 0x4200,
+ 0x4120, 0x3F10, 0x3D90, 0x3CB0, 0x3BC0, 0x3B40, 0x3A90, 0x3A10, 0x3A40, 0x3A10, 0x3A60, 0x3B20, 0x3B50, 0x3C90, 0x3DA0, 0x3FA0,
+ 0x40F0, 0x4250, 0x44F0, 0x4700, 0x49A0, 0x4C60, 0x4E10, 0x5170, 0x5460, 0x5860, 0x5C10, 0x5FB0, 0x63B0, 0x6720, 0x6A10, 0x6E30,
+ 0x71E0, 0x7560, 0x7890, 0x7B70, 0x7DC0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F20, 0x7EA0,
+ 0x7ED0, 0x7ED0, 0x7F10, 0x7F00, 0x7EA0, 0x7EF0, 0x7EC0, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F50, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F00,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7ED0, 0x7EE0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7970, 0x6FC0, 0x6510,
+ 0x5AB0, 0x4F70, 0x43C0, 0x3850, 0x2BA0, 0x20D0, 0x1780, 0x0E90, 0x07E0, 0x0200, 0xFDD0, 0xFAF0, 0xF900, 0xF7D0, 0xF790, 0xF7E0,
+ 0xF7A0, 0xF680, 0xF450, 0xEFB0, 0xE9E0, 0xE250, 0xD820, 0xCE00, 0xC390, 0xB870, 0xAD60, 0xA230, 0x9690, 0x8D20, 0x87F0, 0x8620,
+ 0x8550, 0x8510, 0x8500, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84B0, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84E0,
+ 0x84F0, 0x8500, 0x8530, 0x8510, 0x8520, 0x8530, 0x8530, 0x8530, 0x8530, 0x8520, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x8500,
+ 0x8520, 0x8530, 0x8550, 0x8570, 0x8590, 0x85C0, 0x85E0, 0x8600, 0x8620, 0x8680, 0x8670, 0x8670, 0x8670, 0x8650, 0x8630, 0x8610,
+ 0x85F0, 0x85E0, 0x85C0, 0x85B0, 0x8590, 0x8580, 0x8570, 0x8560, 0x8560, 0x8560, 0x8560, 0x8570, 0x85C0, 0x85A0, 0x85C0, 0x8600,
+ 0x8640, 0x86D0, 0x87A0, 0x8920, 0x8B80, 0x8F30, 0x93D0, 0x98D0, 0x9D80, 0xA340, 0xA840, 0xAE00, 0xB330, 0xB820, 0xBCC0, 0xC140,
+ 0xC4D0, 0xC980, 0xCDD0, 0xD230, 0xD5B0, 0xD900, 0xDBC0, 0xDD40, 0xDED0, 0xE060, 0xE220, 0xE370, 0xE4E0, 0xE6C0, 0xE840, 0xE8E0,
+ 0xE9A0, 0xEAC0, 0xEAE0, 0xEB40, 0xEAD0, 0xEA30, 0xE9D0, 0xE920, 0xE9D0, 0xEA50, 0xEA20, 0xEA80, 0xEAC0, 0xEB10, 0xEB00, 0xE9F0,
+ 0xE9C0, 0xE930, 0xE980, 0xE9A0, 0xE9E0, 0xEB10, 0xEC20, 0xEC70, 0xEC50, 0xEC10, 0xEBA0, 0xEB10, 0xEB10, 0xEB50, 0xEBF0, 0xECB0,
+ 0xEE30, 0xEFF0, 0xF1A0, 0xF250, 0xF3B0, 0xF4D0, 0xF5C0, 0xF710, 0xF800, 0xFA40, 0xFBD0, 0xFD50, 0xFF70, 0x0160, 0x03D0, 0x0650,
+ 0x08C0, 0x0C00, 0x0DF0, 0x10D0, 0x1310, 0x1570, 0x1840, 0x1A90, 0x1E20, 0x2110, 0x24A0, 0x2890, 0x2C80, 0x3120, 0x3620, 0x3950,
+ 0x3D50, 0x40B0, 0x4420, 0x4690, 0x4860, 0x4B00, 0x4D80, 0x4F50, 0x5130, 0x5280, 0x5410, 0x54D0, 0x5560, 0x5540, 0x54D0, 0x5510,
+ 0x5570, 0x5540, 0x5590, 0x5530, 0x5600, 0x56D0, 0x57B0, 0x58E0, 0x5A30, 0x5B30, 0x5C60, 0x5D20, 0x5DD0, 0x5E80, 0x6040, 0x6240,
+ 0x63F0, 0x6630, 0x6760, 0x68C0, 0x6A00, 0x6AF0, 0x6C70, 0x6D10, 0x6E70, 0x6E70, 0x6F00, 0x6F90, 0x6F30, 0x7000, 0x6FE0, 0x6F80,
+ 0x6F20, 0x6E80, 0x6D90, 0x6CB0, 0x6C20, 0x6BC0, 0x6A20, 0x68D0, 0x6700, 0x64C0, 0x63B0, 0x6220, 0x6060, 0x5E10, 0x5B90, 0x58E0,
+ 0x5640, 0x5390, 0x5140, 0x4E90, 0x4CB0, 0x4A70, 0x48F0, 0x4750, 0x4630, 0x46C0, 0x4720, 0x47D0, 0x48B0, 0x48C0, 0x49A0, 0x49D0,
+ 0x4A70, 0x4B60, 0x4C90, 0x4F10, 0x5240, 0x55C0, 0x5A00, 0x5D70, 0x61E0, 0x6560, 0x6810, 0x6AB0, 0x6C00, 0x6B50, 0x68E0, 0x6340,
+ 0x5C40, 0x5290, 0x4880, 0x3E00, 0x3320, 0x29D0, 0x2020, 0x1880, 0x1140, 0x0AB0, 0x04E0, 0xFFC0, 0xFB50, 0xF730, 0xF2B0, 0xED00,
+ 0xE790, 0xE0E0, 0xDA30, 0xD240, 0xCA30, 0xC1C0, 0xB900, 0xB050, 0xA670, 0x89E0, 0x8700, 0x85C0, 0x8540, 0x84F0, 0x84F0, 0x84D0,
+ 0x84C0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x84C0, 0x8470, 0x8470, 0x8470, 0x8460,
+ 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8480, 0x8460, 0x8480, 0x8460, 0x8460, 0x8470, 0x8480, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0,
+ 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8530, 0x8590, 0x8670, 0x88C0, 0x8EA0, 0x9800, 0xA180, 0xAB90, 0xB460, 0xBC90, 0xC3F0,
+ 0xCB70, 0xD220, 0xD870, 0xDED0, 0xE4B0, 0xEAB0, 0xEFB0, 0xF4E0, 0xF8E0, 0xFD10, 0x0040, 0x0270, 0x0540, 0x0690, 0x0860, 0x0A70,
+ 0x0C50, 0x0F30, 0x11B0, 0x1500, 0x1800, 0x1B10, 0x1F60, 0x2440, 0x2B60, 0x32A0, 0x3AA0, 0x4490, 0x4F30, 0x5AB0, 0x6640, 0x7140,
+ 0x7C00, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x5BE0,
+ 0x2FC0, 0xFF50, 0xC750, 0x93A0, 0x84F0, 0x84A0, 0x8480, 0x8470, 0x8480, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8480,
+ 0x8480, 0x8490, 0x84B0, 0x84D0, 0x85A0, 0x9570, 0xBDD0, 0xE830, 0x12B0, 0x37C0, 0x5190, 0x5E30, 0x5D00, 0x4F90, 0x3BD0, 0x2670,
+ 0x1600, 0x08C0, 0x01D0, 0xFE90, 0xFD00, 0xFA90, 0xF400, 0xE960, 0xD910, 0xC430, 0xAA30, 0x8DC0, 0x8520, 0x84C0, 0x8490, 0x8480,
+ 0x8470, 0x8470, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84D0, 0x84E0, 0x84B0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460,
+ 0x8470, 0x8410, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84F0, 0x84D0, 0x84D0, 0x84E0, 0x8500, 0x8510, 0x8530, 0x8590,
+ 0x8590, 0x85C0, 0x85F0, 0x8610, 0x8640, 0x8680, 0x86A0, 0x8700, 0x8780, 0x8870, 0x8AE0, 0x90A0, 0x9B30, 0xA890, 0xB860, 0xC950,
+ 0xDE10, 0xF080, 0x0260, 0x1240, 0x1F90, 0x2A90, 0x30B0, 0x31E0, 0x2C80, 0x1ED0, 0x0B70, 0xF220, 0xD580, 0xB9B0, 0xA110, 0x8F30,
+ 0x8810, 0x8610, 0x8580, 0x8540, 0x8510, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84E0,
+ 0x84F0, 0x8520, 0x8550, 0x85B0, 0x8630, 0x86F0, 0x8840, 0x8A30, 0x8D20, 0x9080, 0x9380, 0x9690, 0x9960, 0x9CA0, 0x9FD0, 0xA3C0,
+ 0xA960, 0xB0D0, 0xBA10, 0xC520, 0xD140, 0xDD90, 0xEA90, 0xF760, 0x0420, 0x0F90, 0x1910, 0x2120, 0x29A0, 0x3110, 0x3990, 0x4330,
+ 0x4E60, 0x5A50, 0x66B0, 0x7200, 0x7AA0, 0x7ED0, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x79E0, 0x6D40,
+ 0x5870, 0x3B10, 0x1860, 0xF340, 0xCF80, 0xB010, 0x95F0, 0x8810, 0x8580, 0x8510, 0x84E0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84B0, 0x84B0, 0x84D0, 0x84F0, 0x8550, 0x8650, 0x8970, 0x9110, 0x9A50, 0xA030, 0xA380, 0xA390, 0xA100, 0x9B80, 0x9470,
+ 0x8D10, 0x8850, 0x8650, 0x8590, 0x8540, 0x8530, 0x8530, 0x8520, 0x8520, 0x8520, 0x8520, 0x8520, 0x8520, 0x8520, 0x8540, 0x8580,
+ 0x8600, 0x86E0, 0x88D0, 0x8CD0, 0x9340, 0x99C0, 0xA000, 0xA570, 0xAA50, 0xAF30, 0xB4D0, 0xBAF0, 0xC0E0, 0xC740, 0xCD60, 0xD350,
+ 0xD930, 0xDEB0, 0xE520, 0xEC20, 0xF3B0, 0xFBE0, 0x0430, 0x0B90, 0x11F0, 0x1800, 0x1D00, 0x2170, 0x2590, 0x2940, 0x2D50, 0x32C0,
+ 0x3860, 0x3DB0, 0x41E0, 0x4600, 0x49D0, 0x4C70, 0x4F60, 0x5180, 0x5480, 0x5710, 0x59B0, 0x5BD0, 0x5D40, 0x5D40, 0x5C10, 0x5A60,
+ 0x5760, 0x5360, 0x4E20, 0x4760, 0x4050, 0x3850, 0x2FB0, 0x2590, 0x1A70, 0x0E90, 0x01C0, 0xF610, 0xEB30, 0xE150, 0xD830, 0xD140,
+ 0xCB70, 0xC730, 0xC430, 0xC280, 0xC1E0, 0xC1C0, 0xC210, 0xC2F0, 0xC4F0, 0xC7D0, 0xCB20, 0xCF30, 0xD3E0, 0xD8A0, 0xDD50, 0xE1F0,
+ 0xE750, 0xECC0, 0xF270, 0xF8F0, 0xFF50, 0x0620, 0x0CC0, 0x1270, 0x1880, 0x1E40, 0x23C0, 0x28B0, 0x2DA0, 0x31F0, 0x3690, 0x3AE0,
+ 0x3DF0, 0x41F0, 0x4480, 0x47C0, 0x4A00, 0x4BF0, 0x4D90, 0x4E20, 0x4E10, 0x4E40, 0x4D30, 0x4CE0, 0x4B40, 0x4A10, 0x48A0, 0x4700,
+ 0x4480, 0x4210, 0x40A0, 0x3E80, 0x3C80, 0x3AF0, 0x3820, 0x35C0, 0x3340, 0x3070, 0x2F20, 0x2D50, 0x2BF0, 0x2AC0, 0x28E0, 0x26D0,
+ 0x2490, 0x2300, 0x2130, 0x1FB0, 0x1E70, 0x1D60, 0x1CF0, 0x1C20, 0x1B20, 0x1A80, 0x1830, 0x16E0, 0x1500, 0x1310, 0x11D0, 0x1070,
+ 0x0FA0, 0x0F10, 0x0D90, 0x0D10, 0x0C40, 0x0B90, 0x0AD0, 0x0A20, 0x0A00, 0x09D0, 0x0A20, 0x0BA0, 0x0BD0, 0x0CE0, 0x0DE0, 0x0F30,
+ 0x10D0, 0x1190, 0x13C0, 0x15F0, 0x1830, 0x1A90, 0x1CD0, 0x2050, 0x22B0, 0x2560, 0x2750, 0x28F0, 0x2BC0, 0x2DE0, 0x2FD0, 0x3220,
+ 0x33D0, 0x3670, 0x3870, 0x39F0, 0x3AF0, 0x3B10, 0x3C60, 0x3D40, 0x3DB0, 0x3F30, 0x4040, 0x4200, 0x4290, 0x4370, 0x4440, 0x4440,
+ 0x44F0, 0x45A0, 0x46C0, 0x4800, 0x4A00, 0x4BE0, 0x4E40, 0x4ED0, 0x50B0, 0x51B0, 0x52D0, 0x5430, 0x5520, 0x5700, 0x5890, 0x5A10,
+ 0x5B40, 0x5C40, 0x5E10, 0x5FA0, 0x6060, 0x6110, 0x6210, 0x62E0, 0x6340, 0x6390, 0x64B0, 0x65A0, 0x67B0, 0x68C0, 0x69D0, 0x6A30,
+ 0x6A30, 0x6A60, 0x6AF0, 0x6B30, 0x6CA0, 0x6D40, 0x6EC0, 0x7000, 0x70B0, 0x7240, 0x7290, 0x73F0, 0x7500, 0x75E0, 0x7750, 0x7800,
+ 0x7940, 0x7A40, 0x7AF0, 0x7C20, 0x7C80, 0x7D90, 0x7E50, 0x7EC0, 0x7F00, 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7F60,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F70, 0x7EF0,
+ 0x7EB0, 0x7EF0, 0x7F10, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7EA0,
+ 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7EB0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10,
+ 0x7EA0, 0x7F20, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7EE0, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F30, 0x7F20, 0x7F00,
+ 0x7F90, 0x7F10, 0x7EE0, 0x7EE0, 0x7EE0, 0x7F70, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F50, 0x7F10, 0x7E70, 0x7EF0, 0x7ED0, 0x7F30,
+ 0x7F00, 0x7E90, 0x7ED0, 0x7F00, 0x7F20, 0x7F10, 0x7EB0, 0x7EE0, 0x7F10, 0x7F10, 0x7F10, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0,
+ 0x7EC0, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EF0,
+ 0x7F80, 0x7F20, 0x7F20, 0x7F40, 0x7F00, 0x7F30, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F50, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F90,
+ 0x7F00, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F50, 0x7F10, 0x7EB0, 0x7EF0, 0x7EF0, 0x7F30, 0x7EF0,
+ 0x7E90, 0x7ED0, 0x7EE0, 0x7F00, 0x7F10, 0x7EC0, 0x7EC0, 0x7EB0, 0x7F00, 0x7F00, 0x7E90, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7EB0,
+ 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F50, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F30,
+ 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F60, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7ED0,
+ 0x7EB0, 0x7DE0, 0x7360, 0x6840, 0x5C40, 0x4E10, 0x3F70, 0x2F20, 0x1F40, 0x10F0, 0x0310, 0xF700, 0xEC10, 0xE2B0, 0xDA80, 0xD240,
+ 0xCAD0, 0xC390, 0xBBD0, 0xB500, 0xAF30, 0xAC50, 0xAC00, 0xADB0, 0xB120, 0xB4B0, 0xB710, 0xB7E0, 0xB640, 0xB230, 0xAD70, 0xA8F0,
+ 0xA580, 0xA3E0, 0xA410, 0xA580, 0xA820, 0xA9D0, 0xAA10, 0xA890, 0xA4C0, 0x9EC0, 0x98C0, 0x9330, 0x8EA0, 0x8B20, 0x88E0, 0x8740,
+ 0x8660, 0x85C0, 0x8560, 0x8520, 0x8510, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x8500, 0x8520, 0x8540, 0x8580, 0x85D0, 0x8680, 0x8770,
+ 0x88E0, 0x8B60, 0x8EB0, 0x9310, 0x9810, 0x9DD0, 0xA3E0, 0xAA30, 0xB0B0, 0xB7C0, 0xBFB0, 0xC790, 0xCF20, 0xD740, 0xDEF0, 0xE650,
+ 0xEE00, 0xF500, 0xFC10, 0x0340, 0x0A10, 0x10D0, 0x16E0, 0x1D90, 0x2350, 0x2890, 0x2C70, 0x2FE0, 0x32B0, 0x33B0, 0x33A0, 0x32F0,
+ 0x30D0, 0x2E10, 0x2A40, 0x24F0, 0x1F10, 0x1740, 0x0F00, 0x0590, 0xFB70, 0xF170, 0xE6E0, 0xDCD0, 0xD2D0, 0xC960, 0xC080, 0xB980,
+ 0xB3C0, 0xAF00, 0xAAD0, 0xA7A0, 0xA470, 0xA230, 0xA110, 0xA090, 0xA130, 0xA200, 0xA3D0, 0xA5C0, 0xA840, 0xAAF0, 0xADB0, 0xB030,
+ 0xB330, 0xB5B0, 0xB870, 0xBB50, 0xBE50, 0xC0E0, 0xC3D0, 0xC6B0, 0xC9D0, 0xCC90, 0xCF50, 0xD230, 0xD4E0, 0xD7E0, 0xDA70, 0xDCE0,
+ 0xDF70, 0xE170, 0xE3E0, 0xE600, 0xE8A0, 0xEB30, 0xED90, 0xF080, 0xF330, 0xF630, 0xF8E0, 0xFB00, 0xFD10, 0xFE40, 0x0010, 0x0160,
+ 0x0320, 0x04B0, 0x0670, 0x07A0, 0x0910, 0x0A10, 0x0B10, 0x0C00, 0x0CF0, 0x0DA0, 0x0E10, 0x0ED0, 0x0F90, 0x1000, 0x1160, 0x1270,
+ 0x13B0, 0x14A0, 0x1560, 0x15F0, 0x16A0, 0x1750, 0x1790, 0x17B0, 0x17E0, 0x17F0, 0x1790, 0x1730, 0x1660, 0x1640, 0x1470, 0x12B0,
+ 0x1040, 0x0D60, 0x0A50, 0x0650, 0x0250, 0xFF10, 0xFB00, 0xF7A0, 0xF520, 0xF240, 0xEFB0, 0xED90, 0xEBA0, 0xEA20, 0xE8F0, 0xE780,
+ 0xE6F0, 0xE690, 0xE6B0, 0xE740, 0xE850, 0xE910, 0xE9B0, 0xEA80, 0xEB50, 0xEC00, 0xECB0, 0xED50, 0xEE70, 0xEF90, 0xF0D0, 0xF220,
+ 0xF440, 0xF5F0, 0xF750, 0xF9B0, 0xFB70, 0xFD60, 0xFF50, 0x0170, 0x0400, 0x06E0, 0x0960, 0x0BF0, 0x0EB0, 0x1140, 0x1390, 0x15B0,
+ 0x1750, 0x1940, 0x1B10, 0x1BB0, 0x1C40, 0x1C50, 0x1C80, 0x1C30, 0x1C60, 0x1C20, 0x1BB0, 0x1B70, 0x19E0, 0x18C0, 0x1730, 0x1630,
+ 0x1560, 0x1440, 0x1330, 0x1250, 0x11E0, 0x11B0, 0x1170, 0x10E0, 0x10B0, 0x10B0, 0x10D0, 0x11F0, 0x1310, 0x1490, 0x1720, 0x19C0,
+ 0x1C50, 0x1F70, 0x22B0, 0x2760, 0x2C50, 0x31B0, 0x3710, 0x3D40, 0x4280, 0x47B0, 0x4BA0, 0x4EC0, 0x5040, 0x4FB0, 0x4E60, 0x4C00,
+ 0x47D0, 0x4340, 0x3E60, 0x38F0, 0x3280, 0x2C40, 0x2560, 0x1E50, 0x16B0, 0x0DC0, 0x0540, 0xFC70, 0xF3C0, 0xEAC0, 0xE190, 0xD8D0,
+ 0xD130, 0xC960, 0xC1F0, 0xBCA0, 0xB7E0, 0xB4B0, 0xB2D0, 0xB1A0, 0xB200, 0xB2F0, 0xB520, 0xB890, 0xBBB0, 0xBF40, 0xC2A0, 0xC620,
+ 0xC9F0, 0xCDB0, 0xD1D0, 0xD520, 0xD8F0, 0xDCF0, 0xE030, 0xE3C0, 0xE680, 0xE950, 0xEB80, 0xEDE0, 0xF080, 0xF300, 0xF560, 0xF840,
+ 0xFA90, 0xFDE0, 0x0160, 0x0510, 0x09B0, 0x0DB0, 0x1290, 0x1680, 0x1AE0, 0x1F60, 0x2310, 0x2730, 0x2B40, 0x2F70, 0x32F0, 0x3640,
+ 0x3930, 0x3BD0, 0x3DC0, 0x4060, 0x4210, 0x4530, 0x4770, 0x4A70, 0x4DD0, 0x5030, 0x53A0, 0x5640, 0x58F0, 0x5C60, 0x5F20, 0x6340,
+ 0x6790, 0x6BE0, 0x7080, 0x7450, 0x7900, 0x7CE0, 0x7EE0, 0x7F10, 0x7EB0, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F20, 0x7EE0, 0x7F10, 0x7F50, 0x7EF0, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7ED0, 0x7F20, 0x7F00, 0x7F90, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7ED0, 0x7F10,
+ 0x7F20, 0x7F40, 0x7ED0, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F00,
+ 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7F00, 0x7F40, 0x7F40, 0x7F10, 0x7F70, 0x7EF0, 0x7EF0,
+ 0x7F10, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F70, 0x7F00, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EE0,
+ 0x7F00, 0x7F10, 0x7F10, 0x7E70, 0x7ED0, 0x7EB0, 0x7E30, 0x7D20, 0x7BC0, 0x7BD0, 0x7C40, 0x7CE0, 0x7E50, 0x7E80, 0x7ED0, 0x7F10,
+ 0x7F00, 0x7EF0, 0x7F00, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F40, 0x7F40, 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7EF0, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7F10, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F60, 0x7F00, 0x7F70, 0x7EF0,
+ 0x7F10, 0x7EF0, 0x7EF0, 0x7F80, 0x7F00, 0x7EE0, 0x7F10, 0x7EE0, 0x7F50, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7710, 0x5720, 0x3840, 0x1910, 0xFB70, 0xE0E0, 0xC9C0, 0xB780,
+ 0xA950, 0x9F70, 0x9920, 0x9560, 0x9300, 0x91F0, 0x9200, 0x92A0, 0x94E0, 0x9880, 0x9E90, 0xA540, 0xAD30, 0xB5C0, 0xBDB0, 0xC610,
+ 0xCEF0, 0xD820, 0xE0D0, 0xEB60, 0xF520, 0xFE90, 0x0890, 0x1180, 0x18F0, 0x1FF0, 0x2490, 0x28A0, 0x2B50, 0x2C30, 0x2C00, 0x2A60,
+ 0x2910, 0x26D0, 0x2300, 0x1F20, 0x1990, 0x12C0, 0x0B50, 0x03F0, 0xFCA0, 0xF450, 0xEC70, 0xE4A0, 0xDD00, 0xD5A0, 0xCDB0, 0xC5E0,
+ 0xBF10, 0xB7D0, 0xB0F0, 0xAA40, 0xA500, 0x9F90, 0x9A30, 0x9640, 0x92B0, 0x8FE0, 0x8D90, 0x8C00, 0x8B30, 0x8A80, 0x8A10, 0x8A60,
+ 0x8A90, 0x8B30, 0x8C00, 0x8D00, 0x8EB0, 0x9120, 0x9410, 0x9790, 0x9AF0, 0x9F90, 0xA3D0, 0xA930, 0xAE90, 0xB310, 0xB800, 0xBBB0,
+ 0xBFE0, 0xC3E0, 0xC740, 0xCBD0, 0xCF90, 0xD300, 0xD560, 0xD640, 0xD680, 0xD500, 0xD240, 0xCE70, 0xCA40, 0xC690, 0xC290, 0xBF30,
+ 0xBB40, 0xB750, 0xB2F0, 0xAE40, 0xA980, 0xA4D0, 0xA020, 0x91D0, 0x8FB0, 0x8E60, 0x8DB0, 0x8DD0, 0x8FB0, 0x92B0, 0x96F0, 0x9AF0,
+ 0x9ED0, 0xA2A0, 0xA560, 0xA710, 0xA7C0, 0xA7C0, 0xA7C0, 0xA830, 0xA910, 0xAA60, 0xABE0, 0xADA0, 0xAEC0, 0xAF60, 0xAFC0, 0xAF20,
+ 0xADC0, 0xAB00, 0xA840, 0xA410, 0x9F60, 0x99F0, 0x9390, 0x8D80, 0x88B0, 0x8650, 0x8560, 0x8510, 0x84E0, 0x84D0, 0x84C0, 0x84B0,
+ 0x84A0, 0x8490, 0x84C0, 0x8480, 0x8470, 0x8470, 0x8440, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x84A0, 0x8490, 0x8490, 0x84A0, 0x84A0,
+ 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8520, 0x8560, 0x85F0, 0x8710, 0x8990, 0x8ED0, 0x9510, 0x9B00, 0xA040, 0xA450,
+ 0xA820, 0xAB70, 0xAF30, 0xB2B0, 0xB5D0, 0xB8A0, 0xBB70, 0xBF10, 0xC200, 0xC4B0, 0xC890, 0xCC60, 0xD1A0, 0xD710, 0xDE00, 0xE530,
+ 0xED30, 0xF4E0, 0xFC50, 0x0350, 0x0A00, 0x0F60, 0x15D0, 0x1B50, 0x2080, 0x24A0, 0x27C0, 0x2AD0, 0x2C80, 0x2DF0, 0x2F70, 0x30B0,
+ 0x32B0, 0x33A0, 0x3430, 0x34B0, 0x3420, 0x3340, 0x3150, 0x2F30, 0x2D00, 0x2990, 0x2650, 0x2230, 0x1DF0, 0x19D0, 0x14D0, 0x10B0,
+ 0x0D70, 0x09F0, 0x07A0, 0x07C0, 0x0950, 0x0D10, 0x1250, 0x1960, 0x2310, 0x2F20, 0x3D40, 0x4E40, 0x5EF0, 0x6F20, 0x7C20, 0x7F20,
+ 0x7F40, 0x7F10, 0x7F00, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F50, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7E30, 0x77B0, 0x7570, 0x7780, 0x7D10, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F40, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x4170, 0xEA20, 0x8E40, 0x8490, 0x8460, 0x8440,
+ 0x8430, 0x8420, 0x8440, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8440,
+ 0x83F0, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x84A0, 0x8490, 0x8490,
+ 0x84C0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8530, 0x85F0, 0x87D0, 0x9130, 0x9F90, 0xAE10, 0xBCF0, 0xCAA0, 0xD7C0, 0xE3D0,
+ 0xEE30, 0xF750, 0xFED0, 0x0460, 0x0860, 0x0BB0, 0x0DD0, 0x0ED0, 0x0F20, 0x0E60, 0x0D30, 0x0C30, 0x0B30, 0x09F0, 0x0910, 0x0810,
+ 0x05A0, 0x0260, 0xFFE0, 0xFCF0, 0xF9B0, 0xF6F0, 0xF4A0, 0xF2A0, 0xF080, 0xEEB0, 0xEC90, 0xE9A0, 0xE620, 0xE180, 0xDC60, 0xD610,
+ 0xCE80, 0xC5B0, 0xBB10, 0xAEC0, 0xA020, 0x9180, 0x8760, 0x8530, 0x84D0, 0x84B0, 0x84A0, 0x84B0, 0x8480, 0x8470, 0x8470, 0x8460,
+ 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8490, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8460, 0x8440, 0x8440, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8490, 0x8470, 0x8480, 0x8480, 0x84C0, 0x8490, 0x84A0, 0x84B0,
+ 0x84D0, 0x8500, 0x8570, 0x8730, 0x9040, 0xA0D0, 0xB020, 0xBE70, 0xCC40, 0xD990, 0xE570, 0xF0B0, 0xFB60, 0x0530, 0x0F10, 0x18C0,
+ 0x2180, 0x2A50, 0x3320, 0x3A90, 0x4250, 0x4990, 0x5100, 0x5960, 0x6180, 0x6B10, 0x7400, 0x7CD0, 0x7F00, 0x7F20, 0x7F00, 0x7F10,
+ 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7EB0, 0x7E70, 0x7EF0, 0x7EE0, 0x7EF0,
+ 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EC0, 0x7F30, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F80, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0,
+ 0x7F60, 0x7F10, 0x7F00, 0x7EE0, 0x7EF0, 0x7F70, 0x7F20, 0x5160, 0x2380, 0xFD30, 0xDDA0, 0xCA30, 0xBD80, 0xB790, 0xB3E0, 0xB1E0,
+ 0xB190, 0xB190, 0xB300, 0xB5D0, 0xBA50, 0xBFA0, 0xC5A0, 0xCB00, 0xCF50, 0xD100, 0xD0A0, 0xCDA0, 0xC830, 0xC200, 0xBB90, 0xB060,
+ 0xB0E0, 0xB300, 0xB530, 0xBA10, 0xC090, 0xCA10, 0xD610, 0xE330, 0xF260, 0x0410, 0x1490, 0x24F0, 0x34C0, 0x4380, 0x5030, 0x5A60,
+ 0x62C0, 0x6850, 0x6C20, 0x6F00, 0x7050, 0x7200, 0x72B0, 0x72E0, 0x71F0, 0x7000, 0x6D20, 0x6950, 0x6560, 0x6170, 0x5DC0, 0x5A90,
+ 0x57B0, 0x55B0, 0x5370, 0x5110, 0x4F70, 0x4DD0, 0x4D00, 0x4CC0, 0x4CD0, 0x4D10, 0x4CB0, 0x4BE0, 0x4B10, 0x4990, 0x48D0, 0x46E0,
+ 0x4460, 0x42C0, 0x4050, 0x3E70, 0x3C60, 0x3A50, 0x3950, 0x3800, 0x36E0, 0x3650, 0x3530, 0x35A0, 0x35C0, 0x3600, 0x3780, 0x3860,
+ 0x3A50, 0x3B80, 0x3D20, 0x3E80, 0x3FD0, 0x4290, 0x4520, 0x48A0, 0x4CA0, 0x5060, 0x5510, 0x5950, 0x5E20, 0x6260, 0x6650, 0x6A30,
+ 0x6D60, 0x6F80, 0x7190, 0x7290, 0x73A0, 0x73A0, 0x72F0, 0x7230, 0x6FE0, 0x6DC0, 0x6A10, 0x6660, 0x61D0, 0x5BD0, 0x5670, 0x5040,
+ 0x4A10, 0x4490, 0x3EE0, 0x39C0, 0x33F0, 0x2E30, 0x2940, 0x2400, 0x2010, 0x1BB0, 0x17E0, 0x1540, 0x1290, 0x10B0, 0x0EF0, 0x0D90,
+ 0x0CB0, 0x0BC0, 0x0B80, 0x0B90, 0x0B60, 0x0B80, 0x0B20, 0x0B40, 0x0A50, 0x0A10, 0x0A80, 0x0A60, 0x0AF0, 0x0B10, 0x0B00, 0x0B20,
+ 0x0A70, 0x0A70, 0x0A50, 0x0A60, 0x0AE0, 0x0BD0, 0x0D50, 0x0ED0, 0x1110, 0x1380, 0x1600, 0x1890, 0x1B80, 0x1E00, 0x20E0, 0x23C0,
+ 0x2630, 0x29C0, 0x2C60, 0x3010, 0x3370, 0x35F0, 0x3940, 0x3B90, 0x3EB0, 0x40F0, 0x4350, 0x46F0, 0x49C0, 0x4D90, 0x51F0, 0x55A0,
+ 0x5A40, 0x5E40, 0x6260, 0x6610, 0x6910, 0x6D00, 0x6FC0, 0x72F0, 0x75B0, 0x77A0, 0x79A0, 0x7B40, 0x7CC0, 0x7D80, 0x7E20, 0x7EC0,
+ 0x7ED0, 0x7F30, 0x7EE0, 0x7EE0, 0x7EF0, 0x7EE0, 0x7F40, 0x7ED0, 0x7E50, 0x7DA0, 0x7CA0, 0x7AD0, 0x78D0, 0x75C0, 0x7310, 0x7030,
+ 0x6CF0, 0x69E0, 0x65C0, 0x6230, 0x5D80, 0x57C0, 0x5220, 0x4B40, 0x4610, 0x4090, 0x3AA0, 0x3540, 0x2E40, 0x2800, 0x2130, 0x19A0,
+ 0x13F0, 0x0E40, 0x09C0, 0x0620, 0x0210, 0xFF10, 0xF510, 0xF340, 0xF190, 0xF070, 0xEFC0, 0xEF00, 0xEE80, 0xEDA0, 0xEC70, 0xEB70,
+ 0xE9D0, 0xE8A0, 0xE760, 0xE5C0, 0xE4C0, 0xE3B0, 0xE2E0, 0xE240, 0xE130, 0xE060, 0xDEF0, 0xDD50, 0xDC80, 0xDBD0, 0xDB60, 0xDA80,
+ 0xD9F0, 0xD9E0, 0xD960, 0xD8E0, 0xD870, 0xD7F0, 0xD790, 0xD700, 0xD6D0, 0xD730, 0xD6A0, 0xD770, 0xD790, 0xD7E0, 0xD750, 0xD6D0,
+ 0xD6D0, 0xD6A0, 0xD6D0, 0xD6D0, 0xD670, 0xD700, 0xD730, 0xD780, 0xD800, 0xD770, 0xD7E0, 0xD800, 0xD820, 0xD8B0, 0xD8B0, 0xD960,
+ 0xD950, 0xD930, 0xD8F0, 0xD870, 0xD870, 0xD810, 0xD7B0, 0xD770, 0xD730, 0xD750, 0xD720, 0xD700, 0xD6B0, 0xD6B0, 0xD6D0, 0xD6C0,
+ 0xD6A0, 0xD5D0, 0xD550, 0xD560, 0xD560, 0xD630, 0xD730, 0xD6F0, 0xD790, 0xD720, 0xD740, 0xD770, 0xD7A0, 0xD810, 0xD8D0, 0xD990,
+ 0xDA30, 0xDB00, 0xDBB0, 0xDC20, 0xDCB0, 0xDD20, 0xDE40, 0xDE90, 0xDFB0, 0xE1E0, 0xE380, 0xE4D0, 0xE690, 0xE900, 0xEAE0, 0xED10,
+ 0xEF40, 0xF0E0, 0xF320, 0xF4F0, 0xF740, 0xF9A0, 0xFC90, 0xFF50, 0x0240, 0x0570, 0x0870, 0x0C60, 0x1020, 0x1390, 0x16E0, 0x1A30,
+ 0x1D80, 0x2040, 0x2330, 0x25C0, 0x28C0, 0x2B20, 0x2DC0, 0x3000, 0x3230, 0x3470, 0x3640, 0x3890, 0x39F0, 0x3C00, 0x3D60, 0x3EF0,
+ 0x40D0, 0x42B0, 0x4480, 0x4640, 0x4870, 0x4A70, 0x4CE0, 0x4F10, 0x5130, 0x5360, 0x55E0, 0x5850, 0x5A90, 0x5D00, 0x5FE0, 0x62F0,
+ 0x65B0, 0x68B0, 0x6BC0, 0x6E50, 0x70D0, 0x73A0, 0x76C0, 0x7A50, 0x7DC0, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F00,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F50, 0x7F20, 0x7F90, 0x7F30, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F30,
+ 0x7E70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F00, 0x7F00, 0x7F30, 0x7F00, 0x7E70, 0x7ED0, 0x7ED0, 0x7F10, 0x7F00, 0x7E90,
+ 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EA0, 0x7F20, 0x7F00, 0x7F10, 0x7EF0, 0x7EA0, 0x7F00, 0x7F10, 0x7F20, 0x7EE0, 0x7EC0, 0x7F10,
+ 0x7F20, 0x70C0, 0x5B90, 0x4510, 0x30B0, 0x1DF0, 0x0B70, 0xFC20, 0xED20, 0xDDC0, 0xCCC0, 0xBAD0, 0xA840, 0x9690, 0x8A40, 0x8600,
+ 0x8530, 0x8500, 0x84E0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x84F0, 0x8510, 0x8540, 0x8580, 0x85E0,
+ 0x86B0, 0x87C0, 0x8980, 0x8C00, 0x8ED0, 0x9260, 0x9540, 0x9800, 0x9A10, 0x9AF0, 0x9C30, 0x9D00, 0x9DD0, 0x9E40, 0x9E80, 0x9EF0,
+ 0x9EA0, 0x9EF0, 0x9E50, 0x9DC0, 0x9D50, 0x9C30, 0x9BB0, 0x9AE0, 0x9A10, 0x99E0, 0x9900, 0x98A0, 0x97E0, 0x9760, 0x96F0, 0x96A0,
+ 0x9650, 0x9630, 0x96C0, 0x9720, 0x9750, 0x97C0, 0x98E0, 0x9A40, 0x9B90, 0x9C90, 0x9DC0, 0x9EE0, 0x9FF0, 0xA1E0, 0xA3C0, 0xA650,
+ 0xA8C0, 0xAA70, 0xAC40, 0xAE40, 0xB050, 0xB2E0, 0xB560, 0xB890, 0xBAD0, 0xBD20, 0xC000, 0xC1E0, 0xC430, 0xC620, 0xC910, 0xCB00,
+ 0xCD10, 0xCF40, 0xD190, 0xD3F0, 0xD5A0, 0xD710, 0xD940, 0xDAE0, 0xDC70, 0xDF20, 0xE0B0, 0xE2D0, 0xE480, 0xE5F0, 0xE770, 0xE8A0,
+ 0xEA20, 0xEB40, 0xEC50, 0xEE20, 0xEED0, 0xF090, 0xF180, 0xF1E0, 0xF290, 0xF2B0, 0xF2F0, 0xF2E0, 0xF2C0, 0xF370, 0xF340, 0xF330,
+ 0xF350, 0xF2A0, 0xF280, 0xF2D0, 0xF250, 0xF290, 0xF2B0, 0xF390, 0xF420, 0xF480, 0xF5A0, 0xF650, 0xF870, 0xFA00, 0xFBD0, 0xFE70,
+ 0x00C0, 0x0E10, 0x1200, 0x16B0, 0x1AC0, 0x1F80, 0x2510, 0x2AF0, 0x3170, 0x3750, 0x3D50, 0x4300, 0x4840, 0x4DF0, 0x5340, 0x5820,
+ 0x5D40, 0x6130, 0x6670, 0x6AC0, 0x6E90, 0x7270, 0x74E0, 0x7780, 0x7980, 0x7AE0, 0x7BE0, 0x7BF0, 0x7C90, 0x7CE0, 0x7C90, 0x7C30,
+ 0x7AE0, 0x79E0, 0x77D0, 0x7530, 0x73B0, 0x7160, 0x6F90, 0x6E00, 0x6C90, 0x6BE0, 0x6A70, 0x6A10, 0x6910, 0x6860, 0x6870, 0x6900,
+ 0x6A50, 0x6C30, 0x6D20, 0x6EE0, 0x6F00, 0x7030, 0x7180, 0x7240, 0x7350, 0x7460, 0x7580, 0x76B0, 0x77B0, 0x7940, 0x7A50, 0x7B70,
+ 0x7C00, 0x7C60, 0x7C50, 0x7C10, 0x7AB0, 0x77C0, 0x7390, 0x6F00, 0x6900, 0x61E0, 0x5B10, 0x53E0, 0x4D60, 0x4690, 0x3FB0, 0x3820,
+ 0x2F40, 0x2690, 0x1D70, 0x1350, 0x09B0, 0x0050, 0xF800, 0xEF70, 0xE770, 0xE090, 0xD8E0, 0xD180, 0xC960, 0xC150, 0xBA60, 0xB350,
+ 0xACB0, 0xA630, 0xA080, 0x9AE0, 0x9610, 0x91B0, 0x8E00, 0x8B70, 0x8A00, 0x88F0, 0x8840, 0x87E0, 0x87A0, 0x8790, 0x8780, 0x87A0,
+ 0x87D0, 0x8820, 0x88D0, 0x89F0, 0x8BD0, 0x8ED0, 0x9250, 0x96D0, 0x9BA0, 0xA090, 0xA630, 0xAC50, 0xB3B0, 0xBA40, 0xC040, 0xC610,
+ 0xCBB0, 0xD1F0, 0xD640, 0xDB50, 0xE0B0, 0xE550, 0xEA40, 0xEE00, 0xF190, 0xF540, 0xF830, 0xFA70, 0xFBE0, 0xFCF0, 0xFE70, 0xFF60,
+ 0x0050, 0x0150, 0x01F0, 0x02C0, 0x03A0, 0x0510, 0x0680, 0x0740, 0x0910, 0x09F0, 0x0B90, 0x0C60, 0x0C90, 0x0D60, 0x0D80, 0x0CF0,
+ 0x0BD0, 0x0A50, 0x0870, 0x05E0, 0x0280, 0xFFC0, 0xFB90, 0xF770, 0xF2A0, 0xEDE0, 0xE900, 0xE410, 0xE030, 0xDC60, 0xD830, 0xD400,
+ 0xCFF0, 0xCCA0, 0xC8E0, 0xC610, 0xC410, 0xC270, 0xC0F0, 0xBF10, 0xBD10, 0xBB20, 0xB8E0, 0xB5F0, 0xB360, 0xB090, 0xADD0, 0xAA80,
+ 0xA6B0, 0xA2F0, 0x9EA0, 0x9AD0, 0x96F0, 0x9350, 0x8FF0, 0x8D30, 0x8AF0, 0x8940, 0x8840, 0x8780, 0x86E0, 0x86A0, 0x86A0, 0x8640,
+ 0x8630, 0x8600, 0x85F0, 0x85F0, 0x85E0, 0x85C0, 0x85D0, 0x85C0, 0x85C0, 0x85B0, 0x85D0, 0x85D0, 0x85F0, 0x85F0, 0x8600, 0x8630,
+ 0x8660, 0x8670, 0x86B0, 0x8700, 0x8770, 0x87E0, 0x8870, 0x8900, 0x89B0, 0x8AE0, 0x8C30, 0x8DC0, 0x8FD0, 0x91E0, 0x93D0, 0x9610,
+ 0x98C0, 0x9AB0, 0x9DA0, 0xA050, 0xA380, 0xA5C0, 0xA8E0, 0xAB10, 0xAD60, 0xAF50, 0xB100, 0xB300, 0xB4A0, 0xB680, 0xB7F0, 0xB9C0,
+ 0xBAD0, 0xBBF0, 0xBD80, 0xBE60, 0xBFD0, 0xC130, 0xC270, 0xC440, 0xC5C0, 0xC760, 0xC890, 0xC990, 0xCAB0, 0xCBE0, 0xCCD0, 0xCDD0,
+ 0xCED0, 0xD060, 0xD190, 0xD250, 0xD330, 0xD350, 0xD380, 0xD350, 0xD240, 0xD0F0, 0xCF70, 0xCE80, 0xCDD0, 0xCCF0, 0xCBD0, 0xCA90,
+ 0xC8F0, 0xC7A0, 0xC5C0, 0xC3F0, 0xC260, 0xBBE0, 0xBA30, 0xB7D0, 0xB5F0, 0xB400, 0xB180, 0xAF50, 0xAD20, 0xAB00, 0xA8E0, 0xA6D0,
+ 0xA520, 0xA340, 0xA140, 0x9FA0, 0x9E80, 0x9DE0, 0x9D20, 0x9BF0, 0x9B30, 0x9A50, 0x9A00, 0x99A0, 0x98F0, 0x9910, 0x9890, 0x98B0,
+ 0x9870, 0x9960, 0x99D0, 0x9A50, 0x9AE0, 0x9BA0, 0x9B60, 0x9C00, 0x9CB0, 0x9D70, 0x9D70, 0x9DB0, 0x9DE0, 0x9E40, 0x9E80, 0x9F70,
+ 0xA000, 0xA000, 0x9F80, 0x9F00, 0x9E50, 0x9DB0, 0x9D20, 0x9C60, 0x9CB0, 0x9CD0, 0x9D00, 0x9CC0, 0x9CF0, 0x9CE0, 0x9D10, 0x9C50,
+ 0x9BA0, 0x9B60, 0x9B60, 0x9BB0, 0x9BB0, 0x9BE0, 0x9C80, 0x9CA0, 0x9CE0, 0x9CD0, 0x9CD0, 0x9DB0, 0x9F00, 0xA0A0, 0xA300, 0xA570,
+ 0xA870, 0xAB40, 0xADF0, 0xB0D0, 0xB480, 0xB800, 0xBBF0, 0xBFF0, 0xC450, 0xC850, 0xCD10, 0xD1B0, 0xD5F0, 0xDA10, 0xDE90, 0xE340,
+ 0xE8B0, 0xEE10, 0xF390, 0xF8C0, 0xFE30, 0x02A0, 0x0700, 0x0B90, 0x0FD0, 0x1430, 0x1840, 0x1C70, 0x2070, 0x24D0, 0x2920, 0x2D80,
+ 0x31B0, 0x3550, 0x3940, 0x3CE0, 0x4050, 0x4350, 0x45F0, 0x4850, 0x4B30, 0x4DA0, 0x4FA0, 0x51D0, 0x5370, 0x5400, 0x53A0, 0x5230,
+ 0x50F0, 0x4FB0, 0x4E20, 0x4C10, 0x4A90, 0x4830, 0x4500, 0x41D0, 0x3DA0, 0x3970, 0x3540, 0x3130, 0x2D20, 0x28C0, 0x24C0, 0x2100,
+ 0x1D70, 0x19C0, 0x16A0, 0x13D0, 0x1100, 0x0E10, 0x0B60, 0x0910, 0x0780, 0x0570, 0x03D0, 0x0230, 0x0120, 0x0010, 0xFFD0, 0xFFF0,
+ 0x0020, 0x00C0, 0x00E0, 0x0170, 0x0140, 0x0190, 0x0230, 0x0370, 0x0500, 0x06D0, 0x0890, 0x09D0, 0x0B40, 0x0C90, 0x0DB0, 0x0F60,
+ 0x10C0, 0x1290, 0x1530, 0x1750, 0x18F0, 0x19A0, 0x1A80, 0x1A80, 0x1B10, 0x1B00, 0x1A60, 0x1B10, 0x1B10, 0x1AE0, 0x1A10, 0x1930,
+ 0x17E0, 0x1620, 0x1440, 0x1230, 0x0F90, 0x0D40, 0x0AA0, 0x0830, 0x0680, 0x0440, 0x0190, 0xFF00, 0xFC40, 0xFA20, 0xF7A0, 0xF590,
+ 0xF420, 0xF2F0, 0xF230, 0xF150, 0xF160, 0xF0F0, 0xF070, 0xF070, 0xF0F0, 0xF170, 0xF260, 0xF340, 0xF500, 0xF610, 0xF810, 0xF960,
+ 0xFA50, 0xFBA0, 0xFC10, 0xFCA0, 0xFCC0, 0xFC50, 0xFCF0, 0xFD20, 0xFE60, 0xFF50, 0x0100, 0x0220, 0x0290, 0x0350, 0x0370, 0x02C0,
+ 0x0360, 0x0350, 0x03F0, 0x0520, 0x0670, 0x0790, 0x0860, 0x0920, 0x09B0, 0x09A0, 0x0A60, 0x0AE0, 0x0B90, 0x0C70, 0x0D00, 0x0ED0,
+ 0x10B0, 0x12A0, 0x1420, 0x1560, 0x1730, 0x1930, 0x1C30, 0x1EB0, 0x2160, 0x2490, 0x2810, 0x2AB0, 0x2DA0, 0x2F60, 0x3200, 0x3320,
+ 0x34E0, 0x3640, 0x3770, 0x3A00, 0x3BE0, 0x3CF0, 0x3E70, 0x3F40, 0x4050, 0x40F0, 0x4110, 0x4200, 0x4110, 0x4150, 0x4100, 0x3FC0,
+ 0x3EF0, 0x3DA0, 0x3CA0, 0x3B50, 0x3A00, 0x3940, 0x3800, 0x3680, 0x35B0, 0x34B0, 0x3480, 0x33D0, 0x33A0, 0x33A0, 0x32C0, 0x31F0,
+ 0x3110, 0x2F40, 0x2E10, 0x2CA0, 0x2BD0, 0x2AF0, 0x29A0, 0x2770, 0x2390, 0x1F20, 0x1830, 0x0FE0, 0x0580, 0xFB50, 0xF180, 0xE880,
+ 0xE090, 0xD9D0, 0xD3A0, 0xCE60, 0xC8C0, 0xC270, 0xBC20, 0xB540, 0xAF00, 0xA870, 0xA290, 0x9D40, 0x9870, 0x9430, 0x9150, 0x8F80,
+ 0x8F00, 0x8E60, 0x8DC0, 0x8CE0, 0x8B20, 0x8970, 0x87A0, 0x8640, 0x8590, 0x8530, 0x8500, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0,
+ 0x84B0, 0x8450, 0x84B0, 0x84A0, 0x84A0, 0x84D0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84F0,
+ 0x8510, 0x8530, 0x8570, 0x85F0, 0x8B00, 0x8BC0, 0x8B80, 0x8A60, 0x8930, 0x8830, 0x8790, 0x8720, 0x86E0, 0x86D0, 0x86C0, 0x86A0,
+ 0x86A0, 0x8680, 0x8690, 0x8680, 0x8690, 0x8690, 0x86A0, 0x86B0, 0x8700, 0x8720, 0x8700, 0x86C0, 0x8660, 0x85E0, 0x8560, 0x8510,
+ 0x84F0, 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84C0,
+ 0x8500, 0x85C0, 0x8B80, 0xA2E0, 0xB7D0, 0xCC30, 0xDEF0, 0xEFA0, 0xFDD0, 0x0970, 0x1260, 0x1880, 0x1D50, 0x20A0, 0x2340, 0x2650,
+ 0x28B0, 0x2AB0, 0x2C40, 0x2C30, 0x2BF0, 0x28E0, 0x2490, 0x1FF0, 0x1960, 0x1300, 0x0B50, 0x0230, 0xF770, 0xE9C0, 0xD730, 0xC270,
+ 0xAAA0, 0x9290, 0x8690, 0x8500, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8450, 0x84D0, 0x8550,
+ 0x8900, 0x9280, 0x9360, 0x8D00, 0x8700, 0x8520, 0x8500, 0x84B0, 0x84A0, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8420, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8420,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8470, 0x8450, 0x8450,
+ 0x8400, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x84F0,
+ 0x8500, 0x8510, 0x8510, 0x8510, 0x8510, 0x8510, 0x8500, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x8500,
+ 0x8500, 0x8510, 0x8520, 0x8530, 0x8550, 0x85B0, 0x8650, 0x87E0, 0x8BD0, 0x9350, 0x9C70, 0xA4F0, 0xADD0, 0xB6D0, 0xC030, 0xC890,
+ 0xD120, 0xD940, 0xE140, 0xE990, 0xF090, 0xF6B0, 0xFC80, 0x0180, 0x0590, 0x08B0, 0x09E0, 0x0B40, 0x0B50, 0x0AB0, 0x0A40, 0x0920,
+ 0x07F0, 0x06E0, 0x05A0, 0x04D0, 0x03B0, 0x0360, 0x0370, 0x03F0, 0x05B0, 0x0830, 0x0C80, 0x1170, 0x1880, 0x2210, 0x2D30, 0x3A40,
+ 0x4650, 0x50F0, 0x5A00, 0x5EE0, 0x61C0, 0x63D0, 0x66F0, 0x6BC0, 0x7150, 0x7850, 0x7DB0, 0x7F30, 0x7F10, 0x7EA0, 0x7EC0, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F00, 0x7F20, 0x7EF0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7C00, 0x79E0, 0x7A70, 0x7DA0, 0x7EF0,
+ 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x6630, 0x4A70, 0x32C0, 0x2300, 0x1C90, 0x1ED0, 0x26C0, 0x3250, 0x3D50, 0x4610,
+ 0x4B50, 0x4CC0, 0x4BC0, 0x4A60, 0x48B0, 0x4840, 0x4880, 0x47F0, 0x46C0, 0x44D0, 0x42B0, 0x40D0, 0x3F40, 0x3F80, 0x4030, 0x4260,
+ 0x4500, 0x4850, 0x4AF0, 0x4C10, 0x4CD0, 0x4C90, 0x4BF0, 0x4A10, 0x48E0, 0x4750, 0x4680, 0x4600, 0x45D0, 0x4600, 0x46E0, 0x4760,
+ 0x47D0, 0x4830, 0x48E0, 0x4A00, 0x4B90, 0x4DE0, 0x4F70, 0x5180, 0x5350, 0x5530, 0x57E0, 0x5A40, 0x5CF0, 0x6000, 0x62A0, 0x6600,
+ 0x6880, 0x6B70, 0x6DA0, 0x6F80, 0x7340, 0x7370, 0x7370, 0x7320, 0x72B0, 0x71D0, 0x70C0, 0x7000, 0x6EB0, 0x6DB0, 0x6CC0, 0x6B80,
+ 0x69D0, 0x6900, 0x6840, 0x68C0, 0x69B0, 0x6AB0, 0x6D00, 0x6E90, 0x7040, 0x7190, 0x7230, 0x71F0, 0x70C0, 0x6EB0, 0x6BF0, 0x68B0,
+ 0x6460, 0x5F50, 0x5AA0, 0x5570, 0x5070, 0x4B70, 0x4660, 0x4120, 0x3C40, 0x36D0, 0x3120, 0x2B40, 0x2590, 0x1FD0, 0x1A60, 0x1510,
+ 0x0FD0, 0x0A90, 0x0500, 0xFE80, 0xF8A0, 0xF2E0, 0xEDE0, 0xE910, 0xE4A0, 0xE0C0, 0xDD10, 0xDAD0, 0xD880, 0xD660, 0xD4C0, 0xD3D0,
+ 0xD290, 0xD220, 0xD140, 0xD0C0, 0xD080, 0xD000, 0xCF60, 0xCEB0, 0xCDB0, 0xCCE0, 0xCCA0, 0xCCD0, 0xCD50, 0xCE40, 0xCEC0, 0xCEF0,
+ 0xCFA0, 0xCF30, 0xCD70, 0xCAC0, 0xC710, 0xC270, 0xBE00, 0xB910, 0xB4F0, 0xB1C0, 0xAE90, 0xAC40, 0xAB00, 0xA930, 0xA880, 0xA900,
+ 0xAA70, 0xAD80, 0xB030, 0xB270, 0xB270, 0xAEC0, 0xA740, 0x9B30, 0x8D50, 0x8630, 0x8500, 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8480,
+ 0x8480, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84F0,
+ 0x8500, 0x8530, 0x8590, 0x8620, 0x8780, 0x89C0, 0x8D30, 0x9110, 0x9440, 0x9820, 0x9AE0, 0x9DC0, 0xA0B0, 0xA460, 0xA9B0, 0xAF60,
+ 0xB5F0, 0xBDB0, 0xC6E0, 0xD160, 0xDD40, 0xEA10, 0xF9A0, 0x08C0, 0x1930, 0x2A00, 0x3B20, 0x4BF0, 0x5B90, 0x6AA0, 0x76E0, 0x7EF0,
+ 0x7F00, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F50, 0x7F10, 0x7EA0, 0x7EC0, 0x7EE0, 0x7F10, 0x7F20,
+ 0x7EC0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F00,
+ 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F70, 0x7EF0, 0x7F20, 0x7F10, 0x7F10, 0x7F30,
+ 0x7EE0, 0x7ED0, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7ED0,
+ 0x7E90, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7F10,
+ 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F70, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F80, 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60,
+ 0x7EF0, 0x7ED0, 0x7EF0, 0x7F00, 0x7F70, 0x7F00, 0x7ED0, 0x7ED0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10,
+ 0x7EA0, 0x7EE0, 0x7F10, 0x7F10, 0x7F20, 0x7E90, 0x7EF0, 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F00,
+ 0x7F40, 0x7C50, 0x77F0, 0x7470, 0x7140, 0x6DF0, 0x6500, 0x63D0, 0x6230, 0x6070, 0x5F60, 0x5D00, 0x5B60, 0x5990, 0x57F0, 0x5740,
+ 0x5640, 0x5590, 0x55B0, 0x5570, 0x56C0, 0x5780, 0x5890, 0x59E0, 0x5B40, 0x5D90, 0x5F90, 0x6130, 0x63A0, 0x6530, 0x66A0, 0x6780,
+ 0x6890, 0x69B0, 0x6AA0, 0x6C80, 0x6ED0, 0x70B0, 0x7360, 0x75D0, 0x7910, 0x7C00, 0x7E60, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F30,
+ 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F80, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F80, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7EE0, 0x7F70, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7EE0, 0x7ED0, 0x7EF0,
+ 0x7F60, 0x7F20, 0x7E90, 0x7EF0, 0x7F00, 0x7F30, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7ED0, 0x7F10, 0x7F20,
+ 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20,
+ 0x7F70, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F30, 0x7EB0, 0x7E70, 0x7EF0, 0x7F00, 0x7F20, 0x7ED0, 0x7EB0, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F10, 0x7EB0, 0x7F00, 0x7C40, 0x6E50, 0x6130, 0x5440, 0x4620, 0x38D0, 0x2B00, 0x1DF0, 0x0EC0, 0x01C0, 0xF440, 0xE7B0, 0xDCA0,
+ 0xD270, 0xCA50, 0xC370, 0xBEA0, 0xBB20, 0xB8D0, 0xB7C0, 0xB7E0, 0xB860, 0xBAB0, 0xBD70, 0xC190, 0xC610, 0xCA50, 0xCE20, 0xD060,
+ 0xD0C0, 0xD0D0, 0xCF90, 0xCD80, 0xCA70, 0xC6D0, 0xC300, 0xBE10, 0xB9B0, 0xB4B0, 0xAE80, 0xA8A0, 0xA130, 0x9A20, 0x92D0, 0x8C00,
+ 0x8870, 0x8680, 0x85A0, 0x8530, 0x8500, 0x84E0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x8440, 0x8490, 0x8480, 0x8480, 0x8410,
+ 0x8480, 0x8480, 0x8480, 0x8490, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84C0, 0x84D0,
+ 0x84D0, 0x84E0, 0x84E0, 0x84D0, 0x84E0, 0x84E0, 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84C0, 0x84B0, 0x84C0, 0x8490, 0x8490, 0x84A0,
+ 0x84C0, 0x84E0, 0x8520, 0x8570, 0x8540, 0x84E0, 0x84B0, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84C0, 0x8510, 0x8850, 0xA6D0,
+ 0xCB80, 0xF420, 0x20E0, 0x4FD0, 0x79B0, 0x7F00, 0x7F80, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F70, 0x7F00, 0x7EE0, 0x7EF0, 0x7EF0,
+ 0x7F60, 0x7EF0, 0x7ED0, 0x62B0, 0x4260, 0x20D0, 0xFFD0, 0xDE30, 0xBDE0, 0x9D10, 0x88E0, 0x8540, 0x84E0, 0x84D0, 0x84C0, 0x84C0,
+ 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84F0, 0x8520, 0x8560, 0x8600, 0x87C0, 0x8BE0, 0x9360, 0x9B00, 0xA240, 0xA920, 0xAFA0, 0xB660,
+ 0xBDB0, 0xC670, 0xCF70, 0xD990, 0xE450, 0xEEE0, 0xF9C0, 0x0310, 0x0BD0, 0x1340, 0x19D0, 0x1E30, 0x21C0, 0x23C0, 0x23F0, 0x2270,
+ 0x1F70, 0x1AE0, 0x1450, 0x0C10, 0x0360, 0xFA60, 0xF1B0, 0xE910, 0xE1C0, 0xDB20, 0xD610, 0xD200, 0xCF10, 0xCDC0, 0xCDF0, 0xCF60,
+ 0xD230, 0xD750, 0xDDB0, 0xE600, 0xF0E0, 0xFCB0, 0x0850, 0x1460, 0x1F40, 0x2930, 0x3180, 0x3800, 0x3D00, 0x40C0, 0x43C0, 0x4580,
+ 0x4680, 0x46F0, 0x4720, 0x4670, 0x4440, 0x3FF0, 0x3B30, 0x3550, 0x3000, 0x2BA0, 0x2840, 0x25E0, 0x2370, 0x2010, 0x1B80, 0x15C0,
+ 0x0E80, 0x0860, 0x0370, 0x0070, 0x0000, 0x0220, 0x06B0, 0x0D80, 0x15B0, 0x1FC0, 0x28B0, 0x3170, 0x3960, 0x3FF0, 0x4580, 0x49A0,
+ 0x4CC0, 0x4ED0, 0x4F70, 0x4F90, 0x4EC0, 0x4D50, 0x4B80, 0x4990, 0x4600, 0x42D0, 0x3EC0, 0x39C0, 0x34E0, 0x2F90, 0x2A10, 0x24A0,
+ 0x1F50, 0x1A50, 0x15B0, 0x1160, 0x0DB0, 0x0A70, 0x08A0, 0x0760, 0x06C0, 0x06D0, 0x06D0, 0x06E0, 0x0740, 0x07F0, 0x08C0, 0x0A30,
+ 0x0BD0, 0x0E30, 0x1160, 0x14E0, 0x1950, 0x1D00, 0x2110, 0x2430, 0x2760, 0x2AA0, 0x2DB0, 0x30B0, 0x33C0, 0x3660, 0x38D0, 0x3B30,
+ 0x3D00, 0x3E20, 0x3E90, 0x3E90, 0x3D00, 0x3B90, 0x3950, 0x3630, 0x3300, 0x3000, 0x2C90, 0x2920, 0x2630, 0x2350, 0x1FF0, 0x1DB0,
+ 0x1B40, 0x1910, 0x1630, 0x0B10, 0x0820, 0x06C0, 0x05F0, 0x05F0, 0x0740, 0x09C0, 0x0E50, 0x1370, 0x19D0, 0x20B0, 0x2960, 0x3140,
+ 0x39B0, 0x4230, 0x49F0, 0x5230, 0x58C0, 0x5F80, 0x6550, 0x6A10, 0x6F70, 0x7340, 0x76D0, 0x7A80, 0x7D40, 0x7ED0, 0x7EA0, 0x7EC0,
+ 0x7F10, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7EE0, 0x7EF0, 0x7D50, 0x7880, 0x7280, 0x6B80, 0x62F0, 0x59F0, 0x4F00, 0x4200, 0x3550,
+ 0x2810, 0x1B20, 0x0E00, 0x0140, 0xF4F0, 0xE9E0, 0xE100, 0xD860, 0xD1F0, 0xCD70, 0xCA70, 0xC9E0, 0xCA20, 0xCC30, 0xCFE0, 0xD560,
+ 0xDD40, 0xE540, 0xEEB0, 0xF970, 0x0440, 0x0F90, 0x1A10, 0x2370, 0x2C70, 0x3530, 0x3D60, 0x4540, 0x4C30, 0x53D0, 0x5A60, 0x60A0,
+ 0x6550, 0x6890, 0x6BC0, 0x6CD0, 0x6EB0, 0x6FE0, 0x7060, 0x7190, 0x7200, 0x72B0, 0x72C0, 0x71B0, 0x7160, 0x6FC0, 0x6E10, 0x6B90,
+ 0x6830, 0x65C0, 0x61D0, 0x5E50, 0x5A80, 0x56D0, 0x5440, 0x5210, 0x5040, 0x4F90, 0x4F60, 0x5050, 0x5150, 0x5330, 0x5560, 0x57C0,
+ 0x5B50, 0x6080, 0x66A0, 0x6EC0, 0x7790, 0x7E90, 0x7F00, 0x7F50, 0x7F10, 0x7EA0, 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0,
+ 0x7EE0, 0x7F20, 0x7F20, 0x7EB0, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7E90, 0x7EF0, 0x7F20, 0x7F20, 0x7F20, 0x7E10, 0x77F0, 0x7060,
+ 0x6790, 0x5E50, 0x5520, 0x4C00, 0x4350, 0x3A00, 0x31A0, 0x28C0, 0x1F10, 0x1510, 0x09A0, 0xFFD0, 0xF600, 0xECD0, 0xE440, 0xDBD0,
+ 0xD450, 0xCD30, 0xC620, 0xC030, 0xBAF0, 0xB6D0, 0xB300, 0xAFB0, 0xADB0, 0xABB0, 0xAAB0, 0xAA10, 0xA960, 0xAA10, 0xAA30, 0xAB00,
+ 0xAB80, 0xABB0, 0xAC90, 0xAD80, 0xAFC0, 0xB270, 0xB650, 0xBC20, 0xC300, 0xCB30, 0xD420, 0xDE00, 0xE7F0, 0xF120, 0xFA80, 0x0290,
+ 0x0910, 0x0F30, 0x1460, 0x19C0, 0x1E30, 0x21B0, 0x24E0, 0x2620, 0x25E0, 0x2400, 0x2050, 0x1AB0, 0x1360, 0x0940, 0xFD10, 0xEE20,
+ 0xDC40, 0xC950, 0xB590, 0xA1D0, 0x8F10, 0x86B0, 0x8520, 0x84E0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0,
+ 0x84D0, 0x84F0, 0x8510, 0x8570, 0x8650, 0x88C0, 0x8EF0, 0x9760, 0x9D60, 0xA220, 0xA450, 0xA510, 0xA310, 0x9FD0, 0x9C50, 0x98D0,
+ 0x96F0, 0x9710, 0x9A50, 0xA030, 0xA910, 0xB410, 0xC0B0, 0xCCF0, 0xD990, 0xE610, 0xF170, 0xFC20, 0x0500, 0x0E30, 0x1590, 0x1AE0,
+ 0x1D80, 0x1D90, 0x1CF0, 0x1A30, 0x1660, 0x12E0, 0x0FD0, 0x0F00, 0x0FC0, 0x1220, 0x14F0, 0x18C0, 0x1C50, 0x1F20, 0x1FF0, 0x1FC0,
+ 0x1DD0, 0x1B30, 0x16A0, 0x0FF0, 0x0880, 0xFF10, 0xF4E0, 0xE990, 0xDCB0, 0xCFA0, 0xC200, 0xB620, 0xAB30, 0xA280, 0x9EC0, 0x9D90,
+ 0x9DE0, 0x9E70, 0x9EF0, 0x9F40, 0x9E60, 0x9CA0, 0x9A30, 0x9700, 0x94B0, 0x91B0, 0x8F60, 0x8D90, 0x8C70, 0x8CA0, 0x8DF0, 0x91C0,
+ 0x97B0, 0x9E90, 0xA660, 0xADB0, 0xB440, 0xB9F0, 0xBF70, 0xC510, 0xCAB0, 0xCFF0, 0xD590, 0xD9B0, 0xDD70, 0xDF10, 0xDF30, 0xDEF0,
+ 0xDD90, 0xDD40, 0xDDD0, 0xDEB0, 0xE1C0, 0xE570, 0xEA90, 0xF120, 0xF870, 0x0110, 0x0C00, 0x1860, 0x2620, 0x3550, 0x44F0, 0x52A0,
+ 0x5E20, 0x6690, 0x6C50, 0x7060, 0x7140, 0x7150, 0x6FB0, 0x6C60, 0x67D0, 0x60C0, 0x57B0, 0x4C40, 0x3E10, 0x30B0, 0x2320, 0x1750,
+ 0x0C10, 0x0290, 0xFAC0, 0xF3D0, 0xEE30, 0xEA20, 0xE900, 0xEAB0, 0xEEF0, 0xF560, 0xFDC0, 0x06F0, 0x10B0, 0x18E0, 0x1FD0, 0x24B0,
+ 0x27A0, 0x2980, 0x2980, 0x28B0, 0x27C0, 0x2670, 0x25B0, 0x25A0, 0x2570, 0x2590, 0x2550, 0x2500, 0x2460, 0x2350, 0x2260, 0x20A0,
+ 0x1F10, 0x1C10, 0x17E0, 0x1370, 0x0D50, 0x06B0, 0xFF00, 0xF5C0, 0xEB50, 0xDE00, 0xCF70, 0xBE90, 0xA990, 0x9230, 0x8620, 0x84E0,
+ 0x84B0, 0x84B0, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450,
+ 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8470,
+ 0x8470, 0x8440, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8470, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84B0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8490, 0x8490, 0x8490, 0x84A0, 0x8490, 0x84A0, 0x8490, 0x84A0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84F0, 0x8500,
+ 0x8520, 0x8540, 0x8580, 0x85E0, 0x8670, 0x8790, 0x88D0, 0x8B70, 0x8F70, 0x9420, 0x98C0, 0x9D70, 0xA270, 0xA710, 0xAC90, 0xB150,
+ 0xB5F0, 0xBAE0, 0xBFF0, 0xC510, 0xCA50, 0xCFA0, 0xD4F0, 0xDAB0, 0xE000, 0xE590, 0xEB30, 0xF0E0, 0xF6E0, 0xFD40, 0x0380, 0x0A50,
+ 0x1120, 0x1740, 0x1D50, 0x2370, 0x2910, 0x2E40, 0x3390, 0x37A0, 0x3BF0, 0x4020, 0x43F0, 0x4740, 0x4A20, 0x4CF0, 0x4FD0, 0x51B0,
+ 0x5360, 0x54D0, 0x5610, 0x5720, 0x5840, 0x5940, 0x5A30, 0x5BA0, 0x5CC0, 0x5E10, 0x5E50, 0x5EC0, 0x5ED0, 0x5EE0, 0x5E70, 0x5DC0,
+ 0x5D50, 0x5C30, 0x5B30, 0x59C0, 0x5810, 0x5610, 0x5460, 0x52A0, 0x4FD0, 0x4D30, 0x4B70, 0x49C0, 0x4880, 0x4720, 0x45E0, 0x4410,
+ 0x4230, 0x4090, 0x3F20, 0x3E00, 0x3CB0, 0x3C70, 0x3BF0, 0x3C10, 0x3C20, 0x3C60, 0x3C60, 0x3C80, 0x3C90, 0x3CE0, 0x3DA0, 0x3E60,
+ 0x3FE0, 0x4140, 0x4310, 0x44D0, 0x4630, 0x4780, 0x48C0, 0x4990, 0x4AF0, 0x4C30, 0x4DA0, 0x4F20, 0x5140, 0x52B0, 0x54D0, 0x5680,
+ 0x5910, 0x5AF0, 0x5DE0, 0x60E0, 0x6450, 0x67D0, 0x6B80, 0x6F20, 0x7240, 0x75B0, 0x78A0, 0x7B00, 0x7CD0, 0x7E50, 0x7F00, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F00, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F50, 0x7F30, 0x7EF0, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7ED0, 0x7EF0, 0x7F20, 0x7F60, 0x7F10, 0x7E90, 0x7EB0,
+ 0x7F20, 0x7F40, 0x7EF0, 0x7E70, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7EA0, 0x7F20, 0x7EF0,
+ 0x7EF0, 0x7F10, 0x7EC0, 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F20, 0x7F10, 0x7230, 0x6260, 0x5570, 0x4AB0,
+ 0x43B0, 0x4020, 0x3F10, 0x4050, 0x4260, 0x4490, 0x4510, 0x45A0, 0x4740, 0x4B40, 0x5450, 0x61B0, 0x72F0, 0x7F10, 0x7F00, 0x7F00,
+ 0x7EF0, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7F10,
+ 0x7F70, 0x7EB0, 0x48A0, 0x1010, 0xD570, 0x9B30, 0x8500, 0x84A0, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8420, 0x8430,
+ 0x8430, 0x8430, 0x8440, 0x8450, 0x8450, 0x8470, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84E0, 0x84E0, 0x8510, 0x8570, 0x8690,
+ 0x8980, 0x8EB0, 0x9480, 0x98D0, 0x9C20, 0x9E70, 0x9F80, 0x9FD0, 0x9ED0, 0x9E30, 0x9C30, 0x9960, 0x95D0, 0x9270, 0x8EF0, 0x8BF0,
+ 0x8990, 0x87F0, 0x86C0, 0x8600, 0x8580, 0x8530, 0x8510, 0x84F0, 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84A0, 0x84D0, 0x84A0,
+ 0x8490, 0x8490, 0x84B0, 0x84A0, 0x8480, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8530, 0x8550, 0x85A0, 0x8610, 0x8710, 0x88B0, 0x8BD0, 0x9080, 0x95B0,
+ 0x9B00, 0xA0E0, 0xA690, 0xAD90, 0xB4B0, 0xBC90, 0xC470, 0xCBE0, 0xD310, 0xDA30, 0xF230, 0xF630, 0xF9B0, 0xFC40, 0xFE50, 0xFFB0,
+ 0x0140, 0x0340, 0x0580, 0x07E0, 0x0A70, 0x0D40, 0x1090, 0x1350, 0x15C0, 0x1720, 0x1750, 0x16E0, 0x14D0, 0x1190, 0x0D20, 0x0770,
+ 0x0140, 0xFA50, 0xF3A0, 0xED90, 0xE810, 0xE3C0, 0xDFE0, 0xDC90, 0xD9B0, 0xD7B0, 0xD680, 0xD650, 0xD6B0, 0xD890, 0xDB90, 0xE060,
+ 0xE690, 0xEEF0, 0xFA00, 0x0610, 0x1320, 0x20A0, 0x2F10, 0x3CB0, 0x48C0, 0x5430, 0x5EB0, 0x6740, 0x6FA0, 0x7600, 0x7B10, 0x7E40,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F20,
+ 0x7F20, 0x7EF0, 0x7F50, 0x7F10, 0x7DA0, 0x6440, 0x4690, 0x24F0, 0x01A0, 0xDD00, 0xB6E0, 0x9590, 0x8640, 0x8530, 0x84B0, 0x84A0,
+ 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0,
+ 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430,
+ 0x8430, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450,
+ 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x8500, 0x8540, 0x85D0, 0x86C0, 0x8810,
+ 0x89D0, 0x8B60, 0x8C60, 0x8CA0, 0x8D00, 0x8CA0, 0x8C60, 0x8C10, 0x8BF0, 0x8C50, 0x8D10, 0x8F10, 0x9080, 0x91D0, 0x9310, 0x94E0,
+ 0x9680, 0x9800, 0x9970, 0x9B40, 0x9CD0, 0x9E60, 0x9EF0, 0x9ED0, 0x9DD0, 0x9BF0, 0x98D0, 0x9500, 0x9160, 0x8EE0, 0x8CD0, 0x8BF0,
+ 0x8BA0, 0x8C00, 0x8DB0, 0x9040, 0x9510, 0x9AA0, 0xA220, 0xAA70, 0xB310, 0xBD20, 0xC6A0, 0xD000, 0xD9F0, 0xE300, 0xEB20, 0xF2A0,
+ 0xF850, 0xFE30, 0x0280, 0x0620, 0x0850, 0x08B0, 0x08E0, 0x07C0, 0x05F0, 0x0380, 0x0080, 0xFE50, 0xFBD0, 0xFA60, 0xFA10, 0xFA70,
+ 0xFB10, 0xFBC0, 0xFC30, 0xFE00, 0xFFA0, 0x01E0, 0x04D0, 0x0770, 0x0AE0, 0x0D70, 0x1020, 0x1260, 0x13D0, 0x1590, 0x1640, 0x1760,
+ 0x1790, 0x17B0, 0x1870, 0x1890, 0x19A0, 0x1AD0, 0x1B70, 0x1D50, 0x1F00, 0x2140, 0x2330, 0x2510, 0x2800, 0x2A50, 0x2D50, 0x30B0,
+ 0x3420, 0x37C0, 0x3B00, 0x3EB0, 0x4240, 0x45D0, 0x4A60, 0x4DC0, 0x5190, 0x5510, 0x5860, 0x5BA0, 0x5F10, 0x6250, 0x65B0, 0x68E0,
+ 0x6C50, 0x6F80, 0x7270, 0x7520, 0x7750, 0x7A00, 0x7BB0, 0x7D30, 0x7E00, 0x7E70, 0x7ED0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7F10,
+ 0x7F20, 0x7F40, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7F20, 0x7F10,
+ 0x7EF0, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F40,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x76A0, 0x6AF0, 0x5D50, 0x4ED0, 0x3EB0, 0x2D40,
+ 0x1970, 0x02F0, 0xE9F0, 0xCC70, 0xAE00, 0x8FB0, 0x8570, 0x84C0, 0x84A0, 0x8480, 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440,
+ 0x8440, 0x8440, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8460, 0x8460, 0x8470, 0x8480, 0x8490, 0x84E0, 0x84C0, 0x84E0,
+ 0x8510, 0x8580, 0x86B0, 0x89F0, 0x9090, 0x9890, 0x9F50, 0xA4E0, 0xA880, 0xAA80, 0xAB40, 0xABD0, 0xAC70, 0xAE50, 0xB110, 0xB500,
+ 0xB8D0, 0xB870, 0xB0B0, 0x9FB0, 0x8AE0, 0x8530, 0x84D0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84E0, 0x8520, 0x8570, 0x8610, 0x86B0,
+ 0x8790, 0x8940, 0x8D60, 0x93D0, 0x9C00, 0xA420, 0xAA60, 0xAFC0, 0xB3C0, 0xB770, 0xBA60, 0xBD50, 0xC030, 0xC3A0, 0xC6B0, 0xC9C0,
+ 0xCC30, 0xCD80, 0xCD90, 0xCCD0, 0xCB00, 0xC8E0, 0xC8B0, 0xC9C0, 0xCC60, 0xD150, 0xD710, 0xDDF0, 0xE640, 0xF1D0, 0xFD10, 0x0920,
+ 0x1500, 0x2050, 0x2A90, 0x32E0, 0x39C0, 0x3EF0, 0x4320, 0x4530, 0x4610, 0x4530, 0x42F0, 0x3EF0, 0x3990, 0x3320, 0x2AC0, 0x2050,
+ 0x1560, 0x0920, 0xFC40, 0xEF00, 0xE1F0, 0xD6B0, 0xCD20, 0xC690, 0xC160, 0xBE40, 0xBBD0, 0xB880, 0xB550, 0xB0C0, 0xAC80, 0xA820,
+ 0xA470, 0xA170, 0x9FC0, 0x9F40, 0x9FC0, 0xA160, 0xA2F0, 0xA510, 0xA6A0, 0xA770, 0xA770, 0xA650, 0xA4E0, 0xA2B0, 0x9F70, 0x9C20,
+ 0x9820, 0x93C0, 0x8F90, 0x8B40, 0x8900, 0x8770, 0x8680, 0x8600, 0x85A0, 0x8570, 0x8550, 0x8540, 0x8540, 0x8540, 0x8550, 0x8580,
+ 0x85C0, 0x8660, 0x8820, 0x8CB0, 0x9670, 0xA170, 0xAB60, 0xB470, 0xBC60, 0xC3C0, 0xCA40, 0xD060, 0xD660, 0xDCC0, 0xE350, 0xE980,
+ 0xEFB0, 0xF510, 0xF990, 0xFCF0, 0xFF70, 0x02A0, 0x05B0, 0x0A20, 0x0EF0, 0x1590, 0x1DE0, 0x2740, 0x3290, 0x3E30, 0x49B0, 0x56C0,
+ 0x6410, 0x7210, 0x7D70, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F40, 0x7F00, 0x7F30, 0x7F00, 0x7F20, 0x7EF0, 0x7F10,
+ 0x7F60, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F80, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60,
+ 0x7F10, 0x7EB0, 0x7EB0, 0x7EC0, 0x7F30, 0x7EF0, 0x7ED0, 0x7EF0, 0x7F00, 0x7F30, 0x7ED0, 0x7090, 0x5E00, 0x4460, 0x2710, 0x0830,
+ 0xE800, 0xC880, 0xAA80, 0x8FE0, 0x85F0, 0x84E0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x8500, 0x8520, 0x8580, 0x8630,
+ 0x8810, 0xA710, 0xB130, 0xBA00, 0xC250, 0xCB60, 0xD450, 0xDD00, 0xE510, 0xEC70, 0xF330, 0xF930, 0xFE30, 0x0220, 0x03C0, 0x0410,
+ 0x01E0, 0xFDD0, 0xF7B0, 0xF010, 0xE700, 0xDDA0, 0xD590, 0xCEB0, 0xC930, 0xC5C0, 0xC410, 0xC560, 0xC890, 0xCEA0, 0xD6B0, 0xDF00,
+ 0xE7B0, 0xF060, 0xF7E0, 0xFFC0, 0x06C0, 0x0D00, 0x12E0, 0x1700, 0x1BB0, 0x1F30, 0x2280, 0x2560, 0x2780, 0x2AB0, 0x2D00, 0x2EB0,
+ 0x3060, 0x3180, 0x3290, 0x33B0, 0x3460, 0x3480, 0x33F0, 0x33B0, 0x3360, 0x3260, 0x3130, 0x2EF0, 0x22F0, 0x1FF0, 0x1D60, 0x1B10,
+ 0x1A30, 0x1970, 0x18C0, 0x1980, 0x1AF0, 0x1C30, 0x1F50, 0x22B0, 0x2670, 0x2A70, 0x2E10, 0x31B0, 0x34A0, 0x3790, 0x3950, 0x3AA0,
+ 0x3B60, 0x3A50, 0x39D0, 0x3770, 0x34A0, 0x31C0, 0x2D40, 0x28C0, 0x2390, 0x1F90, 0x1CA0, 0x1A00, 0x18F0, 0x19B0, 0x1B70, 0x1EE0,
+ 0x2150, 0x2200, 0x1F00, 0x17C0, 0x0DA0, 0xFF00, 0xED40, 0xD9F0, 0xC400, 0xACB0, 0x9250, 0x8640, 0x84E0, 0x84B0, 0x8490, 0x8480,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8460, 0x84B0, 0x8500, 0x8590, 0x8E30, 0xA810, 0xB9E0, 0xBF20, 0xB600, 0x9BF0,
+ 0x8590, 0x8490, 0x8460, 0x8440, 0x8410, 0x8400, 0x83F0, 0x83E0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8410, 0x8430, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8470, 0x8450, 0x8440, 0x8440, 0x8470, 0x8440, 0x8440,
+ 0x8440, 0x8460, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480,
+ 0x8480, 0x8480, 0x8490, 0x84B0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8510, 0x8580, 0x86C0, 0x8AE0, 0x94E0, 0x9FD0,
+ 0xAA20, 0xB3F0, 0xBE10, 0xCA30, 0xD7E0, 0xE770, 0xF9E0, 0x0AB0, 0x1B50, 0x29D0, 0x3630, 0x4100, 0x4990, 0x5250, 0x5A30, 0x61D0,
+ 0x6950, 0x7000, 0x76E0, 0x7C40, 0x7ED0, 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7EB0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10,
+ 0x7F20, 0x7F10, 0x7F20, 0x7F40, 0x7E50, 0x76B0, 0x6D20, 0x6150, 0x5210, 0x41B0, 0x2E60, 0x1CB0, 0x0BB0, 0xFD10, 0xF1E0, 0xE980,
+ 0xE450, 0xE100, 0xDF10, 0xDE00, 0xDD30, 0xDBE0, 0xDB00, 0xD970, 0xD900, 0xD860, 0xD940, 0xD980, 0xDA10, 0xDB20, 0xDBB0, 0xDC90,
+ 0xDDA0, 0xDE40, 0xDFA0, 0xE0F0, 0xE2C0, 0xE580, 0xE830, 0xEC20, 0xF0D0, 0xF630, 0xFCB0, 0x0380, 0x0AC0, 0x11B0, 0x1870, 0x1DE0,
+ 0x21C0, 0x2480, 0x2640, 0x2680, 0x2730, 0x2710, 0x26E0, 0x2640, 0x2510, 0x2460, 0x22F0, 0x21D0, 0x2110, 0x1FE0, 0x1F00, 0x1E50,
+ 0x1CE0, 0x1B60, 0x1950, 0x1870, 0x1660, 0x1420, 0x11F0, 0x0E90, 0x0B00, 0x05E0, 0x0030, 0xF9D0, 0xF270, 0xEB90, 0xE4F0, 0xDF30,
+ 0xDBD0, 0xD8C0, 0xD7A0, 0xD740, 0xD7B0, 0xD870, 0xD920, 0xD890, 0xD5B0, 0xD090, 0xCA40, 0xC110, 0xB890, 0xAF50, 0xA770, 0xA110,
+ 0x9D80, 0x9C80, 0x9DC0, 0xA1D0, 0xA900, 0xAE70, 0xB320, 0xB610, 0xB760, 0xB790, 0xB7B0, 0xB7F0, 0xB930, 0xBBF0, 0xC020, 0xC620,
+ 0xCDF0, 0xD6B0, 0xE070, 0xEA50, 0xF5B0, 0xFFD0, 0x0A60, 0x1560, 0x2040, 0x2B50, 0x36B0, 0x41C0, 0x4C40, 0x5730, 0x6000, 0x68C0,
+ 0x7110, 0x78A0, 0x7E60, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F50, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7EF0,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F00, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F70, 0x7F10, 0x7EE0, 0x7F20, 0x7F20, 0x7F30, 0x7F40,
+ 0x7EC0, 0x7F10, 0x7EF0, 0x7EF0, 0x7EE0, 0x7E50, 0x7ED0, 0x7F00, 0x7EF0, 0x7F10, 0x7EA0, 0x7EC0, 0x7F10, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7F40, 0x7EE0, 0x7EF0, 0x7F30, 0x7EA0, 0x7F40, 0x7F00, 0x7290, 0x6410, 0x55E0, 0x46C0, 0x3A30, 0x2EE0, 0x2660, 0x1ED0, 0x1910,
+ 0x14C0, 0x10C0, 0x0CD0, 0x0700, 0xFFC0, 0xF6B0, 0xEB30, 0xDDC0, 0xCDC0, 0xBCD0, 0xAA30, 0x97C0, 0x8980, 0x8590, 0x8500, 0x84D0,
+ 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8480, 0x8450, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0,
+ 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8510, 0x8530, 0x8580, 0x8640, 0x8850, 0x8D00, 0x9690, 0xA180,
+ 0xAC50, 0xB890, 0xC530, 0xD200, 0xDF00, 0xEA90, 0xF5C0, 0x0010, 0x0B10, 0x1540, 0x1DE0, 0x25F0, 0x2BD0, 0x30C0, 0x3340, 0x3480,
+ 0x3330, 0x2DE0, 0x2650, 0x1A50, 0x0990, 0xF460, 0xD9B0, 0xBF60, 0xA520, 0x8DF0, 0x8600, 0x8500, 0x8480, 0x84B0, 0x8490, 0x8490,
+ 0x8480, 0x8470, 0x8470, 0x84B0, 0x8460, 0x8450, 0x8450, 0x8490, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430,
+ 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8470, 0x8450, 0x8450,
+ 0x8460, 0x8470, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x8500, 0x8550, 0x86F0, 0x9110,
+ 0xA350, 0xEC50, 0xFD60, 0x0F90, 0x2130, 0x3370, 0x4520, 0x55F0, 0x6530, 0x71F0, 0x7AE0, 0x7ED0, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0,
+ 0x5FF0, 0x57F0, 0x5240, 0x4D90, 0x4B10, 0x4A00, 0x4A20, 0x4C90, 0x4FA0, 0x53F0, 0x5A00, 0x6030, 0x6720, 0x6DC0, 0x72B0, 0x77A0,
+ 0x7AD0, 0x7D90, 0x7EB0, 0x7EF0, 0x7F10, 0x7EC0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F00,
+ 0x7F30, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F80, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7F00, 0x7EE0, 0x7EF0, 0x7F70,
+ 0x7F20, 0x7EC0, 0x7E60, 0x7E20, 0x7DF0, 0x7E10, 0x7E30, 0x7EA0, 0x7EC0, 0x7EF0, 0x7F00, 0x7EA0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F20,
+ 0x7E90, 0x7EB0, 0x7F00, 0x7F10, 0x7F00, 0x7EA0, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00,
+ 0x7F20, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F50, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F40,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F70, 0x7ED0, 0x7EA0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F40, 0x7F00,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F40, 0x7ED0, 0x7F00, 0x7F20, 0x7EF0, 0x7F70, 0x7F00, 0x7F40, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60,
+ 0x7EF0, 0x7EF0, 0x7F00, 0x7EE0, 0x7F70, 0x7F00, 0x7ED0, 0x7ED0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7EC0, 0x7EC0, 0x7F30, 0x7F20,
+ 0x7EA0, 0x7EC0, 0x7ED0, 0x7F10, 0x7F00, 0x7EC0, 0x7EB0, 0x7F00, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F60, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F60, 0x7EF0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F80,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F80, 0x7F10, 0x7690, 0x68E0, 0x5940, 0x48B0, 0x3710, 0x25A0, 0x1540, 0x04D0, 0xF490, 0xE3F0,
+ 0xD1A0, 0xBD30, 0xA6F0, 0x8F00, 0x8610, 0x84F0, 0x84C0, 0x84B0, 0x8490, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0,
+ 0x84E0, 0x8500, 0x8560, 0x8660, 0x8960, 0x91B0, 0x9C00, 0xA5D0, 0xAF90, 0xB830, 0xBFE0, 0xC5D0, 0xCAF0, 0xCE90, 0xD0E0, 0xD310,
+ 0xD3E0, 0xD560, 0xD600, 0xD690, 0xD750, 0xD6F0, 0xD630, 0xD440, 0xD240, 0xCFB0, 0xCD20, 0xCA60, 0xC7C0, 0xC5D0, 0xC420, 0xC2D0,
+ 0xC100, 0xBF10, 0xBDC0, 0xBC00, 0xB9F0, 0xB760, 0xB450, 0xB080, 0xAC20, 0xA7A0, 0xA290, 0x9E60, 0x9830, 0x9330, 0x8E10, 0x8A40,
+ 0x8790, 0x8630, 0x8580, 0x8540, 0x8510, 0x8500, 0x84F0, 0x84E0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84F0,
+ 0x84F0, 0x8500, 0x8520, 0x8530, 0x8570, 0x85B0, 0x8620, 0x86E0, 0x8800, 0x89C0, 0x8C70, 0x8F80, 0x9230, 0x9640, 0x9A20, 0x9DF0,
+ 0xA1F0, 0xA490, 0xA790, 0xAA10, 0xAD60, 0xB010, 0xB490, 0xB870, 0xBC30, 0xBF80, 0xC200, 0xC3D0, 0xC610, 0xC870, 0xCB00, 0xCE90,
+ 0xD160, 0xD4A0, 0xD6C0, 0xD910, 0xDB70, 0xDE80, 0xE1F0, 0xE530, 0xE830, 0xEB20, 0xEE10, 0xF010, 0xF2C0, 0xF560, 0xF880, 0xFAF0,
+ 0xFED0, 0x02C0, 0x05D0, 0x0920, 0x0C60, 0x0F50, 0x1240, 0x15B0, 0x1920, 0x1CA0, 0x1FD0, 0x22F0, 0x2640, 0x2990, 0x2CB0, 0x3030,
+ 0x3320, 0x3660, 0x3950, 0x3BB0, 0x3E40, 0x40B0, 0x4260, 0x4400, 0x4640, 0x4850, 0x49D0, 0x4A60, 0x49D0, 0x48F0, 0x47B0, 0x46E0,
+ 0x4590, 0x44B0, 0x43B0, 0x4300, 0x42E0, 0x4200, 0x40C0, 0x3F10, 0x3DF0, 0x3C90, 0x3B70, 0x3A40, 0x3970, 0x38B0, 0x3880, 0x3800,
+ 0x37F0, 0x3770, 0x3760, 0x3770, 0x3810, 0x3910, 0x39E0, 0x3A90, 0x3BB0, 0x3D20, 0x3EA0, 0x4040, 0x41F0, 0x42D0, 0x4400, 0x4540,
+ 0x4610, 0x46B0, 0x4830, 0x49E0, 0x4B10, 0x4CC0, 0x4E00, 0x4FA0, 0x50E0, 0x5210, 0x5370, 0x54A0, 0x5540, 0x55C0, 0x5610, 0x56A0,
+ 0x5740, 0x58F0, 0x5A90, 0x5C40, 0x5DF0, 0x5F70, 0x6110, 0x6320, 0x66E0, 0x6BD0, 0x7170, 0x7780, 0x7D10, 0x7F10, 0x7F30, 0x7EE0,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7F40, 0x7DF0, 0x7780, 0x6EE0, 0x62E0, 0x52D0, 0x3EB0, 0x23E0, 0x0270, 0xDAD0, 0xA990, 0x8740, 0x84C0,
+ 0x8490, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8450, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8490, 0x8480, 0x8480, 0x8480, 0x8490,
+ 0x8480, 0x8470, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8490, 0x8460, 0x8450, 0x8470, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440,
+ 0x8430, 0x8430, 0x8440, 0x8430, 0x8440, 0x8430, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x84A0, 0x84C0, 0x8510,
+ 0x8690, 0x9230, 0xA460, 0xB260, 0xBDD0, 0xC7E0, 0xCF80, 0xD6B0, 0xDC90, 0xE320, 0xE8E0, 0xEE00, 0xF290, 0xF5F0, 0xF950, 0xFBC0,
+ 0xFD90, 0xFF10, 0x00B0, 0x0260, 0x0420, 0x05D0, 0x08B0, 0x0B90, 0x0DF0, 0x1150, 0x1490, 0x18F0, 0x1D60, 0x21F0, 0x2770, 0x2CE0,
+ 0x32D0, 0x38B0, 0x3F60, 0x4660, 0x4D50, 0x5590, 0x5CF0, 0x6460, 0x6C50, 0x73E0, 0x7AC0, 0x7E80, 0x7F10, 0x7F20, 0x7EC0, 0x7ED0,
+ 0x7F10, 0x7F00, 0x7F10, 0x7EB0, 0x7EE0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F70, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F50, 0x7EB0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F00,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F00, 0x7F30, 0x7EF0,
+ 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7EA0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F40, 0x7EF0, 0x7F80, 0x7DA0, 0x75E0, 0x6FA0, 0x6A20, 0x65E0, 0x6350, 0x6270, 0x6430, 0x67C0, 0x6CC0, 0x7330,
+ 0x7920, 0x7DF0, 0x7EF0, 0x7F70, 0x7F20, 0x7ED0, 0x7ED0, 0x7EB0, 0x7F20, 0x7F10, 0x7EB0, 0x7EC0, 0x7ED0, 0x7F30, 0x7F20, 0x7EA0,
+ 0x7DD0, 0x7C50, 0x7A50, 0x79B0, 0x78B0, 0x78C0, 0x7890, 0x77D0, 0x7760, 0x7580, 0x7380, 0x7050, 0x6B10, 0x6500, 0x5C00, 0x5140,
+ 0x4400, 0x3400, 0x2390, 0x1110, 0xFDF0, 0xEB90, 0xDB90, 0xCF00, 0xC710, 0xC540, 0xCA70, 0xD670, 0xE840, 0xFE90, 0x1530, 0x2B60,
+ 0x4090, 0x5310, 0x6250, 0x6E60, 0x76C0, 0x7B10, 0x7D60, 0x7D50, 0x7BB0, 0x78B0, 0x75F0, 0x75F0, 0x7810, 0x7C30, 0x7EE0, 0x7EF0,
+ 0x7ED0, 0x7EB0, 0x7F40, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7ED0, 0x72F0, 0x3E90, 0x0520, 0xC380, 0x87B0,
+ 0x84A0, 0x8470, 0x8440, 0x8440, 0x8430, 0x8430, 0x8450, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8410,
+ 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8440, 0x8420, 0x8430, 0x8430,
+ 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x8440, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x8500, 0x8540, 0x85E0, 0x8720, 0x8890, 0x8980,
+ 0x8930, 0x8800, 0x8730, 0x86D0, 0x8700, 0x87B0, 0x8A30, 0x8F70, 0x9810, 0xA0F0, 0xAA90, 0xB270, 0xB900, 0xBFA0, 0xC600, 0xCBC0,
+ 0xD250, 0xD9D0, 0xE1A0, 0xEA50, 0xF300, 0xFC20, 0x0540, 0x0F70, 0x1BE0, 0x2900, 0x3750, 0x4550, 0x5250, 0x5DD0, 0x65B0, 0x6C20,
+ 0x7080, 0x7210, 0x7310, 0x7180, 0x6E80, 0x6A00, 0x63E0, 0x5EA0, 0x5800, 0x51B0, 0x4C20, 0x45C0, 0x40D0, 0x3B90, 0x3690, 0x32B0,
+ 0x2FA0, 0x2E90, 0x2E50, 0x3030, 0x32F0, 0x3740, 0x3E10, 0x4730, 0x5270, 0x5EC0, 0x6B80, 0x77B0, 0x7EE0, 0x7F80, 0x7EF0, 0x7EB0,
+ 0x7F10, 0x7F10, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EB0, 0x7F00, 0x7F40, 0x7F40, 0x7ED0, 0x7EA0, 0x7EE0,
+ 0x7EF0, 0x7F10, 0x7EE0, 0x7E90, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EE0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7EF0,
+ 0x7F30, 0x7F20, 0x7F10, 0x7F90, 0x7B20, 0x6EC0, 0x6390, 0x57F0, 0x4C20, 0x3F10, 0x35D0, 0x2E20, 0x2780, 0x2290, 0x1EB0, 0x1C00,
+ 0x1A50, 0x1AF0, 0x1D20, 0x2080, 0x25B0, 0x2A90, 0x2FE0, 0x3540, 0x3A70, 0x3F90, 0x4430, 0x48A0, 0x4CF0, 0x5210, 0x56E0, 0x5BF0,
+ 0x60D0, 0x65A0, 0x6AE0, 0x6F90, 0x73B0, 0x7750, 0x7A50, 0x7C30, 0x7D30, 0x7DA0, 0x7D00, 0x7B50, 0x7890, 0x7400, 0x6E40, 0x6620,
+ 0x5D80, 0x5290, 0x4530, 0x3680, 0x25E0, 0x1370, 0xFEE0, 0xE860, 0xCE90, 0xB510, 0x9A50, 0x87E0, 0x8500, 0x84C0, 0x84A0, 0x8490,
+ 0x84B0, 0x8470, 0x8470, 0x8440, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480,
+ 0x84A0, 0x84F0, 0x8540, 0x9180, 0xB7B0, 0xD9F0, 0xF900, 0x13C0, 0x2B90, 0x41D0, 0x54E0, 0x63F0, 0x6FB0, 0x76A0, 0x7A80, 0x7BF0,
+ 0x7B30, 0x7820, 0x72C0, 0x6A10, 0x5ED0, 0x5070, 0x4180, 0x3310, 0x24F0, 0x1680, 0x06C0, 0xF2A0, 0xDAD0, 0xBF60, 0x9F10, 0x8880,
+ 0x8500, 0x84C0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x8540, 0x8740,
+ 0x9930, 0xAE50, 0xC1F0, 0xD1C0, 0xDD50, 0xE4C0, 0xE930, 0xEC20, 0xF070, 0xF790, 0x01B0, 0x0EF0, 0x1EA0, 0x3030, 0x41B0, 0x5270,
+ 0x6150, 0x6E70, 0x7A60, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F00, 0x7390, 0x6770, 0x5B60,
+ 0x4E60, 0x4150, 0x3460, 0x2740, 0x1A80, 0x0F50, 0x0550, 0xFCA0, 0xF520, 0xECB0, 0xE270, 0xD570, 0xC6A0, 0xB690, 0xA5D0, 0x95D0,
+ 0x8AF0, 0x86C0, 0x8580, 0x8530, 0x8500, 0x84F0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8520, 0x8530, 0x8540,
+ 0x8550, 0x8540, 0x8560, 0x8570, 0x8580, 0x85A0, 0x85B0, 0x85D0, 0x85C0, 0x85B0, 0x85C0, 0x85A0, 0x8590, 0x8580, 0x8570, 0x8560,
+ 0x8550, 0x8540, 0x8550, 0x8560, 0x8580, 0x85A0, 0x85F0, 0x8670, 0x8700, 0x87B0, 0x8890, 0x8970, 0x8A70, 0x8AF0, 0x8BB0, 0x8CB0,
+ 0x8DD0, 0x8F70, 0x9100, 0x9280, 0x93F0, 0x94F0, 0x9580, 0x9510, 0x9400, 0x9290, 0x90F0, 0x8F90, 0x8DE0, 0x8BC0, 0x89A0, 0x87C0,
+ 0x8650, 0x8580, 0x8530, 0x8500, 0x84F0, 0x84E0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84F0, 0x8500, 0x8500, 0x8510, 0x8510, 0x8510,
+ 0x8520, 0x8530, 0x8540, 0x8540, 0x8530, 0x8520, 0x84F0, 0x84E0, 0x84C0, 0x84A0, 0x8490, 0x8470, 0x8470, 0x8460, 0x8450, 0x8450,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8450, 0x8430,
+ 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420,
+ 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8430, 0x8450, 0x8450, 0x8460, 0x8470, 0x8490,
+ 0x84B0, 0x84D0, 0x84F0, 0x8500, 0x84F0, 0x84D0, 0x84C0, 0x8480, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x8510, 0x8520, 0x8590, 0x8660,
+ 0x87B0, 0x8890, 0x87D0, 0x8600, 0x8500, 0x84C0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8410,
+ 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8470, 0x84D0, 0x84F0, 0x8510, 0x8550, 0x85E0, 0x8700, 0x8960, 0x8E10, 0x9390, 0x9890,
+ 0x9C00, 0x9F40, 0xA210, 0xA4E0, 0xA810, 0xAC50, 0xB170, 0xB650, 0xBB00, 0xBEF0, 0xC1F0, 0xC4E0, 0xC6C0, 0xC800, 0xCA90, 0xCD20,
+ 0xCFF0, 0xD290, 0xD510, 0xD760, 0xD910, 0xD9F0, 0xDBA0, 0xDDD0, 0xDFB0, 0xE210, 0xE420, 0xE650, 0xE890, 0xEB20, 0xEDA0, 0xEFC0,
+ 0xF2F0, 0xF500, 0xF6C0, 0xF910, 0xFB80, 0xFEB0, 0x0240, 0x06F0, 0x0BE0, 0x1120, 0x1750, 0x1D90, 0x23F0, 0x2B60, 0x33C0, 0x3DD0,
+ 0x4800, 0x5270, 0x5D90, 0x67A0, 0x7160, 0x7940, 0x7E50, 0x7F20, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F10, 0x7E90, 0x7E80, 0x7F00,
+ 0x7EF0, 0x7F00, 0x7E90, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7EF0, 0x7F30,
+ 0x7F20, 0x7F00, 0x7F50, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7A20, 0x5900, 0x3D50, 0x2480, 0x0F80,
+ 0xFC00, 0xE7C0, 0xD150, 0xB790, 0x9BC0, 0x8730, 0x84F0, 0x84C0, 0x84A0, 0x8490, 0x8440, 0x8480, 0x8470, 0x8470, 0x8470, 0x8450,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84D0, 0x84F0, 0x8540, 0x86D0, 0x8F70, 0x9FC0,
+ 0xAE40, 0xB990, 0xC400, 0xCD60, 0xD6C0, 0xE010, 0xE8F0, 0xF190, 0xFA20, 0x0170, 0x08B0, 0x0E70, 0x1330, 0x1750, 0x1B60, 0x1FA0,
+ 0x2440, 0x2870, 0x2E10, 0x3270, 0x3730, 0x3B60, 0x3F50, 0x43D0, 0x4830, 0x4D80, 0x5290, 0x57F0, 0x5CC0, 0x60C0, 0x7000, 0x7290,
+ 0x74F0, 0x76C0, 0x7810, 0x7A20, 0x7B60, 0x7C70, 0x7CE0, 0x7D40, 0x7DD0, 0x7E30, 0x7EB0, 0x7EC0, 0x7EB0, 0x7F10, 0x7EF0, 0x7F30,
+ 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F30,
+ 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F80, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7F20, 0x7F00, 0x7EF0, 0x7EF0,
+ 0x7F30, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EA0, 0x7EE0, 0x7ED0, 0x7F60, 0x7F20, 0x7E90, 0x7EB0, 0x7EB0, 0x7F00,
+ 0x7EF0, 0x7EA0, 0x7F00, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7ED0, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7EF0, 0x7ED0, 0x7EE0,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F40, 0x7F10,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7520, 0x6750, 0x5980, 0x4A20,
+ 0x3CF0, 0x2FB0, 0x23A0, 0x1860, 0x0D50, 0x02F0, 0xF9E0, 0xF2D0, 0xECE0, 0xEA10, 0xEA10, 0xEC30, 0xF0A0, 0xF680, 0xFCC0, 0x02E0,
+ 0x0810, 0x0E20, 0x1370, 0x1990, 0x20A0, 0x2940, 0x3460, 0x4090, 0x4D30, 0x5970, 0x6460, 0x6D10, 0x7490, 0x7A60, 0x7EA0, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7CA0, 0x73D0, 0x6B80, 0x6330, 0x5B20, 0x5350, 0x4B60, 0x4450,
+ 0x3D50, 0x3650, 0x2F20, 0x2790, 0x1FB0, 0x17E0, 0x0FC0, 0x07A0, 0xFF90, 0xF830, 0xEFC0, 0xE710, 0xDE30, 0xD550, 0xCBB0, 0xC2A0,
+ 0xB890, 0xAED0, 0xA4D0, 0x9B00, 0x9130, 0x8A70, 0x8710, 0x85C0, 0x8540, 0x8500, 0x84F0, 0x84E0, 0x84D0, 0x84D0, 0x84D0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8530, 0x85B0, 0x86F0, 0x8A80, 0x94C0, 0x9F00, 0xA8F0, 0xB180, 0xB8A0,
+ 0xBF30, 0xC490, 0xCA10, 0xCF20, 0xD3F0, 0xD830, 0xDC30, 0xE060, 0xE340, 0xE5F0, 0xE700, 0xE5A0, 0xE240, 0xDAA0, 0xCFA0, 0xC1C0,
+ 0xB070, 0x9C90, 0x8B00, 0x85A0, 0x84F0, 0x84D0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84E0,
+ 0x8500, 0x8540, 0x85F0, 0x8900, 0x96D0, 0xA910, 0xBA80, 0xCA10, 0xD5A0, 0xD980, 0xD4F0, 0xC820, 0xB3D0, 0x9B00, 0x8820, 0x8500,
+ 0x84C0, 0x8490, 0x8480, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8420, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410,
+ 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83C0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83B0, 0x83F0, 0x83E0, 0x83E0, 0x83F0,
+ 0x83C0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8430, 0x8400, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83E0,
+ 0x8410, 0x83E0, 0x83E0, 0x83D0, 0x83F0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83E0,
+ 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400,
+ 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8480, 0x8450, 0x8460, 0x8430, 0x8470, 0x8460, 0x8490, 0x84A0, 0x84C0,
+ 0x84E0, 0x8520, 0x8580, 0x86B0, 0x8950, 0x8DB0, 0x9260, 0x9740, 0xAE30, 0xB190, 0xB570, 0xBAD0, 0xC2C0, 0xCC80, 0xD6D0, 0xE0D0,
+ 0xE840, 0xEDD0, 0xF0A0, 0xF210, 0xF450, 0xF850, 0xFFD0, 0x0A30, 0x17A0, 0x2820, 0x38E0, 0x48F0, 0x55E0, 0x5EA0, 0x6480, 0x6730,
+ 0x6820, 0x6750, 0x66D0, 0x67B0, 0x69E0, 0x6E60, 0x74F0, 0x7C20, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20,
+ 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7E90, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90, 0x7EE0, 0x7F10, 0x7F30, 0x7F00,
+ 0x7F80, 0x7F10, 0x7F10, 0x7EE0, 0x7EE0, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7E90, 0x7EB0, 0x7EF0, 0x7F30,
+ 0x7EE0, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F00, 0x7F10, 0x7E90, 0x7EE0, 0x7F00, 0x7F10, 0x7F10, 0x7E90, 0x7F00, 0x7EF0, 0x7F10, 0x7F20,
+ 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F30, 0x7F20, 0x7F00,
+ 0x7F50, 0x7EF0, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F70, 0x7F00, 0x7EE0, 0x7F00, 0x7F10, 0x7F30,
+ 0x7EE0, 0x7E70, 0x7EF0, 0x7F10, 0x7F30, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7EA0, 0x7F20, 0x7F10, 0x7F00, 0x7F00,
+ 0x7EC0, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F80, 0x7F10, 0x7F20, 0x7F00, 0x7F20,
+ 0x7F80, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F80, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F70, 0x7F20, 0x7EE0, 0x7ED0, 0x7EB0, 0x7F30,
+ 0x7EF0, 0x7EB0, 0x7EC0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7ED0, 0x7F10, 0x7F10, 0x7F00, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7EF0,
+ 0x7F00, 0x7F20, 0x7F40, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F70, 0x7F10, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F30, 0x7F00, 0x7EF0, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7ED0, 0x7EF0, 0x7F10, 0x7F70,
+ 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F40, 0x7EF0, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7EA0, 0x7EC0, 0x7ED0, 0x7F10, 0x7F00, 0x7E90, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7EC0, 0x7EF0, 0x7F20, 0x7F20, 0x7F20, 0x7F00,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F40, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F40, 0x7F00, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7C50, 0x7A30, 0x78F0, 0x7900, 0x7AA0, 0x7CD0, 0x7EB0, 0x7F10, 0x7F20,
+ 0x7F40, 0x7F10, 0x7F10, 0x7EE0, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F00, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F10, 0x7F30, 0x7F30,
+ 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F50, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7DB0, 0x7B60, 0x7880, 0x7480, 0x7030, 0x6BE0, 0x6720, 0x6250,
+ 0x5D80, 0x57E0, 0x5290, 0x4D90, 0x4920, 0x4480, 0x4010, 0x3AD0, 0x3570, 0x2FE0, 0x2A00, 0x24B0, 0x1FF0, 0x1C40, 0x1950, 0x1710,
+ 0x15C0, 0x1520, 0x14C0, 0x1400, 0x1380, 0x1210, 0x1010, 0x1030, 0x1160, 0x14E0, 0x1A40, 0x2190, 0x2AF0, 0x34E0, 0x3F60, 0x49C0,
+ 0x5490, 0x5F30, 0x6900, 0x7200, 0x79C0, 0x7E90, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7A70, 0x6E20,
+ 0x6280, 0x5830, 0x5170, 0x4CA0, 0x48B0, 0x4370, 0x3BD0, 0x2F40, 0x1FB0, 0x0C30, 0xF600, 0xDF40, 0xC700, 0xAFE0, 0x9900, 0x88F0,
+ 0x8520, 0x84D0, 0x84D0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400,
+ 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83F0, 0x83F0, 0x8420, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x8350, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0,
+ 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x8410, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8440,
+ 0x8460, 0x8460, 0x8470, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84C0, 0x84E0, 0x8530, 0x86D0, 0x9220, 0xA740, 0xBC00,
+ 0xD030, 0xE410, 0xF4A0, 0x0250, 0x0C60, 0x1180, 0x13C0, 0x1240, 0x0E30, 0x0870, 0x01E0, 0xFB90, 0xF4D0, 0xEF00, 0xEB70, 0xEB80,
+ 0xEEA0, 0xF460, 0xFD10, 0x0650, 0x0F30, 0x17C0, 0x1F50, 0x2630, 0x2DF0, 0x3720, 0x42B0, 0x4FD0, 0x5EB0, 0x6E60, 0x7C10, 0x7F00,
+ 0x7F10, 0x7F30, 0x7EB0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F30, 0x7F20, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7EA0, 0x7F10, 0x7EF0,
+ 0x7F20, 0x7F00, 0x7EC0, 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7EE0, 0x7F10, 0x7F20, 0x7F00, 0x7F70, 0x7EF0, 0x7F20,
+ 0x7F20, 0x7F00, 0x7F90, 0x7F20, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60, 0x7EE0, 0x7ED0, 0x7EF0, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0,
+ 0x7EF0, 0x7F00, 0x7ED0, 0x7F30, 0x7F00, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F00, 0x7EB0, 0x7EB0, 0x7EE0, 0x7F10, 0x7F10, 0x7E90,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7EF0, 0x7E90, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7F40,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F50, 0x7F00,
+ 0x7F00, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7EE0, 0x7F50, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EC0, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F50,
+ 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F80, 0x7F20,
+ 0x7F00, 0x7EF0, 0x7ED0, 0x7F30, 0x7F10, 0x7EB0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0, 0x7F50, 0x7F10, 0x7E90,
+ 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7F10, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F80, 0x7F00,
+ 0x7EE0, 0x7F00, 0x7F00, 0x7F90, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7E90,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7EB0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F80, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F90, 0x7F10,
+ 0x7F20, 0x7F10, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7ED0, 0x7EF0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7E90,
+ 0x7ED0, 0x7ED0, 0x7F10, 0x7F00, 0x7E90, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7F40,
+ 0x7F10, 0x7F30, 0x7EF0, 0x7F00, 0x7F30, 0x7F20, 0x7F00, 0x7550, 0x6A30, 0x5DF0, 0x5140, 0x4300, 0x35C0, 0x2880, 0x1AA0, 0x0CE0,
+ 0xFF10, 0xF1B0, 0xE390, 0xD540, 0xC680, 0xB900, 0xAB90, 0x9E60, 0x91D0, 0x8950, 0x8610, 0x8560, 0x84F0, 0x84D0, 0x84C0, 0x84B0,
+ 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0,
+ 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x84F0, 0x84F0, 0x8500, 0x84F0, 0x8500, 0x8500, 0x84E0, 0x84D0, 0x84D0, 0x84D0,
+ 0x84E0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84B0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8440, 0x8460, 0x8450, 0x8450,
+ 0x8450, 0x8440, 0x8440, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400,
+ 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420,
+ 0x8410, 0x8420, 0x8420, 0x8460, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8460, 0x8460, 0x8470, 0x8480, 0x8490, 0x8490,
+ 0x84B0, 0x84C0, 0x84E0, 0x8530, 0x8680, 0x8FA0, 0xA270, 0xB450, 0xC540, 0xD480, 0xE140, 0xEC80, 0xF3C0, 0xF840, 0xF990, 0xF7B0,
+ 0xF350, 0xECE0, 0xE4B0, 0xDBB0, 0xD170, 0xC6D0, 0xBC80, 0xB2F0, 0xAAC0, 0xA380, 0x9C40, 0x9590, 0x8E80, 0x88D0, 0x85E0, 0x8500,
+ 0x84C0, 0x84A0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8470, 0x8430, 0x8430, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480,
+ 0x8480, 0x8490, 0x8490, 0x84B0, 0x84B0, 0x84D0, 0x84F0, 0x8540, 0x8600, 0x88C0, 0x9170, 0x9DF0, 0xA9F0, 0xB690, 0xC1E0, 0xCCB0,
+ 0xD770, 0xE130, 0xEB20, 0xF450, 0xFD10, 0x05C0, 0x0DE0, 0x15C0, 0x1DF0, 0x25F0, 0x2F20, 0x3780, 0x4050, 0x4960, 0x51E0, 0x5C10,
+ 0x6520, 0x6E80, 0x76D0, 0x7D70, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F50, 0x7F00, 0x7F00, 0x7F00, 0x7F10, 0x7F30,
+ 0x7EE0, 0x7E70, 0x7EF0, 0x7F10, 0x7F30, 0x7EC0, 0x7E90, 0x7F00, 0x7F00, 0x7F20, 0x7F10, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7EF0, 0x7F20, 0x7EF0,
+ 0x7F80, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F70, 0x7EE0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7ED0, 0x7EE0, 0x7EE0, 0x7F30,
+ 0x7F00, 0x7EC0, 0x7ED0, 0x7ED0, 0x7F10, 0x7F00, 0x7E90, 0x7ED0, 0x7F10, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EC0, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F10,
+ 0x7F60, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7F70,
+ 0x7F00, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7EA0, 0x7F00, 0x7EB0, 0x7EE0, 0x7EF0,
+ 0x7F30, 0x7EE0, 0x7EC0, 0x7ED0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F20, 0x7EF0, 0x7F80, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F80, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F80, 0x7F10, 0x7F00, 0x7F20,
+ 0x7F00, 0x7F80, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7F50, 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0,
+ 0x7F10, 0x7F10, 0x7E90, 0x7EB0, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20,
+ 0x7EF0, 0x7EF0, 0x7DB0, 0x7A40, 0x7640, 0x72F0, 0x6F00, 0x6B20, 0x6690, 0x6200, 0x5DB0, 0x5940, 0x53B0, 0x4EA0, 0x48F0, 0x4490,
+ 0x3F30, 0x3A60, 0x3540, 0x3050, 0x2C70, 0x27C0, 0x23F0, 0x2110, 0x1D70, 0x1B00, 0x1890, 0x15F0, 0x14A0, 0x1360, 0x12E0, 0x12C0,
+ 0x12B0, 0x13A0, 0x1460, 0x15E0, 0x1710, 0x18F0, 0x1BC0, 0x1E40, 0x2170, 0x2470, 0x2720, 0x2B50, 0x2EB0, 0x32B0, 0x3670, 0x3A00,
+ 0x3E00, 0x4080, 0x42D0, 0x4550, 0x46E0, 0x49A0, 0x4B10, 0x4D70, 0x4F10, 0x50C0, 0x5250, 0x5370, 0x5430, 0x54E0, 0x5490, 0x54B0,
+ 0x54A0, 0x5460, 0x5420, 0x5380, 0x53D0, 0x53B0, 0x53A0, 0x5420, 0x53C0, 0x5450, 0x54A0, 0x54E0, 0x54D0, 0x5430, 0x5340, 0x5180,
+ 0x4E90, 0x4C90, 0x4A00, 0x47C0, 0x4570, 0x42F0, 0x4120, 0x3D90, 0x39D0, 0x34C0, 0x2E80, 0x2810, 0x1FB0, 0x1580, 0x0A80, 0xFE70,
+ 0xF1A0, 0xE2E0, 0xD3C0, 0xC370, 0xB270, 0xA170, 0x8F60, 0x8720, 0x8530, 0x84E0, 0x84C0, 0x84B0, 0x84B0, 0x8490, 0x84A0, 0x84B0,
+ 0x84B0, 0x84D0, 0x84F0, 0x8530, 0x85D0, 0x8790, 0x8B90, 0x92C0, 0x9A70, 0xA1B0, 0xA810, 0xAE50, 0xB470, 0xB960, 0xBCF0, 0xBE10,
+ 0xBC90, 0xB7B0, 0xB090, 0xA6F0, 0x9BF0, 0x9090, 0x8900, 0x85F0, 0x8510, 0x84D0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460,
+ 0x8460, 0x8460, 0x8450, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480,
+ 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84D0, 0x84B0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8510, 0x8530, 0x8560, 0x85B0,
+ 0x8620, 0x86D0, 0x87E0, 0x8940, 0x8B10, 0x8CE0, 0x8FB0, 0x9360, 0x9820, 0x9E20, 0xA5C0, 0xAEE0, 0xB8C0, 0xC450, 0xD140, 0xDF00,
+ 0xEFF0, 0xFFC0, 0x1050, 0x20B0, 0x3080, 0x3FA0, 0x4D90, 0x5AD0, 0x6630, 0x7100, 0x7A00, 0x7EB0, 0x7F60, 0x7EF0, 0x7F10, 0x7F10,
+ 0x7F20, 0x7F60, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F10,
+ 0x7EF0, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x6050, 0x2690, 0xF290, 0xC6B0, 0xA370, 0x9090, 0x8AC0, 0x8C60, 0x9630,
+ 0xA670, 0xB800, 0xC930, 0xD780, 0xE2C0, 0xEA60, 0xEE50, 0xF130, 0xF4C0, 0xFAB0, 0x0310, 0x0EB0, 0x1B40, 0x27B0, 0x3060, 0x3580,
+ 0x3750, 0x3730, 0x3620, 0x3540, 0x3480, 0x33B0, 0x3380, 0x32E0, 0x3110, 0x2E10, 0x29E0, 0x25C0, 0x2110, 0x1D10, 0x1970, 0x1620,
+ 0x13D0, 0x1110, 0x0D70, 0x0A40, 0x06B0, 0x0250, 0xFE20, 0xFB00, 0xF7A0, 0xF4A0, 0xF140, 0xEE20, 0xEB50, 0xE7D0, 0xE4B0, 0xE240,
+ 0xE100, 0xE0B0, 0xE210, 0xE3A0, 0xE620, 0xE920, 0xEC20, 0xEFB0, 0xF230, 0xF470, 0xF6C0, 0xF840, 0xF960, 0xF9A0, 0xFA10, 0xF990,
+ 0xF830, 0xF670, 0xF350, 0xF0B0, 0xEDF0, 0xEC60, 0xEBF0, 0xEC80, 0xEEC0, 0xF2A0, 0xF6D0, 0xFB30, 0xFF00, 0x01C0, 0x02D0, 0x02A0,
+ 0x0140, 0xFF70, 0xFCF0, 0xFAF0, 0xF970, 0xF7D0, 0xF670, 0xF4E0, 0xF440, 0xF450, 0xF580, 0x0B90, 0x1820, 0x2810, 0x3A10, 0x4BA0,
+ 0x5BA0, 0x6800, 0x7050, 0x7520, 0x7780, 0x7910, 0x7B10, 0x7DA0, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7EF0,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F90, 0x7F30, 0x7EE0, 0x7F20, 0x7F10, 0x7F50, 0x7F20, 0x7EA0, 0x7F10, 0x7F10, 0x7F40, 0x7F00,
+ 0x7E90, 0x7E90, 0x7EE0, 0x7EF0, 0x7ED0, 0x7EA0, 0x7F00, 0x7F10, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F00,
+ 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7D40, 0x78B0, 0x71B0, 0x6970, 0x5E00, 0x51C0, 0x43D0, 0x34B0, 0x24B0, 0x1400, 0x02F0,
+ 0xF250, 0xE0A0, 0xCF60, 0xC000, 0xB2A0, 0xA7B0, 0xA100, 0x9EA0, 0xA130, 0xA970, 0xB700, 0xC950, 0xDD40, 0xF2A0, 0x06D0, 0x1970,
+ 0x2860, 0x34E0, 0x3DD0, 0x43E0, 0x4840, 0x4AA0, 0x4BD0, 0x4D20, 0x4DA0, 0x4F10, 0x5080, 0x5270, 0x5420, 0x5430, 0x5270, 0x4D00,
+ 0x4790, 0x43E0, 0x44C0, 0x4BC0, 0x53F0, 0x59F0, 0x5860, 0x4D40, 0x3950, 0x1EA0, 0x0100, 0xE270, 0xC550, 0xAA30, 0x9040, 0x8580,
+ 0x84D0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8430, 0x8410, 0x83F0, 0x83E0, 0x83C0, 0x83A0,
+ 0x8390, 0x8380, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8380, 0x8380, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83A0,
+ 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x8400, 0x83D0, 0x83D0, 0x83E0,
+ 0x83A0, 0x83E0, 0x83E0, 0x83F0, 0x8380, 0x8400, 0x8400, 0x8410, 0x8420, 0x8410, 0x8410, 0x8430, 0x8440, 0x8410, 0x8420, 0x8420,
+ 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x83F0, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450,
+ 0x8450, 0x8450, 0x8470, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8430, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8460, 0x8440, 0x8440, 0x8440, 0x8460, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8480, 0x8450, 0x8460, 0x8460, 0x8440, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490,
+ 0x84A0, 0x84B0, 0x84E0, 0x8530, 0x8690, 0x9090, 0xA450, 0xB7A0, 0xCB60, 0xDE10, 0xF040, 0x0300, 0x14D0, 0x2700, 0x3860, 0x4B40,
+ 0x5C80, 0x6E40, 0x7BD0, 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7F20, 0x7EF0, 0x7F70, 0x7F00, 0x7F40, 0x7F10, 0x7F10,
+ 0x7F60, 0x7EE0, 0x7ED0, 0x7EE0, 0x7EF0, 0x7F80, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30,
+ 0x7EE0, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7F10, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F20,
+ 0x7F00, 0x7F10, 0x7EF0, 0x7F00, 0x7F20, 0x7EF0, 0x7F80, 0x7EE0, 0x7F10, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0,
+ 0x7F70, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F70, 0x7F00, 0x7ED0, 0x7EB0, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EC0, 0x7EC0, 0x7EF0,
+ 0x7F20, 0x7EA0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F10, 0x7E90, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7E70, 0x7EE0, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F40, 0x7F10, 0x7F00,
+ 0x7F30, 0x7EE0, 0x7F10, 0x7F10, 0x7F00, 0x7F70, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F50, 0x7EB0, 0x7E70, 0x7EE0, 0x7EF0, 0x7F30,
+ 0x7EC0, 0x7EB0, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7E90, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7F10, 0x7EE0,
+ 0x7F70, 0x7F10, 0x7F20, 0x7F20, 0x7EF0, 0x7F90, 0x7F20, 0x6280, 0x3EC0, 0x16D0, 0xEC60, 0xC040, 0x90E0, 0x8500, 0x84B0, 0x8480,
+ 0x8470, 0x8460, 0x8480, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8450, 0x8440, 0x8440, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420,
+ 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84D0, 0x84C0,
+ 0x84D0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8440,
+ 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84A0, 0x84A0,
+ 0x84A0, 0x84A0, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84E0, 0x84F0,
+ 0x8500, 0x8510, 0x8530, 0x8560, 0x85A0, 0x8610, 0x86F0, 0x8840, 0x8A20, 0x8CC0, 0x8F90, 0x9270, 0x9540, 0x97A0, 0x9990, 0x9B10,
+ 0x9CD0, 0x9E40, 0x9F80, 0xA070, 0xA0D0, 0xA170, 0xA2F0, 0xA450, 0xA5E0, 0xA7E0, 0xA9C0, 0xABE0, 0xADE0, 0xB0B0, 0xB460, 0xB8D0,
+ 0xBD70, 0xC1F0, 0xC700, 0xCC80, 0xD1C0, 0xD760, 0xDD50, 0xE430, 0xEAA0, 0xF110, 0xF7A0, 0xFE00, 0x03F0, 0x0A30, 0x1150, 0x1820,
+ 0x1F10, 0x2530, 0x2AE0, 0x30C0, 0x3650, 0x3BB0, 0x4130, 0x4700, 0x4C50, 0x5240, 0x5740, 0x5B70, 0x6110, 0x65E0, 0x69D0, 0x6E50,
+ 0x7180, 0x7500, 0x77C0, 0x7970, 0x7B90, 0x7BE0, 0x7C80, 0x7CD0, 0x7C70, 0x7BF0, 0x7460, 0x7150, 0x6D90, 0x68B0, 0x6400, 0x5E10,
+ 0x5910, 0x5320, 0x4BF0, 0x4550, 0x3DB0, 0x3680, 0x2EE0, 0x2640, 0x1ED0, 0x16A0, 0x0F60, 0x0870, 0x0230, 0xFD70, 0xF8C0, 0xF580,
+ 0xF290, 0xF090, 0xF020, 0xEF80, 0xEFD0, 0xEF60, 0xEF20, 0xEED0, 0xEDF0, 0xEC60, 0xEA40, 0xE6F0, 0xE3B0, 0xDF30, 0xDA10, 0xD4C0,
+ 0xCE80, 0xC8F0, 0xC2E0, 0xBCD0, 0xB670, 0xAFD0, 0xA850, 0xA0D0, 0x9980, 0x9160, 0x8BA0, 0x8820, 0x8650, 0x8580, 0x8530, 0x8500,
+ 0x84E0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x8490, 0x8490,
+ 0x8490, 0x8480, 0x8480, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8450, 0x8430, 0x8420, 0x8410, 0x8420, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8420, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410,
+ 0x8420, 0x8420, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8490, 0x84A0, 0x84A0, 0x84F0, 0x8580, 0x8910, 0x99C0, 0xAAC0, 0xB990,
+ 0xC570, 0xCF20, 0xD6A0, 0xDC10, 0xDFE0, 0xE2A0, 0xE560, 0xE790, 0xE870, 0xE8C0, 0xE770, 0xE450, 0xDF20, 0xD7B0, 0xCF10, 0xC4B0,
+ 0xB9C0, 0xAD00, 0x9EF0, 0x90B0, 0x87B0, 0x8530, 0x84D0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430,
+ 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430,
+ 0x8430, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8480, 0x8480, 0x8490, 0x84B0, 0x84C0, 0x84F0, 0x8550, 0x86A0,
+ 0x8BF0, 0x97D0, 0xA370, 0xAE50, 0xB880, 0xC250, 0xCAC0, 0xD1F0, 0xD700, 0xDAF0, 0xDE40, 0xE120, 0xE490, 0xE910, 0xECC0, 0xF290,
+ 0xF770, 0xFD20, 0x02E0, 0x0830, 0x0E00, 0x1320, 0x1960, 0x1FD0, 0x2770, 0x2F40, 0x3710, 0x3FF0, 0x47E0, 0x4F70, 0x5800, 0x5E80,
+ 0x6560, 0x6C60, 0x71F0, 0x7790, 0x7C10, 0x7EC0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F80,
+ 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7F20,
+ 0x7EC0, 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7EB0, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EC0, 0x7F10, 0x7F10, 0x7F10, 0x7E90,
+ 0x7EA0, 0x7E80, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F50,
+ 0x7F20, 0x7EF0, 0x7EF0, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7F50, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00,
+ 0x7EC0, 0x7EF0, 0x7F00, 0x7F50, 0x7EB0, 0x7EA0, 0x7EF0, 0x7EF0, 0x7F30, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7EE0, 0x7E90,
+ 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7E70, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F40,
+ 0x7EF0, 0x7F10, 0x7F30, 0x7F00, 0x7F80, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F00,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F40, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7EE0, 0x7ED0, 0x7F00, 0x7F20, 0x7E90, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F40,
+ 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F60, 0x7EA0, 0x79D0, 0x7490, 0x6E30, 0x6760, 0x5FC0, 0x5790, 0x4ED0, 0x4610, 0x3C60, 0x31F0,
+ 0x2610, 0x1930, 0x0B30, 0xFC20, 0xEC70, 0xDA80, 0xCAD0, 0xBAB0, 0xAB70, 0x9D40, 0x91A0, 0x8A90, 0x8780, 0x8660, 0x85D0, 0x8580,
+ 0x8530, 0x84F0, 0x84D0, 0x84C0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8480, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x8500, 0x8530, 0x8570,
+ 0x85C0, 0x8700, 0x88E0, 0x8C50, 0x9210, 0x97E0, 0x9E00, 0xA460, 0xAA90, 0xB0E0, 0xB790, 0xBDC0, 0xC330, 0xC950, 0xCED0, 0xD4B0,
+ 0xDA60, 0xE140, 0xE7F0, 0xEF30, 0xF740, 0xFF40, 0x0820, 0x1170, 0x1AE0, 0x2530, 0x2EE0, 0x38D0, 0x4290, 0x4CC0, 0x56F0, 0x61B0,
+ 0x6B70, 0x7590, 0x7D90, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30,
+ 0x7F40, 0x7F30, 0x73B0, 0x6620, 0x5840, 0x49B0, 0x3B50, 0x2D20, 0x1FA0, 0x10F0, 0x03A0, 0xF640, 0xE880, 0xDB20, 0xCD40, 0xBFE0,
+ 0xB2F0, 0xA6C0, 0x9A50, 0x8F40, 0x88B0, 0x8600, 0x8530, 0x84E0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x84A0, 0x8480, 0x8470,
+ 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8450, 0x8450, 0x8440, 0x8450, 0x8440, 0x8480, 0x8450,
+ 0x8460, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8430, 0x8430, 0x8410,
+ 0x8400, 0x83F0, 0x83E0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83B0,
+ 0x83C0, 0x83C0, 0x83D0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8450, 0x8460, 0x8480, 0x8480,
+ 0x8490, 0x84C0, 0x84E0, 0x8520, 0x8580, 0x85B0, 0x85F0, 0x85B0, 0x85A0, 0x8590, 0x8540, 0x85C0, 0x85F0, 0x8660, 0x86F0, 0x87B0,
+ 0x8840, 0x88D0, 0x8930, 0x8970, 0x89D0, 0x89F0, 0x8970, 0x88E0, 0x87B0, 0x8510, 0x84F0, 0x84F0, 0x84C0, 0x84C0, 0x84B0, 0x84B0,
+ 0x8490, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8470, 0x8450, 0x8400, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8490, 0x84B0, 0x8520, 0x8A30, 0xA9D0, 0xC2F0, 0xD340, 0xDF30,
+ 0xE870, 0xF160, 0xFA70, 0x05A0, 0x1160, 0x1D50, 0x2B30, 0x36A0, 0x4270, 0x4DD0, 0x5930, 0x6580, 0x7180, 0x7CD0, 0x7F10, 0x7F40,
+ 0x7F10, 0x7EB0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F30, 0x7F00, 0x7F40, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F40, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7F00, 0x7EE0, 0x7F10, 0x7F60, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F00,
+ 0x7F60, 0x7F10, 0x7E90, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7F10, 0x7EE0, 0x7F00,
+ 0x7EF0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F30, 0x7EF0, 0x7E90, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EE0, 0x7F10,
+ 0x7F10, 0x7F10, 0x7E90, 0x7EC0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7D30, 0x65E0, 0x4F80, 0x37D0, 0x2010, 0x0830,
+ 0xF240, 0xDE10, 0xCBB0, 0xBBB0, 0xAC50, 0xA140, 0x99E0, 0x9730, 0x9A90, 0xA470, 0xB530, 0xCA70, 0xE2D0, 0xFDE0, 0x1640, 0x2C20,
+ 0x4090, 0x53B0, 0x6520, 0x7480, 0x7E90, 0x7F00, 0x7F90, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F00,
+ 0x7F10, 0x7EB0, 0x7E70, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7E00, 0x6F10, 0x61E0, 0x5570,
+ 0x4B90, 0x4340, 0x3E40, 0x39C0, 0x3620, 0x32A0, 0x2E20, 0x2950, 0x2590, 0x2370, 0x2540, 0x29B0, 0x2FF0, 0x36A0, 0x3960, 0x37B0,
+ 0x2F10, 0x1F60, 0x09F0, 0xED30, 0xD020, 0xB130, 0x9380, 0x8610, 0x84E0, 0x84B0, 0x84A0, 0x8480, 0x8480, 0x8470, 0x8480, 0x8480,
+ 0x8480, 0x8490, 0x84B0, 0x84D0, 0x8570, 0x8EE0, 0xADF0, 0xC8C0, 0xDF00, 0xF0B0, 0xFD20, 0x05E0, 0x0A90, 0x0CB0, 0x0CC0, 0x0B30,
+ 0x0970, 0x0760, 0x0600, 0x0610, 0x0870, 0x0C70, 0x11E0, 0x1990, 0x2240, 0x2BE0, 0x3790, 0x4430, 0x5320, 0x62A0, 0x72C0, 0x7EB0,
+ 0x7EF0, 0x7F60, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7EB0, 0x7F00, 0x7EF0, 0x7F50, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00,
+ 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10,
+ 0x7F20, 0x7EE0, 0x7F50, 0x7F10, 0x7EF0, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7EE0, 0x7EF0, 0x7EF0,
+ 0x7F00, 0x7F70, 0x7F00, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F70, 0x7F10, 0x7EB0, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EC0, 0x7EE0,
+ 0x7F30, 0x7F00, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10,
+ 0x7F00, 0x7EB0, 0x7F20, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F00, 0x7EE0,
+ 0x7EF0, 0x7F80, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7ED0, 0x7EB0, 0x7EF0, 0x7EE0, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10,
+ 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7EA0, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F20, 0x7F40, 0x7F40, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7EF0, 0x7F10, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7740, 0x6BF0, 0x5FB0, 0x5230, 0x4440,
+ 0x34F0, 0x2550, 0x14B0, 0x0300, 0xEF80, 0xDCB0, 0xC960, 0xB520, 0xA090, 0x8CF0, 0x85D0, 0x84F0, 0x84B0, 0x8490, 0x8480, 0x8470,
+ 0x8460, 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8420,
+ 0x8420, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8420, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8420, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8440, 0x8440,
+ 0x8450, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84E0, 0x85A0, 0x8C00, 0xA450, 0xBB10, 0xD010, 0xE380, 0xF770, 0x0910,
+ 0x1A30, 0x2B10, 0x3B90, 0x4B30, 0x59E0, 0x6840, 0x7510, 0x7E70, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7F50, 0x7F30,
+ 0x7F80, 0x7F30, 0x7F00, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7EF0, 0x7F20, 0x7F00, 0x7EF0, 0x7ED0, 0x7F10, 0x7F40,
+ 0x7ED0, 0x7E90, 0x7EE0, 0x7EF0, 0x7F50, 0x7EE0, 0x7EA0, 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7E90, 0x7F20, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x75F0, 0x6A80, 0x5D90,
+ 0x5050, 0x42F0, 0x3540, 0x2850, 0x1C10, 0x10B0, 0x0700, 0x0010, 0xFB80, 0xF900, 0xF8D0, 0xFB50, 0xFF30, 0x06A0, 0x0F20, 0x1A90,
+ 0x2730, 0x3460, 0x4360, 0x52F0, 0x6270, 0x7220, 0x7D90, 0x7ED0, 0x7F00, 0x7F30, 0x7F10, 0x7EB0, 0x7EA0, 0x7EC0, 0x7F10, 0x7F10,
+ 0x7EC0, 0x7ED0, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EF0,
+ 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7F80, 0x7EF0, 0x7F10, 0x7F10, 0x7EF0, 0x7F60,
+ 0x7EE0, 0x7ED0, 0x7F00, 0x7F00, 0x7F50, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7EB0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F10, 0x7ED0,
+ 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7EC0, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F10,
+ 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F80, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60,
+ 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EA0, 0x7ED0, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7F10, 0x7F10, 0x7F60, 0x7ED0,
+ 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7E90, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EC0,
+ 0x7F10, 0x7EF0, 0x7F00, 0x7F10, 0x7F00, 0x7F60, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20,
+ 0x7EF0, 0x7F80, 0x7F10, 0x7F20, 0x7F10, 0x7F20, 0x7FA0, 0x7EF0, 0x7B50, 0x7570, 0x6F60, 0x6850, 0x60B0, 0x5830, 0x4F10, 0x45C0,
+ 0x3B70, 0x3130, 0x2610, 0x1B00, 0x0FA0, 0x0450, 0xF990, 0xEE10, 0xE450, 0xDAC0, 0xD0F0, 0xC7F0, 0xBE30, 0xB5A0, 0xAD30, 0xA5C0,
+ 0x9EF0, 0x98C0, 0x93E0, 0x9060, 0x8DF0, 0x8CC0, 0x8C30, 0x8D10, 0x8F60, 0x9320, 0x9890, 0x9F00, 0xA690, 0xAF70, 0xB910, 0xC370,
+ 0xCDD0, 0xD860, 0xE3C0, 0xEE10, 0xF8C0, 0x02C0, 0x0CF0, 0x16F0, 0x2070, 0x2A60, 0x32F0, 0x3BB0, 0x4340, 0x49F0, 0x50F0, 0x56B0,
+ 0x5BF0, 0x60F0, 0x6590, 0x69B0, 0x6D90, 0x7050, 0x7260, 0x73E0, 0x7550, 0x75D0, 0x75B0, 0x75A0, 0x7500, 0x7440, 0x72F0, 0x7130,
+ 0x6FE0, 0x6DC0, 0x6BD0, 0x6980, 0x65A0, 0x6300, 0x5E80, 0x5B00, 0x5720, 0x5300, 0x4F90, 0x4B00, 0x46A0, 0x4180, 0x3B30, 0x3500,
+ 0x2E40, 0x2750, 0x2000, 0x1720, 0x0F40, 0x05F0, 0xFC10, 0xF1A0, 0xE520, 0xD9D0, 0xCDD0, 0xC1C0, 0xB5A0, 0xA910, 0x9C90, 0x9090,
+ 0x88D0, 0x85D0, 0x8510, 0x84E0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8470,
+ 0x8440, 0x8440, 0x8440, 0x8430, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8450,
+ 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430,
+ 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400,
+ 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430, 0x8420, 0x8430, 0x8420, 0x8430,
+ 0x8430, 0x8440, 0x83E0, 0x8440, 0x8450, 0x8440, 0x8450, 0x8460, 0x8450, 0x8450, 0x8410, 0x8460, 0x8460, 0x8450, 0x8460, 0x8460,
+ 0x8460, 0x83F0, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8410,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8460, 0x8480, 0x8480, 0x8490, 0x8490, 0x84C0,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x84A0, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8490, 0x8460,
+ 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x84B0, 0x84C0, 0x8500, 0x85E0, 0x8C10, 0xA140, 0xB4F0, 0xC8F0,
+ 0xDA20, 0xE8F0, 0xF720, 0x0320, 0x0EE0, 0x1990, 0x2360, 0x2BE0, 0x3440, 0x3AD0, 0x4100, 0x4720, 0x4BD0, 0x5050, 0x5480, 0x5820,
+ 0x5B70, 0x5E70, 0x6120, 0x6340, 0x6510, 0x6630, 0x66B0, 0x66A0, 0x64D0, 0x6210, 0x5E60, 0x5A00, 0x54D0, 0x4F70, 0x4960, 0x4340,
+ 0x3CB0, 0x35D0, 0x2E60, 0x2690, 0x1F00, 0x1820, 0x1110, 0x0930, 0x0110, 0xF7C0, 0xECD0, 0xDFF0, 0xCFA0, 0xBEE0, 0xAE00, 0x9C30,
+ 0x8D30, 0x8690, 0x8530, 0x84E0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8460, 0x8480, 0x8480,
+ 0x8480, 0x8490, 0x8490, 0x84B0, 0x84C0, 0x84E0, 0x8530, 0x8650, 0x8BF0, 0x9E90, 0xAF70, 0xC050, 0xD030, 0xDFB0, 0xEEF0, 0xFE40,
+ 0x0D50, 0x1D00, 0x2D40, 0x3C10, 0x4B00, 0x5880, 0x65C0, 0x7150, 0x7AB0, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7E70, 0x7EE0, 0x7EF0, 0x7F00, 0x7F00, 0x7F00, 0x7F10, 0x7ED0, 0x7F00, 0x7EB0, 0x7E60, 0x7EC0,
+ 0x7ED0, 0x7F30, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0,
+ 0x7F20, 0x7F00, 0x7F00, 0x7F50, 0x7F10, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F70, 0x7EE0, 0x7ED0, 0x7F10, 0x7F10, 0x7F40, 0x7ED0, 0x7E90,
+ 0x7F10, 0x7F10, 0x7F30, 0x7EB0, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7EC0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F40, 0x7EC0, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7F10, 0x7F20, 0x7EF0, 0x7F80, 0x7F10,
+ 0x7F20, 0x7F10, 0x7F10, 0x77F0, 0x6E60, 0x63C0, 0x5B50, 0x53B0, 0x4DA0, 0x49C0, 0x4750, 0x4780, 0x4970, 0x4D70, 0x5340, 0x5940,
+ 0x6090, 0x68F0, 0x7130, 0x7940, 0x7E00, 0x7ED0, 0x7F00, 0x7EF0, 0x7F10, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00,
+ 0x7F10, 0x7F00, 0x7F00, 0x70C0, 0x5750, 0x3DA0, 0x2040, 0xFCD0, 0xD0B0, 0x95B0, 0x84D0, 0x84A0, 0x8470, 0x8450, 0x8470, 0x8440,
+ 0x8440, 0x8440, 0x8430, 0x8420, 0x8420, 0x8410, 0x8400, 0x83F0, 0x8400, 0x83E0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x8390,
+ 0x83A0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x8390, 0x8390, 0x83B0, 0x83A0, 0x83A0, 0x83A0, 0x8390, 0x83B0, 0x83C0, 0x83D0, 0x83D0,
+ 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400, 0x8400,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83E0, 0x83C0, 0x83B0, 0x83B0,
+ 0x83E0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83E0, 0x83C0, 0x83C0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0,
+ 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8450, 0x8460, 0x8490, 0x8490, 0x84A0, 0x84D0, 0x85B0, 0x8B50, 0xA8F0, 0xC4E0,
+ 0xE1D0, 0xFB60, 0x12C0, 0x2990, 0x3E00, 0x51C0, 0x63E0, 0x73C0, 0x7E70, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F70,
+ 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10,
+ 0x7F20, 0x7EF0, 0x7EF0, 0x7F80, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F80, 0x7F20, 0x7F10, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7EF0,
+ 0x7ED0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7E90, 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7EA0, 0x7ED0, 0x7F10, 0x7F00, 0x7F00, 0x7EC0, 0x7EB0,
+ 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7DE0, 0x73D0, 0x6830, 0x5890, 0x48B0, 0x36E0, 0x2320, 0x0EB0, 0xF800, 0xE020, 0xC6B0,
+ 0xAB70, 0x8F30, 0x85B0, 0x8500, 0x84A0, 0x8480, 0x84A0, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8430, 0x8450, 0x8420, 0x8410,
+ 0x8410, 0x8450, 0x8410, 0x8410, 0x8410, 0x8430, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8430, 0x8460,
+ 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8460, 0x8450, 0x8450, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430,
+ 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x84F0, 0x85A0, 0x8E80, 0xA990, 0xC530,
+ 0xE260, 0x0100, 0x1FB0, 0x3DB0, 0x5C40, 0x73B0, 0x7EF0, 0x7EE0, 0x7F50, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F60, 0x7F00, 0x7F10,
+ 0x7F10, 0x7EF0, 0x7F60, 0x7EE0, 0x7EB0, 0x7F10, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7EF0, 0x7EF0, 0x7F20, 0x7ED0, 0x7E90, 0x7EF0,
+ 0x7EE0, 0x7EF0, 0x7EF0, 0x7EA0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F10, 0x7F00, 0x7F30, 0x7F00,
+ 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F90, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EF0,
+ 0x7EB0, 0x7EE0, 0x7F50, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7E90, 0x7EB0, 0x7EC0, 0x7F50, 0x7F10, 0x7E70, 0x7EC0,
+ 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F00, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7150, 0x5A60, 0x4260,
+ 0x2B10, 0x13D0, 0xFAD0, 0xE4D0, 0xCF30, 0xBB00, 0xA880, 0x97E0, 0x8C50, 0x8770, 0x8600, 0x85A0, 0x85C0, 0x85E0, 0x86B0, 0x88E0,
+ 0x8E30, 0x96E0, 0x9E70, 0xA3E0, 0xA710, 0xA6A0, 0xA450, 0x9ED0, 0x9760, 0x8F10, 0x88F0, 0x8600, 0x8520, 0x84D0, 0x84B0, 0x84A0,
+ 0x8480, 0x8470, 0x8470, 0x8460, 0x8450, 0x8420, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8410, 0x8400, 0x8400, 0x83F0,
+ 0x8400, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83A0,
+ 0x83A0, 0x83A0, 0x83C0, 0x83B0, 0x83A0, 0x83B0, 0x83D0, 0x83C0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x8410, 0x83F0, 0x83F0,
+ 0x83F0, 0x8400, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8470, 0x8480, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0,
+ 0x84B0, 0x84C0, 0x84E0, 0x8570, 0x8A10, 0xA5E0, 0xC170, 0xDB00, 0xF170, 0x0370, 0x1080, 0x1980, 0x1FB0, 0x22A0, 0x22E0, 0x2190,
+ 0x1CC0, 0x1590, 0x0A50, 0xFD60, 0xEED0, 0xDE80, 0xCD10, 0xBAE0, 0xA7F0, 0x9550, 0x8890, 0x8540, 0x84E0, 0x84B0, 0x84A0, 0x8480,
+ 0x8470, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8420, 0x8430,
+ 0x8410, 0x8450, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84C0, 0x8500, 0x8610, 0x93D0, 0xB140, 0xCDE0, 0xE9B0, 0x0350, 0x1B80, 0x3270,
+ 0x4890, 0x5ED0, 0x7160, 0x7ED0, 0x7F10, 0x7F70, 0x7EE0, 0x7ED0, 0x7F10, 0x7F10, 0x7F70, 0x7EF0, 0x7ED0, 0x7F00, 0x7F10, 0x7F30,
+ 0x7EB0, 0x7E70, 0x7EF0, 0x7EE0, 0x7F30, 0x7ED0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7EC0, 0x7EF0, 0x7F10,
+ 0x7F50, 0x7ED0, 0x7E70, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F10, 0x7EF0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F10,
+ 0x7F20, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F90, 0x7EF0, 0x7EE0, 0x7F10, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EE0, 0x7F00, 0x7EF0,
+ 0x7F30, 0x7F10, 0x7E70, 0x7EC0, 0x7EF0, 0x7F20, 0x7EF0, 0x7E90, 0x7EE0, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F00,
+ 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F10, 0x7F00, 0x7300, 0x5A00, 0x4780, 0x3820, 0x29E0, 0x1DD0,
+ 0x1690, 0x1740, 0x22A0, 0x37D0, 0x5670, 0x75B0, 0x7F60, 0x7EF0, 0x7EF0, 0x7F20, 0x7EF0, 0x7F90, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7F30, 0x7EC0, 0x7EC0, 0x5410, 0x1730, 0xD8B0, 0xA040, 0x8600, 0x84E0, 0x84D0, 0x84E0, 0x8510, 0x8610, 0x8A80, 0x9360, 0x9740,
+ 0x96F0, 0x9440, 0x92C0, 0x93C0, 0x96A0, 0x9CD0, 0xADB0, 0xAEA0, 0xAEB0, 0xAD30, 0xAD30, 0xAD60, 0xADB0, 0xAEC0, 0xAF90, 0xB0C0,
+ 0xB110, 0xB150, 0xB1A0, 0xB170, 0xB160, 0xB150, 0xB200, 0xB2C0, 0xB370, 0xB470, 0xB4C0, 0xB510, 0xB450, 0xB340, 0xB120, 0xAE00,
+ 0xAA20, 0xA5D0, 0xA030, 0x9A80, 0x94B0, 0x8E10, 0x8930, 0x8680, 0x8560, 0x8500, 0x84D0, 0x8450, 0x84A0, 0x8490, 0x8480, 0x8430,
+ 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83E0, 0x83D0, 0x83D0, 0x83F0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x8400, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430,
+ 0x8430, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84B0,
+ 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8530, 0x8570, 0x85E0, 0x8660, 0x8690, 0x8630, 0x8590, 0x8520, 0x84E0,
+ 0x84C0, 0x84B0, 0x8490, 0x8480, 0x8430, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8470, 0x8450, 0x8440, 0x8440,
+ 0x83F0, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8420, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8470, 0x8490, 0x84D0, 0x92F0, 0xDA30, 0x1BC0, 0x5750, 0x7ED0, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7EF0, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F40, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F40, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x75C0, 0x66F0, 0x5830, 0x4960, 0x3B40, 0x2E10, 0x2180, 0x1720,
+ 0x0EC0, 0x07F0, 0x0360, 0xFF20, 0xFC60, 0xF9C0, 0xF690, 0xF300, 0xEFB0, 0xEBD0, 0xE810, 0xE460, 0xE090, 0xDD90, 0xDAF0, 0xD970,
+ 0xD7B0, 0xD690, 0xD4B0, 0xD210, 0xCE40, 0xC960, 0xC390, 0xBD10, 0xB7D0, 0xB290, 0xB020, 0xAE70, 0xAF60, 0xB1F0, 0xB5A0, 0xBA40,
+ 0xBF50, 0xC4F0, 0xCAD0, 0xCF70, 0xD360, 0xD5F0, 0xD6A0, 0xD490, 0xCFF0, 0xC8B0, 0xBE40, 0xAF30, 0x9D00, 0x8A60, 0x8530, 0x84C0,
+ 0x8490, 0x8470, 0x8460, 0x8440, 0x8430, 0x8420, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440,
+ 0x8440, 0x8450, 0x8480, 0x8460, 0x8460, 0x8470, 0x8430, 0x8490, 0x84A0, 0x84B0, 0x84F0, 0x85E0, 0x90C0, 0xADB0, 0xCA10, 0xE730,
+ 0x0340, 0x1E60, 0x3A30, 0x5640, 0x6D50, 0x7E30, 0x7F00, 0x7EF0, 0x7EF0, 0x7F50, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7F20,
+ 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7ED0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F30, 0x7EF0, 0x7EB0,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20,
+ 0x7F10, 0x7F20, 0x7F20, 0x7ED0, 0x7F20, 0x7EE0, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F80, 0x7F10,
+ 0x7F10, 0x7EF0, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F70, 0x7F20, 0x7ED0, 0x7030, 0x6020, 0x4F40, 0x3F30, 0x2E30,
+ 0x1EA0, 0x0ED0, 0xFED0, 0xF080, 0xE220, 0xD980, 0xD610, 0xD820, 0xE2C0, 0xF350, 0x09B0, 0x22E0, 0x3D50, 0x5910, 0x6F70, 0x7E80,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7EA0,
+ 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7EF0, 0x7F20, 0x7F00, 0x7F50,
+ 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F70, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7F60, 0x7ED0, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7EB0,
+ 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x72B0, 0x6420, 0x56C0, 0x4BF0, 0x4190, 0x3700, 0x2DD0, 0x24C0,
+ 0x1C70, 0x1500, 0x0F10, 0x0B90, 0x0A10, 0x0B40, 0x1040, 0x18D0, 0x2610, 0x3560, 0x4690, 0x5660, 0x63C0, 0x6F80, 0x77D0, 0x7DF0,
+ 0x7EE0, 0x7EE0, 0x7EF0, 0x7EE0, 0x7F60, 0x7F10, 0x7EE0, 0x7F00, 0x7EE0, 0x7F30, 0x7F10, 0x7E70, 0x7ED0, 0x7EB0, 0x7F30, 0x7EF0,
+ 0x7EB0, 0x7EE0, 0x7F20, 0x7F10, 0x7F10, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7E90,
+ 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7ED0, 0x7940, 0x71C0, 0x67F0, 0x5C20, 0x4EE0, 0x4090, 0x3230, 0x2270, 0x12E0,
+ 0x0250, 0xF2E0, 0xE470, 0xD5D0, 0xC6F0, 0xB700, 0xA660, 0x95F0, 0x8970, 0x8570, 0x84F0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8480,
+ 0x8470, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0,
+ 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83F0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0,
+ 0x83B0, 0x83B0, 0x8390, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83B0, 0x83A0, 0x83A0, 0x8380,
+ 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390,
+ 0x83A0, 0x83D0, 0x83E0, 0x83B0, 0x83C0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420,
+ 0x83D0, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8480, 0x84A0, 0x84E0, 0x88F0, 0xBCD0, 0xE9A0, 0x1150,
+ 0x30A0, 0x48A0, 0x5980, 0x63F0, 0x6C20, 0x7140, 0x7610, 0x7930, 0x7B70, 0x7CC0, 0x7C30, 0x7B10, 0x78C0, 0x7590, 0x72F0, 0x70A0,
+ 0x7080, 0x7200, 0x7400, 0x7820, 0x7C00, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EE0, 0x7F50,
+ 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7F20, 0x7F50, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F80, 0x7F00,
+ 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F10, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F30, 0x7F50, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F00, 0x7F10, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F30, 0x7EF0, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F50, 0x7F10, 0x7EB0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F30, 0x7E70, 0x7ED0, 0x7EF0,
+ 0x7EF0, 0x7F00, 0x7E80, 0x7EC0, 0x7EB0, 0x7F10, 0x7EF0, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F50, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7F10, 0x7F00, 0x7F00, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00,
+ 0x7EF0, 0x7F60, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F40, 0x7ED0, 0x7E90, 0x7EF0, 0x7F00, 0x7F30, 0x7EB0, 0x7E70, 0x7F20, 0x7EF0,
+ 0x7F30, 0x7F20, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F20, 0x7EE0, 0x7EF0, 0x7F30, 0x7EC0, 0x7F40, 0x7F10, 0x7520,
+ 0x5EC0, 0x4840, 0x3310, 0x1F30, 0x0CB0, 0xF9F0, 0xE910, 0xD8C0, 0xC950, 0xB900, 0xA970, 0x9960, 0x8B80, 0x8630, 0x8500, 0x84D0,
+ 0x84B0, 0x84C0, 0x8480, 0x8480, 0x8460, 0x8450, 0x8440, 0x8430, 0x8420, 0x83F0, 0x8400, 0x83F0, 0x83E0, 0x83D0, 0x83D0, 0x83C0,
+ 0x83B0, 0x83A0, 0x8390, 0x8390, 0x8380, 0x8380, 0x8370, 0x8370, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360,
+ 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8380, 0x8370, 0x8380, 0x8380, 0x8380,
+ 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83D0, 0x83D0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430,
+ 0x8430, 0x8440, 0x8450, 0x8470, 0x8480, 0x8490, 0x84C0, 0x84E0, 0x85B0, 0x8BA0, 0xA340, 0xBA50, 0xD210, 0xE9E0, 0x0220, 0x1A90,
+ 0x3250, 0x4C20, 0x6310, 0x7790, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F60, 0x7F20, 0x7E90, 0x7EB0, 0x7EB0,
+ 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F20, 0x7EC0, 0x7ED0, 0x7EF0, 0x7F00, 0x7EF0, 0x7EC0, 0x7F10,
+ 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F00, 0x7F30, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F80, 0x7EF0, 0x7EB0,
+ 0x7EF0, 0x7EF0, 0x7F50, 0x7EF0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7EF0, 0x7EF0, 0x7EF0, 0x7E90, 0x7F00,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EE0, 0x7EF0, 0x7F10, 0x7F10, 0x7F60, 0x7F00,
+ 0x7F10, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F70, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EB0,
+ 0x7EB0, 0x7EE0, 0x7F50, 0x7F00, 0x7E70, 0x7ED0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F00, 0x7F10, 0x7E90, 0x7EE0,
+ 0x7F00, 0x7ED0, 0x7F10, 0x7F00, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7F10, 0x7F10, 0x7F20, 0x7F70, 0x7ED0, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F50, 0x7EB0, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7EF0, 0x7EA0, 0x7EE0,
+ 0x7EF0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7EE0, 0x7F50, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7EE0, 0x7F80, 0x7F10, 0x7F00,
+ 0x7F00, 0x7ED0, 0x7F30, 0x7F00, 0x7E70, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x6DE0, 0x4EC0, 0x2E30, 0x0E30, 0xEAF0, 0xCAD0,
+ 0xABD0, 0x8ED0, 0x8590, 0x84D0, 0x84B0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8420, 0x8400, 0x83F0, 0x83F0,
+ 0x8430, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410,
+ 0x8410, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8460, 0x8470, 0x8490, 0x84A0, 0x84D0, 0x8520, 0x8730,
+ 0x98F0, 0xB1D0, 0xC970, 0xE120, 0x29D0, 0x38A0, 0x4830, 0x5310, 0x5C20, 0x6450, 0x6A90, 0x7030, 0x7460, 0x7820, 0x7A90, 0x7C90,
+ 0x7DE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F00, 0x7F40, 0x7F30, 0x7F30, 0x7F30,
+ 0x7F40, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F20, 0x6410,
+ 0x3FF0, 0x1AD0, 0xF5C0, 0xD150, 0xAD90, 0x8D60, 0x8520, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8420,
+ 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83D0,
+ 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8420, 0x8400, 0x8400, 0x8410, 0x8420,
+ 0x8420, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8490, 0x8500, 0x8600, 0xA2A0, 0xCC70, 0xF550, 0x1DD0, 0x49D0, 0x6E70, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F50, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F20,
+ 0x7F40, 0x7F20, 0x7F00, 0x7F00, 0x7ED0, 0x7F10, 0x7EE0, 0x7ED0, 0x7ED0, 0x7F00, 0x7F40, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F10,
+ 0x7F10, 0x7E70, 0x7EE0, 0x7EB0, 0x7EF0, 0x7F20, 0x7E90, 0x7EF0, 0x7F00, 0x7F20, 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7F10, 0x7EF0,
+ 0x7EA0, 0x7EE0, 0x7F10, 0x7F20, 0x7F00, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F30, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F70, 0x7EF0, 0x7EE0, 0x7F00, 0x7F10, 0x7F30,
+ 0x7F00, 0x7ED0, 0x7EF0, 0x7EF0, 0x7F20, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F30, 0x7F00, 0x7EA0, 0x7F10, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EC0, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F80, 0x7EF0, 0x7F10, 0x7EF0, 0x7B60, 0x73D0, 0x6D30, 0x65F0, 0x5FA0, 0x58F0, 0x53B0, 0x4FA0, 0x4D40, 0x4E10, 0x5030, 0x54A0,
+ 0x5AF0, 0x61B0, 0x68E0, 0x7000, 0x75D0, 0x7B90, 0x7E60, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F10,
+ 0x7EA0, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7ED0, 0x7F10,
+ 0x7F60, 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7C70, 0x71F0,
+ 0x6810, 0x5C90, 0x5100, 0x42C0, 0x3490, 0x2570, 0x1570, 0x0580, 0xF550, 0xE410, 0xD320, 0xC190, 0xAE30, 0x9BF0, 0x8C40, 0x8640,
+ 0x8510, 0x84D0, 0x84B0, 0x8490, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8450, 0x8440,
+ 0x8440, 0x8450, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8470, 0x8460, 0x8450, 0x8450, 0x8470, 0x8440, 0x8440,
+ 0x8440, 0x8410, 0x8430, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8430, 0x8440, 0x8430,
+ 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8450, 0x8460, 0x8470, 0x8480, 0x84A0, 0x84C0, 0x8530, 0x89B0, 0xA7C0,
+ 0xC710, 0xE030, 0xF720, 0x0B40, 0x1C50, 0x2C60, 0x3A60, 0x4770, 0x5390, 0x5F50, 0x68A0, 0x7120, 0x7740, 0x7B90, 0x7DB0, 0x7EA0,
+ 0x7EE0, 0x7F50, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F70, 0x7EF0, 0x7EE0, 0x7F00, 0x7F10, 0x7F80, 0x7F00, 0x7EC0, 0x7F10, 0x7F10,
+ 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7EE0, 0x77D0, 0x6B50, 0x5C70, 0x4B40, 0x37D0, 0x2200, 0x0B30, 0xF200, 0xD590, 0xBA20, 0x9DB0,
+ 0x8900, 0x8510, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8410,
+ 0x8410, 0x8440, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x8400, 0x83F0, 0x8400, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8410, 0x8410, 0x8410, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x83D0, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8410, 0x8420, 0x8430, 0x8430, 0x8440, 0x8440,
+ 0x8450, 0x8450, 0x8460, 0x8470, 0x8490, 0x84C0, 0x8540, 0x8AF0, 0xA910, 0xC0D0, 0xD480, 0xE470, 0xF2A0, 0xFE10, 0x09C0, 0x11C0,
+ 0x16B0, 0x19B0, 0x18E0, 0x1660, 0x10C0, 0x09B0, 0x0140, 0xF850, 0xF090, 0xE900, 0xE140, 0xDA70, 0xD1A0, 0xC770, 0xBBA0, 0xAD50,
+ 0x9D50, 0x8EB0, 0x8710, 0x8530, 0x84E0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8410, 0x8450,
+ 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84C0,
+ 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8510, 0x8510, 0x8500, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x84E0, 0x84E0, 0x84D0, 0x84D0,
+ 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x8460, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84D0, 0x84F0, 0x8510, 0x8570, 0x8610, 0x8720, 0x87E0, 0x87C0, 0x86A0,
+ 0x8580, 0x84F0, 0x84C0, 0x8490, 0x8480, 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410,
+ 0x8410, 0x8400, 0x8410, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8440, 0x8430, 0x8430, 0x8440, 0x8450, 0x8470, 0x8490,
+ 0x84E0, 0x8680, 0x98E0, 0xAA00, 0xB670, 0xC210, 0xD0A0, 0xE450, 0xF900, 0x0C50, 0x1B90, 0x24C0, 0x2760, 0x2410, 0x1CC0, 0x1350,
+ 0x0880, 0xFF00, 0xF630, 0xD4E0, 0xCBB0, 0xC400, 0xBEC0, 0xBC80, 0xBDE0, 0xC340, 0xCAC0, 0xD530, 0xE0E0, 0xEE30, 0xFC10, 0x09E0,
+ 0x18C0, 0x26D0, 0x3640, 0x4570, 0x5510, 0x6480, 0x7340, 0x7E40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F30, 0x7F10, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7D20, 0x69E0, 0x5950, 0x4A80, 0x3F00, 0x3740, 0x3150, 0x2DE0, 0x2BD0,
+ 0x2AB0, 0x29F0, 0x2940, 0x2870, 0x26F0, 0x2430, 0x1FD0, 0x1920, 0x0E90, 0x0330, 0xF5A0, 0xE710, 0xD7D0, 0xC8D0, 0xBA00, 0xABF0,
+ 0x9E30, 0x9100, 0x88D0, 0x85C0, 0x8500, 0x84D0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420,
+ 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8440, 0x8460, 0x8470,
+ 0x8480, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84D0, 0x84F0, 0x8560, 0x8690, 0x8A40, 0x9160, 0x97A0, 0x9CC0, 0xA160, 0xA5A0, 0xAAA0,
+ 0xB1A0, 0xB8E0, 0xBFF0, 0xC730, 0xCE00, 0xD3C0, 0xD900, 0xDD90, 0xE120, 0xE540, 0xE830, 0xEAC0, 0xED20, 0xEDD0, 0xEE30, 0xEDB0,
+ 0xED20, 0xEC90, 0xEC00, 0xEC80, 0xECD0, 0xEFB0, 0xF300, 0xF6A0, 0xFB50, 0x0030, 0x05E0, 0x0BF0, 0x1130, 0x1760, 0x1D20, 0x22B0,
+ 0x27F0, 0x2C80, 0x3140, 0x3390, 0x3520, 0x3540, 0x3350, 0x3110, 0x2D30, 0x2940, 0x23B0, 0x1F60, 0x1B20, 0x1640, 0x1310, 0x1100,
+ 0x0F80, 0x10D0, 0x1370, 0x18A0, 0x1F60, 0x27D0, 0x32A0, 0x3C20, 0x44F0, 0x4C10, 0x5160, 0x5500, 0x5650, 0x55B0, 0x5400, 0x5010,
+ 0x4C10, 0x48A0, 0x4660, 0x47C0, 0x4BA0, 0x5380, 0x5CC0, 0x6550, 0x6CA0, 0x7040, 0x7290, 0x7510, 0x7A60, 0x7F00, 0x7ED0, 0x7F30,
+ 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F80, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F80, 0x7F20,
+ 0x7F10, 0x7EF0, 0x7EE0, 0x7F70, 0x7EF0, 0x7EF0, 0x7EE0, 0x7ED0, 0x7F50, 0x7F10, 0x7EA0, 0x7ED0, 0x7F00, 0x7F60, 0x7F10, 0x7E90,
+ 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7EA0, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7F00,
+ 0x7F20, 0x7F00, 0x7F10, 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7ED0, 0x5FB0,
+ 0x3A00, 0x10C0, 0xE0F0, 0xB2F0, 0x8950, 0x84C0, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8420, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8460, 0x8460,
+ 0x8460, 0x8470, 0x84A0, 0x8490, 0x84B0, 0x84D0, 0x84E0, 0x84E0, 0x84D0, 0x84D0, 0x84B0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470,
+ 0x8470, 0x8490, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8490, 0x8460, 0x8470, 0x8480, 0x8440, 0x84C0, 0x8510, 0x8720, 0x9A00,
+ 0xAE70, 0xBFB0, 0xCCD0, 0xD5C0, 0xDAD0, 0xDC70, 0xDAE0, 0xD620, 0xCF40, 0xC860, 0xC130, 0xBAB0, 0xB580, 0xB200, 0xB080, 0xB080,
+ 0xB310, 0xB6B0, 0xBC10, 0xC170, 0xC8B0, 0xD080, 0xD8A0, 0xE1A0, 0xEB40, 0xF550, 0x01B0, 0x0D00, 0x18F0, 0x2470, 0x2FE0, 0x3C70,
+ 0x4850, 0x5580, 0x6280, 0x7150, 0x7D90, 0x7EA0, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F40, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F50, 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F90, 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F60,
+ 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0,
+ 0x7E90, 0x7EA0, 0x7EE0, 0x7F10, 0x7F20, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7E90, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00,
+ 0x7F60, 0x7F20, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F60,
+ 0x7ED0, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F70, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F60, 0x7EE0, 0x7E90, 0x7F10, 0x7F00, 0x7F30, 0x7EB0,
+ 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F20, 0x7F20, 0x7EF0, 0x7F30, 0x7EC0,
+ 0x7F40, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F90, 0x7F00, 0x7F20, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F70,
+ 0x7F10, 0x7F20, 0x7F10, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F30, 0x7F10, 0x7EB0, 0x7F00, 0x7EE0, 0x7F10, 0x7F10,
+ 0x7E70, 0x7EC0, 0x7ED0, 0x7F00, 0x7F00, 0x7B90, 0x7230, 0x6720, 0x5AA0, 0x4D80, 0x3F10, 0x30A0, 0x1FD0, 0x1070, 0x0170, 0xF2C0,
+ 0xE3D0, 0xD520, 0xC640, 0xB7C0, 0xA8D0, 0x99D0, 0x8DE0, 0x87B0, 0x85D0, 0x8530, 0x8500, 0x84E0, 0x84D0, 0x84D0, 0x84C0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84F0, 0x84F0, 0x8520, 0x8590, 0x8700, 0x8BF0,
+ 0x9750, 0xA330, 0xAF20, 0xBC00, 0xC800, 0xD490, 0xE140, 0xEF50, 0xFCF0, 0x09F0, 0x1760, 0x24E0, 0x3290, 0x40A0, 0x4E60, 0x5C40,
+ 0x6A30, 0x75E0, 0x7E40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F50, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7EF0, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F30, 0x7F00, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F50, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F50, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F70, 0x7F10, 0x7EF0,
+ 0x7F20, 0x7F40, 0x7F50, 0x7F30, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7E60, 0x7EB0, 0x7F20, 0x7F20, 0x7EF0, 0x7E90, 0x7EB0,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7F40, 0x7EC0, 0x7F30, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EA0, 0x7F20, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F80, 0x7950, 0x6FC0, 0x6790, 0x5F70, 0x5790, 0x50A0, 0x4950, 0x4310, 0x3D10, 0x37C0, 0x32F0, 0x2E60,
+ 0x2BA0, 0x2840, 0x2510, 0x2270, 0x1FA0, 0x1CF0, 0x1A10, 0x1720, 0x1450, 0x10F0, 0x0E30, 0x0BA0, 0x08D0, 0x06B0, 0x03E0, 0x0100,
+ 0xFDB0, 0xFA10, 0xF770, 0xF450, 0xF120, 0xEE20, 0xEB70, 0xE910, 0xE680, 0xE3D0, 0xE110, 0xDE70, 0xDCA0, 0xDA60, 0xD8C0, 0xD6D0,
+ 0xD450, 0xD2C0, 0xD030, 0xCE20, 0xCCC0, 0xCB10, 0xCB50, 0xCB40, 0xCBE0, 0xCC70, 0xCD70, 0xCF00, 0xD000, 0xD110, 0xD220, 0xD2A0,
+ 0xD390, 0xD510, 0xD6B0, 0xD8F0, 0xDB10, 0xDDF0, 0xE0E0, 0xE2F0, 0xE5F0, 0xE840, 0xEB20, 0xED90, 0xF0B0, 0xF400, 0xF6F0, 0xFB00,
+ 0xFE20, 0x01C0, 0x0520, 0x0870, 0x0BA0, 0x0F00, 0x12B0, 0x16A0, 0x1A40, 0x1E10, 0x2280, 0x2600, 0x2AA0, 0x2E80, 0x32B0, 0x3740,
+ 0x3A80, 0x3EE0, 0x41E0, 0x4500, 0x4790, 0x4A50, 0x4DB0, 0x5070, 0x5330, 0x5620, 0x5870, 0x5BD0, 0x5EB0, 0x6120, 0x63C0, 0x6650,
+ 0x6990, 0x6C80, 0x6EF0, 0x7170, 0x7300, 0x74F0, 0x7600, 0x76F0, 0x7770, 0x77D0, 0x7850, 0x7900, 0x7940, 0x7910, 0x77F0, 0x77E0,
+ 0x7760, 0x7650, 0x76B0, 0x75F0, 0x7690, 0x7730, 0x7760, 0x78E0, 0x7980, 0x7AB0, 0x7C00, 0x7CC0, 0x7DB0, 0x7E20, 0x7EC0, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F40, 0x7F10, 0x7F00, 0x7F30, 0x7EF0, 0x7F40, 0x7F10, 0x7F00, 0x7F00, 0x7D30, 0x7A60,
+ 0x7740, 0x72D0, 0x6DF0, 0x6860, 0x61E0, 0x5A50, 0x5160, 0x45E0, 0x0B40, 0xFB40, 0xE9D0, 0xD6C0, 0xC340, 0xAD50, 0x95A0, 0x8720,
+ 0x84F0, 0x84B0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8420, 0x8410, 0x8430, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83D0,
+ 0x83D0, 0x83E0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83D0, 0x8390, 0x8390, 0x8390, 0x83B0, 0x8390, 0x8390, 0x8390,
+ 0x83C0, 0x8380, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x83C0, 0x83A0, 0x83B0, 0x83A0, 0x83A0, 0x83B0,
+ 0x83A0, 0x8340, 0x83B0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8420, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430,
+ 0x8430, 0x8440, 0x8450, 0x8460, 0x84B0, 0x8480, 0x84A0, 0x84C0, 0x84E0, 0x8560, 0x8760, 0x90B0, 0x9E90, 0xAAA0, 0xB490, 0xBC90,
+ 0xC310, 0xC7D0, 0xCC10, 0xCE70, 0xD090, 0xD260, 0xD410, 0xD630, 0xD800, 0xD9E0, 0xDB80, 0xDC30, 0xDC60, 0xDB90, 0xDA10, 0xD750,
+ 0xD400, 0xD060, 0xCC30, 0xC730, 0xC1A0, 0xBB90, 0xB650, 0xB070, 0xAA90, 0xA500, 0x9F30, 0x98F0, 0x9170, 0x8A40, 0x86A0, 0x8550,
+ 0x84F0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8490, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84F0, 0x8500, 0x8510, 0x8520,
+ 0x8530, 0x8520, 0x8510, 0x8500, 0x84E0, 0x84C0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8440, 0x8430, 0x8420,
+ 0x8420, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8410,
+ 0x8410, 0x8420, 0x8430, 0x8440, 0x8450, 0x8450, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84E0, 0x8550, 0x8780, 0x9380, 0xA410, 0xB1F0,
+ 0xBF60, 0xCAD0, 0xD590, 0xDF20, 0xE6C0, 0xED30, 0xF1D0, 0xF430, 0xF6A0, 0xF790, 0xF8A0, 0xF920, 0xFA10, 0xFB30, 0xFC30, 0xFDA0,
+ 0xFFF0, 0x0200, 0x0490, 0x06F0, 0x0930, 0x0AE0, 0x0CC0, 0x0F10, 0x1190, 0x1460, 0x1730, 0x1A30, 0x1D40, 0x2040, 0x22B0, 0x23F0,
+ 0x2510, 0x2530, 0x24B0, 0x2490, 0x2500, 0x2620, 0x26C0, 0x2730, 0x2800, 0x2790, 0x26F0, 0x2570, 0x2380, 0x2160, 0x1D80, 0x1870,
+ 0x11E0, 0x08D0, 0xFE30, 0xF130, 0xE210, 0xD3A0, 0xC500, 0xB7A0, 0xABF0, 0xA270, 0x9A60, 0x94A0, 0x8FB0, 0x8BC0, 0x8900, 0x8700,
+ 0x85C0, 0x8540, 0x8500, 0x84D0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8480, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410,
+ 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x8370, 0x83B0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x8390, 0x8390,
+ 0x8340, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83B0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83B0,
+ 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x8430, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430,
+ 0x8430, 0x8440, 0x8440, 0x8450, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x84F0, 0x8530, 0x8640, 0x8A10, 0x9580, 0xA250, 0xAF70,
+ 0xBD60, 0xCBD0, 0xDDB0, 0xF040, 0x04C0, 0x1AF0, 0x32B0, 0x4B00, 0x62A0, 0x76F0, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7FA0, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EB0, 0x7EF0, 0x7F40, 0x7EB0, 0x7EE0, 0x7EC0,
+ 0x7ED0, 0x7F30, 0x7F40, 0x7EF0, 0x7ED0, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F30, 0x7EA0, 0x7EF0, 0x7EE0,
+ 0x7F30, 0x7F50, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EA0, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F10, 0x7E90, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F40, 0x7EC0, 0x7F40, 0x7EF0, 0x7F20, 0x7F40,
+ 0x7F10, 0x7F80, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F80, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F00, 0x7F00, 0x7F00, 0x7F00,
+ 0x7F50, 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0, 0x7F30, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7E90, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7F00, 0x7EC0, 0x7EB0, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7F10, 0x7F20, 0x7F20,
+ 0x7EE0, 0x6B50, 0x5520, 0x3A80, 0x1E30, 0xFF90, 0xE070, 0xC160, 0xA390, 0x8BB0, 0x8550, 0x84E0, 0x84C0, 0x84B0, 0x84C0, 0x84B0,
+ 0x84E0, 0x8570, 0x90C0, 0xC3B0, 0xFAC0, 0x39F0, 0x7810, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7ED0, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20,
+ 0x7EE0, 0x7E90, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7EA0, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F40, 0x7F10, 0x7EE0, 0x7F10,
+ 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7EE0, 0x7EF0, 0x7F80, 0x7F00, 0x7F00, 0x7EF0, 0x7ED0,
+ 0x7F60, 0x7F10, 0x7ED0, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0, 0x7F30, 0x7F00, 0x7E90, 0x7EB0, 0x7EE0, 0x7EE0,
+ 0x7EF0, 0x7E90, 0x7EC0, 0x7ED0, 0x7F10, 0x7F10, 0x7EC0, 0x7F00, 0x7F10, 0x7F00, 0x7ED0, 0x7F00, 0x7F00, 0x7E90, 0x7ED0, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F50, 0x7F10, 0x7F00, 0x7EE0, 0x7EF0, 0x7F60, 0x7F00, 0x7F20,
+ 0x7F10, 0x7EF0, 0x7F50, 0x7EF0, 0x7F10, 0x7EE0, 0x7EF0, 0x7F80, 0x7EF0, 0x7EE0, 0x7F00, 0x7F10, 0x7F60, 0x7EE0, 0x7EB0, 0x7EF0,
+ 0x7EE0, 0x7F20, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F00, 0x7E90, 0x7EF0, 0x7EE0,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7F40, 0x7ED0, 0x7F10, 0x7F40, 0x7F00, 0x7F30, 0x7EE0, 0x7F00, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F20,
+ 0x7F20, 0x7F00, 0x7F90, 0x7EF0, 0x7EF0, 0x7EE0, 0x7ED0, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7E90, 0x7EB0,
+ 0x7EC0, 0x7F30, 0x7F00, 0x7E70, 0x7ED0, 0x7ED0, 0x7F20, 0x7F20, 0x7E90, 0x7E90, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7F30, 0x7F20,
+ 0x7F00, 0x7F10, 0x7F50, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x78D0, 0x6A50, 0x5860, 0x4580,
+ 0x30D0, 0x1AF0, 0x0440, 0xEAF0, 0xD0D0, 0xB560, 0x9960, 0x8710, 0x84F0, 0x84D0, 0x84C0, 0x8480, 0x8470, 0x8470, 0x8450, 0x8450,
+ 0x8440, 0x8460, 0x8430, 0x8420, 0x83C0, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0, 0x8430, 0x83F0, 0x83F0, 0x83F0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83F0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83D0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490,
+ 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83D0,
+ 0x83D0, 0x83C0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8460, 0x8420, 0x8430, 0x8420,
+ 0x8440, 0x8440, 0x8450, 0x84A0, 0x8460, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x84E0, 0x8550, 0x87F0, 0x9910, 0xAED0, 0xC520,
+ 0xDB80, 0xF570, 0x0DE0, 0x2700, 0x4080, 0x5A30, 0x70D0, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F50, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F50, 0x7F20, 0x7F40, 0x7A10, 0x5F20, 0x4070, 0x2210,
+ 0x02B0, 0xE220, 0xC0F0, 0x9E90, 0x8740, 0x84E0, 0x84D0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420,
+ 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83F0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400,
+ 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x8430, 0x8400,
+ 0x8410, 0x8420, 0x8430, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x84A0, 0x8550, 0x85F0, 0xA040, 0xC580, 0xE180, 0xF450,
+ 0xFDB0, 0x0030, 0xFEB0, 0xFDB0, 0xFF40, 0x04D0, 0x0EF0, 0x1CB0, 0x2C40, 0x3D00, 0x4B40, 0x55C0, 0x5C90, 0x6050, 0x6430, 0x6920,
+ 0x6F50, 0x7790, 0x7EA0, 0x7EF0, 0x7F10, 0x7F80, 0x7F00, 0x7F40, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7F70,
+ 0x7F10, 0x7EE0, 0x7F10, 0x7ED0, 0x7F30, 0x7F00, 0x7ED0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EA0, 0x7F00, 0x7F00, 0x7F10, 0x7F20,
+ 0x7EC0, 0x7ED0, 0x7F10, 0x7F00, 0x7EF0, 0x7EC0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7160, 0x5290, 0x3970, 0x2790, 0x1D20,
+ 0x1B50, 0x23A0, 0x3460, 0x4D50, 0x6AF0, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F50, 0x7EF0, 0x7F10, 0x7EE0, 0x7EF0, 0x7F80,
+ 0x7F00, 0x7EC0, 0x7EF0, 0x7F00, 0x7F60, 0x7EF0, 0x7EB0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7ED0, 0x7E70, 0x7EF0, 0x7EF0, 0x7F30, 0x7EE0,
+ 0x7EC0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7ED0, 0x7E90, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7EF0, 0x7F00, 0x7F20, 0x7F00,
+ 0x7EB0, 0x7E70, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F00, 0x7F00, 0x7F00, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F10,
+ 0x7F00, 0x7EE0, 0x7EF0, 0x7F00, 0x7F60, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F50, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F50, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F50, 0x7ED0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F10, 0x7F00, 0x7F30,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7F10, 0x7F70, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F90, 0x7F00, 0x7F20, 0x7F10, 0x7F20, 0x7F40, 0x7F10,
+ 0x7F70, 0x7EF0, 0x7F00, 0x7F30, 0x7F00, 0x7F80, 0x7F10, 0x7F10, 0x7EE0, 0x7EE0, 0x7F70, 0x7F10, 0x7EE0, 0x7ED0, 0x7EF0, 0x7F60,
+ 0x7F20, 0x7EC0, 0x7EB0, 0x7EB0, 0x7EF0, 0x7F10, 0x7E70, 0x7EC0, 0x7ED0, 0x7F10, 0x7B00, 0x5E80, 0x43D0, 0x2AB0, 0x1240, 0x00C0,
+ 0xF200, 0xE570, 0xDAE0, 0xD280, 0xCD90, 0xCB60, 0xCDA0, 0xD2E0, 0xDAC0, 0xE440, 0xEDE0, 0xF5D0, 0xFB20, 0xFC20, 0xFAF0, 0xF6C0,
+ 0xF240, 0xEE80, 0xECE0, 0xEDC0, 0xF0C0, 0xF610, 0xFD50, 0x0410, 0x0A40, 0x0E70, 0x0E30, 0x0A60, 0x0210, 0xF710, 0xE960, 0xDAA0,
+ 0xCB50, 0xBB80, 0xAA60, 0x9A70, 0x8BC0, 0x8610, 0x8500, 0x84D0, 0x84B0, 0x8490, 0x8490, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450,
+ 0x8440, 0x8440, 0x8450, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8460, 0x8430, 0x8430, 0x8430, 0x83C0, 0x8430, 0x8430, 0x8460,
+ 0x8430, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8460, 0x8470, 0x8470, 0x8490, 0x84A0, 0x84D0, 0x8550, 0x8A40, 0xA760,
+ 0xC390, 0xE090, 0xFB20, 0x1420, 0x2CE0, 0x4490, 0x5BB0, 0x7120, 0x7EC0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7EE0,
+ 0x7F40, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7ED0, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F80,
+ 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7EB0, 0x7EF0, 0x7F20, 0x7EF0, 0x7ED0, 0x7EA0, 0x7F00, 0x7F00, 0x7F30, 0x7F00,
+ 0x7EC0, 0x7F10, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F30, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EF0,
+ 0x7F30, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7F00, 0x7F90, 0x7F10, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70,
+ 0x7F20, 0x7EC0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7E90, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7E70, 0x7ED0, 0x7ED0, 0x7F00, 0x7F00,
+ 0x7E90, 0x7E90, 0x7F00, 0x7F20, 0x7F10, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F10, 0x7F00,
+ 0x7F30, 0x7F20, 0x7EF0, 0x7EF0, 0x7F10, 0x7F60, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F40,
+ 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F70, 0x7ED0, 0x7EB0, 0x7EE0, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00,
+ 0x7E90, 0x7F00, 0x7F00, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7EF0, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7AA0, 0x6270, 0x4B00, 0x3240,
+ 0x1850, 0xFDB0, 0xE1C0, 0xC600, 0xAA40, 0x90E0, 0x8620, 0x8500, 0x84D0, 0x84D0, 0x84D0, 0x84F0, 0x8530, 0x8650, 0x8B80, 0x9590,
+ 0x9700, 0x8F00, 0x86C0, 0x84F0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8450, 0x8430, 0x8420, 0x8420, 0x8410,
+ 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8440, 0x8450, 0x8460, 0x8480, 0x8490, 0x84B0, 0x84F0, 0x86B0, 0xA680, 0xD0B0, 0xFB60,
+ 0x2500, 0x4C40, 0x6D50, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7E20, 0x6F90, 0x6090, 0x50A0, 0x3F60, 0x2CB0, 0x1850,
+ 0x02D0, 0xEB40, 0xCFE0, 0xB430, 0x96A0, 0x8620, 0x84B0, 0x84A0, 0x8480, 0x8460, 0x8460, 0x8440, 0x8460, 0x8430, 0x8420, 0x8410,
+ 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83C0,
+ 0x83C0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83F0,
+ 0x83E0, 0x83F0, 0x83E0, 0x83F0, 0x8400, 0x8400, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8410, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470,
+ 0x8480, 0x8490, 0x84C0, 0x8500, 0x8650, 0x9710, 0xB330, 0xCCD0, 0xE540, 0xFB60, 0x0F40, 0x20B0, 0x30C0, 0x3DF0, 0x48B0, 0x52E0,
+ 0x5B40, 0x6250, 0x6A10, 0x7030, 0x7740, 0x7D30, 0x7F00, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F00, 0x7EE0, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7F10,
+ 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7ED0, 0x7E90, 0x7F00,
+ 0x7EE0, 0x7EF0, 0x7EE0, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F20, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F50, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F60, 0x7EE0, 0x7F10, 0x7EF0, 0x7F10, 0x7F70, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F60, 0x7F10, 0x7ED0, 0x7EF0, 0x7F00, 0x7F50, 0x7F10, 0x7E90, 0x7EE0,
+ 0x7ED0, 0x7F30, 0x7F00, 0x7E80, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7EB0, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7EC0,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7D50, 0x7500, 0x6DC0, 0x6750, 0x6190, 0x5D40, 0x5980, 0x5680, 0x54A0, 0x5470, 0x55E0, 0x5900, 0x5F40,
+ 0x6750, 0x7170, 0x7C60, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x6710, 0x4210, 0x1820, 0xEC80, 0xC310, 0x9CE0, 0x86D0, 0x84E0,
+ 0x8490, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470,
+ 0x8470, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x84B0, 0x84B0, 0x8480, 0x8490, 0x84C0, 0x8490, 0x84D0, 0x84B0, 0x84C0, 0x84B0,
+ 0x84C0, 0x8490, 0x84E0, 0x8510, 0x85A0, 0x8830, 0x94F0, 0xA720, 0xB640, 0xC250, 0xCBD0, 0xD1F0, 0xD500, 0xD560, 0xD470, 0xD270,
+ 0xD0F0, 0xD010, 0xD090, 0xD1F0, 0xD350, 0xD4D0, 0xD630, 0xD6F0, 0xD6C0, 0xD580, 0xD440, 0xD2C0, 0xD170, 0xD210, 0xD360, 0xD7A0,
+ 0xDD10, 0xE4B0, 0xEEE0, 0xF9C0, 0x0600, 0x12E0, 0x1FE0, 0x2D10, 0x3900, 0x43A0, 0x4D40, 0x55B0, 0x5D60, 0x6300, 0x6790, 0x6B60,
+ 0x6DA0, 0x6EE0, 0x6E50, 0x6C30, 0x6960, 0x6550, 0x61F0, 0x5D00, 0x5760, 0x5180, 0x4A50, 0x4330, 0x3B40, 0x30B0, 0x2600, 0x1AC0,
+ 0x0E50, 0x0010, 0xF090, 0xE0A0, 0xCEF0, 0xBD50, 0xA980, 0x9650, 0x88D0, 0x8540, 0x84D0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460,
+ 0x8450, 0x8410, 0x8440, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8420, 0x8400, 0x8400,
+ 0x8400, 0x8420, 0x8420, 0x8440, 0x8480, 0x8460, 0x8470, 0x8490, 0x84B0, 0x84E0, 0x8550, 0x8820, 0x9A70, 0xAF30, 0xC340, 0xD580,
+ 0xE770, 0xF560, 0x00F0, 0x09D0, 0x1090, 0x15A0, 0x1770, 0x16F0, 0x14E0, 0x0E70, 0x05B0, 0xF9C0, 0xEA40, 0xD840, 0xC370, 0xADF0,
+ 0x9740, 0x8840, 0x8520, 0x84D0, 0x84B0, 0x84A0, 0x8480, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8480,
+ 0x8450, 0x8450, 0x8400, 0x8450, 0x8450, 0x8470, 0x8440, 0x8440, 0x8450, 0x8450, 0x8440, 0x8450, 0x8460, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8460, 0x8460, 0x84A0, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x84F0,
+ 0x8510, 0x8530, 0x8570, 0x85B0, 0x8600, 0x8670, 0x8760, 0x8A00, 0x90F0, 0x9C80, 0xAA40, 0xB8E0, 0xC760, 0xD4F0, 0xE160, 0xEB80,
+ 0xF4B0, 0xFBA0, 0x0180, 0x05E0, 0x0960, 0x0B40, 0x0BA0, 0x0A20, 0x07C0, 0x0470, 0x0060, 0xFC00, 0xF780, 0xF290, 0xEE60, 0xEAB0,
+ 0xE6D0, 0xE360, 0xDFD0, 0xDC70, 0xD8F0, 0xD530, 0xD150, 0xCD40, 0xC890, 0xC360, 0xBE40, 0xB890, 0xB270, 0xAC80, 0xA620, 0x9FE0,
+ 0x9880, 0x90A0, 0x89B0, 0x8650, 0x8530, 0x84E0, 0x84F0, 0x84A0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8420, 0x8420,
+ 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83E0, 0x83F0, 0x8400,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420,
+ 0x8420, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x84A0, 0x84D0, 0x8500, 0x8610, 0x8E90, 0xA4A0, 0xB8B0, 0xCC80, 0xDE90,
+ 0xF050, 0x00E0, 0x1060, 0x2030, 0x2E70, 0x3B20, 0x46A0, 0x5110, 0x5A60, 0x6220, 0x6900, 0x6F30, 0x7520, 0x79E0, 0x7D50, 0x7EF0,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F90, 0x7F20, 0x7EE0, 0x7F10, 0x7F00,
+ 0x7F20, 0x7EF0, 0x7ED0, 0x7F20, 0x7F00, 0x7F10, 0x7E10, 0x7CC0, 0x7B80, 0x7A50, 0x78F0, 0x7760, 0x7490, 0x71D0, 0x6D90, 0x6800,
+ 0x6150, 0x5930, 0x5100, 0x47C0, 0x3D30, 0x32D0, 0x2700, 0x1B10, 0x0E90, 0x00A0, 0xF3D0, 0xE5D0, 0xD7F0, 0xC940, 0xB9E0, 0xAA80,
+ 0x9BA0, 0x8E10, 0x8710, 0x8550, 0x84F0, 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460,
+ 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x8400, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8430, 0x8400, 0x8400,
+ 0x8410, 0x8400, 0x8410, 0x8410, 0x8430, 0x8410, 0x8410, 0x8420, 0x8440, 0x8420, 0x8420, 0x8450, 0x8450, 0x8430, 0x8440, 0x8470,
+ 0x8450, 0x8450, 0x8470, 0x84A0, 0x8480, 0x8490, 0x84C0, 0x8500, 0x86D0, 0x9C90, 0xBBD0, 0xD790, 0xF290, 0x0B70, 0x2210, 0x36B0,
+ 0x49F0, 0x5A20, 0x68D0, 0x7600, 0x7E30, 0x7F10, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7ED0, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F90, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30,
+ 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F40, 0x7ED0, 0x7E90, 0x7F00, 0x7EE0, 0x7F10, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F00, 0x7F30, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F30, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F30, 0x7F10,
+ 0x7F70, 0x7EE0, 0x7EF0, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7EF0, 0x7EE0,
+ 0x7ED0, 0x7F70, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F60, 0x7F10, 0x6C30, 0x55C0, 0x3CE0, 0x2070, 0x06B0, 0xECA0, 0xD1F0, 0xB5E0,
+ 0x97B0, 0x86A0, 0x84D0, 0x84A0, 0x8480, 0x8470, 0x8450, 0x8440, 0x8440, 0x8430, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0,
+ 0x83E0, 0x83F0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410,
+ 0x8420, 0x8420, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x8500, 0x85D0, 0x91F0,
+ 0xB130, 0xD040, 0xF090, 0x1280, 0x3860, 0x5CF0, 0x7B90, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EE0, 0x7F50, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0,
+ 0x7F70, 0x7F00, 0x7EC0, 0x7F00, 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F10, 0x7F10,
+ 0x7EA0, 0x6980, 0x5A10, 0x4D90, 0x4400, 0x3F60, 0x3D80, 0x3FD0, 0x45E0, 0x4EC0, 0x5D00, 0x6C00, 0x7C00, 0x7F10, 0x7F10, 0x7F20,
+ 0x7EF0, 0x7F90, 0x7F10, 0x7F10, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7F00, 0x7EE0, 0x7EE0, 0x7ED0,
+ 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F50, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F00, 0x7F20,
+ 0x7F20, 0x7EC0, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0,
+ 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F10, 0x7F50, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7F60, 0x7F00, 0x7ED0, 0x7F00, 0x7F00, 0x7F50, 0x7ED0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EE0, 0x7E90, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F10, 0x7EB0, 0x7F10, 0x7EE0, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F80, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F80, 0x7F00, 0x7F20, 0x7F00, 0x7EF0, 0x7F30, 0x7EF0, 0x7EC0, 0x7ED0, 0x7EE0,
+ 0x7F60, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7ED0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F20,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F00,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F50, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x72D0, 0x4900, 0x1BA0, 0xEB90, 0xBA70, 0x8D10, 0x84E0, 0x84A0, 0x8480, 0x8470, 0x8460,
+ 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x83B0, 0x8410, 0x8410, 0x8410, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x8400, 0x8400, 0x8420, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83F0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x8400, 0x83E0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8410, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x8390, 0x8390, 0x8380, 0x8370, 0x8370, 0x8360, 0x8350, 0x8370, 0x8350, 0x8350,
+ 0x8350, 0x8380, 0x8350, 0x8360, 0x8310, 0x8370, 0x8370, 0x8370, 0x8380, 0x8380, 0x8380, 0x83C0, 0x8390, 0x8390, 0x8390, 0x8390,
+ 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83C0, 0x83C0, 0x83D0, 0x83F0, 0x8400, 0x8410, 0x8430,
+ 0x8450, 0x8470, 0x84B0, 0x86E0, 0xBE00, 0xF710, 0x2C80, 0x5C80, 0x7E60, 0x7EE0, 0x7E90, 0x7F10, 0x7F10, 0x7F30, 0x7EB0, 0x7E70,
+ 0x7EF0, 0x7EF0, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EE0, 0x7EF0, 0x7F30, 0x7EC0, 0x7F40,
+ 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7EF0, 0x7F00, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F80, 0x7F10,
+ 0x7F00, 0x7EF0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F10, 0x7E70,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7EF0, 0x7E90, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7EC0, 0x7F40,
+ 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F40, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F10, 0x7F10, 0x7EF0, 0x7F50, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7EC0, 0x7EF0, 0x7EE0, 0x7F50, 0x7EF0, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7EB0, 0x7EC0,
+ 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7EB0, 0x7F20, 0x6890, 0x5130, 0x3720, 0x1AD0, 0xFF50, 0xE350, 0xC900, 0xB080, 0x9A90, 0x8B20,
+ 0x8610, 0x8520, 0x84E0, 0x84C0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8480, 0x8450, 0x8440, 0x8420, 0x8430, 0x8420, 0x8410,
+ 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83D0, 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x8410, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x8400, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83E0, 0x8400, 0x8400, 0x8400, 0x83F0, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8440, 0x8450, 0x8440, 0x8440, 0x8490, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8460, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8460, 0x8460, 0x8470, 0x8480,
+ 0x8490, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8E20, 0xBB50, 0xE9E0,
+ 0x17E0, 0x4640, 0x6E50, 0x7F20, 0x7EE0, 0x7E90, 0x7F10, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7EF0, 0x7F00, 0x7EC0,
+ 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0, 0x7F80, 0x7F00, 0x7F20, 0x7F10, 0x7EF0, 0x7F70,
+ 0x7F20, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F70, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7ED0, 0x7ED0, 0x7EB0, 0x7EF0, 0x7EF0,
+ 0x7E90, 0x7ED0, 0x7F00, 0x7F10, 0x7F20, 0x7EA0, 0x7ED0, 0x7F10, 0x7F00, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F20, 0x7850, 0x6A10, 0x5F30, 0x55E0, 0x4F10, 0x4A30, 0x4800, 0x49C0, 0x4D70, 0x53E0, 0x5D60, 0x68E0, 0x7690, 0x7EF0, 0x7F70,
+ 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7F80, 0x7F00, 0x7EE0, 0x7F00, 0x7F10, 0x7F70, 0x7EF0, 0x7ED0, 0x7EF0, 0x7EF0, 0x7F30, 0x7ED0,
+ 0x7EB0, 0x7EF0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7E90, 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00,
+ 0x7F40, 0x7F10, 0x7F10, 0x7F40, 0x7F00, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7F20, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0,
+ 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F10, 0x7F30, 0x7F10, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7EE0, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F70, 0x7F20, 0x7EF0,
+ 0x7F30, 0x7F30, 0x7F30, 0x7EF0, 0x7E90, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7E80, 0x7D80, 0x4F00, 0x2090, 0xF470, 0xCC20, 0xAB70,
+ 0x9120, 0x8730, 0x8550, 0x84F0, 0x84D0, 0x8470, 0x84A0, 0x8480, 0x8480, 0x8470, 0x8470, 0x8460, 0x8410, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8420, 0x8430, 0x8420, 0x8420, 0x8420, 0x8440, 0x8420, 0x8410, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8420, 0x8410, 0x8410, 0x8410, 0x83E0, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8410, 0x8430,
+ 0x8410, 0x8410, 0x83C0, 0x8410, 0x8410, 0x8410, 0x83F0, 0x8420, 0x8420, 0x8420, 0x8450, 0x8420, 0x8420, 0x8410, 0x8430, 0x8420,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8450, 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8450, 0x8440, 0x8430, 0x8430, 0x8460,
+ 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8490, 0x8480, 0x8470, 0x8480, 0x84A0, 0x8490, 0x8490, 0x8490, 0x84D0, 0x84A0,
+ 0x84B0, 0x84C0, 0x84C0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84D0, 0x84B0, 0x84A0, 0x8480, 0x8470, 0x8470, 0x8470,
+ 0x8450, 0x8440, 0x8430, 0x8440, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x8410, 0x83F0, 0x83E0, 0x83E0, 0x8400, 0x83E0,
+ 0x83E0, 0x83E0, 0x83F0, 0x83D0, 0x83D0, 0x8370, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x8380, 0x83B0, 0x83B0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83B0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0,
+ 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x8360, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x8410, 0x8400, 0x8400, 0x83B0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8390, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0,
+ 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83C0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470,
+ 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84D0, 0x84E0, 0x8520, 0x85A0, 0x8730, 0x8D90, 0x9B30, 0xA9A0, 0xB860, 0xC790, 0xD820, 0xE800,
+ 0xF880, 0x0A10, 0x1D60, 0x33C0, 0x4D00, 0x6850, 0x7E60, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F90,
+ 0x7F00, 0x7F20, 0x7EF0, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F80, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F50, 0x7F00,
+ 0x7EA0, 0x7ED0, 0x7EE0, 0x7F40, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EE0, 0x7F10, 0x7F10, 0x7E90, 0x7ED0, 0x7ED0, 0x7F00, 0x7EE0, 0x7E90,
+ 0x7F00, 0x7F00, 0x7F00, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F40, 0x7F30, 0x7F20, 0x7EF0, 0x7F00, 0x7F40,
+ 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F20, 0x7EE0, 0x7EF0, 0x7F50, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F60, 0x7EF0,
+ 0x7EF0, 0x7830, 0x5070, 0x2950, 0x01D0, 0xDAE0, 0xB4C0, 0x8FE0, 0x8510, 0x84D0, 0x8490, 0x8470, 0x8460, 0x8480, 0x8450, 0x8450,
+ 0x8440, 0x8470, 0x8440, 0x8450, 0x8420, 0x8450, 0x8450, 0x8450, 0x8420, 0x8450, 0x8450, 0x8460, 0x8450, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8430, 0x8430, 0x8440, 0x8440, 0x8480, 0x8460, 0x8480, 0x84B0, 0x8530, 0x91F0, 0xB790, 0xD450, 0xE980, 0xFC20, 0x0F10,
+ 0x23F0, 0x3D30, 0x5720, 0x6FE0, 0x7ED0, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F00,
+ 0x7EE0, 0x7EF0, 0x7F80, 0x7F00, 0x7EC0, 0x7F00, 0x7F10, 0x7F60, 0x7EF0, 0x7EB0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F20, 0x7F00, 0x7F10,
+ 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EE0, 0x7F20, 0x7EF0, 0x7ED0, 0x7F00, 0x7EC0, 0x7EC0, 0x7EE0, 0x7F20, 0x7EC0,
+ 0x7F10, 0x7F30, 0x7EC0, 0x7EF0, 0x7F10, 0x7EE0, 0x7F40, 0x7ED0, 0x7F00, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7EE0, 0x7F10, 0x7EF0,
+ 0x7F30, 0x7EE0, 0x7E90, 0x7F30, 0x7F00, 0x7F20, 0x7EE0, 0x7EA0, 0x7F00, 0x7ED0, 0x7F10, 0x7F00, 0x7EA0, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7EF0, 0x7EB0, 0x7F30, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F80, 0x7F00, 0x7F40, 0x7EF0,
+ 0x7EF0, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7F10, 0x7EF0, 0x7F00, 0x7EF0, 0x7F60, 0x7F20, 0x7ED0, 0x7ED0, 0x7EB0,
+ 0x7EF0, 0x7EF0, 0x7E90, 0x7EE0, 0x7EC0, 0x7F30, 0x7F20, 0x7EA0, 0x7ED0, 0x7F10, 0x7F10, 0x7F00, 0x7E90, 0x7EB0, 0x7F00, 0x7EF0,
+ 0x7F10, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F70, 0x7960, 0x6450, 0x4DE0,
+ 0x3320, 0x15F0, 0xF6D0, 0xD580, 0xB410, 0x9110, 0x8530, 0x84B0, 0x8480, 0x8460, 0x8460, 0x8450, 0x8440, 0x8410, 0x8420, 0x8420,
+ 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83C0, 0x83C0, 0x83B0, 0x83C0, 0x83B0, 0x83B0,
+ 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x83C0, 0x8390, 0x83A0, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390,
+ 0x83B0, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0,
+ 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8420, 0x8400, 0x8400, 0x8410,
+ 0x8400, 0x8400, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420,
+ 0x8420, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8440, 0x8420, 0x8420, 0x8420, 0x8470, 0x8420, 0x8420, 0x8410,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8430, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8440, 0x8410, 0x8410, 0x8440, 0x8410, 0x8430, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8470, 0x8490, 0x84C0, 0x8540, 0x9210, 0xBC50, 0xE680, 0x0B60, 0x2F80, 0x51B0,
+ 0x7030, 0x7E70, 0x7EC0, 0x7F10, 0x7F10, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F00,
+ 0x7F20, 0x7EF0, 0x7F60, 0x7F00, 0x7F40, 0x7F10, 0x7EF0, 0x7F80, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F70, 0x7F10, 0x7F00, 0x7F00,
+ 0x7F00, 0x7F60, 0x7F00, 0x7ED0, 0x7EB0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F20, 0x7EA0, 0x7ED0, 0x7EF0,
+ 0x7F00, 0x7EE0, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7F60, 0x7F40, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F10, 0x7EE0, 0x7EF0, 0x7F80, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7F10, 0x7F70, 0x7EF0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F00,
+ 0x7F40, 0x7ED0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F00, 0x7F30, 0x7EF0, 0x7F00,
+ 0x7F40, 0x7F00, 0x7F40, 0x7EF0, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F70, 0x7EF0, 0x7EF0, 0x7F10,
+ 0x7F00, 0x7F20, 0x7F10, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F40,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F50, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7890, 0x6BB0, 0x5DE0, 0x4F80, 0x3FF0, 0x2FD0, 0x1F70, 0x0DE0,
+ 0xFB10, 0xE5F0, 0xD170, 0xBCD0, 0xA760, 0x9290, 0x8740, 0x8510, 0x84D0, 0x84D0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450,
+ 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83E0, 0x83F0, 0x83E0, 0x83D0, 0x8380, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83E0, 0x83B0, 0x83B0, 0x83B0, 0x83C0,
+ 0x83C0, 0x83C0, 0x8400, 0x83D0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8450, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0,
+ 0x84C0, 0x84E0, 0x8540, 0x86E0, 0x9320, 0xA5E0, 0xB910, 0xCC50, 0xDF50, 0xF2E0, 0x0680, 0x19F0, 0x2DB0, 0x4340, 0x5710, 0x6990,
+ 0x79D0, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7ED0, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7E90, 0x7F00, 0x7F00, 0x7F00, 0x7F00,
+ 0x7E80, 0x7ED0, 0x7EF0, 0x7F10, 0x7EF0, 0x7E80, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F10, 0x7F10, 0x7EE0,
+ 0x7EF0, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7F30, 0x7F00, 0x7F40, 0x7F10, 0x7EB0, 0x4110, 0x16D0, 0xFCB0, 0xF4A0, 0xFBE0, 0x0CF0,
+ 0x23F0, 0x3B80, 0x51C0, 0x64B0, 0x72A0, 0x7CA0, 0x7ED0, 0x7F10, 0x7EF0, 0x7F30, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7C00,
+ 0x7960, 0x7C50, 0x7EF0, 0x7F20, 0x7F00, 0x7EB0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F40, 0x7F00,
+ 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F80, 0x7F00, 0x7F20, 0x7F20, 0x7F20, 0x7F90, 0x7EF0, 0x7F10, 0x7EE0, 0x7EF0, 0x7F70,
+ 0x7F20, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EE0, 0x7F50, 0x7F00, 0x7EA0, 0x7ED0, 0x7ED0, 0x7F30, 0x7F20,
+ 0x7EC0, 0x7ED0, 0x7EE0, 0x7F10, 0x7F10, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x6390,
+ 0x36E0, 0x04E0, 0xCE10, 0x9550, 0x84E0, 0x8480, 0x8480, 0x8450, 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8410, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0,
+ 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83A0, 0x83A0,
+ 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83B0, 0x83B0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430,
+ 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84B0, 0x84C0,
+ 0x84F0, 0x8540, 0x8670, 0x8D80, 0x9BC0, 0xA8A0, 0xB380, 0xBB50, 0xC0E0, 0xC420, 0xC570, 0xC520, 0xC2E0, 0xC030, 0xBB90, 0xB660,
+ 0xB0D0, 0xAAB0, 0xA410, 0x9D20, 0x9530, 0x8E50, 0x89D0, 0x87C0, 0x86D0, 0x8690, 0x86D0, 0x87D0, 0x8B00, 0x93B0, 0xA100, 0xAFA0,
+ 0xBEE0, 0xCE30, 0xDD00, 0xEAE0, 0xF830, 0x0500, 0x1260, 0x2210, 0x3120, 0x42C0, 0x5500, 0x6710, 0x77F0, 0x7F20, 0x7EF0, 0x7EF0,
+ 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F10, 0x7F70, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F60,
+ 0x7EE0, 0x7E90, 0x7F20, 0x7F20, 0x6D70, 0x4A30, 0x2330, 0xFB70, 0xD4A0, 0xB0F0, 0x9280, 0x8670, 0x8500, 0x84D0, 0x84C0, 0x84E0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84D0, 0x84F0, 0x8540, 0x86B0, 0x8F50, 0xA3C0, 0xBA40, 0xD1F0, 0xEBF0, 0x07B0, 0x2650, 0x4370, 0x5EE0,
+ 0x7660, 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F80, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F60, 0x7EE0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F50,
+ 0x7F10, 0x7EC0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7E70, 0x7EC0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7E90, 0x7EE0, 0x7F20, 0x7F10, 0x7F10,
+ 0x7EA0, 0x7EF0, 0x7F10, 0x7F00, 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7F40, 0x7F10, 0x7EF0, 0x7EE0,
+ 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EE0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F70,
+ 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7E90, 0x7EF0, 0x7EF0, 0x7EF0, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F30, 0x7F00,
+ 0x7EC0, 0x7F10, 0x7EF0, 0x7F00, 0x7EF0, 0x7F00, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F30, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x53F0, 0x2AD0, 0x01E0, 0xD960, 0xB0B0, 0x8C80, 0x8510,
+ 0x84B0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8440, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430,
+ 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8490, 0x84A0, 0x84D0,
+ 0x8500, 0x8550, 0x8560, 0x84E0, 0x84C0, 0x8490, 0x8480, 0x8480, 0x8490, 0x84B0, 0x94D0, 0xB0B0, 0xCD30, 0xEA60, 0x05E0, 0x1BF0,
+ 0x28B0, 0x26C0, 0x1340, 0xED10, 0xB420, 0x8570, 0x8480, 0x8450, 0x8430, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x8430, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83D0, 0x83E0, 0x8390, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8440, 0x8410, 0x8410, 0x8410, 0x8410, 0x8430, 0x8420, 0x8440,
+ 0x8420, 0x8430, 0x8430, 0x8430, 0x8450, 0x8400, 0x8460, 0x8480, 0x84B0, 0x84D0, 0x85B0, 0x9400, 0xB1E0, 0xCC00, 0xE330, 0xF8A0,
+ 0x0980, 0x17F0, 0x22A0, 0x2A40, 0x2DF0, 0x2D50, 0x2A20, 0x23E0, 0x1A10, 0x0EE0, 0x0160, 0xF290, 0xE2B0, 0xD230, 0xC180, 0xB1D0,
+ 0xA330, 0x9680, 0x8DD0, 0x8940, 0x8730, 0x8640, 0x85E0, 0x85B0, 0x85B0, 0x85C0, 0x8610, 0x86C0, 0x8820, 0x8B30, 0x9080, 0x9750,
+ 0x9E40, 0xA650, 0xAE90, 0xB740, 0xBE40, 0xC370, 0xC540, 0xC480, 0xC140, 0xBD40, 0xBA40, 0xB9E0, 0xBDD0, 0xC7D0, 0xD750, 0xEC50,
+ 0x0720, 0x2840, 0x4CC0, 0x7180, 0x7F10, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F20,
+ 0x7EF0, 0x7ED0, 0x7F80, 0x7F00, 0x7F00, 0x7ED0, 0x7EF0, 0x7F70, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7EC0,
+ 0x7EE0, 0x7F30, 0x7F00, 0x7E90, 0x7EB0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7EA0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10,
+ 0x7F00, 0x7EE0, 0x7EB0, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F30, 0x7EF0, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F20, 0x7F20, 0x7F00, 0x7F80, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F50, 0x7EE0, 0x7ED0, 0x7F10,
+ 0x7F20, 0x7F50, 0x7ED0, 0x7E90, 0x7F00, 0x7EE0, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7E90,
+ 0x7D90, 0x7B00, 0x7960, 0x7A80, 0x7C30, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F30,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7F10, 0x7F80, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7F70, 0x7EF0,
+ 0x7F10, 0x7F00, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EC0, 0x7ED0, 0x7F30, 0x7EE0, 0x7EA0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F10, 0x7E90,
+ 0x7EF0, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7EE0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7F30, 0x7F20, 0x76C0, 0x6BF0, 0x6070, 0x52C0, 0x4360, 0x30F0, 0x1D70, 0x0760, 0xEE80,
+ 0xD420, 0xB900, 0x9C40, 0x87F0, 0x8500, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8440, 0x8430, 0x8450, 0x8440, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8460, 0x8450, 0x8430, 0x8420, 0x8410,
+ 0x8400, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83F0, 0x8400, 0x8410, 0x8420, 0x8440, 0x8450, 0x8470,
+ 0x8480, 0x84A0, 0x84D0, 0x8530, 0x88C0, 0xA340, 0xBDA0, 0xD370, 0xE2E0, 0xEC90, 0xF090, 0xF0F0, 0xEF90, 0xEF30, 0xF120, 0xF6A0,
+ 0xFF50, 0x0BB0, 0x19A0, 0x28F0, 0x3910, 0x4700, 0x5370, 0x5D40, 0x65B0, 0x6D00, 0x73C0, 0x79C0, 0x7DB0, 0x7F00, 0x7EC0, 0x7F10,
+ 0x7F20, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7F20, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F20, 0x7EE0, 0x7EF0, 0x7F80, 0x7EE0,
+ 0x7EF0, 0x7F10, 0x7F20, 0x7F70, 0x7EF0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0,
+ 0x7F10, 0x7F00, 0x7F40, 0x7ED0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F00, 0x7F30,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x6D10, 0x4A50, 0x27D0, 0x0770, 0xE920, 0xCC50, 0xB070, 0x9530, 0x8640, 0x84E0, 0x84B0, 0x84A0,
+ 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470,
+ 0x8470, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8440,
+ 0x8460, 0x8470, 0x84A0, 0x8500, 0x87C0, 0x9FA0, 0xB360, 0xC390, 0xD290, 0xE5A0, 0xFA80, 0x1350, 0x2EB0, 0x4BE0, 0x68F0, 0x7E90,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F60, 0x7F00, 0x7F00, 0x7F00, 0x7EE0, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7EE0, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F40, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F20,
+ 0x7F40, 0x7B30, 0x4570, 0x0FE0, 0xD6C0, 0x9A20, 0x84F0, 0x8480, 0x8450, 0x8440, 0x8420, 0x8410, 0x8400, 0x83F0, 0x83E0, 0x83D0,
+ 0x8390, 0x83C0, 0x83C0, 0x83E0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460,
+ 0x8460, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470,
+ 0x8470, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x8500, 0x85C0, 0x8B10, 0x9DA0, 0xAD60, 0xBA20, 0xC3D0, 0xCA90, 0xCF20, 0xD190, 0xD460,
+ 0xD6D0, 0xD8E0, 0xDB60, 0xDCE0, 0xDD30, 0xD8C0, 0xCF20, 0xC050, 0xABE0, 0x9330, 0x8620, 0x84E0, 0x84C0, 0x8490, 0x8480, 0x8470,
+ 0x8470, 0x8470, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8450, 0x8430, 0x8430, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8460, 0x8420, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x8390, 0x8390, 0x83D0, 0x8390, 0x8390, 0x8390, 0x8390, 0x8380,
+ 0x8380, 0x8360, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8390, 0x8380, 0x8380,
+ 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x83D0, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380,
+ 0x8370, 0x8370, 0x8370, 0x8380, 0x8370, 0x8380, 0x8380, 0x8380, 0x8390, 0x8390, 0x8340, 0x83A0, 0x83B0, 0x83B0, 0x83C0, 0x83C0,
+ 0x83D0, 0x83E0, 0x8440, 0x8400, 0x8410, 0x8430, 0x8450, 0x8470, 0x84A0, 0x8640, 0xC110, 0x02F0, 0x4240, 0x76F0, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7EF0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7EB0, 0x7F00, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F50, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F70, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F00, 0x7F80, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F30, 0x7EE0, 0x7ED0, 0x7ED0, 0x7EE0, 0x7F40, 0x7F10, 0x7E90, 0x7EB0, 0x7ED0,
+ 0x7F10, 0x7F00, 0x7E70, 0x7EC0, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7EA0, 0x7F00, 0x7F00, 0x7EF0,
+ 0x7F10, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F30, 0x7EF0, 0x7F00, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F00, 0x7F80, 0x7EF0, 0x7F20, 0x7F10, 0x7EF0, 0x7F60, 0x7EE0, 0x7ED0, 0x7F10, 0x7F20, 0x7F40, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10,
+ 0x7F30, 0x7EB0, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F20, 0x7EF0, 0x7F00,
+ 0x7F00, 0x7EC0, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F70, 0x7EF0, 0x7F20, 0x7F00,
+ 0x7EF0, 0x7F80, 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0, 0x7EE0, 0x7EE0, 0x7F70, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0,
+ 0x7F10, 0x7F00, 0x7E90, 0x7EB0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F00, 0x7EC0, 0x7F30, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F40, 0x7F10, 0x7F00, 0x7EE0, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0,
+ 0x7EF0, 0x7F50, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7EF0, 0x7EA0, 0x7F00, 0x7F10,
+ 0x7F60, 0x7EE0, 0x7E90, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EA0, 0x7EC0, 0x7F10, 0x7EF0, 0x7F00,
+ 0x7F20, 0x7E90, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F50, 0x7EF0, 0x7F00, 0x7EF0,
+ 0x7EF0, 0x7F80, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F80, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F50, 0x7EE0, 0x7EE0, 0x7ED0, 0x7EE0,
+ 0x7F30, 0x7F00, 0x7E90, 0x7EB0, 0x7EE0, 0x7F10, 0x7F10, 0x7E70, 0x7EC0, 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F00, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F00, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10,
+ 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F30, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F00, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7EF0, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F00,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7EF0, 0x7F30, 0x7F30, 0x7C20, 0x6A70, 0x59D0, 0x48F0, 0x3860, 0x2820, 0x1790, 0x0800, 0xF960,
+ 0xEB60, 0xDE10, 0xD170, 0xC550, 0xB9E0, 0xAF40, 0xA610, 0x9D20, 0x9130, 0x8780, 0x8500, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8460, 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8450,
+ 0x83F0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8420, 0x8450, 0x8460, 0x8480, 0x84B0,
+ 0x8510, 0x8E10, 0xBAA0, 0xE380, 0x09C0, 0x3040, 0x5110, 0x6D30, 0x7EE0, 0x7EE0, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F00, 0x7F60,
+ 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F10, 0x7EE0, 0x7EC0, 0x7F30, 0x7F00, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7EF0,
+ 0x7F00, 0x7F20, 0x7F10, 0x7F80, 0x7F00, 0x7F40, 0x7F10, 0x7EF0, 0x7F60, 0x7F00, 0x7F00, 0x7F00, 0x7EF0, 0x7F30, 0x7EE0, 0x7EC0,
+ 0x7ED0, 0x7EE0, 0x7F50, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7E70, 0x7EC0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7E90, 0x7F10, 0x7F10, 0x7EE0, 0x7EC0, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7F40,
+ 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EE0, 0x7F00,
+ 0x7EE0, 0x7EF0, 0x7F70, 0x7F00, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7E90, 0x7EF0, 0x7EE0, 0x7EF0, 0x7ED0, 0x7EB0, 0x7F00,
+ 0x7F00, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7ED0, 0x7F30, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7F10,
+ 0x7F10, 0x7EF0, 0x7EE0, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7EF0, 0x7F00, 0x7F90, 0x7EF0, 0x7EE0,
+ 0x7EE0, 0x7ED0, 0x7F50, 0x7F10, 0x7F70, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F70, 0x7F10, 0x7EB0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7EA0, 0x7EC0, 0x7F00, 0x7F30, 0x7F20, 0x7E90, 0x7EB0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7EB0, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F20, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7F10, 0x7F50,
+ 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7F10, 0x7F20, 0x7F80, 0x7EF0, 0x7EB0, 0x7F20, 0x7EF0, 0x7F30, 0x7EE0,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F40, 0x7ED0, 0x7E90, 0x7F00, 0x7EE0, 0x7EF0, 0x7EE0, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F00,
+ 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F90, 0x7F20, 0x7F40, 0x7F40, 0x7F10, 0x7F70,
+ 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F80, 0x7C10, 0x6C20, 0x5CC0, 0x4AD0, 0x37F0, 0x24B0, 0x1060, 0xFC40, 0xE470, 0xCDE0, 0xB780,
+ 0xA000, 0x8BB0, 0x8580, 0x84D0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8410, 0x8430, 0x8450, 0x8430, 0x8410,
+ 0x8410, 0x8400, 0x8400, 0x83F0, 0x8400, 0x83F0, 0x83E0, 0x83E0, 0x83F0, 0x83D0, 0x83D0, 0x8380, 0x83C0, 0x83C0, 0x83C0, 0x8340,
+ 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83B0, 0x83B0, 0x8350, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83B0, 0x83B0,
+ 0x83B0, 0x8340, 0x83C0, 0x83C0, 0x83E0, 0x83C0, 0x83C0, 0x83C0, 0x83F0, 0x83C0, 0x83D0, 0x83C0, 0x83F0, 0x83B0, 0x83C0, 0x8380,
+ 0x83B0, 0x83B0, 0x83B0, 0x8350, 0x83B0, 0x83B0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83B0, 0x83C0, 0x83C0, 0x83B0,
+ 0x83C0, 0x83F0, 0x83C0, 0x83F0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83E0, 0x83C0, 0x83B0, 0x83B0, 0x83E0, 0x83B0, 0x83B0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x8400, 0x83F0,
+ 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8470, 0x8480, 0x8460, 0x8470, 0x8480, 0x8490, 0x84A0,
+ 0x84D0, 0x84E0, 0x8520, 0x8600, 0x88C0, 0x8F10, 0x96B0, 0x9E60, 0xA510, 0xACF0, 0xB640, 0xC1D0, 0xD020, 0xE220, 0xF520, 0x0940,
+ 0x1E90, 0x35E0, 0x4D00, 0x6370, 0x77D0, 0x7EA0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7EB0,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7EC0, 0x7F40, 0x7EF0, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F40, 0x7F20, 0x7F20, 0x7F30, 0x7F10, 0x7F30, 0x7F20, 0x7EF0, 0x7F20, 0x7F00,
+ 0x6E30, 0x5BF0, 0x4870, 0x34E0, 0x2090, 0x0C20, 0xF7A0, 0xE2C0, 0xCE90, 0xB910, 0xA500, 0x9200, 0x8770, 0x8540, 0x84E0, 0x84B0,
+ 0x84A0, 0x8490, 0x8470, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8400, 0x8410, 0x8400, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8430, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x8400, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8430, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x8370, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83B0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x8400, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x8350,
+ 0x83A0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8380, 0x83A0, 0x83A0, 0x83A0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83C0, 0x83B0, 0x83B0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8430, 0x8410, 0x8410, 0x8400, 0x8420, 0x8420,
+ 0x8430, 0x8420, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8460, 0x8480, 0x8490, 0x84B0, 0x84C0, 0x84F0, 0x8550, 0x8640,
+ 0x8850, 0x8BC0, 0x8F70, 0x9160, 0x9220, 0x9110, 0x8ED0, 0x8BF0, 0x8910, 0x86F0, 0x85B0, 0x8520, 0x84F0, 0x84C0, 0x84D0, 0x84A0,
+ 0x8490, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8440, 0x8470, 0x8440, 0x8440, 0x8430,
+ 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8440, 0x8460,
+ 0x8470, 0x8480, 0x84C0, 0x8500, 0x8750, 0xA400, 0xC9D0, 0xF3D0, 0x1FE0, 0x4BE0, 0x7200, 0x7F30, 0x7EF0, 0x7F10, 0x7F10, 0x7EF0,
+ 0x7F60, 0x7ED0, 0x7EF0, 0x7F00, 0x7F00, 0x7F50, 0x7F00, 0x7EE0, 0x7F10, 0x7F10, 0x7F30, 0x7EC0, 0x7E90, 0x7F10, 0x7F20, 0x7F30,
+ 0x7ED0, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F50, 0x7EE0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7E90, 0x7F10, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EE0, 0x7F10, 0x7F00, 0x7EC0, 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7EE0, 0x7F10,
+ 0x7F10, 0x7EE0, 0x7F70, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7F50, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7F60, 0x7EE0, 0x7EC0, 0x7ED0,
+ 0x7EE0, 0x7F50, 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0, 0x7F10, 0x7F00, 0x7E70, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7E90, 0x7F00, 0x7F20,
+ 0x7F10, 0x7F10, 0x7EB0, 0x7F00, 0x7F10, 0x7F00, 0x7F20, 0x7EC0, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10,
+ 0x7EF0, 0x7EE0, 0x7F40, 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F30, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7F60, 0x7ED0, 0x7EF0, 0x7EE0,
+ 0x7EF0, 0x7F50, 0x7EE0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7EE0, 0x7E90, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EA0, 0x7F20, 0x7F00,
+ 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7EF0, 0x7F00, 0x7F00, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F60, 0x7F10, 0x7F10,
+ 0x7EF0, 0x7EF0, 0x7F70, 0x7EE0, 0x7F10, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F80, 0x7F10, 0x7EE0, 0x7EE0,
+ 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7EF0, 0x7EE0, 0x7F40, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7E80, 0x7EC0, 0x7F00,
+ 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F30, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0,
+ 0x7F10, 0x7F60, 0x7EF0, 0x7EB0, 0x7F00, 0x7F00, 0x7EF0, 0x7EB0, 0x7E70, 0x7EE0, 0x7EF0, 0x7F30, 0x7EC0, 0x7E90, 0x7F10, 0x7F00,
+ 0x7F00, 0x7F10, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F90, 0x7F00, 0x7F40, 0x7EF0, 0x7EF0, 0x7F70, 0x7EE0, 0x7F10, 0x7EF0,
+ 0x7EE0, 0x7F70, 0x7F10, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F00, 0x7EF0, 0x7E90, 0x7F00, 0x7F20,
+ 0x7F10, 0x7F20, 0x7EA0, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F40, 0x7F00, 0x7470, 0x5D80, 0x4500, 0x2C60, 0x1380, 0xFA40,
+ 0xE270, 0xCAA0, 0xB1E0, 0x9CA0, 0x8A90, 0x8580, 0x8530, 0x84C0, 0x84A0, 0x8490, 0x84B0, 0x8470, 0x8460, 0x8460, 0x8480, 0x8450,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8490, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84D0, 0x84E0, 0x8500, 0x84E0,
+ 0x8510, 0x8530, 0x8500, 0x8500, 0x8500, 0x84F0, 0x84D0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470,
+ 0x8470, 0x8470, 0x8480, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84B0, 0x84C0,
+ 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450,
+ 0x8460, 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x8390, 0x8380, 0x83B0, 0x8380, 0x8380, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370,
+ 0x8370, 0x8370, 0x8360, 0x8350, 0x8360, 0x8360, 0x8380, 0x8360, 0x8360, 0x8370, 0x8370, 0x8360, 0x8370, 0x8370, 0x8370, 0x8380,
+ 0x8380, 0x8380, 0x83B0, 0x8390, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83D0, 0x83B0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x8390, 0x8380,
+ 0x8380, 0x8380, 0x8370, 0x8360, 0x8360, 0x8360, 0x8350, 0x8350, 0x8350, 0x8350, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340,
+ 0x8340, 0x8340, 0x8340, 0x8340, 0x8350, 0x8350, 0x8350, 0x8350, 0x8350, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360,
+ 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8360, 0x8370, 0x8370, 0x8370, 0x8380,
+ 0x8380, 0x8380, 0x8380, 0x8390, 0x8390, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83E0,
+ 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8420, 0x8430, 0x8430, 0x8450, 0x8460, 0x8480, 0x84A0, 0x84F0, 0x8840, 0xB250, 0xE0E0,
+ 0x1110, 0x4450, 0x7500, 0x7F20, 0x7EF0, 0x7EA0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EC0, 0x7F20, 0x7EF0, 0x7EE0, 0x7EF0, 0x7ED0,
+ 0x7F30, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F80, 0x7F00, 0x7F20, 0x7EF0, 0x7ED0, 0x7F60,
+ 0x7F00, 0x7EF0, 0x7EB0, 0x7EE0, 0x7F50, 0x7EF0, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F30, 0x7F00, 0x7EA0, 0x7EB0, 0x7EB0, 0x7EE0, 0x7EF0,
+ 0x7E90, 0x7EA0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F00, 0x7EE0, 0x7E90, 0x7EE0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00,
+ 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F30, 0x7F00, 0x7F10, 0x7F00, 0x7F00, 0x7F50,
+ 0x7ED0, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F50, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F60, 0x7EE0, 0x7E90, 0x7F00, 0x7EE0, 0x7F50, 0x7EB0,
+ 0x7E70, 0x7EE0, 0x7EF0, 0x7F20, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7EB0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F80,
+ 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F60, 0x7EE0, 0x7ED0, 0x7EF0, 0x7F00, 0x7F40, 0x7EF0, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00,
+ 0x7F50, 0x7F00, 0x7EA0, 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x6BD0, 0x3AC0, 0x0FD0, 0xE790, 0xC2E0, 0xA170, 0x8960, 0x8510,
+ 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8470, 0x8400, 0x8460, 0x8460, 0x8460, 0x8440, 0x8450, 0x8460, 0x8460,
+ 0x8460, 0x8470, 0x8470, 0x8470, 0x84A0, 0x84B0, 0x84F0, 0x85F0, 0x93E0, 0xB320, 0xD0C0, 0xEE40, 0x09A0, 0x2480, 0x3D00, 0x5380,
+ 0x6790, 0x78F0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F80, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F80, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F70,
+ 0x7F00, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F60, 0x7F20, 0x7E90, 0x7EB0, 0x7EE0, 0x7F30, 0x7F10, 0x7E70, 0x7EC0, 0x7ED0, 0x7EF0, 0x6860,
+ 0x4A40, 0x24A0, 0xFCE0, 0xD100, 0xA410, 0x8670, 0x84C0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8470, 0x8440, 0x8430, 0x8420, 0x8420,
+ 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8420, 0x8420, 0x8420, 0x8430, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84D0,
+ 0x84F0, 0x8520, 0x8580, 0x85C0, 0x85C0, 0x8580, 0x8560, 0x8500, 0x84D0, 0x84D0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470,
+ 0x8490, 0x8490, 0x8460, 0x8460, 0x8480, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x83E0, 0x8440, 0x8430, 0x8440, 0x8400,
+ 0x8430, 0x8430, 0x8460, 0x8420, 0x8450, 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8470, 0x8450, 0x8450,
+ 0x8460, 0x8470, 0x8490, 0x84B0, 0x8540, 0x9770, 0xC440, 0xED20, 0x0FC0, 0x2AD0, 0x3CC0, 0x4580, 0x4800, 0x4610, 0x4830, 0x50A0,
+ 0x6250, 0x7970, 0x7F20, 0x7F00, 0x7EF0, 0x7F50, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F50,
+ 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7EC0, 0x7EF0, 0x7F00, 0x7F70, 0x7ED0, 0x7E90, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00,
+ 0x7EA0, 0x7EF0, 0x7F00, 0x7F20, 0x7F00, 0x7E90, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00,
+ 0x7F50, 0x7EF0, 0x7F00, 0x7F10, 0x7EF0, 0x7F60, 0x7EE0, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F70,
+ 0x7EE0, 0x7EE0, 0x7ED0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EE0, 0x7F50, 0x7EF0, 0x7E70, 0x7EC0, 0x7ED0, 0x7EF0, 0x7EF0,
+ 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7AC0, 0x3B30, 0x00F0, 0xC340, 0x89C0,
+ 0x84B0, 0x8470, 0x8450, 0x8460, 0x8420, 0x8400, 0x83F0, 0x83F0, 0x83D0, 0x83C0, 0x83C0, 0x83B0, 0x83A0, 0x8390, 0x8390, 0x8390,
+ 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83E0, 0x83C0, 0x83D0, 0x8370, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83A0, 0x83A0,
+ 0x8390, 0x8390, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8380, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390,
+ 0x8390, 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83E0,
+ 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83F0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8410, 0x8420, 0x8420, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8490, 0x84D0, 0x86E0, 0xB6C0, 0xEFC0, 0x29C0,
+ 0x6360, 0x7F00, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7EE0, 0x7F80, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7F10,
+ 0x7EF0, 0x7EE0, 0x7F40, 0x7EF0, 0x7EF0, 0x7EE0, 0x7ED0, 0x7F70, 0x7F00, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F60, 0x7F10, 0x7E90, 0x7EE0,
+ 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7EE0, 0x7F00, 0x7F00, 0x7E90, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x6960, 0x33C0,
+ 0xFCD0, 0xC740, 0x9470, 0x84F0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0,
+ 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8460, 0x8470, 0x8470, 0x8490, 0x84A0, 0x84D0, 0x8510, 0x85E0, 0x87D0, 0x8890, 0x8750, 0x85D0, 0x8550,
+ 0x8520, 0x8540, 0x85C0, 0x8850, 0x9810, 0xAB50, 0xBF30, 0xD3A0, 0xE990, 0x0090, 0x1740, 0x2E40, 0x4190, 0x5260, 0x5EC0, 0x66D0,
+ 0x6E30, 0x75A0, 0x7DA0, 0x7EF0, 0x7EF0, 0x7F00, 0x7EF0, 0x7F80, 0x7F20, 0x7EE0, 0x7EF0, 0x7ED0, 0x7F30, 0x7EF0, 0x7E90, 0x7EB0,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EC0, 0x7F00, 0x7F10, 0x7F10, 0x7E90, 0x7ED0, 0x7F00, 0x7EE0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F50, 0x7F20, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10,
+ 0x7F00, 0x7EE0, 0x7F50, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7F10, 0x7F00, 0x7F80, 0x7EF0, 0x7EB0, 0x7EE0,
+ 0x7EF0, 0x7F30, 0x7EE0, 0x7D20, 0x5710, 0x2BF0, 0x0070, 0xD200, 0xA150, 0x8570, 0x84D0, 0x8470, 0x83F0, 0x8400, 0x83F0, 0x83F0,
+ 0x8410, 0x83D0, 0x83C0, 0x8360, 0x83B0, 0x83A0, 0x8390, 0x8350, 0x8380, 0x83B0, 0x8370, 0x8370, 0x8360, 0x8360, 0x8350, 0x8350,
+ 0x8350, 0x8350, 0x8350, 0x8340, 0x8350, 0x8350, 0x8350, 0x8350, 0x8350, 0x8340, 0x8350, 0x8350, 0x8340, 0x8350, 0x8350, 0x8350,
+ 0x8350, 0x8360, 0x8360, 0x8360, 0x8370, 0x8350, 0x8380, 0x8380, 0x8390, 0x8390, 0x83A0, 0x83B0, 0x83A0, 0x83C0, 0x83D0, 0x83E0,
+ 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83F0, 0x83F0, 0x8400,
+ 0x8410, 0x8410, 0x8430, 0x8440, 0x8450, 0x84D0, 0x85F0, 0xA270, 0xCC20, 0xF470, 0x1B70, 0x4120, 0x6470, 0x7E90, 0x7EB0, 0x7F00,
+ 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F10,
+ 0x7F20, 0x7F00, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F70, 0x7EF0, 0x7EB0, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7EC0,
+ 0x7EF0, 0x7EF0, 0x7F20, 0x7ED0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7EF0, 0x7F00, 0x7EF0, 0x7E90, 0x7F00,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F80, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7F00, 0x7F80, 0x7F10, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7E90,
+ 0x7EB0, 0x7EF0, 0x4D90, 0x0FF0, 0xD240, 0x9590, 0x84E0, 0x8490, 0x8460, 0x8490, 0x8430, 0x8420, 0x8410, 0x8400, 0x8400, 0x83F0,
+ 0x83D0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8420, 0x8420,
+ 0x8440, 0x8460, 0x8480, 0x84C0, 0x8700, 0xC400, 0x0640, 0x4DB0, 0x7EB0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10,
+ 0x7EF0, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7F10, 0x7EF0, 0x7F00, 0x7F00, 0x7EF0, 0x7F80, 0x7F00,
+ 0x7F20, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F40, 0x7F20, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7EE0, 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F60, 0x7EF0, 0x7EB0, 0x7F10, 0x7F40, 0x7F10, 0x7ED0, 0x7E80, 0x7F40, 0x7F10,
+ 0x7EB0, 0x7E70, 0x7E60, 0x7EF0, 0x7EF0, 0x7F20, 0x7ED0, 0x7E90, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EC0, 0x7F40, 0x7EF0, 0x7EE0,
+ 0x7EF0, 0x7ED0, 0x7F30, 0x7F00, 0x7F20, 0x7F10, 0x7EF0, 0x7F30, 0x7EF0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F80, 0x7F10, 0x7F20, 0x7F00,
+ 0x7EF0, 0x7F60, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7F40, 0x7EF0, 0x7EB0, 0x7EF0, 0x7ED0, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0,
+ 0x7960, 0x5D40, 0x4F90, 0x4DB0, 0x5260, 0x5840, 0x5D90, 0x5E00, 0x5B40, 0x54D0, 0x4C30, 0x4460, 0x3C40, 0x3680, 0x3120, 0x2A20,
+ 0x22F0, 0x1A40, 0x10A0, 0x05F0, 0xFB90, 0xF240, 0xEAE0, 0xE570, 0xE190, 0xDE30, 0xDBF0, 0xD890, 0xD510, 0xD0C0, 0xCAD0, 0xC5D0,
+ 0xC0C0, 0xBCB0, 0xB9D0, 0xB810, 0xB810, 0xB8B0, 0xB9B0, 0xBB60, 0xBB90, 0xB980, 0xB4B0, 0xAC20, 0x9FD0, 0x90C0, 0x8750, 0x8520,
+ 0x84D0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84C0, 0x8530, 0x8CB0, 0xAD10, 0xC270, 0xC760, 0xBAC0, 0x9E70, 0x8660,
+ 0x84C0, 0x8490, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450, 0x8460, 0x8470, 0x8470, 0x8490, 0x84B0, 0x84F0, 0x8580, 0x8700, 0x8940,
+ 0x8C00, 0x9150, 0x9D30, 0xAFB0, 0xC8F0, 0xE260, 0xFB00, 0x10C0, 0x2230, 0x30B0, 0x3C40, 0x4650, 0x50B0, 0x5B00, 0x6490, 0x6D10,
+ 0x7470, 0x7B20, 0x7E60, 0x7ED0, 0x7F00, 0x7F20, 0x7F10, 0x7EB0, 0x7EE0, 0x7F10, 0x7F10, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7EC0, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F20, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F60, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F70, 0x7EF0, 0x7EE0, 0x7F00, 0x7F10, 0x7F80, 0x7F00, 0x7ED0, 0x6A90, 0x2140,
+ 0x1530, 0x0EC0, 0x0A70, 0x08C0, 0x0870, 0x0A70, 0x0CA0, 0x0F50, 0x1300, 0x1660, 0x1B40, 0x1F70, 0x2230, 0x23A0, 0x2180, 0x1CB0,
+ 0x13B0, 0x05D0, 0xF690, 0xE5B0, 0xD3B0, 0xC080, 0xAC50, 0x9820, 0x88F0, 0x8550, 0x84E0, 0x84B0, 0x84C0, 0x8490, 0x8480, 0x8480,
+ 0x8470, 0x8470, 0x8470, 0x8490, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84D0, 0x8500,
+ 0x85B0, 0x8950, 0x9A70, 0xAE60, 0xC020, 0xD1D0, 0xDF30, 0xE920, 0xF060, 0xF350, 0xF390, 0xEFF0, 0xE8A0, 0xDE60, 0xD050, 0xC2F0,
+ 0xB6D0, 0xAEE0, 0xACE0, 0xB0A0, 0xB980, 0xC680, 0xD590, 0xE810, 0xF900, 0x0A60, 0x1AC0, 0x2910, 0x35F0, 0x3F60, 0x4600, 0x4990,
+ 0x4940, 0x46D0, 0x3FD0, 0x3560, 0x26B0, 0x1400, 0xFEC0, 0xE590, 0xC980, 0xA8B0, 0x8C30, 0x8520, 0x84C0, 0x84A0, 0x8490, 0x8480,
+ 0x8470, 0x8470, 0x8410, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84C0, 0x84F0, 0x85E0, 0x8FE0,
+ 0xA8A0, 0xBEA0, 0xD1F0, 0xE200, 0xF0E0, 0xFB50, 0x0350, 0x0A00, 0x0E80, 0x10D0, 0x1170, 0x0EE0, 0x0B80, 0x0510, 0xFDC0, 0xF5F0,
+ 0xEC50, 0xE2B0, 0xD890, 0xCDE0, 0xC2F0, 0xB7E0, 0xABC0, 0x9FB0, 0x9300, 0x8A30, 0x8660, 0x8540, 0x84F0, 0x84D0, 0x84E0, 0x84B0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x8500, 0x8570, 0x8830, 0x9EC0, 0xBA90, 0xD830, 0xF620, 0x1360, 0x2E40, 0x4430, 0x5700,
+ 0x6460, 0x6E90, 0x7600, 0x7A80, 0x7E00, 0x7F10, 0x7F00, 0x7F00, 0x7EC0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EE0, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F10, 0x6F50, 0x5080, 0x2A10, 0x0230, 0xD520, 0xA540,
+ 0x8690, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8490, 0x8460, 0x8460,
+ 0x8470, 0x8470, 0x8470, 0x8480, 0x8490, 0x8490, 0x84B0, 0x84D0, 0x8530, 0x8AE0, 0xB430, 0xE0F0, 0x1160, 0x4170, 0x6DC0, 0x7ED0,
+ 0x7F30, 0x7F20, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7F10, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0,
+ 0x7F10, 0x7F60, 0x7F00, 0x7ED0, 0x7F00, 0x7F00, 0x7F90, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F30, 0x7EE0, 0x7ED0, 0x7F00, 0x7F20,
+ 0x7F50, 0x7ED0, 0x7E90, 0x7F00, 0x7F10, 0x7EE0, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F50, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F30, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F10, 0x7F20, 0x7F30, 0x7F20, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F50, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F40, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F60, 0x7F40, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7EF0, 0x7EE0, 0x7EF0,
+ 0x7EF0, 0x6120, 0x30C0, 0xFD30, 0xC530, 0x8CB0, 0x84C0, 0x8480, 0x8450, 0x8440, 0x8420, 0x8410, 0x8400, 0x83F0, 0x83F0, 0x83E0,
+ 0x83E0, 0x83D0, 0x83D0, 0x8390, 0x83D0, 0x83D0, 0x83D0, 0x83B0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83A0, 0x83B0,
+ 0x83A0, 0x83A0, 0x8380, 0x8390, 0x83C0, 0x8380, 0x83A0, 0x8380, 0x8380, 0x8390, 0x83A0, 0x8370, 0x8380, 0x8310, 0x8380, 0x8380,
+ 0x83B0, 0x8390, 0x8390, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83F0, 0x83D0, 0x83D0, 0x83D0, 0x8370, 0x83E0, 0x83E0, 0x83F0, 0x83F0,
+ 0x8430, 0x8410, 0x8410, 0x8420, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8490, 0x84A0, 0x84D0, 0x8520, 0x86C0, 0x9370, 0xA810,
+ 0xBAA0, 0xCC60, 0xDF40, 0xEF30, 0xFF20, 0x0D50, 0x1B00, 0x27F0, 0x3300, 0x3E60, 0x48F0, 0x5360, 0x5D40, 0x6600, 0x6FB0, 0x7860,
+ 0x7EE0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F60, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F30, 0x7EE0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F80,
+ 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F50, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7EE0,
+ 0x7EC0, 0x7F10, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EC0, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7EF0,
+ 0x7F80, 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F90, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F70,
+ 0x7F00, 0x7EE0, 0x7ED0, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7ED0, 0x7ED0, 0x7F20, 0x7F20,
+ 0x7E90, 0x7EB0, 0x7F00, 0x7EF0, 0x7EF0, 0x7E70, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7EB0,
+ 0x7F20, 0x7EB0, 0x7ED0, 0x7ED0, 0x7F00, 0x7F00, 0x7E90, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EE0, 0x7F40, 0x7F30, 0x7F20, 0x7EF0, 0x7F10, 0x7F60, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F20, 0x7EE0, 0x7EF0,
+ 0x7F70, 0x7F00, 0x7F00, 0x7F10, 0x7ED0, 0x78F0, 0x7140, 0x6910, 0x61E0, 0x59F0, 0x51A0, 0x48F0, 0x4010, 0x3760, 0x2E00, 0x23F0,
+ 0x1AE0, 0x1140, 0x0810, 0xFEA0, 0xF560, 0xED00, 0xE4D0, 0xDDD0, 0xD6E0, 0xD010, 0xC9A0, 0xC310, 0xBCE0, 0xB6D0, 0xB1B0, 0xADA0,
+ 0xAAE0, 0xA970, 0xA890, 0xA830, 0xA870, 0xA8E0, 0xA920, 0xA9E0, 0xAA90, 0xAB80, 0xACD0, 0xADD0, 0xAFB0, 0xB150, 0xB2A0, 0xB3C0,
+ 0xB450, 0xB540, 0xB560, 0xB530, 0xB3D0, 0xB1F0, 0xB030, 0xAD80, 0xAAF0, 0xA820, 0xA5D0, 0xA450, 0xA320, 0xA260, 0xA200, 0xA220,
+ 0xA360, 0xA530, 0xA900, 0xAD80, 0xB3F0, 0xBCE0, 0xC600, 0xD140, 0xDBF0, 0xE7D0, 0xF4C0, 0x01C0, 0x0FC0, 0x1EB0, 0x2E40, 0x3D80,
+ 0x4BB0, 0x59E0, 0x6660, 0x7140, 0x7AF0, 0x7F00, 0x7F60, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10,
+ 0x7F50, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7D70, 0x7560, 0x6DA0, 0x6430, 0x5AB0, 0x5120, 0x4690, 0x3D10, 0x32C0, 0x27D0,
+ 0x1E10, 0x1400, 0x09F0, 0x0180, 0xFA30, 0xF4E0, 0xF020, 0xED40, 0xEBA0, 0xEAB0, 0xEB00, 0xEBB0, 0xED40, 0xEF20, 0xF0D0, 0xF3B0,
+ 0xF620, 0xF970, 0xFCF0, 0xFF50, 0x0140, 0x0040, 0xFD10, 0xF760, 0xEF50, 0xE630, 0xDC90, 0xD2E0, 0xCAC0, 0xC3E0, 0xBF40, 0xBD00,
+ 0xBDA0, 0xC190, 0xC890, 0xD2D0, 0xDE90, 0xEB10, 0xF740, 0xFFB0, 0x0500, 0x06C0, 0x0490, 0x00D0, 0xFA80, 0xF320, 0xE9F0, 0xDDF0,
+ 0xD040, 0xBF80, 0xABF0, 0x9560, 0x8720, 0x8500, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430,
+ 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8450, 0x8430, 0x8430, 0x8440, 0x8430,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8440, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0,
+ 0x83C0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0,
+ 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0,
+ 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410,
+ 0x8410, 0x8420, 0x8430, 0x8430, 0x8440, 0x8450, 0x8440, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84D0, 0x8500, 0x8590, 0x8820,
+ 0x9220, 0xA120, 0xAD70, 0xB760, 0xBF60, 0xC570, 0xC8D0, 0xC9C0, 0xC9C0, 0xC830, 0xC610, 0xC470, 0xC2B0, 0xC180, 0xBF30, 0xBC50,
+ 0xB710, 0xAF70, 0xA570, 0x9860, 0x8BB0, 0x8600, 0x84F0, 0x84C0, 0x84A0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430,
+ 0x8450, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8440, 0x8450, 0x8460, 0x8460, 0x84A0, 0x8470, 0x8490, 0x8480, 0x8490, 0x8490,
+ 0x84A0, 0x84B0, 0x84B0, 0x84D0, 0x84E0, 0x8500, 0x8560, 0x8690, 0x8B00, 0x9820, 0xA6A0, 0xB4D0, 0xC190, 0xCD90, 0xD850, 0xE1B0,
+ 0xEAD0, 0xF230, 0xF990, 0x0170, 0x09C0, 0x12E0, 0x1C90, 0x26D0, 0x3120, 0x3CF0, 0x47F0, 0x53A0, 0x5E70, 0x6970, 0x72F0, 0x7B40,
+ 0x7F00, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F90, 0x7F30, 0x7F00, 0x7F40, 0x7F30, 0x7F50, 0x7F40, 0x7EE0,
+ 0x7F10, 0x7F10, 0x7EF0, 0x7EF0, 0x7EB0, 0x7470, 0x6620, 0x5590, 0x4370, 0x2E30, 0x1800, 0xFEC0, 0xE330, 0xC380, 0xA440, 0x8970,
+ 0x84F0, 0x84B0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0,
+ 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83C0, 0x83C0, 0x83B0, 0x83A0, 0x8390, 0x8390, 0x8380, 0x8370, 0x8360, 0x8360, 0x8350, 0x8350,
+ 0x8350, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8340, 0x8350,
+ 0x8350, 0x8350, 0x8350, 0x8360, 0x8360, 0x8360, 0x8360, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8370, 0x8380, 0x8380, 0x8380,
+ 0x8380, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x8400,
+ 0x8410, 0x8420, 0x8430, 0x8440, 0x8450, 0x8470, 0x8480, 0x84A0, 0x84C0, 0x8510, 0x8700, 0x9830, 0xAD10, 0xBE50, 0xCD10, 0xD900,
+ 0xE450, 0xEDF0, 0xF6E0, 0xFF80, 0x0850, 0x1260, 0x1BA0, 0x2680, 0x3180, 0x3EA0, 0x4C90, 0x5B30, 0x6B70, 0x7A00, 0x7F20, 0x7F10,
+ 0x7F20, 0x7F20, 0x7ED0, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F50, 0x7F00, 0x7F20,
+ 0x7F00, 0x7F10, 0x7F70, 0x7EE0, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7EC0, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7E60, 0x68E0, 0x5310, 0x3D10, 0x2870, 0x1500, 0x0290, 0xF120,
+ 0xE1A0, 0xD4D0, 0xC9A0, 0xC030, 0xB820, 0xB150, 0xAC80, 0xA860, 0xA580, 0xA3B0, 0xA260, 0xA1A0, 0xA100, 0xA080, 0x9FF0, 0x9E60,
+ 0x9C10, 0x9860, 0x9340, 0x8560, 0x8500, 0x84E0, 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84F0, 0x8550, 0x8800,
+ 0x9DE0, 0xBB00, 0xD950, 0xF7B0, 0x15A0, 0x31C0, 0x4CC0, 0x67A0, 0x7BC0, 0x7EF0, 0x7ED0, 0x7F00, 0x7EE0, 0x7F30, 0x7F10, 0x7E70,
+ 0x7ED0, 0x7EB0, 0x7F10, 0x7EF0, 0x7E90, 0x7ED0, 0x7F00, 0x7F00, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7EE0, 0x7EF0, 0x7F50, 0x7F10,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F70, 0x7EF0, 0x7F10, 0x7EF0, 0x7F20, 0x7F70, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F70, 0x7F00, 0x7EC0,
+ 0x7EF0, 0x7EF0, 0x7F20, 0x7ED0, 0x7E90, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7EA0, 0x7F00, 0x7F10, 0x7F00, 0x7F00, 0x7EC0, 0x7F00,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F50, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F80, 0x7F00,
+ 0x7F10, 0x7F20, 0x7F00, 0x7F80, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EE0, 0x7ED0, 0x7EF0, 0x7F60, 0x7F00, 0x7E90,
+ 0x7EB0, 0x7EB0, 0x7EF0, 0x7F00, 0x7E70, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7E90, 0x7EE0,
+ 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F00, 0x7ED0, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F40, 0x7EF0,
+ 0x7F20, 0x7F00, 0x7F00, 0x7F50, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7F60, 0x7ED0, 0x7E90,
+ 0x7F00, 0x7F10, 0x7F30, 0x7EB0, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7EE0, 0x7EC0, 0x7F10, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7EE0, 0x7F10, 0x7F10, 0x7EE0, 0x7F60, 0x7EF0,
+ 0x7F20, 0x7F00, 0x7F00, 0x7F50, 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7EE0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F70, 0x7F10, 0x7EE0,
+ 0x7EE0, 0x7ED0, 0x7F30, 0x7EF0, 0x7E70, 0x7EC0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7E90, 0x7EE0, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7ED0,
+ 0x7F10, 0x7F00, 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F40, 0x7F40, 0x6780, 0x4630, 0x28A0, 0x0CA0, 0xEF90,
+ 0xCF00, 0xA5A0, 0x86C0, 0x84C0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8470,
+ 0x8480, 0x84D0, 0x8FB0, 0xEAA0, 0x3190, 0x6730, 0x7EB0, 0x7F20, 0x7ED0, 0x7EB0, 0x7F20, 0x7F10, 0x7EB0, 0x7EF0, 0x7EF0, 0x7F10,
+ 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x63C0, 0x3AB0, 0x0D30, 0xDFD0, 0xB580, 0x8F10, 0x8500, 0x84B0, 0x84B0, 0x8470,
+ 0x8450, 0x8440, 0x8430, 0x8420, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83E0, 0x83C0, 0x83C0, 0x83A0, 0x8390, 0x8390, 0x8390, 0x8390,
+ 0x8390, 0x8390, 0x8390, 0x8380, 0x8380, 0x8380, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83E0, 0x83A0, 0x8390, 0x8390,
+ 0x8390, 0x8390, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83E0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8390, 0x83F0, 0x83F0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8410, 0x8420,
+ 0x8450, 0x8440, 0x8450, 0x8460, 0x8480, 0x8490, 0x84B0, 0x84E0, 0x8650, 0xA820, 0xDE50, 0x1F90, 0x6820, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7EF0,
+ 0x7F20, 0x7F00, 0x7F20, 0x7F20, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F00, 0x7F10, 0x7F30, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7F20, 0x7EA0, 0x7F10, 0x7F20, 0x7F40,
+ 0x7EF0, 0x7E90, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7E80, 0x7EA0, 0x7ED0, 0x7F20, 0x7F00, 0x7EC0, 0x7F00, 0x7EB0, 0x7F20, 0x7F20,
+ 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7ED0, 0x7EF0,
+ 0x7F60, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F70, 0x7F10, 0x7EB0, 0x7EF0, 0x7ED0, 0x7F10, 0x7EE0, 0x7EC0, 0x7EF0, 0x7EE0, 0x7F20,
+ 0x7F10, 0x7E90, 0x7EF0, 0x7EE0, 0x7F10, 0x7F00, 0x7E70, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F10, 0x7F10,
+ 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F10, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EE0,
+ 0x7F50, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F70, 0x7EB0, 0x7A40, 0x7550, 0x7060, 0x6B70, 0x6680, 0x6000, 0x5920, 0x5100, 0x4810,
+ 0x3F50, 0x3580, 0x2CF0, 0x2470, 0x1BE0, 0x1420, 0x0CF0, 0x0610, 0xFF90, 0xF9A0, 0xF3C0, 0xEE70, 0xEAE0, 0xE780, 0xE410, 0xE1A0,
+ 0xDF40, 0xDDC0, 0xDC90, 0xDB60, 0xDAF0, 0xDAC0, 0xDAE0, 0xDB00, 0xDC20, 0xDD90, 0xDF10, 0xE170, 0xE480, 0xE770, 0xEB70, 0xEDC0,
+ 0xF030, 0xF2D0, 0xF500, 0xF780, 0xFAB0, 0xFDA0, 0x0020, 0x01B0, 0x0310, 0x0360, 0x0350, 0x0310, 0x0130, 0xFF60, 0xFC80, 0xF930,
+ 0xF560, 0xF0A0, 0xEB50, 0xE530, 0xDEC0, 0xD860, 0xD140, 0xC900, 0xC020, 0xB6A0, 0xAD60, 0xA360, 0x9930, 0x8FE0, 0x8940, 0x8640,
+ 0x8540, 0x84F0, 0x84D0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84D0, 0x84F0, 0x8530,
+ 0x85A0, 0x85F0, 0x8600, 0x85D0, 0x85D0, 0xB680, 0xCEF0, 0xE410, 0xF290, 0xFBF0, 0x0370, 0x0E60, 0x1E00, 0x2E30, 0x3760, 0x2AD0,
+ 0xFE30, 0xA990, 0x84B0, 0x8460, 0x8440, 0x8420, 0x8410, 0x8400, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83E0, 0x83F0, 0x8400,
+ 0x8420, 0x8440, 0x8460, 0x8470, 0x8480, 0x8490, 0x84A0, 0x84B0, 0x84E0, 0x8520, 0x8520, 0x84E0, 0x84A0, 0x8470, 0x8460, 0x8440,
+ 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0,
+ 0x83A0, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8350, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8390, 0x8330, 0x8390, 0x8390,
+ 0x8390, 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x8370,
+ 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x8370, 0x83A0, 0x83A0, 0x83A0, 0x8390, 0x8390,
+ 0x8390, 0x83C0, 0x83B0, 0x8380, 0x8380, 0x8390, 0x8380, 0x8370, 0x8370, 0x8350, 0x8360, 0x8360, 0x8370, 0x8350, 0x8350, 0x8350,
+ 0x8360, 0x8340, 0x8340, 0x8340, 0x8350, 0x8340, 0x8340, 0x8370, 0x8360, 0x8340, 0x8340, 0x8380, 0x8350, 0x8350, 0x8350, 0x8380,
+ 0x8350, 0x8360, 0x8380, 0x8370, 0x8380, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83D0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83D0, 0x83D0,
+ 0x8390, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8410, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8430,
+ 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8490, 0x84A0, 0x84D0, 0x8520, 0x8670, 0x8F20, 0xA190, 0xB330, 0xC370, 0xD2E0, 0xE080,
+ 0xECF0, 0xF7F0, 0x0410, 0x0F20, 0x1C20, 0x2A40, 0x3950, 0x4890, 0x56A0, 0x6410, 0x7080, 0x7C60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00,
+ 0x7F70, 0x7F10, 0x7EB0, 0x7EC0, 0x7ED0, 0x7F30, 0x7F00, 0x7EA0, 0x7ED0, 0x7EE0, 0x7F20, 0x7F20, 0x7E90, 0x7EE0, 0x7EE0, 0x7F10,
+ 0x7F10, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7E90, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F00, 0x7EF0, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F10, 0x7C00, 0x6F50, 0x6410, 0x59B0, 0x5020, 0x46F0, 0x3E30, 0x3580, 0x2D20, 0x2620, 0x2190, 0x21B0, 0x27D0,
+ 0x3590, 0x4C30, 0x69F0, 0x7EF0, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F00, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F40,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F50, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F40, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F10,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F10, 0x48C0, 0x16C0, 0xEEC0, 0xD730, 0xD1D0, 0xDED0, 0xFA00,
+ 0x20F0, 0x4740, 0x6880, 0x7E50, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F10, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F00, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F00,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F20,
+ 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7560, 0x6310, 0x4E30, 0x3670, 0x1D20, 0x02A0, 0xE730, 0xCC50, 0xAF20,
+ 0x9450, 0x8690, 0x84E0, 0x84C0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430,
+ 0x8460, 0x8430, 0x8440, 0x8490, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8490, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470,
+ 0x8470, 0x8480, 0x84B0, 0x84A0, 0x84B0, 0x84C0, 0x84E0, 0x8520, 0x85F0, 0x8C10, 0xA380, 0xBDB0, 0xDA90, 0xF5B0, 0x0FE0, 0x27C0,
+ 0x3D50, 0x5030, 0x5F70, 0x6CA0, 0x7610, 0x7DE0, 0x7EF0, 0x7F10, 0x7F00, 0x7EA0, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7E90, 0x7F30,
+ 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7D40, 0x7590, 0x6E20, 0x66C0, 0x5F80, 0x5870, 0x5030, 0x4920, 0x4210, 0x3B90, 0x35E0,
+ 0x3080, 0x2BF0, 0x2740, 0x2180, 0x1A10, 0x0FB0, 0x0130, 0xEF70, 0xDAC0, 0xC380, 0xAEC0, 0x9D00, 0x8F30, 0x8870, 0x8630, 0x85B0,
+ 0x8510, 0x84F0, 0x84C0, 0x84C0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84D0, 0x84F0,
+ 0x8510, 0x8530, 0x8580, 0x8610, 0x8730, 0x8990, 0x8CB0, 0x90D0, 0x9420, 0x9770, 0x9B30, 0x9F30, 0xA510, 0xACD0, 0xB630, 0xC250,
+ 0xD080, 0xE060, 0xF160, 0x0450, 0x1990, 0x2FF0, 0x49D0, 0x6130, 0x76F0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7ED0, 0x7EE0,
+ 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EA0, 0x7F00,
+ 0x7EF0, 0x7F00, 0x7F00, 0x7EC0, 0x7F20, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7F50, 0x7F00,
+ 0x7F20, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7ED0, 0x7EE0, 0x7ED0, 0x7F60, 0x7F00, 0x7EC0,
+ 0x7ED0, 0x7ED0, 0x7EF0, 0x7F00, 0x7E90, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EE0, 0x7F00, 0x7F10, 0x7F00, 0x7E90, 0x7ED0,
+ 0x7F00, 0x7EE0, 0x7EF0, 0x7EC0, 0x7F20, 0x7F20, 0x7F10, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F00, 0x7EE0, 0x7EC0,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F40, 0x7F20, 0x7F10, 0x7EF0, 0x7EE0, 0x7F40, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7F50,
+ 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F50, 0x7EF0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7EE0,
+ 0x7E90, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7EF0, 0x7F00, 0x7F00, 0x7EE0,
+ 0x7F50, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7EE0, 0x7F80, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F70,
+ 0x7F00, 0x7DD0, 0x3C90, 0xFB60, 0xB160, 0x8580, 0x8490, 0x8470, 0x8450, 0x8440, 0x8440, 0x8440, 0x8450, 0x8470, 0x8490, 0x84F0,
+ 0x9370, 0xD410, 0x0D20, 0x4250, 0x7200, 0x7EA0, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EA0,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F10, 0x7F60,
+ 0x7F00, 0x7F20, 0x7F00, 0x7F00, 0x7F90, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F30, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7F40, 0x7ED0,
+ 0x7E90, 0x7EF0, 0x7EE0, 0x7F30, 0x7EE0, 0x7EA0, 0x7ED0, 0x7F10, 0x7F20, 0x7F20, 0x7E90, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F00,
+ 0x7F20, 0x7EF0, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F00, 0x7F40, 0x7F40, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7F10, 0x7EF0, 0x7F80,
+ 0x7F10, 0x7F20, 0x7F00, 0x7A10, 0x6F90, 0x64F0, 0x5920, 0x4C30, 0x3FB0, 0x32C0, 0x25C0, 0x18C0, 0x0CC0, 0x01C0, 0xF830, 0xF0D0,
+ 0xEBC0, 0xEA10, 0xEB80, 0xEF50, 0xF770, 0x0040, 0x0C10, 0x18A0, 0x2660, 0x36F0, 0x45B0, 0x54E0, 0x63D0, 0x7110, 0x7C30, 0x7EC0,
+ 0x7F40, 0x7F10, 0x7F20, 0x7EF0, 0x7F00, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F50,
+ 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7F00, 0x7F10, 0x7F00, 0x7EE0, 0x7F70, 0x7EF0, 0x7EB0, 0x7F00, 0x7F10, 0x7F70, 0x7F00,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7EE0, 0x7EF0, 0x7F10, 0x7F10, 0x7EA0, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7E90,
+ 0x7F10, 0x7EF0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F90,
+ 0x7F20, 0x7F10, 0x7F20, 0x7F00, 0x7F80, 0x7F10, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F20, 0x7F10,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20,
+ 0x7EF0, 0x7F10, 0x7F00, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F30,
+ 0x7F30, 0x7EE0, 0x5370, 0x2A50, 0x02D0, 0xE320, 0xC800, 0xAFF0, 0x9B90, 0x8BE0, 0x8630, 0x8540, 0x84E0, 0x84B0, 0x84A0, 0x8490,
+ 0x8480, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8440, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8470, 0x8440, 0x8440, 0x8450, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8400, 0x8440, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8400, 0x8400,
+ 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83E0, 0x83E0, 0x83F0,
+ 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0,
+ 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83E0, 0x8390, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400,
+ 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8490,
+ 0x8490, 0x8480, 0x8480, 0x8440, 0x84A0, 0x84A0, 0x84C0, 0x84D0, 0x84F0, 0x8530, 0x85D0, 0x8840, 0x9210, 0xA0C0, 0xB000, 0xC030,
+ 0xF970, 0x0860, 0x1820, 0x27C0, 0x3700, 0x4740, 0x5600, 0x6530, 0x7400, 0x7E10, 0x7F00, 0x7EE0, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F10, 0x7F40, 0x7EF0, 0x7F20, 0x7F40, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7F20,
+ 0x7F60, 0x7ED0, 0x7EB0, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7E90, 0x7EF0, 0x7F10, 0x7F20, 0x7F10, 0x7EB0, 0x7F00, 0x7F10, 0x7F10,
+ 0x7F10, 0x7EA0, 0x7F10, 0x7EF0, 0x7F20, 0x7F00, 0x7EC0, 0x7F30, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7F10, 0x7F20,
+ 0x7EF0, 0x7F80, 0x7F10, 0x7F20, 0x7F10, 0x7ED0, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EE0,
+ 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F30, 0x7EF0, 0x7E90, 0x7ED0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7EE0, 0x7F10, 0x7F10,
+ 0x7F00, 0x7EC0, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7EE0,
+ 0x7EF0, 0x7F70, 0x7F00, 0x7F20, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F00, 0x7EE0, 0x7F50, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7F70, 0x7F00, 0x7ED0, 0x7F10, 0x7F00, 0x7F30, 0x7EF0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F40,
+ 0x7F00, 0x7EB0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30, 0x7F00, 0x7F20, 0x7EF0,
+ 0x7F10, 0x7F40, 0x7EF0, 0x7F30, 0x7F30, 0x7F00, 0x7F90, 0x7F10, 0x7F10, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F90, 0x7730, 0x6600,
+ 0x5650, 0x47A0, 0x3AE0, 0x3050, 0x2730, 0x1FA0, 0x17E0, 0x0F40, 0x0570, 0xF960, 0xEC70, 0xDE40, 0xCF70, 0xC120, 0xB3A0, 0xA740,
+ 0x9CC0, 0x9190, 0x8A40, 0x8660, 0x8530, 0x84E0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460,
+ 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410,
+ 0x8420, 0x8430, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8490, 0x84A0, 0x84E0, 0x8560, 0x88B0, 0x9A70, 0xACC0, 0xBD40, 0xCB60,
+ 0xD830, 0xE2A0, 0xEBF0, 0xF360, 0xF980, 0xFED0, 0x0300, 0x0620, 0x08C0, 0x0A30, 0x0C30, 0x0DE0, 0x0ED0, 0x1010, 0x1080, 0x11D0,
+ 0x11D0, 0x1110, 0x10F0, 0x1000, 0x0F10, 0x0D70, 0x0BE0, 0x0BB0, 0x0AE0, 0x0AC0, 0x0A60, 0x09C0, 0x08F0, 0x0740, 0x0510, 0x0230,
+ 0xFE60, 0xFA40, 0xF600, 0xF150, 0xEC30, 0xE5E0, 0xDF30, 0xD880, 0xD160, 0xC9D0, 0xC250, 0xBAE0, 0xB2C0, 0xAAB0, 0xA290, 0x99C0,
+ 0x9250, 0x8C50, 0x8880, 0x8680, 0x8590, 0x8530, 0x8500, 0x84E0, 0x84D0, 0x84B0, 0x84A0, 0x84A0, 0x8490, 0x8480, 0x8480, 0x8460,
+ 0x8450, 0x8440, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x8410, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83C0,
+ 0x83C0, 0x83E0, 0x83C0, 0x83C0, 0x83D0, 0x83C0, 0x83D0, 0x83F0, 0x8400, 0x83D0, 0x83E0, 0x8390, 0x83E0, 0x83F0, 0x8400, 0x83F0,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450,
+ 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8450,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83D0,
+ 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83F0, 0x83F0, 0x83F0,
+ 0x8420, 0x8400, 0x8410, 0x8420, 0x8420, 0x8430, 0x8440, 0x8450, 0x8450, 0x8460, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8490,
+ 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410,
+ 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420,
+ 0x8430, 0x8430, 0x8460, 0x8440, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8450, 0x8460, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8470, 0x84A0,
+ 0x84B0, 0x84D0, 0x8510, 0x8620, 0x9000, 0xA780, 0xBE40, 0xD390, 0xE950, 0xFC10, 0x0C70, 0x1C40, 0x2AE0, 0x37E0, 0x43B0, 0x4EA0,
+ 0x58C0, 0x6150, 0x6860, 0x6DD0, 0x7280, 0x7610, 0x78B0, 0x7B20, 0x7C40, 0x7D50, 0x7DC0, 0x7E10, 0x7E50, 0x7E90, 0x7EA0, 0x7EC0,
+ 0x7EB0, 0x7EB0, 0x7E70, 0x7E40, 0x7DF0, 0x7D20, 0x7CA0, 0x7C30, 0x7C30, 0x7C90, 0x7D40, 0x7E40, 0x7F00, 0x7F20, 0x7F20, 0x7EF0,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F00, 0x7F50, 0x7F30, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F30, 0x7F20, 0x7F00, 0x7F00, 0x7EB0,
+ 0x7F00, 0x7ED0, 0x7F10, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F60, 0x7F00, 0x7ED0, 0x7EF0, 0x7F00, 0x7F40,
+ 0x7EF0, 0x7EB0, 0x7EF0, 0x7EF0, 0x7F30, 0x7F20, 0x7EC0, 0x7F40, 0x7F10, 0x7F20, 0x7EE0, 0x7E90, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F10,
+ 0x7EB0, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7C10, 0x71B0, 0x67E0, 0x5F80, 0x56F0, 0x4FE0, 0x49E0, 0x4450, 0x4090, 0x3D60,
+ 0x3A80, 0x3830, 0x35B0, 0x33E0, 0x3240, 0x2FF0, 0x2E60, 0x2B20, 0x2890, 0x24C0, 0x2040, 0x1C40, 0x1790, 0x12F0, 0x0DF0, 0x0850,
+ 0x03B0, 0xFEE0, 0xF8F0, 0xF350, 0xEDB0, 0xE900, 0xE4B0, 0xE180, 0xDEA0, 0xDCF0, 0xDD10, 0xDE10, 0xE0A0, 0xE440, 0xE910, 0xEEA0,
+ 0xF520, 0xFC90, 0x0330, 0x0900, 0x0E50, 0x12D0, 0x16E0, 0x19E0, 0x1CA0, 0x1F70, 0x21C0, 0x2400, 0x25D0, 0x27A0, 0x29F0, 0x3760,
+ 0x3DB0, 0x4470, 0x4BA0, 0x5410, 0x5B00, 0x6100, 0x6680, 0x6A30, 0x6DA0, 0x6F40, 0x7130, 0x72E0, 0x7460, 0x7740, 0x7A40, 0x7D80,
+ 0x7EE0, 0x7F00, 0x7EF0, 0x7F10, 0x7F80, 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F80, 0x7F10, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F70, 0x7EF0,
+ 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F00, 0x7ED0, 0x7EB0, 0x7EE0, 0x7F50, 0x7F10, 0x7E70, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0,
+ 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7EA0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F30, 0x7F00, 0x7A40, 0x7610, 0x7290, 0x6E20, 0x69D0, 0x63F0, 0x5CA0, 0x53A0,
+ 0x4890, 0x3F30, 0x34C0, 0x2A70, 0x1FF0, 0x15A0, 0x0BE0, 0x02D0, 0xF970, 0xF0A0, 0xE7E0, 0xDFA0, 0xB9E0, 0xB030, 0xA5D0, 0x9AA0,
+ 0x9040, 0x88E0, 0x85E0, 0x8520, 0x84E0, 0x84C0, 0x84A0, 0x8490, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8480,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84C0, 0x8530, 0x8AF0,
+ 0xAE50, 0xCF10, 0xEC50, 0x0560, 0x19C0, 0x2950, 0x35C0, 0x3DF0, 0x4550, 0x4C70, 0x5430, 0x5D60, 0x6690, 0x70A0, 0x79E0, 0x7F50,
+ 0x7F10, 0x7EC0, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7EA0, 0x7ED0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EC0, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F00, 0x7EE0,
+ 0x7F50, 0x7F10, 0x7F20, 0x7EF0, 0x7D30, 0x6DF0, 0x5DF0, 0x4CF0, 0x3C30, 0x2A90, 0x18F0, 0x07C0, 0xF560, 0xE540, 0xD5A0, 0xC6B0,
+ 0xB920, 0xABB0, 0x9E90, 0x9170, 0x88C0, 0x85C0, 0x84F0, 0x84D0, 0x84B0, 0x8490, 0x8490, 0x8480, 0x8470, 0x8460, 0x8460, 0x8450,
+ 0x8490, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8450, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8400, 0x8420, 0x8420,
+ 0x8430, 0x8420, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x84A0, 0x8470, 0x8470, 0x8470, 0x8490, 0x84B0, 0x84D0, 0x8510,
+ 0x8610, 0x8C40, 0x9F60, 0xB150, 0xC400, 0xD3C0, 0xE330, 0xF180, 0xFE00, 0x09C0, 0x13D0, 0x1C30, 0x22B0, 0x2810, 0x2BD0, 0x2EF0,
+ 0x32A0, 0x36D0, 0x3CD0, 0x44B0, 0x4EA0, 0x5A50, 0x66A0, 0x71C0, 0x7B50, 0x7EF0, 0x7F60, 0x7EE0, 0x7ED0, 0x7F10, 0x7F20, 0x7F80,
+ 0x7EF0, 0x7EE0, 0x7F00, 0x7F10, 0x7F30, 0x7EB0, 0x7EA0, 0x7890, 0x6C70, 0x60F0, 0x56C0, 0x4DB0, 0x47A0, 0x43A0, 0x40B0, 0x3F00,
+ 0x3D00, 0x3A10, 0x3610, 0x31A0, 0x2E60, 0x2A80, 0x28B0, 0x27B0, 0x2860, 0x29E0, 0x2A40, 0x2960, 0x2650, 0x1FF0, 0x18B0, 0x0FE0,
+ 0x0670, 0xFDD0, 0xF5E0, 0xEE90, 0xE830, 0xE230, 0xDCA0, 0xD690, 0xD080, 0xCA70, 0xC570, 0xC1A0, 0xBEE0, 0xBD40, 0xBDE0, 0xBF80,
+ 0xC380, 0xC820, 0xCE50, 0xD5B0, 0xDD90, 0xE710, 0xF0B0, 0xFB30, 0x0660, 0x1140, 0x1C80, 0x26E0, 0x30A0, 0x3950, 0x40B0, 0x4740,
+ 0x4C10, 0x5110, 0x5530, 0x5840, 0x5BC0, 0x5E00, 0x60B0, 0x63C0, 0x65D0, 0x68E0, 0x6B80, 0x6E80, 0x7190, 0x73F0, 0x7670, 0x78C0,
+ 0x7B00, 0x7CE0, 0x7E40, 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7EF0,
+ 0x7EB0, 0x7E10, 0x7D40, 0x7C80, 0x7BF0, 0x7B70, 0x7B20, 0x7A90, 0x7A70, 0x7AA0, 0x7B90, 0x7C40, 0x7D70, 0x7E60, 0x7EE0, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F30, 0x7F00, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F40, 0x7F50, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F50, 0x7F30, 0x7F20, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20, 0x7F20, 0x7F20, 0x6790, 0x48A0, 0x2A70, 0x0E50, 0xF480, 0xDD60, 0xC6D0, 0xB480,
+ 0xA360, 0x93C0, 0x8990, 0x85F0, 0x8520, 0x84E0, 0x84C0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8480, 0x84C0,
+ 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x84D0, 0x84B0, 0x84E0, 0x8530, 0x8690, 0x8EB0, 0xA060, 0xB150, 0xC2D0, 0xD4B0, 0xE7B0,
+ 0xFC30, 0x11E0, 0x29E0, 0x3F70, 0x50E0, 0x5C90, 0x5FB0, 0x5920, 0x46C0, 0x2810, 0xFEF0, 0xCAC0, 0x9860, 0x8530, 0x84B0, 0x8490,
+ 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8410, 0x8470, 0x8480, 0x84B0, 0x8520, 0x91E0, 0xBC50, 0xD5C0, 0xE310,
+ 0xE710, 0xE560, 0xE220, 0xE040, 0xE0D0, 0xE3A0, 0xE780, 0xEA50, 0xEB70, 0xE770, 0xDDD0, 0xCD40, 0xB5B0, 0x98F0, 0x86C0, 0x8500,
+ 0x84A0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8440, 0x8450, 0x8460, 0x8480,
+ 0x84A0, 0x84D0, 0x8550, 0x8EE0, 0xB030, 0xD000, 0xF050, 0x10E0, 0x3090, 0x4E50, 0x6930, 0x7CA0, 0x7F10, 0x7F00, 0x7EA0, 0x7EF0,
+ 0x7EF0, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F00, 0x7ED0, 0x7EF0, 0x7EA0, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F30, 0x7EE0, 0x7F40, 0x7F10, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0,
+ 0x7EF0, 0x7EF0, 0x7F60, 0x7ED0, 0x7ED0, 0x7F00, 0x7F00, 0x7F50, 0x7ED0, 0x7EC0, 0x7F10, 0x7F10, 0x7F30, 0x7EC0, 0x7E90, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7EC0, 0x7F10, 0x7EF0, 0x7EE0, 0x7F10, 0x7F00, 0x7F30, 0x7F00,
+ 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F80, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F70, 0x7F00, 0x7F10,
+ 0x7EF0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EB0, 0x7EE0, 0x7ED0, 0x7F70, 0x7F20, 0x7EC0, 0x7ED0, 0x7EB0, 0x7F10, 0x7EF0, 0x7E90, 0x7EB0,
+ 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7E90, 0x7F00, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F20, 0x7F20,
+ 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7EE0, 0x7EF0, 0x7F50, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7ED0, 0x7F10,
+ 0x7EF0, 0x7EE0, 0x7F50, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7EC0, 0x7EF0, 0x7F00, 0x7F50, 0x7ED0, 0x7EA0, 0x7EE0,
+ 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7EB0, 0x7F00, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EE0, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7ED0, 0x7F00, 0x7F40, 0x7EB0, 0x7F00,
+ 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F00, 0x7EF0, 0x7F00, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F40, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7F50, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7E80, 0x7C90, 0x7A30, 0x77A0, 0x74A0, 0x7150, 0x6DB0,
+ 0x69F0, 0x6650, 0x6270, 0x5EA0, 0x5A10, 0x55D0, 0x5120, 0x4BB0, 0x46E0, 0x4000, 0x39B0, 0x3290, 0x2AF0, 0x23F0, 0x1D00, 0x15C0,
+ 0x0EF0, 0x0710, 0xFFB0, 0xF880, 0xF170, 0xEB20, 0xE4F0, 0xDF90, 0xDAC0, 0xD5B0, 0xD1C0, 0xCD30, 0xC970, 0xC5C0, 0xC1D0, 0xBE60,
+ 0xBA00, 0xB6A0, 0xB2F0, 0xAF60, 0xAB90, 0xA7D0, 0xA450, 0xA0B0, 0x9CC0, 0x9930, 0x9530, 0x9160, 0x8D70, 0x8A50, 0x8860, 0x8700,
+ 0x8640, 0x85C0, 0x8570, 0x8540, 0x8520, 0x8510, 0x8500, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0,
+ 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x84F0, 0x8520, 0x84D0, 0x84C0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0,
+ 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84A0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84D0, 0x84E0, 0x84F0, 0x8520, 0x8580,
+ 0x8670, 0x8940, 0x9190, 0x9F20, 0xAC70, 0xBAC0, 0xC990, 0xD870, 0xE720, 0xF440, 0x0090, 0x0B80, 0x1670, 0x2050, 0x2850, 0x3000,
+ 0x3480, 0x35D0, 0x3510, 0x3100, 0x2BA0, 0x24B0, 0x1E50, 0x18A0, 0x1400, 0x1190, 0x1170, 0x13C0, 0x1880, 0x1F90, 0x2800, 0x2F90,
+ 0x3670, 0x3D40, 0x4260, 0x4650, 0x48F0, 0x4960, 0x48C0, 0x4410, 0x3D20, 0x3440, 0x29B0, 0x1F90, 0x1420, 0x0840, 0xFC10, 0xEF70,
+ 0xE090, 0xD110, 0xC090, 0xAEE0, 0x9B40, 0x8A60, 0x8550, 0x84D0, 0x84B0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8420,
+ 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8420,
+ 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8460, 0x8450, 0x8460, 0x8470, 0x8470, 0x8480,
+ 0x84A0, 0x84D0, 0x8550, 0x8C10, 0xAB40, 0xC8B0, 0xE510, 0xFC50, 0x0FB0, 0x1EF0, 0x2AA0, 0x32C0, 0x3790, 0x3A80, 0x3AC0, 0x3960,
+ 0x3540, 0x2EF0, 0x2610, 0x19B0, 0x0B00, 0xF870, 0xE2F0, 0xCC60, 0xB210, 0x98B0, 0x87D0, 0x8500, 0x84C0, 0x8490, 0x8480, 0x8470,
+ 0x8450, 0x8450, 0x8440, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450,
+ 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x8490, 0x84A0, 0x8490, 0x8490, 0x8480,
+ 0x84A0, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8450, 0x8450, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430, 0x8420, 0x8420, 0x8420,
+ 0x8420, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8450, 0x8440,
+ 0x8440, 0x8460, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8480, 0x8480, 0x8480,
+ 0x8480, 0x8480, 0x8480, 0x8480, 0x8470, 0x8470, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8450, 0x8460,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8480, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8440,
+ 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8490, 0x8450, 0x8450, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460,
+ 0x8450, 0x8450, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8460, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8460, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490,
+ 0x84B0, 0x84D0, 0x84F0, 0x8540, 0x8630, 0x8960, 0x9230, 0x9DB0, 0xA810, 0xB270, 0xBBD0, 0xC560, 0xCE70, 0xD8C0, 0xE260, 0xEBD0,
+ 0xF5C0, 0xFE90, 0x0690, 0x0CB0, 0x1130, 0x1560, 0x1930, 0x1D70, 0x21C0, 0x2570, 0x2980, 0x2D60, 0x3140, 0x33B0, 0x3510, 0x3620,
+ 0x3500, 0x3270, 0x2DA0, 0x26C0, 0x1E90, 0x1400, 0x0800, 0xFB40, 0xEB80, 0xDD90, 0xCF10, 0xC0E0, 0xB3A0, 0xA700, 0x9B50, 0x90A0,
+ 0x8900, 0x85C0, 0x8500, 0x84C0, 0x84A0, 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8400, 0x8400,
+ 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83D0,
+ 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x8400, 0x8400, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x8400, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x83C0, 0x8410, 0x8410, 0x8410, 0x8440, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8440, 0x8430, 0x8440, 0x8450,
+ 0x8450, 0x8460, 0x8470, 0x8470, 0x8490, 0x84A0, 0x84C0, 0x8500, 0x85C0, 0x8730, 0x8B90, 0x9360, 0x9A90, 0xA260, 0xAB90, 0xB6D0,
+ 0xC420, 0xD270, 0xE120, 0xEEF0, 0xFB60, 0x03C0, 0x0810, 0x0770, 0x0360, 0xFBE0, 0xF1B0, 0xE570, 0xD790, 0xC890, 0xBF00, 0xBDF0,
+ 0xCA50, 0xE430, 0x0B90, 0x39A0, 0x66C0, 0x7EF0, 0x7EA0, 0x7EC0, 0x7EC0, 0x7F10, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F10,
+ 0x7EA0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F00,
+ 0x7F60, 0x7EF0, 0x7F20, 0x7F00, 0x7F00, 0x7F90, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F60, 0x7EE0, 0x7ED0, 0x7F10, 0x7F00, 0x7F40,
+ 0x7EC0, 0x7E90, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F50, 0x7ED0, 0x7E70, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7EC0, 0x7F10, 0x7EF0,
+ 0x7EE0, 0x7EF0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7EF0, 0x7F00, 0x7F10, 0x7F00, 0x7F30, 0x7EE0, 0x7EF0,
+ 0x7F30, 0x7F10, 0x7F60, 0x7F10, 0x7F20, 0x7F20, 0x7EF0, 0x7F70, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10, 0x7F00,
+ 0x7F00, 0x7F50, 0x7F10, 0x7EA0, 0x7EC0, 0x7ED0, 0x7F30, 0x7EE0, 0x7E90, 0x7ED0, 0x7EE0, 0x7F20, 0x7F10, 0x7ED0, 0x7EF0, 0x7EE0,
+ 0x7EF0, 0x7ED0, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7EE0, 0x7E90, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F40, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EE0, 0x7F50, 0x7EF0, 0x7F20, 0x7F20, 0x7EF0, 0x7F80, 0x7F10, 0x7F20, 0x7F10,
+ 0x7EF0, 0x7F70, 0x7F00, 0x7F10, 0x7EF0, 0x7EE0, 0x7F60, 0x7F10, 0x7D30, 0x6860, 0x56E0, 0x4670, 0x3700, 0x29F0, 0x1EF0, 0x1430,
+ 0x09B0, 0x0040, 0xF740, 0xEF10, 0xE720, 0xDF70, 0xD9E0, 0xD460, 0xD0A0, 0xCCD0, 0xC970, 0xC620, 0xC2C0, 0xBEC0, 0xB9E0, 0xB4E0,
+ 0xB040, 0xAB20, 0xA6F0, 0xA460, 0xA270, 0xA2D0, 0xA3A0, 0xA630, 0xAA30, 0xAF90, 0xB700, 0xC180, 0xCEF0, 0xDF80, 0xF340, 0x0A40,
+ 0x24C0, 0x3EC0, 0x5690, 0x6990, 0x77E0, 0x7E70, 0x7F70, 0x7EF0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7ED0, 0x7F10, 0x7F00,
+ 0x7F30, 0x7ED0, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F30, 0x7F00, 0x7EA0, 0x7F10, 0x7E10, 0x6C70, 0x5D90, 0x5200, 0x4890, 0x4260, 0x3E50,
+ 0x3D50, 0x3E10, 0x4140, 0x4560, 0x4A00, 0x4F40, 0x5340, 0x5590, 0x5630, 0x5470, 0x5260, 0x4F50, 0x4C30, 0x49F0, 0x48F0, 0x4A10,
+ 0x4BC0, 0x4DE0, 0x5110, 0x5370, 0x56A0, 0x5940, 0x5CB0, 0x6070, 0x6540, 0x6B10, 0x70F0, 0x7740, 0x7CC0, 0x7E90, 0x7EB0, 0x7EF0,
+ 0x7F50, 0x7F10, 0x7E70, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0, 0x7ED0, 0x7F00, 0x7F00, 0x7010, 0x5E00, 0x4B20, 0x3900, 0x2850,
+ 0x1C90, 0x1340, 0x0F40, 0x0E90, 0x1120, 0x1600, 0x1BD0, 0x22B0, 0x2960, 0x2E60, 0x31B0, 0x3270, 0x30C0, 0x2D50, 0x2A10, 0x2860,
+ 0x2960, 0x2D90, 0x37F0, 0x4900, 0x5D50, 0x7200, 0x7F20, 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F60, 0x7F00, 0x7F00, 0x7F00, 0x7ED0,
+ 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F10, 0x7F40, 0x7ED0, 0x7EB0, 0x7F00, 0x7F00, 0x7F10, 0x7E90, 0x7EA0, 0x7F00, 0x7F10, 0x7F20,
+ 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F10, 0x7F20, 0x7EF0, 0x7EF0, 0x7F10, 0x7EF0, 0x7F30, 0x7F20,
+ 0x7F00, 0x7590, 0x6B50, 0x61F0, 0x5AE0, 0x57C0, 0x5A10, 0x6170, 0x6C60, 0x7890, 0x7EF0, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F20,
+ 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F20, 0x7200, 0x6030, 0x4F20, 0x3F70, 0x32A0, 0x28D0, 0x2130, 0x1C60, 0x1970, 0x18B0, 0x1A10, 0x1D30, 0x2350, 0x2C30,
+ 0x3860, 0x4760, 0x57A0, 0x68C0, 0x7660, 0x7E80, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x7EC0,
+ 0x7210, 0x63F0, 0x5470, 0x4480, 0x34E0, 0x2530, 0x1660, 0x07B0, 0xFB50, 0xF080, 0xE650, 0xDD70, 0xD550, 0xCD60, 0xC560, 0xBD70,
+ 0xB480, 0xABA0, 0xA1C0, 0x9630, 0x8B30, 0x8620, 0x8500, 0x84C0, 0x84B0, 0x8480, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450,
+ 0x8450, 0x8440, 0x8430, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8430,
+ 0x8420, 0x8420, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0,
+ 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8410, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400,
+ 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8460,
+ 0x8470, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0, 0x84B0, 0x84C0, 0x84C0, 0x84D0,
+ 0x84E0, 0x84F0, 0x8510, 0x8510, 0x8520, 0x8520, 0x8520, 0x8540, 0x8570, 0x8620, 0x8830, 0x8F00, 0x99A0, 0x9F60, 0xA220, 0xA020,
+ 0x9C50, 0x96C0, 0x9190, 0x8D80, 0x8B00, 0x89D0, 0x8990, 0x89C0, 0x8AF0, 0x8D30, 0x92A0, 0x9B90, 0xA6F0, 0xB5B0, 0xC700, 0xD7F0,
+ 0xE850, 0xF830, 0x0670, 0x1390, 0x1FF0, 0x2CE0, 0x38C0, 0x4690, 0x52C0, 0x5E40, 0x68B0, 0x71B0, 0x7970, 0x7E40, 0x7F50, 0x7F20,
+ 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7E90, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7E70, 0x7EC0, 0x7ED0, 0x7F10, 0x7F20, 0x7EC0,
+ 0x7F10, 0x7F10, 0x7F10, 0x7F10, 0x7EB0, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F40, 0x7F30, 0x7E00, 0x7540, 0x6B10, 0x5FF0,
+ 0x5360, 0x44C0, 0x35F0, 0x2520, 0x1240, 0xFF50, 0xEAB0, 0xD670, 0xC070, 0xAA80, 0x9450, 0x8750, 0x8510, 0x84D0, 0x84A0, 0x8490,
+ 0x8480, 0x8470, 0x8460, 0x8450, 0x8440, 0x8440, 0x8430, 0x8420, 0x8420, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83E0, 0x8400, 0x83D0,
+ 0x83C0, 0x83D0, 0x83C0, 0x83B0, 0x83B0, 0x83E0, 0x83B0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83F0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83B0, 0x83A0, 0x83B0,
+ 0x83A0, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83B0, 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0,
+ 0x8400, 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84D0, 0x8520, 0x8640,
+ 0x8C30, 0x9C40, 0xAA60, 0xB710, 0xC240, 0xEB00, 0xF3D0, 0xFBF0, 0x0380, 0x0C40, 0x1530, 0x1F60, 0x2A30, 0x3590, 0x4310, 0x5160,
+ 0x5FF0, 0x6E30, 0x7AB0, 0x7F00, 0x7F10, 0x7F60, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7E90, 0x7F10, 0x7EF0, 0x7F70,
+ 0x7F00, 0x7EA0, 0x7F00, 0x7F10, 0x7F20, 0x7EE0, 0x7EA0, 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F10,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F50, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7F10, 0x7EE0,
+ 0x7F80, 0x7F10, 0x7F20, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7EF0, 0x7EF0, 0x7EE0, 0x7F40, 0x7F10, 0x7EE0, 0x7EE0, 0x7ED0, 0x7F50,
+ 0x7F20, 0x7EC0, 0x7ED0, 0x7ED0, 0x7F40, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7E90, 0x7F10, 0x7F20,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7EF0, 0x7F00, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x7F10,
+ 0x7F30, 0x7EF0, 0x7F00, 0x7EF0, 0x7F10, 0x7F60, 0x7F00, 0x7EF0, 0x7F20, 0x7F10, 0x7F90, 0x7EF0, 0x7EE0, 0x7EE0, 0x7EF0, 0x7F30,
+ 0x7F00, 0x7ED0, 0x7A80, 0x6A20, 0x5970, 0x4850, 0x3630, 0x23E0, 0x1140, 0xFE30, 0xE9B0, 0xD640, 0x8E50, 0x8670, 0x8500, 0x84D0,
+ 0x84B0, 0x84A0, 0x84B0, 0x8480, 0x8470, 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470,
+ 0x8460, 0x8460, 0x8470, 0x8460, 0x8470, 0x8470, 0x84A0, 0x8470, 0x8480, 0x8480, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84B0, 0x84B0,
+ 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84B0, 0x84C0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x8530,
+ 0x8520, 0x8570, 0x8630, 0x87A0, 0x8B70, 0x9260, 0x9AC0, 0xA240, 0xA9B0, 0xB2A0, 0xBA20, 0xC1F0, 0xC960, 0xD060, 0xD810, 0xE000,
+ 0xE8A0, 0xF1A0, 0xFBF0, 0x06E0, 0x1240, 0x1ED0, 0x2C30, 0x3A60, 0x4AC0, 0x5A50, 0x6970, 0x77C0, 0x7EF0, 0x7F10, 0x7F00, 0x7F60,
+ 0x7EF0, 0x7F30, 0x7F20, 0x7F00, 0x7F90, 0x7F00, 0x7F40, 0x7F10, 0x7EF0, 0x7F70, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F00, 0x7F50, 0x7F10,
+ 0x7EE0, 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7E70, 0x7ED0, 0x7EB0, 0x7F20, 0x7EF0, 0x7E90, 0x7EB0, 0x7F00, 0x7F10, 0x7F10, 0x7EA0,
+ 0x7ED0, 0x7F10, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F60,
+ 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F70, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7EF0, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F20, 0x7F20, 0x7F10, 0x7EF0, 0x7F00, 0x7F30,
+ 0x7F10, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F40, 0x7F20, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F40, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F50, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F10, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F30, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7EE0, 0x7F10, 0x7F30, 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F20,
+ 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F40, 0x7F30, 0x7460, 0x5E10, 0x42A0, 0x2420, 0x02E0, 0xDFC0, 0xBB80, 0x9760, 0x8580,
+ 0x84C0, 0x8490, 0x8470, 0x8460, 0x8450, 0x8440, 0x8430, 0x8430, 0x8410, 0x8410, 0x8420, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83E0,
+ 0x83E0, 0x83E0, 0x83E0, 0x8410, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x83F0, 0x83F0, 0x83F0, 0x83F0,
+ 0x83E0, 0x83F0, 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x83A0, 0x8390, 0x8390, 0x8380,
+ 0x8390, 0x8390, 0x83A0, 0x83A0, 0x83A0, 0x83A0, 0x83B0, 0x83C0, 0x83C0, 0x83D0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400,
+ 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8480, 0x8490, 0x84A0,
+ 0x84D0, 0x8570, 0x92F0, 0xB400, 0xD110, 0xE9B0, 0xFDC0, 0x0DB0, 0x1AB0, 0x26A0, 0x3260, 0x3FF0, 0x4F00, 0x5E00, 0x6CF0, 0x7A30,
+ 0x7F00, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F10, 0x7F30, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7EF0, 0x62A0, 0x3C70, 0x1460, 0xE820,
+ 0xB980, 0x8C80, 0x84E0, 0x84A0, 0x8480, 0x8470, 0x8460, 0x8460, 0x8460, 0x8460, 0x8460, 0x8470, 0x8470, 0x8470, 0x8490, 0x84B0,
+ 0x84F0, 0x8880, 0xB970, 0xEC10, 0x1C00, 0x46A0, 0x6800, 0x7E00, 0x7EA0, 0x7ED0, 0x7EB0, 0x7F20, 0x7F10, 0x7E90, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F60, 0x7EF0, 0x7F10,
+ 0x7F10, 0x7F00, 0x7F60, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F70, 0x7EE0, 0x7EC0, 0x7EF0, 0x7F10, 0x7F60, 0x7ED0, 0x7ED0, 0x7F00,
+ 0x7F00, 0x7F10, 0x7EB0, 0x7E70, 0x7EE0, 0x7EF0, 0x7F30, 0x7EC0, 0x7E90, 0x7F10, 0x7F00, 0x7F00, 0x7F10, 0x7EB0, 0x7F00, 0x7F10,
+ 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F00, 0x7F20, 0x7F00, 0x7F10, 0x7F10, 0x7EF0, 0x7F60, 0x7EF0, 0x7F10,
+ 0x7EF0, 0x7EF0, 0x7F80, 0x7F00, 0x7F20, 0x7EF0, 0x7EF0, 0x7F60, 0x7EE0, 0x7F10, 0x7EE0, 0x7EE0, 0x7F50, 0x7F10, 0x7EB0, 0x7EE0,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7EC0, 0x7EB0, 0x7EB0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10, 0x7EB0, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7EA0,
+ 0x7ED0, 0x7ED0, 0x7F00, 0x7EE0, 0x7E90, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7EA0, 0x7F00, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F40,
+ 0x7F10, 0x7F20, 0x7EF0, 0x7F00, 0x7F60, 0x7F20, 0x7F10, 0x7F10, 0x7EF0, 0x7F40, 0x7EF0, 0x7F10, 0x7EE0, 0x7EF0, 0x7F50, 0x7F00,
+ 0x7F00, 0x7F10, 0x7F10, 0x7F30, 0x7EF0, 0x7ED0, 0x7EF0, 0x7EE0, 0x7F50, 0x7ED0, 0x7EA0, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0,
+ 0x7EF0, 0x7F00, 0x7EF0, 0x7EF0, 0x7EB0, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7EC0, 0x7F40, 0x7F10, 0x7F10, 0x7F20, 0x7EF0, 0x7F20,
+ 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F60, 0x7F10, 0x7F10, 0x7C30, 0x6F60, 0x63F0, 0x5930, 0x4E20, 0x4440, 0x3A10, 0x2FF0, 0x26E0,
+ 0x1CE0, 0x1380, 0x0A00, 0x0140, 0xF8D0, 0xF030, 0xE860, 0xE0D0, 0xD990, 0xD400, 0xCE90, 0xCAB0, 0xC7D0, 0xC660, 0xC680, 0xC7D0,
+ 0xCA80, 0xCD10, 0xD0C0, 0xD570, 0xD920, 0xDCC0, 0xDF70, 0xE020, 0xDFE0, 0xDCC0, 0xD7D0, 0xD060, 0xC4E0, 0xB810, 0xA730, 0x93E0,
+ 0x8710, 0x84F0, 0x84B0, 0x8480, 0x8470, 0x8450, 0x8430, 0x8420, 0x8410, 0x83F0, 0x83F0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83C0,
+ 0x83C0, 0x83C0, 0x83C0, 0x83D0, 0x83D0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400,
+ 0x8410, 0x8410, 0x8410, 0x8420, 0x8430, 0x8430, 0x8440, 0x8440, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x84B0, 0x84C0, 0x84E0,
+ 0x8520, 0x8580, 0x8690, 0x8890, 0x8C50, 0x9140, 0x96C0, 0x9C20, 0xA150, 0xA640, 0xAB20, 0xB050, 0xB510, 0xB980, 0xBE10, 0xC320,
+ 0xC800, 0xCDC0, 0xD310, 0xD960, 0xE0C0, 0xE890, 0xF150, 0xFAB0, 0x0520, 0x10D0, 0x1C70, 0x29A0, 0x3720, 0x4670, 0x54C0, 0x62C0,
+ 0x7090, 0x7C10, 0x7F00, 0x7EF0, 0x7E90, 0x7F00, 0x7ED0, 0x7F10, 0x7F20, 0x7EA0, 0x7F00, 0x7F10, 0x7F30, 0x7EE0, 0x7EA0, 0x7EF0,
+ 0x7F10, 0x7F20, 0x7F10, 0x7E90, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7EE0, 0x7EF0, 0x7F30, 0x7F20, 0x7F60, 0x7F10,
+ 0x7F10, 0x7F10, 0x7F00, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7EF0, 0x7F80, 0x7F00, 0x7F00, 0x7F10, 0x7F00, 0x7F70, 0x7F10, 0x7EB0,
+ 0x7EE0, 0x7ED0, 0x7F50, 0x7F20, 0x7ED0, 0x7ED0, 0x7EE0, 0x7F30, 0x7F10, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7E70, 0x7EC0,
+ 0x7F10, 0x7F20, 0x7F20, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7EB0, 0x7F20, 0x7F00, 0x7F10, 0x7F20, 0x7F10, 0x7F10, 0x7F00,
+ 0x7EF0, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F20, 0x7EF0, 0x7F10, 0x7F20,
+ 0x7F10, 0x7F10, 0x7F10, 0x7F20, 0x7F40, 0x7F30, 0x7F30, 0x7F00, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F10, 0x7F30, 0x7F20, 0x7F40,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F50, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F30, 0x7F40, 0x7F40, 0x7F30,
+ 0x75F0, 0x6AC0, 0x6080, 0x5750, 0x5100, 0x4BD0, 0x4710, 0x41D0, 0x3BC0, 0x34C0, 0x2CD0, 0x24A0, 0x1B50, 0x1300, 0x0B10, 0x0400,
+ 0xFD80, 0xF790, 0xF270, 0xEDD0, 0xEA10, 0xE6D0, 0xE460, 0xE250, 0xE0F0, 0xDF30, 0xDD50, 0xDB60, 0xD8A0, 0xD490, 0xCDF0, 0xC5A0,
+ 0xBAD0, 0xAD50, 0x9D00, 0x8C90, 0x85F0, 0x84F0, 0x84B0, 0x8490, 0x8480, 0x8470, 0x8460, 0x8450, 0x8450, 0x8440, 0x8430, 0x8430,
+ 0x8420, 0x8420, 0x8410, 0x8400, 0x8410, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400, 0x8400,
+ 0x8410, 0x8410, 0x8430, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440, 0x8460, 0x8460, 0x8460, 0x84A0, 0x8480, 0x84B0, 0x8490,
+ 0x84B0, 0x84C0, 0x84E0, 0x8510, 0x85D0, 0x8840, 0x9170, 0x9F60, 0xAC30, 0xB920, 0xC600, 0xD2A0, 0xDF50, 0xED00, 0xF9A0, 0x0650,
+ 0x12F0, 0x1F70, 0x2BF0, 0x37E0, 0x4350, 0x4EF0, 0x5A40, 0x6550, 0x6F30, 0x7870, 0x7EA0, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F30,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7F10, 0x7F20, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7F20, 0x7F40, 0x7F50,
+ 0x7F30, 0x7FC0, 0x7F40, 0x7EF0, 0x7EF0, 0x7EF0, 0x7EF0, 0x7F30, 0x7E90, 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7EA0, 0x7EC0, 0x7EF0,
+ 0x7F10, 0x7EF0, 0x7E90, 0x7EB0, 0x7EE0, 0x7EF0, 0x7F10, 0x7EA0, 0x7F40, 0x7F10, 0x7F10, 0x7EF0, 0x7E90, 0x7F10, 0x7EE0, 0x7EE0,
+ 0x7EF0, 0x7F00, 0x7F30, 0x7F00, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F20, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7EF0, 0x7F30,
+ 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F20, 0x7EE0, 0x7F40, 0x7EE0, 0x7F00, 0x7EF0, 0x7F10, 0x7F70, 0x7F00, 0x7EC0, 0x7EF0, 0x7EF0,
+ 0x7F70, 0x7ED0, 0x7EA0, 0x7EE0, 0x7EF0, 0x7F10, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F10, 0x7EB0, 0x7F10, 0x7EE0, 0x7EF0,
+ 0x7F10, 0x7F00, 0x7EF0, 0x7F10, 0x7F20, 0x7F20, 0x7F00, 0x7F50, 0x7EF0, 0x7F20, 0x7EF0, 0x7F00, 0x7F60, 0x7EF0, 0x7F10, 0x7F20,
+ 0x7F20, 0x7F80, 0x7F10, 0x7EF0, 0x7F10, 0x7F10, 0x7F70, 0x7EF0, 0x7EE0, 0x7EF0, 0x7EF0, 0x7F60, 0x7F20, 0x6C80, 0x5570, 0x3F10,
+ 0x2BF0, 0x1DB0, 0x12E0, 0x0CA0, 0x0890, 0x0600, 0x0370, 0x0090, 0xFE00, 0xFB20, 0xF900, 0xF870, 0xFAB0, 0xFFA0, 0x06C0, 0x1050,
+ 0x1B20, 0x2680, 0x3230, 0x3D30, 0x46E0, 0x5060, 0x57C0, 0x5EB0, 0x6400, 0x6850, 0x6D30, 0x7160, 0x75C0, 0x7A10, 0x7DE0, 0x7F00,
+ 0x7F00, 0x7F70, 0x7F20, 0x7F40, 0x7ED0, 0x7F10, 0x7F60, 0x7EE0, 0x7ED0, 0x7F10, 0x7EF0, 0x7F50, 0x7F00, 0x7EE0, 0x7F00, 0x7D80,
+ 0x77F0, 0x7270, 0x6CE0, 0x6830, 0x64B0, 0x61F0, 0x5FF0, 0x5CF0, 0x59E0, 0x5540, 0x4E50, 0x4710, 0x3CC0, 0x32D0, 0x2780, 0x1BB0,
+ 0x1040, 0x0580, 0xFB90, 0xF3D0, 0xEE20, 0xEB30, 0xEB00, 0xEC40, 0xEE10, 0xEFF0, 0xF0B0, 0xEE40, 0xE9D0, 0xE310, 0xD8C0, 0xCE90,
+ 0xC210, 0xB520, 0xA890, 0x9C70, 0x92F0, 0x8CA0, 0x8970, 0x8820, 0x87B0, 0x86F0, 0x86F0, 0x8750, 0x87C0, 0x8890, 0x89E0, 0x8AF0,
+ 0x8BA0, 0x8B30, 0x8A20, 0x8910, 0x87B0, 0x86F0, 0x8650, 0x85D0, 0x8590, 0x8560, 0x8530, 0x8510, 0x8500, 0x84F0, 0x84E0, 0x84D0,
+ 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84A0, 0x84C0, 0x84A0, 0x84A0, 0x84A0, 0x8470,
+ 0x84B0, 0x84B0, 0x84C0, 0x84C0, 0x84C0, 0x84D0, 0x84C0, 0x84D0, 0x84D0, 0x84E0, 0x84E0, 0x84E0, 0x84E0, 0x84D0, 0x84E0, 0x84E0,
+ 0x84F0, 0x84F0, 0x8500, 0x8510, 0x8520, 0x8530, 0x8560, 0x85A0, 0x8620, 0x86B0, 0x87D0, 0x8940, 0x8B40, 0x8E00, 0x9140, 0x9450,
+ 0x9850, 0x9B70, 0x9F40, 0xA290, 0xA630, 0xA930, 0xAA90, 0xAC30, 0xACC0, 0xAC20, 0xAB50, 0xA970, 0xA7B0, 0xA5C0, 0xA590, 0xA460,
+ 0xA360, 0xA1E0, 0x9EC0, 0x98F0, 0x9030, 0x87E0, 0x8530, 0x84C0, 0x8490, 0x8480, 0x8460, 0x8440, 0x8430, 0x8420, 0x8410, 0x8400,
+ 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8450, 0x8450, 0x8420,
+ 0x8440, 0x8440, 0x8440, 0x8450, 0x8490, 0x8460, 0x8490, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x84A0, 0x84B0, 0x84C0, 0x84C0,
+ 0x84D0, 0x84D0, 0x84E0, 0x84C0, 0x84D0, 0x84C0, 0x84C0, 0x84B0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8490, 0x8480, 0x8470,
+ 0x8470, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450, 0x8470, 0x8450, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8430, 0x8430, 0x8430,
+ 0x8430, 0x8420, 0x8420, 0x8420, 0x8410, 0x8410, 0x8410, 0x8410, 0x8400, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x83E0, 0x83E0,
+ 0x83E0, 0x83D0, 0x83D0, 0x83D0, 0x83C0, 0x83C0, 0x83B0, 0x83B0, 0x83A0, 0x83A0, 0x8390, 0x8380, 0x8380, 0x8370, 0x8370, 0x8370,
+ 0x8370, 0x8370, 0x8360, 0x8370, 0x8370, 0x8370, 0x8380, 0x8380, 0x8390, 0x8390, 0x8390, 0x83A0, 0x83B0, 0x83B0, 0x83B0, 0x83C0,
+ 0x83C0, 0x83D0, 0x83D0, 0x83E0, 0x83E0, 0x83F0, 0x83F0, 0x8400, 0x8400, 0x8400, 0x8400, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420,
+ 0x8410, 0x8410, 0x83F0, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8410, 0x8420, 0x8420, 0x8430, 0x8430, 0x8430, 0x8440, 0x8440,
+ 0x8440, 0x8440, 0x8450, 0x8450, 0x8450, 0x8460, 0x8460, 0x8470, 0x8470, 0x8480, 0x8480, 0x8490, 0x8490, 0x8490, 0x84A0, 0x84A0,
+ 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84B0, 0x84A0, 0x8490, 0x8490, 0x8490, 0x8480, 0x8480, 0x8470, 0x8470, 0x8460,
+ 0x8460, 0x8450, 0x8460, 0x8450, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440, 0x8440,
+ 0x8450, 0x8450, 0x8460, 0x8470, 0x8480, 0x8490, 0x8490, 0x84B0, 0x84C0, 0x84E0, 0x8500, 0x8550, 0x85F0, 0x8770, 0x8AE0, 0x91C0,
+ 0x9950, 0xA140, 0xA940, 0xB210, 0xBC20, 0xC660, 0xD0D0, 0xDC90, 0xE8C0, 0xF580, 0x02C0, 0x1010, 0x1DF0, 0x2D40, 0x3B90, 0x49F0,
+ 0x5940, 0x67C0, 0x7530, 0x7E90, 0x7F20, 0x7F00, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F10, 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7EF0,
+ 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7B00, 0x61B0, 0x4950, 0x3100, 0x1890, 0x0380, 0xEFE0, 0xDDD0, 0xCC60, 0xBC10, 0xAC80, 0x9D60,
+ 0x8F90, 0x8740, 0x8540, 0x84E0, 0x84B0, 0x8490, 0x8490, 0x8470, 0x8470, 0x8460, 0x8460, 0x8470, 0x8460, 0x8460, 0x8460, 0x8450,
+ 0x8450, 0x8440, 0x8430, 0x8430, 0x8420, 0x8410, 0x8410, 0x8400, 0x8400, 0x83F0, 0x83F0, 0x83F0, 0x8400, 0x8410, 0x8420, 0x8430,
+ 0x8430, 0x8440, 0x8450, 0x8450, 0x8460, 0x84A0, 0x8470, 0x8490, 0x84B0, 0x8500, 0x87A0, 0x9FE0, 0xB640, 0xC630, 0xD170, 0xD810,
+ 0xDC20, 0xDDF0, 0xDED0, 0xDEA0, 0xDDA0, 0xDCC0, 0xDDA0, 0xE1C0, 0xEA50, 0xF930, 0x0CA0, 0x24C0, 0x3FF0, 0x5B60, 0x73B0, 0x7F40,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F30, 0x7F20, 0x7EF0, 0x7F30, 0x7F30, 0x7F20, 0x7F20, 0x7EF0,
+ 0x7F30, 0x7F20, 0x7F30, 0x7F30, 0x7F00, 0x7F20, 0x7F10, 0x7F30, 0x7F20, 0x7F40, 0x7F20, 0x7F30, 0x7F20, 0x7F40, 0x7F30, 0x7F30,
+ 0x7F20, 0x7F20, 0x7F30, 0x7F30, 0x7EF0, 0x7E90, 0x7F30, 0x7F20, 0x7F20, 0x7F00, 0x7E90, 0x7F10, 0x7EB0, 0x7EF0, 0x7EB0, 0x7E60,
+ 0x7ED0, 0x7ED0, 0x7F30, 0x7F20, 0x7F00, 0x7F50, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40,
+ 0x7F00, 0x7F20, 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7EE0, 0x7EC0, 0x7EE0, 0x7F60, 0x7EF0, 0x7EF0, 0x7F00, 0x7EE0, 0x7EF0, 0x7EF0,
+ 0x7E70, 0x7F10, 0x7EB0, 0x7F30, 0x7EE0, 0x7E90, 0x7ED0, 0x7F00, 0x7F00, 0x7F10, 0x7EA0, 0x7EC0, 0x7EC0, 0x7F10, 0x7F00, 0x7EA0,
+ 0x7EF0, 0x7F10, 0x7F20, 0x7EF0, 0x7EB0, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7EF0, 0x7EF0, 0x7F70,
+ 0x7F10, 0x7F40, 0x7F10, 0x7F10, 0x7F30, 0x7F10, 0x7F10, 0x7F00, 0x7EE0, 0x7F70, 0x7EF0, 0x7EE0, 0x7F00, 0x7F10, 0x7F70, 0x7F00,
+ 0x7ED0, 0x7F10, 0x7F00, 0x7F30, 0x7ED0, 0x7E90, 0x7F00, 0x7EF0, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7EC0,
+ 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F30, 0x7F00, 0x7F00, 0x7EF0, 0x7F10, 0x7F80,
+ 0x7F00, 0x7F40, 0x7F30, 0x7F00, 0x7F90, 0x7F10, 0x7F10, 0x7EE0, 0x7EF0, 0x7F50, 0x7F10, 0x7EF0, 0x7EF0, 0x7F00, 0x7F60, 0x7F10,
+ 0x7EB0, 0x7EB0, 0x7EC0, 0x7EF0, 0x7F10, 0x7E70, 0x7ED0, 0x7ED0, 0x7F20, 0x7F20, 0x7EC0, 0x7ED0, 0x7F00, 0x7F10, 0x7F10, 0x7EB0,
+ 0x7EE0, 0x7EF0, 0x7F10, 0x7F20, 0x7F00, 0x7F40, 0x7F20, 0x7F20, 0x7F10, 0x7F00, 0x7F20, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F40,
+ 0x7F10, 0x7F20, 0x7F20, 0x7F10, 0x7F50, 0x7EF0, 0x7F00, 0x7EF0, 0x7F00, 0x7F40, 0x7EF0, 0x7F10, 0x7F00, 0x7F20, 0x7F70, 0x7ED0,
+ 0x7EB0, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EC0, 0x7F10, 0x7F20, 0x7F40, 0x7EC0, 0x7A30, 0x7740, 0x74B0, 0x76C0, 0x7A10, 0x7D20,
+ 0x7EC0, 0x7ED0, 0x7F10, 0x7F00, 0x7F40, 0x7ED0, 0x7EB0, 0x7EF0, 0x7F10, 0x7F30, 0x7F00, 0x7EC0, 0x7F10, 0x7F10, 0x7F20, 0x7F00,
+ 0x7EA0, 0x7F00, 0x7EF0, 0x7EF0, 0x7F20, 0x7F00, 0x7F40, 0x7F10, 0x7F10, 0x7F40, 0x7F00, 0x7F30, 0x7F00, 0x7F00, 0x7F40, 0x7F10,
+ 0x7F70, 0x7F00, 0x7F20, 0x7F20, 0x7F00, 0x7F90, 0x7F00, 0x7F20, 0x7EF0, 0x7ED0, 0x7F70, 0x7EF0, 0x7F10, 0x7F10, 0x7F00, 0x7F70,
+ 0x7F10, 0x7EB0, 0x7EB0, 0x7EE0, 0x7F30, 0x7F00, 0x7EC0, 0x7ED0, 0x7ED0, 0x7F20, 0x7F20, 0x7E90, 0x7EB0, 0x7EE0, 0x7F10, 0x7F10,
+ 0x7E70, 0x7EE0, 0x7F10, 0x7F10, 0x7F20, 0x7F00, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F00, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7EE0,
+ 0x7F40, 0x7F30, 0x7F20, 0x7F10, 0x7F10, 0x7F30, 0x7EE0, 0x7EF0, 0x7F10, 0x7EE0, 0x7F50, 0x7EF0, 0x7F20, 0x7F20, 0x7F10, 0x7F90,
+ 0x7EF0, 0x7F10, 0x7F10, 0x7F10, 0x7F60, 0x7EE0, 0x7EB0, 0x7F10, 0x7F20, 0x7F40, 0x7F00, 0x7EA0, 0x7F10, 0x7F10, 0x7F20, 0x7EE0,
+ 0x7EC0, 0x7F10, 0x7F10, 0x7EF0, 0x7F10, 0x7EB0, 0x7F20, 0x7F10, 0x7F10, 0x7F10, 0x7F00, 0x7F40, 0x7F00, 0x7F00, 0x7F10, 0x7F00,
+ 0x7F60, 0x7F20, 0x7F40, 0x7F10, 0x7F00, 0x7F80, 0x7F10, 0x7F10, 0x7F00, 0x7EF0, 0x7F90, 0x7F10, 0x7F20, 0x7F00, 0x7F10, 0x7F70,
+ 0x7F10, 0x7EF0, 0x7EB0, 0x7B20, 0x72F0, 0x6A50, 0x6030, 0x5570, 0x4A50, 0x3F30, 0x3500, 0x29F0, 0x1FB0, 0x14D0, 0x0A30, 0x0050,
+ 0xF4F0, 0xEA40, 0xDFB0, 0xD4D0, 0xCA60, 0xC000, 0xB560, 0xAB10, 0xA170, 0x97B0, 0x9010, 0x8AB0, 0x8800, 0x86A0, 0x8600, 0x85B0,
+ 0x8580, 0x8580, 0x8590, 0x8580, 0x8610, 0x8690, 0x8790, 0x8970, 0x8CC0, 0x9260, 0x9910, 0xA0A0, 0xA830, 0xB070, 0xB880, 0xC040,
+ 0xC8B0, 0xD0E0, 0xD9F0, 0xE270, 0xEBE0, 0xF500, 0xFE20, 0x0770, 0x1050, 0x1960, 0x2190, 0x29B0, 0x3260, 0x3AD0, 0x41F0, 0x4970,
+ 0x5000, 0x5680, 0x5CB0, 0x61F0, 0x6720, 0x6C00, 0x7120, 0x7500, 0x7890, 0x7C30, 0x7E00, 0x7F00, 0x7EF0, 0x7F10, 0x7F30, 0x7EC0,
+ 0x7F30, 0x7F20, 0x7F20, 0x7F40, 0x7F10, 0x7F70, 0x7EE0, 0x7EF0, 0x7F20, 0x7EE0, 0x7F80, 0x7F10, 0x7F20, 0x7F00, 0x7EF0, 0x7F50,
+ 0x7F00, 0x7F10, 0x7EF0, 0x7EF0, 0x7F60, 0x7EF0, 0x7ED0, 0x7F00, 0x7F00, 0x7F30, 0x7F20, 0x7EC0, 0x7ED0, 0x7ED0, 0x7F30, 0x7F00,
+ 0x7E80, 0x7AF0, 0x75E0, 0x6EF0, 0x68F0, 0x6230, 0x5BC0, 0x5490, 0x4D30, 0x4630, 0x3EC0, 0x3740, 0x2FA0, 0x27E0, 0x20F0, 0x1980,
+ 0x1220, 0x0AE0, 0x0390, 0xFA70, 0xF400, 0xED20, 0xE760, 0xE100, 0xDB80, 0xD650, 0xD0C0, 0xCC00, 0xC710, 0xC2D0, 0xBEB0, 0xBAE0,
+ 0xB7C0, 0xB4F0, 0xB230, 0xAFD0, 0xADE0, 0xAB90, 0xA9E0, 0xA8C0, 0xA850, 0xA7A0, 0xA780, 0xA750, 0xA7E0, 0xA7F0, 0xA9A0, 0xAA90,
+ 0xAC00, 0xADB0, 0xAFB0, 0xB270, 0xB510, 0xB800, 0xBB70, 0xBF60, 0xC3E0, 0xC790, 0xCCA0, 0xD130, 0xD640, 0xDBE0, 0xE130, 0xE710,
+ 0xEDA0, 0xF3F0, 0xFAA0, 0x0150, 0x07B0, 0x0EA0, 0x1570, 0x1BF0, 0x2340, 0x2AC0, 0x31D0, 0x3870, 0x3F40, 0x4590, 0x4B30, 0x5100,
+ 0x5640, 0x5AF0, 0x5FA0, 0x6330, 0x6670, 0x68D0, 0x6AE0, 0x6CA0, 0x6E20, 0x6F10, 0x6FB0, 0x7000, 0x7070, 0x7090, 0x6FE0, 0x6F80,
+ 0x6ED0, 0x6EB0, 0x6DD0, 0x6D80, 0x6CB0, 0x6C00, 0x6B60, 0x6AC0, 0x6A50, 0x6780, 0x66C0, 0x6640, 0x6550, 0x64C0, 0x6410, 0x6390,
+ 0x62E0, 0x6200, 0x6190, 0x6070, 0x5FC0, 0x5EC0, 0x5D50, 0x5C10, 0x5A70, 0x58A0, 0x56C0, 0x54D0, 0x52B0, 0x5060, 0x4E50, 0x4AD0,
+ 0x4790, 0x44A0, 0x40E0, 0x3D70, 0x3950, 0x35E0, 0x3240, 0x2ED0, 0x2AA0, 0x2780, 0x2350, 0x2090, 0x1D00, 0x1A40, 0x1750, 0x14D0,
+ 0x1210, 0x0FA0, 0x0D10, 0x0A30, 0x0840, 0x05C0, 0x03B0, 0x0170, 0xFF20, 0xFCC0, 0xF9B0, 0xF6E0, 0xF3C0, 0xF110, 0xEE30, 0xEB50,
+ 0xE8A0, 0xE610, 0xE450, 0xE300, 0xE1B0, 0xE110, 0xE070, 0xE0C0, 0xE0A0, 0xE110, 0xE1B0, 0xE300, 0xE480, 0xE610, 0xE7E0, 0xEA30,
+ 0xEC50, 0xEE40, 0xF000, 0xF260, 0xF440, 0xF620, 0xF7E0, 0xF950, 0xFAD0, 0xFBB0, 0xFCF0, 0xFDC0, 0xFE80, 0xFED0, 0xFF20, 0xFF90,
+ 0x0010, 0x0050, 0x0120, 0x0210, 0x02D0, 0x03D0, 0x04E0, 0x05D0, 0x0710, 0x08A0, 0x09C0, 0x0BA0, 0x0D80, 0x0F40, 0x11A0, 0x12F0,
+ 0x1540, 0x1700, 0x18F0, 0x1AD0, 0x1C70, 0x1EF0, 0x2140, 0x2350, 0x2540, 0x2840, 0x2AB0, 0x2CA0, 0x2E60, 0x30C0, 0x3270, 0x3470,
+ 0x36E0, 0x3870, 0x3B30, 0x3CC0, 0x3F10, 0x40F0, 0x41F0, 0x4460, 0x45D0, 0x4790, 0x4960, 0x4A50, 0x4C70, 0x4DB0, 0x4F20, 0x5050,
+ 0x5130, 0x5220, 0x5300, 0x53D0, 0x54B0, 0x54C0, 0x5590, 0x5680, 0x56B0, 0x57A0, 0x57C0, 0x58B0, 0x5940, 0x5980, 0x59D0, 0x59C0,
+ 0x5A60, 0x59D0, 0x59F0, 0x5A20, 0x5960, 0x5940, 0x5920, 0x58C0, 0x5840, 0x57B0, 0x5820, 0x5760, 0x5710, 0x5730, 0x5670, 0x5680,
+ 0x5630, 0x55F0, 0x5660, 0x55F0, 0x5660, 0x5600, 0x5550, 0x5590, 0x54E0, 0x54E0, 0x5480, 0x5370, 0x52F0, 0x51C0, 0x5140, 0x5000,
+ 0x4E60, 0x4E10, 0x4CB0, 0x4CA0, 0x4BA0, 0x4AC0, 0x4A50, 0x4980, 0x4840, 0x4780, 0x45F0, 0x4520, 0x4440, 0x4350, 0x41C0, 0x4020,
+ 0x3F30, 0x3DB0, 0x3C30, 0x3A70, 0x3870, 0x3730, 0x35A0, 0x3410, 0x32F0, 0x30E0, 0x2FE0, 0x2E80, 0x2C40, 0x2B40, 0x2910, 0x27D0,
+ 0x25F0, 0x23E0, 0x22C0, 0x20A0, 0x1F70, 0x1D90, 0x1B90, 0x1A20, 0x1840, 0x1750, 0x1590, 0x13E0, 0x1240, 0x1040, 0x0E70, 0x0CC0,
+ 0x0A10, 0x0890, 0x0650, 0x0500, 0x0310, 0x0130, 0xFFF0, 0xFE50, 0xFCF0, 0xFBE0, 0xFA60, 0xF9D0, 0xF860, 0xF720, 0xF5E0, 0xF550,
+ 0xF460, 0xF420, 0xF2D0, 0xF210, 0xF230, 0xF250, 0xF150, 0xF170, 0xF130, 0xF120, 0xF180, 0xF130, 0xF160, 0xF180, 0xF190, 0xF1D0,
+ 0xF220, 0xF2A0, 0xF2E0, 0xF3C0, 0xF3E0, 0xF3F0, 0xF430, 0xF4C0, 0xF4F0, 0xF530, 0xF590, 0xF570, 0xF5D0, 0xF5A0, 0xF670, 0xF680,
+ 0xF630, 0xF720, 0xF700, 0xF740, 0xF6C0, 0xF780, 0xF800, 0xF810, 0xF830, 0xF920, 0xF870, 0xF8D0, 0xF8C0, 0xF960, 0xFB50, 0xFBB0,
+ 0xFC80, 0xFCF0, 0xFDC0, 0xFE30, 0xFEC0, 0xFF90, 0x0010, 0x0120, 0x0180, 0x0200, 0x0270, 0x02C0, 0x0370, 0x0390, 0x03C0, 0x0400,
+ 0x0460, 0x0530, 0x05B0, 0x0680, 0x0710, 0x0790, 0x0860, 0x0940, 0x09F0, 0x0A90, 0x0B40, 0x0C40, 0x0CB0, 0x0D60, 0x0E20, 0x0ED0,
+ 0x0FE0, 0x10C0, 0x1150, 0x11F0, 0x12B0, 0x1390, 0x13D0, 0x1440, 0x1500, 0x1550, 0x1650, 0x1700, 0x1740, 0x1810, 0x1820, 0x1920,
+ 0x1990, 0x19B0, 0x1A20, 0x1A60, 0x1AD0, 0x1AF0, 0x1B60, 0x1B80, 0x1C10, 0x1C60, 0x1CA0, 0x1C40, 0x1CC0, 0x1C80, 0x1C60, 0x1C90,
+ 0x1BC0, 0x1BE0, 0x1BD0, 0x1B90, 0x1B10, 0x1AC0, 0x1A90, 0x1A70, 0x19C0, 0x1990, 0x19B0, 0x1960, 0x18A0, 0x1850, 0x17D0, 0x16F0,
+ 0x16A0, 0x1580, 0x1470, 0x1400, 0x12C0, 0x1270, 0x1170, 0x10E0, 0x0F80, 0x0E70, 0x0D60, 0x0BD0, 0x0A70, 0x0970, 0x0860, 0x0750,
+ 0x0630, 0x0460, 0x0440, 0x0200, 0x00B0, 0xFF40, 0xFDB0, 0xFCF0, 0xFC00, 0xFAA0, 0xF9C0, 0xF880, 0xF700, 0xF580, 0xF430, 0xF2B0,
+ 0xF140, 0xF000, 0xEE50, 0xECC0, 0xEBA0, 0xE9D0, 0xE880, 0xE6F0, 0xE5A0, 0xE3F0, 0xE280, 0xE1C0, 0xDFF0, 0xDF30, 0xDE40, 0xDCD0,
+ 0xDC60, 0xDB60, 0xDA40, 0xD910, 0xD7D0, 0xD6B0, 0xD560, 0xD430, 0xD2F0, 0xD1F0, 0xD150, 0xD030, 0xCF30, 0xCE60, 0xCD50, 0xCC30,
+ 0xCB40, 0xC990, 0xC880, 0xC7B0, 0xC700, 0xC5E0, 0xC510, 0xC4A0, 0xC3E0, 0xC2F0, 0xC1B0, 0xC0C0, 0xC060, 0xBFC0, 0xBF00, 0xBEA0,
+ 0xBD90, 0xBD00, 0xBC20, 0xBB50, 0xBAB0, 0xB970, 0xB910, 0xB830, 0xB770, 0xB6A0, 0xB5C0, 0xB540, 0xB460, 0xB360, 0xB200, 0xB0D0,
+ 0xB030, 0xAEF0, 0xAD70, 0xAC90, 0xABC0, 0xAAD0, 0xA9A0, 0xA870, 0xA780, 0xA660, 0xA550, 0xA420, 0xA2F0, 0xA250, 0xA160, 0xA040,
+ 0x9F40, 0x9DE0, 0x9CD0, 0x9BD0, 0x9A80, 0x99D0, 0x9890, 0x97D0, 0x9690, 0x95F0, 0x94C0, 0x9350, 0x9200, 0x90E0, 0x8F90, 0x8E90,
+ 0x8D80, 0x8CF0, 0x8C70, 0x8BB0, 0x8B60, 0x8AB0, 0x8A50, 0x89B0, 0x8950, 0x88D0, 0x8890, 0x8840, 0x87F0, 0x87C0, 0x8790, 0x8760,
+ 0x8730, 0x86F0, 0x86D0, 0x8680, 0x86A0, 0x8690, 0x8690, 0x8680, 0x8670, 0x8670, 0x8650, 0x8650, 0x8650, 0x8650, 0x8640, 0x8650,
+ 0x8660, 0x8640, 0x8650, 0x8640, 0x8640, 0x8680, 0x8660, 0x8640, 0x8640, 0x8660, 0x8640, 0x8640, 0x8650, 0x8660, 0x8660, 0x8660,
+ 0x8670, 0x8680, 0x8670, 0x8670, 0x8680, 0x8670, 0x8680, 0x8670, 0x8680, 0x8680, 0x8670, 0x8670, 0x8670, 0x8680, 0x8660, 0x8650,
+ 0x8660, 0x8650, 0x8640, 0x8630, 0x8630, 0x8630, 0x8620, 0x8620, 0x8620, 0x8610, 0x8610, 0x8600, 0x8600, 0x8600, 0x8600, 0x8600,
+ 0x8610, 0x8630, 0x8600, 0x8600, 0x85F0, 0x85F0, 0x85F0, 0x85F0, 0x85F0, 0x8600, 0x8600, 0x8610, 0x8620, 0x8630, 0x8640, 0x8640,
+ 0x8640, 0x8650, 0x8650, 0x8670, 0x8680, 0x86A0, 0x86B0, 0x86D0, 0x8710, 0x8700, 0x8720, 0x8730, 0x8760, 0x8790, 0x87B0, 0x87E0,
+ 0x8800, 0x8810, 0x8850, 0x8860, 0x88B0, 0x8900, 0x8970, 0x8A10, 0x8A70, 0x8AF0, 0x8B90, 0x8C30, 0x8CC0, 0x8D40, 0x8DC0, 0x8E90,
+ 0x8F00, 0x8F70, 0x9030, 0x9120, 0x9200, 0x92B0, 0x93E0, 0x9450, 0x9510, 0x9600, 0x96C0, 0x9770, 0x98B0, 0x99A0, 0x9AB0, 0x9BC0,
+ 0x9C80, 0x9D50, 0x9DC0, 0x9E80, 0x9EF0, 0xA030, 0xA130, 0xA210, 0xA2E0, 0xA470, 0xA540, 0xA680, 0xA7A0, 0xA880, 0xA990, 0xAAB0,
+ 0xAB80, 0xAC80, 0xAD40, 0xAE40, 0xAF20, 0xAFD0, 0xB0E0, 0xB1A0, 0xB2B0, 0xB320, 0xB420, 0xB4C0, 0xB5A0, 0xB610, 0xB6D0, 0xB790,
+ 0xB830, 0xB8E0, 0xB9A0, 0xBA70, 0xBB40, 0xBC40, 0xBD20, 0xBDB0, 0xBEA0, 0xBF80, 0xBFE0, 0xC020, 0xC0D0, 0xC110, 0xC1B0, 0xC230,
+ 0xC240, 0xC2C0, 0xC330, 0xC3A0, 0xC440, 0xC4D0, 0xC570, 0xC620, 0xC6E0, 0xC710, 0xC750, 0xC780, 0xC850, 0xC8A0, 0xC910, 0xC970,
+ 0xC9F0, 0xCA50, 0xCAE0, 0xCB30, 0xCB40, 0xCB70, 0xCBE0, 0xCC70, 0xCCC0, 0xCD60, 0xCD90, 0xCE40, 0xCDD0, 0xCE70, 0xCE90, 0xCE50,
+ 0xCE80, 0xCEF0, 0xCEF0, 0xCF60, 0xCF70, 0xCF60, 0xCF80, 0xD010, 0xD090, 0xD0E0, 0xD130, 0xD150, 0xD130, 0xD130, 0xD130, 0xD170,
+ 0xD1B0, 0xD1B0, 0xD1F0, 0xD1B0, 0xD220, 0xD290, 0xD2C0, 0xD2D0, 0xD3A0, 0xD3D0, 0xD3F0, 0xD430, 0xD420, 0xD410, 0xD410, 0xD430,
+ 0xD460, 0xD440, 0xD440, 0xD430, 0xD3E0, 0xD3E0, 0xD3B0, 0xD3D0, 0xD420, 0xD3D0, 0xD410, 0xD460, 0xD450, 0xD430, 0xD3B0, 0xD400,
+ 0xD390, 0xD360, 0xD370, 0xD320, 0xD330, 0xD320, 0xD300, 0xD310, 0xD330, 0xD2D0, 0xD2C0, 0xD2C0, 0xD2F0, 0xD250, 0xD270, 0xD1D0,
+ 0xD1B0, 0xD190, 0xD0B0, 0xD0A0, 0xD030, 0xD000, 0xCFB0, 0xCF60, 0xCF00, 0xCF00, 0xCED0, 0xCE40, 0xCD80, 0xCDC0, 0xCD20, 0xCD80,
+ 0xCCD0, 0xCC40, 0xCC40, 0xCBB0, 0xCB60, 0xCAF0, 0xCA50, 0xCA30, 0xC9A0, 0xC990, 0xC8F0, 0xC8D0, 0xC8A0, 0xC810, 0xC790, 0xC6E0,
+ 0xC630, 0xC5C0, 0xC510, 0xC490, 0xC410, 0xC3D0, 0xC350, 0xC2F0, 0xC270, 0xC200, 0xC190, 0xC1A0, 0xC140, 0xC010, 0xBFF0, 0xBF20,
+ 0xBEE0, 0xBD90, 0xBCE0, 0xBCA0, 0xBC30, 0xBBB0, 0xBB40, 0xBA40, 0xB9C0, 0xB920, 0xB820, 0xB790, 0xB710, 0xB670, 0xB610, 0xB570,
+ 0xB570, 0xB510, 0xB500, 0xB440, 0xB3F0, 0xB3B0, 0xB2F0, 0xB280, 0xB240, 0xB190, 0xB110, 0xB020, 0xAFF0, 0xAF30, 0xAE50, 0xADE0,
+ 0xAD80, 0xAD30, 0xAC70, 0xABC0, 0xABA0, 0xAAF0, 0xAB20, 0xAAB0, 0xAA30, 0xAA50, 0xAA50, 0xA9B0, 0xA940, 0xA910, 0xA8C0, 0xA840,
+ 0xA820, 0xA7E0, 0xA790, 0xA6F0, 0xA710, 0xA630, 0xA5A0, 0xA4C0, 0xA4B0, 0xA450, 0xA430, 0xA400, 0xA3F0, 0xA3B0, 0xA2F0, 0xA280,
+ 0xA270, 0xA150, 0xA160, 0xA0E0, 0xA0A0, 0xA030, 0xA020, 0xA040, 0xA000, 0x9FB0, 0x9FB0, 0x9F70, 0x9EE0, 0x9EF0, 0x9E90, 0x9E00,
+ 0x9D50, 0x9D40, 0x9C80, 0x9C40, 0x9C30, 0x9BA0, 0x9B90, 0x9B70, 0x9AC0, 0x9AB0, 0x9A30, 0x99E0, 0x99E0, 0x9970, 0x9960, 0x9970,
+ 0x9950, 0x9920, 0x9850, 0x9880, 0x9810, 0x97B0, 0x9770, 0x9700, 0x9730, 0x96E0, 0x96C0, 0x9680, 0x9600, 0x95E0, 0x95A0, 0x9580,
+ 0x9510, 0x94E0, 0x9500, 0x94B0, 0x94E0, 0x94A0, 0x94B0, 0x9470, 0x9430, 0x9440, 0x9400, 0x9430, 0x9400, 0x93D0, 0x9440, 0x9420,
+ 0x9440, 0x9450, 0x9430, 0x9460, 0x9480, 0x9480, 0x9490, 0x9420, 0x9470, 0x9430, 0x9410, 0x9410, 0x9420, 0x9470, 0x9450, 0x9410,
+ 0x9470, 0x93F0, 0x9450, 0x94A0, 0x94A0, 0x9460, 0x9490, 0x94B0, 0x94E0, 0x94D0, 0x9510, 0x9520, 0x9530, 0x9550, 0x9590, 0x95C0,
+ 0x95D0, 0x95C0, 0x9550, 0x9510, 0x9570, 0x95A0, 0x9580, 0x95C0, 0x9650, 0x96F0, 0x96F0, 0x96F0, 0x9700, 0x9700, 0x96F0, 0x9720,
+ 0x9710, 0x9720, 0x9720, 0x97D0, 0x98A0, 0x98F0, 0x9930, 0x9910, 0x9960, 0x98D0, 0x9890, 0x98B0, 0x9890, 0x98D0, 0x9900, 0x9920,
+ 0x9960, 0x9940, 0x9A10, 0x9A30, 0x9A60, 0x9A70, 0x9A80, 0x9A80, 0x9A40, 0x9A40, 0x9AC0, 0x9AF0, 0x9B70, 0x9B40, 0x9B30, 0x9B50,
+ 0x9B60, 0x9B80, 0x9B50, 0x9B30, 0x9BA0, 0x9C00, 0x9CB0, 0x9CD0, 0x9D40, 0x9DC0, 0x9DD0, 0x9E20, 0x9E10, 0x9DC0, 0x9E20, 0x9E60,
+ 0x9E50, 0x9EB0, 0x9ED0, 0x9EC0, 0x9F10, 0x9ED0, 0x9F60, 0x9F40, 0x9F90, 0x9FD0, 0x9FF0, 0xA030, 0xA050, 0xA110, 0xA120, 0xA170,
+ 0xA1A0, 0xA1E0, 0xA270, 0xA2A0, 0xA340, 0xA390, 0xA3B0, 0xA420, 0xA470, 0xA480, 0xA4E0, 0xA4C0, 0xA4C0, 0xA4D0, 0xA4C0, 0xA4F0,
+ 0xA510, 0xA580, 0xA530, 0xA540, 0xA570, 0xA580, 0xA5B0, 0xA5E0, 0xA600, 0xA6E0, 0xA740, 0xA810, 0xA860, 0xA910, 0xA980, 0xAA00,
+ 0xAA10, 0xAA90, 0xAA70, 0xAAE0, 0xAB60, 0xABA0, 0xAC00, 0xABD0, 0xABB0, 0xABA0, 0xAB80, 0xABA0, 0xABB0, 0xABC0, 0xABF0, 0xAC10,
+ 0xAC80, 0xAC60, 0xACF0, 0xACE0, 0xACF0, 0xAD00, 0xAD50, 0xAE20, 0xAE40, 0xAED0, 0xAF30, 0xAFA0, 0xAFF0, 0xB030, 0xAFD0, 0xB080,
+ 0xB050, 0xB060, 0xB0D0, 0xB070, 0xB0F0, 0xB0E0, 0xB160, 0xB1B0, 0xB1B0, 0xB260, 0xB200, 0xB230, 0xB230, 0xB200, 0xB1E0, 0xB230,
+ 0xB220, 0xB280, 0xB230, 0xB330, 0xB300, 0xB300, 0xB310, 0xB300, 0xB3A0, 0xB390, 0xB380, 0xB3C0, 0xB3B0, 0xB400, 0xB400, 0xB3A0,
+ 0xB3D0, 0xB3C0, 0xB3C0, 0xB3D0, 0xB3B0, 0xB400, 0xB3A0, 0xB440, 0xB410, 0xB430, 0xB4B0, 0xB4A0, 0xB4D0, 0xB500, 0xB530, 0xB5C0,
+ 0xB5B0, 0xB660, 0xB670, 0xB630, 0xB650, 0xB5F0, 0xB650, 0xB670, 0xB630, 0xB6C0, 0xB6E0, 0xB710, 0xB770, 0xB780, 0xB7F0, 0xB7C0,
+ 0xB800, 0xB840, 0xB7F0, 0xB810, 0xB800, 0xB800, 0xB7F0, 0xB7F0, 0xB7D0, 0xB820, 0xB810, 0xB820, 0xB870, 0xB900, 0xB8F0, 0xB8F0,
+ 0xB9B0, 0xBA20, 0xBAC0, 0xBB50, 0xBB70, 0xBBD0, 0xBBE0, 0xBB80, 0xBB60, 0xBB50, 0xBAC0, 0xBA70, 0xBA60, 0xBA40, 0xBA30, 0xBA50,
+ 0xBA60, 0xBA90, 0xBA30, 0xBA80, 0xBAE0, 0xBA80, 0xBB10, 0xBB20, 0xBB60, 0xBB60, 0xBB90, 0xBBA0, 0xBBA0, 0xBBD0, 0xBBF0, 0xBC00,
+ 0xBC70, 0xBCD0, 0xBD70, 0xBDA0, 0xBDB0, 0xBDA0, 0xBD60, 0xBD90, 0xBDB0, 0xBDA0, 0xBE20, 0xBE80, 0xBEE0, 0xBEF0, 0xBED0, 0xBF10,
+ 0xBF60, 0xBF40, 0xBFD0, 0xC010, 0xC040, 0xC080, 0xC0F0, 0xC110, 0xC140, 0xC170, 0xC1E0, 0xC1B0, 0xC1F0, 0xC220, 0xC280, 0xC2E0,
+ 0xC2D0, 0xC2C0, 0xC2E0, 0xC2D0, 0xC340, 0xC380, 0xC3C0, 0xC430, 0xC480, 0xC4B0, 0xC4D0, 0xC520, 0xC550, 0xC5E0, 0xC5B0, 0xC600,
+ 0xC650, 0xC670, 0xC6C0, 0xC6A0, 0xC6B0, 0xC6E0, 0xC6E0, 0xC6D0, 0xC7A0, 0xC780, 0xC7D0, 0xC810, 0xC820, 0xC850, 0xC830, 0xC810,
+ 0xC830, 0xC810, 0xC840, 0xC820, 0xC830, 0xC830, 0xC860, 0xC840, 0xC890, 0xC8E0, 0xC8A0, 0xC860, 0xC880, 0xC8C0, 0xC8F0, 0xC8F0,
+ 0xC910, 0xC910, 0xC960, 0xC8F0, 0xC950, 0xC920, 0xC930, 0xC940, 0xC930, 0xC930, 0xC960, 0xC960, 0xC940, 0xC9B0, 0xC990, 0xC980,
+ 0xC9D0, 0xC9A0, 0xC990, 0xCA00, 0xCA10, 0xCA20, 0xCA10, 0xC9D0, 0xC9E0, 0xC9F0, 0xC9F0, 0xC9F0, 0xC9F0, 0xCA50, 0xCA30, 0xCA00,
+ 0xC9E0, 0xC9E0, 0xC980, 0xC940, 0xC990, 0xC980, 0xC900, 0xC9B0, 0xC9D0, 0xCA50, 0xCA20, 0xCA30, 0xCAA0, 0xCA50, 0xCAC0, 0xCAA0,
+ 0xCAE0, 0xCAD0, 0xCAB0, 0xCB40, 0xCB30, 0xCB30, 0xCB00, 0xCAC0, 0xCAB0, 0xCAB0, 0xCA80, 0xCA80, 0xCA80, 0xCA40, 0xC9D0, 0xC9D0,
+ 0xCA00, 0xC9E0, 0xC9A0, 0xC990, 0xC9F0, 0xCA40, 0xCAA0, 0xCAE0, 0xCAE0, 0xCAE0, 0xCBB0, 0xCBD0, 0xCB70, 0xCC40, 0xCBE0, 0xCC30,
+ 0xCC40, 0xCBC0, 0xCC50, 0xCC00, 0xCC60, 0xCC90, 0xCC50, 0xCC50, 0xCC20, 0xCC70, 0xCC40, 0xCC20, 0xCC40, 0xCCC0, 0xCD40, 0xCD70,
+ 0xCD50, 0xCDB0, 0xCDD0, 0xCDD0, 0xCDE0, 0xCDB0, 0xCDE0, 0xCE10, 0xCDF0, 0xCE00, 0xCDA0, 0xCE30, 0xCE70, 0xCEA0, 0xCE80, 0xCE90,
+ 0xCEC0, 0xCEB0, 0xCEC0, 0xCE60, 0xCE30, 0xCE60, 0xCE70, 0xCE60, 0xCEF0, 0xCE60, 0xCEE0, 0xCED0, 0xCED0, 0xCF20, 0xCF10, 0xCF70,
+ 0xCF80, 0xCF40, 0xCF70, 0xCF00, 0xCF70, 0xCF80, 0xCF50, 0xD050, 0xD050, 0xD040, 0xD050, 0xD030, 0xD100, 0xD080, 0xD0D0, 0xD100,
+ 0xD0E0, 0xD130, 0xD100, 0xD140, 0xD160, 0xD190, 0xD1A0, 0xD190, 0xD180, 0xD180, 0xD110, 0xD190, 0xD160, 0xD190, 0xD1A0, 0xD1B0,
+ 0xD1F0, 0xD210, 0xD1E0, 0xD1E0, 0xD170, 0xD1F0, 0xD1E0, 0xD180, 0xD190, 0xD180, 0xD1B0, 0xD1C0, 0xD190, 0xD1E0, 0xD1C0, 0xD1F0,
+ 0xD1F0, 0xD1D0, 0xD240, 0xD260, 0xD2F0, 0xD2D0, 0xD2D0, 0xD300, 0xD310, 0xD370, 0xD320, 0xD2F0, 0xD300, 0xD2D0, 0xD310, 0xD300,
+ 0xD2D0, 0xD320, 0xD310, 0xD370, 0xD360, 0xD360, 0xD380, 0xD3A0, 0xD3C0, 0xD3D0, 0xD3A0, 0xD440, 0xD450, 0xD450, 0xD490, 0xD470,
+ 0xD4A0, 0xD470, 0xD430, 0xD480, 0xD3E0, 0xD430, 0xD470, 0xD4F0, 0xD500, 0xD540, 0xD580, 0xD500, 0xD530, 0xD520, 0xD4F0, 0xD580,
+ 0xD520, 0xD560, 0xD550, 0xD570, 0xD580, 0xD5C0, 0xD570, 0xD5A0, 0xD580, 0xD580, 0xD5F0, 0xD570, 0xD640, 0xD5D0, 0xD600, 0xD600,
+ 0xD5A0, 0xD5D0, 0xD590, 0xD590, 0xD510, 0xD490, 0xD510, 0xD4E0, 0xD4F0, 0xD4A0, 0xD450, 0xD4C0, 0xD500, 0xD520, 0xD520, 0xD4F0,
+ 0xD580, 0xD5A0, 0xD580, 0xD5C0, 0xD540, 0xD590, 0xD590, 0xD5A0, 0xD580, 0xD4C0, 0xD510, 0xD4D0, 0xD4F0, 0xD4C0, 0xD4C0, 0xD4D0,
+ 0xD4B0, 0xD480, 0xD490, 0xD480, 0xD490, 0xD480, 0xD4D0, 0xD4E0, 0xD4A0, 0xD480, 0xD470, 0xD490, 0xD430, 0xD3F0, 0xD440, 0xD3C0,
+ 0xD3D0, 0xD3B0, 0xD320, 0xD390, 0xD380, 0xD370, 0xD340, 0xD2B0, 0xD2C0, 0xD2A0, 0xD280, 0xD250, 0xD250, 0xD290, 0xD270, 0xD260,
+ 0xD260, 0xD250, 0xD240, 0xD210, 0xD240, 0xD230, 0xD1D0, 0xD1D0, 0xD180, 0xD150, 0xD180, 0xD100, 0xD0D0, 0xD0C0, 0xD0B0, 0xD0A0,
+ 0xCFA0, 0xCFC0, 0xCF60, 0xCFE0, 0xCFB0, 0xCF60, 0xD010, 0xD000, 0xCFF0, 0xD010, 0xCF70, 0xCF40, 0xCF20, 0xCEA0, 0xCE50, 0xCE90,
+ 0xCE90, 0xCE20, 0xCDB0, 0xCDF0, 0xCDD0, 0xCD80, 0xCD50, 0xCDB0, 0xCDA0, 0xCD90, 0xCD90, 0xCD00, 0xCCB0, 0xCCF0, 0xCC90, 0xCC70,
+ 0xCC90, 0xCC50, 0xCC90, 0xCC90, 0xCCD0, 0xCCB0, 0xCD00, 0xCCF0, 0xCCC0, 0xCC60, 0xCC80, 0xCC30, 0xCC20, 0xCB40, 0xCB20, 0xCAD0,
+ 0xCA30, 0xCAC0, 0xC9F0, 0xC9C0, 0xC960, 0xC950, 0xC9E0, 0xC990, 0xC9B0, 0xC980, 0xC980, 0xC9F0, 0xC9A0, 0xC9D0, 0xC990, 0xC970,
+ 0xC9A0, 0xC950, 0xC9B0, 0xC970, 0xC940, 0xC930, 0xC920, 0xC930, 0xC940, 0xC890, 0xC890, 0xC840, 0xC810, 0xC870, 0xC840, 0xC860,
+ 0xC890, 0xC7D0, 0xC820, 0xC830, 0xC890, 0xC860, 0xC850, 0xC8B0, 0xC880, 0xC8B0, 0xC920, 0xC8D0, 0xC990, 0xC940, 0xC950, 0xC910,
+ 0xC8F0, 0xC8F0, 0xC8F0, 0xC890, 0xC8C0, 0xC880, 0xC890, 0xC8B0, 0xC8A0, 0xC900, 0xC8B0, 0xC8D0, 0xC8E0, 0xC8C0, 0xC8B0, 0xC880,
+ 0xC8F0, 0xC8F0, 0xC910, 0xC970, 0xC950, 0xC9B0, 0xC9D0, 0xC9D0, 0xCA20, 0xC9F0, 0xCA80, 0xCA80, 0xCAA0, 0xCB40, 0xCB90, 0xCB90,
+ 0xCBB0, 0xCC40, 0xCBD0, 0xCBE0, 0xCC00, 0xCC30, 0xCBD0, 0xCC30, 0xCBD0, 0xCC80, 0xCC30, 0xCC00, 0xCC70, 0xCC80, 0xCCD0, 0xCCC0,
+ 0xCCB0, 0xCDA0, 0xCDA0, 0xCE20, 0xCDF0, 0xCD90, 0xCE00, 0xCE00, 0xCE50, 0xCE10, 0xCE10, 0xCE80, 0xCE70, 0xCEE0, 0xCEE0, 0xCF40,
+ 0xCFD0, 0xD030, 0xD040, 0xD050, 0xD0B0, 0xD070, 0xD080, 0xD0E0, 0xD0E0, 0xD0F0, 0xD150, 0xD140, 0xD0F0, 0xD110, 0xD170, 0xD180,
+ 0xD160, 0xD150, 0xD170, 0xD1C0, 0xD1C0, 0xD1D0, 0xD1F0, 0xD2A0, 0xD290, 0xD2E0, 0xD300, 0xD310, 0xD350, 0xD390, 0xD3A0, 0xD3F0,
+ 0xD3C0, 0xD430, 0xD400, 0xD440, 0xD450, 0xD420, 0xD470, 0xD470, 0xD470, 0xD4A0, 0xD490, 0xD4F0, 0xD530, 0xD520, 0xD510, 0xD520,
+ 0xD550, 0xD5C0, 0xD5B0, 0xD620, 0xD660, 0xD650, 0xD670, 0xD660, 0xD660, 0xD5F0, 0xD610, 0xD640, 0xD630, 0xD6B0, 0xD690, 0xD6E0,
+ 0xD740, 0xD710, 0xD7B0, 0xD790, 0xD780, 0xD7D0, 0xD730, 0xD7A0, 0xD7C0, 0xD7E0, 0xD7E0, 0xD830, 0xD870, 0xD8C0, 0xD860, 0xD870,
+ 0xD810, 0xD7A0, 0xD790, 0xD780, 0xD760, 0xD780, 0xD740, 0xD790, 0xD7D0, 0xD7C0, 0xD790, 0xD750, 0xD730, 0xD720, 0xD7D0, 0xD780,
+ 0xD7D0, 0xD7C0, 0xD7B0, 0xD7F0, 0xD850, 0xD850, 0xD8C0, 0xD8D0, 0xD920, 0xD960, 0xD970, 0xD930, 0xD9F0, 0xDA00, 0xDA20, 0xDA30,
+ 0xDA10, 0xDA10, 0xD9E0, 0xD9B0, 0xDA00, 0xDA20, 0xD9E0, 0xDA30, 0xDA20, 0xDA40, 0xDA40, 0xDA50, 0xDA60, 0xDA60, 0xDAB0, 0xDA80,
+ 0xDAF0, 0xDAE0, 0xDB10, 0xDB30, 0xDB20, 0xDB50, 0xDB40, 0xDBB0, 0xDC50, 0xDC20, 0xDCD0, 0xDD20, 0xDCE0, 0xDCD0, 0xDD40, 0xDD20,
+ 0xDD20, 0xDD20, 0xDCF0, 0xDCB0, 0xDD00, 0xDCC0, 0xDCC0, 0xDC70, 0xDC90, 0xDCA0, 0xDC50, 0xDC90, 0xDCB0, 0xDC70, 0xDC70, 0xDC70,
+ 0xDC80, 0xDC90, 0xDC50, 0xDC40, 0xDC70, 0xDC30, 0xDC50, 0xDCA0, 0xDCD0, 0xDD10, 0xDD70, 0xDD80, 0xDD80, 0xDE00, 0xDE00, 0xDE90,
+ 0xDE50, 0xDEC0, 0xDE60, 0xDE50, 0xDE70, 0xDE80, 0xDE20, 0xDE50, 0xDEA0, 0xDEC0, 0xDEC0, 0xDED0, 0xDEE0, 0xDEF0, 0xDF10, 0xDEA0,
+ 0xDE60, 0xDEA0, 0xDEE0, 0xDEF0, 0xDF60, 0xDF40, 0xDFA0, 0xDFD0, 0xE000, 0xE020, 0xE030, 0xE080, 0xE0A0, 0xE0C0, 0xE0C0, 0xE110,
+ 0xE150, 0xE170, 0xE150, 0xE130, 0xE150, 0xE0E0, 0xE100, 0xE110, 0xE0C0, 0xE0F0, 0xE130, 0xE1C0, 0xE1F0, 0xE250, 0xE290, 0xE2A0,
+ 0xE350, 0xE340, 0xE310, 0xE330, 0xE390, 0xE3A0, 0xE3A0, 0xE3D0, 0xE350, 0xE340, 0xE2F0, 0xE2F0, 0xE2D0, 0xE2E0, 0xE2E0, 0xE2C0,
+ 0xE300, 0xE360, 0xE340, 0xE340, 0xE340, 0xE380, 0xE390, 0xE390, 0xE3B0, 0xE3E0, 0xE460, 0xE3D0, 0xE3F0, 0xE450, 0xE440, 0xE480,
+ 0xE4D0, 0xE530, 0xE5C0, 0xE650, 0xE6F0, 0xE7A0, 0xE7E0, 0xE880, 0xE870, 0xE870, 0xE830, 0xE8B0, 0xE860, 0xE860, 0xE870, 0xE7D0,
+ 0xE7E0, 0xE7E0, 0xE790, 0xE7E0, 0xE7B0, 0xE7D0, 0xE870, 0xE830, 0xE900, 0xE8B0, 0xE870, 0xE8C0, 0xE8A0, 0xE910, 0xE920, 0xE940,
+ 0xE9B0, 0xE950, 0xE9F0, 0xE9D0, 0xE950, 0xE960, 0xE940, 0xE940, 0xE940, 0xE930, 0xE9A0, 0xE9A0, 0xE9B0, 0xE9A0, 0xE9C0, 0xEA10,
+ 0xEA20, 0xEA60, 0xEA50, 0xEA80, 0xEB20, 0xEB50, 0xEBF0, 0xEBF0, 0xEC40, 0xEC50, 0xEC00, 0xEBE0, 0xEBA0, 0xEBB0, 0xEBE0, 0xEC20,
+ 0xEC20, 0xEC70, 0xECA0, 0xEC40, 0xECA0, 0xEC50, 0xEC70, 0xEC70, 0xECD0, 0xECB0, 0xECD0, 0xED60, 0xED00, 0xED90, 0xED80, 0xED90,
+ 0xEDB0, 0xED60, 0xEDC0, 0xED90, 0xED70, 0xEDA0, 0xEDA0, 0xEDF0, 0xEDF0, 0xEDB0, 0xEE00, 0xEE20, 0xEE70, 0xEEC0, 0xEE90, 0xEF30,
+ 0xEF30, 0xEF90, 0xEFF0, 0xF010, 0xF050, 0xF080, 0xF0C0, 0xF090, 0xF070, 0xF070, 0xF060, 0xF010, 0xF090, 0xF060, 0xF020, 0xF000,
+ 0xF020, 0xEFF0, 0xEFE0, 0xF050, 0xEFF0, 0xEFE0, 0xF010, 0xF030, 0xF0A0, 0xF0A0, 0xF090, 0xF060, 0xF0A0, 0xF0F0, 0xF150, 0xF130,
+ 0xF1B0, 0xF1A0, 0xF250, 0xF250, 0xF1A0, 0xF1C0, 0xF220, 0xF250, 0xF290, 0xF210, 0xF2B0, 0xF210, 0xF260, 0xF210, 0xF1D0, 0xF220,
+ 0xF220, 0xF250, 0xF280, 0xF250, 0xF2E0, 0xF350, 0xF3B0, 0xF3E0, 0xF3C0, 0xF400, 0xF3B0, 0xF3F0, 0xF420, 0xF3C0, 0xF470, 0xF430,
+ 0xF3E0, 0xF420, 0xF420, 0xF470, 0xF470, 0xF4A0, 0xF480, 0xF440, 0xF480, 0xF470, 0xF440, 0xF4A0, 0xF480, 0xF4E0, 0xF540, 0xF550,
+ 0xF5E0, 0xF5B0, 0xF5F0, 0xF5D0, 0xF5B0, 0xF5E0, 0xF5C0, 0xF630, 0xF680, 0xF600, 0xF680, 0xF6B0, 0xF6B0, 0xF680, 0xF650, 0xF670,
+ 0xF640, 0xF680, 0xF670, 0xF660, 0xF600, 0xF630, 0xF660, 0xF640, 0xF6C0, 0xF6B0, 0xF6C0, 0xF750, 0xF760, 0xF760, 0xF750, 0xF700,
+ 0xF700, 0xF720, 0xF710, 0xF730, 0xF720, 0xF760, 0xF710, 0xF760, 0xF730, 0xF770, 0xF750, 0xF7A0, 0xF7B0, 0xF7D0, 0xF7A0, 0xF800,
+ 0xF7F0, 0xF850, 0xF810, 0xF800, 0xF790, 0xF790, 0xF770, 0xF7A0, 0xF730, 0xF7A0, 0xF7A0, 0xF790, 0xF880, 0xF890, 0xF900, 0xF910,
+ 0xF890, 0xF8E0, 0xF840, 0xF800, 0xF860, 0xF870, 0xF8E0, 0xF900, 0xF900, 0xF920, 0xF8D0, 0xF8F0, 0xF880, 0xF8E0, 0xF890, 0xF860,
+ 0xF900, 0xF900, 0xF8F0, 0xF900, 0xF820, 0xF890, 0xF870, 0xF850, 0xF860, 0xF840, 0xF8D0, 0xF8D0, 0xF930, 0xF960, 0xF940, 0xF950,
+ 0xF950, 0xF970, 0xF9C0, 0xF990, 0xFA30, 0xFA20, 0xF9C0, 0xFA30, 0xFA10, 0xFA60, 0xFA20, 0xF9C0, 0xF9E0, 0xF980, 0xF990, 0xF9B0,
+ 0xF960, 0xFA20, 0xFA00, 0xF9E0, 0xF9B0, 0xF970, 0xF950, 0xF960, 0xF9A0, 0xF950, 0xF950, 0xF9F0, 0xFA60, 0xFA40, 0xFA80, 0xFA50,
+ 0xFB40, 0xFB00, 0xFB20, 0xFB40, 0xFA40, 0xFAB0, 0xFAA0, 0xFAA0, 0xFA70, 0xFA50, 0xFAD0, 0xFB00, 0xFB20, 0xFB50, 0xFB30, 0xFB60,
+ 0xFB40, 0xFB70, 0xFB30, 0xFB00, 0xFB00, 0xFB10, 0xFA90, 0xFAB0, 0xFAA0, 0xFB40, 0xFB90, 0xFB60, 0xFBD0, 0xFC30, 0xFC30, 0xFC20,
+ 0xFC00, 0xFBF0, 0xFBF0, 0xFC00, 0xFC10, 0xFB90, 0xFBE0, 0xFBC0, 0xFB90, 0xFB90, 0xFB60, 0xFB50, 0xFB20, 0xFB30, 0xFB80, 0xFB90,
+};
+
+#endif // MIC_BLOW_H
diff --git a/src/frontend/qt_sdl/AudioSettingsDialog.cpp b/src/frontend/qt_sdl/AudioSettingsDialog.cpp
new file mode 100644
index 0000000..2ff5307
--- /dev/null
+++ b/src/frontend/qt_sdl/AudioSettingsDialog.cpp
@@ -0,0 +1,103 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <QFileDialog>
+
+#include "types.h"
+#include "Platform.h"
+#include "Config.h"
+#include "PlatformConfig.h"
+
+#include "AudioSettingsDialog.h"
+#include "ui_AudioSettingsDialog.h"
+
+
+AudioSettingsDialog* AudioSettingsDialog::currentDlg = nullptr;
+
+extern char* EmuDirectory;
+
+
+AudioSettingsDialog::AudioSettingsDialog(QWidget* parent) : QDialog(parent), ui(new Ui::AudioSettingsDialog)
+{
+ ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ oldVolume = Config::AudioVolume;
+
+ ui->slVolume->setValue(Config::AudioVolume);
+
+ grpMicMode = new QButtonGroup(this);
+ grpMicMode->addButton(ui->rbMicNone, 0);
+ grpMicMode->addButton(ui->rbMicExternal, 1);
+ grpMicMode->addButton(ui->rbMicNoise, 2);
+ grpMicMode->addButton(ui->rbMicWav, 3);
+ connect(grpMicMode, SIGNAL(buttonClicked(int)), this, SLOT(onChangeMicMode(int)));
+ grpMicMode->button(Config::MicInputType)->setChecked(true);
+
+ ui->txtMicWavPath->setText(Config::MicWavPath);
+
+ bool iswav = (Config::MicInputType == 3);
+ ui->txtMicWavPath->setEnabled(iswav);
+ ui->btnMicWavBrowse->setEnabled(iswav);
+}
+
+AudioSettingsDialog::~AudioSettingsDialog()
+{
+ delete ui;
+}
+
+void AudioSettingsDialog::on_AudioSettingsDialog_accepted()
+{
+ Config::MicInputType = grpMicMode->checkedId();
+ strncpy(Config::MicWavPath, ui->txtMicWavPath->text().toStdString().c_str(), 1023); Config::MicWavPath[1023] = '\0';
+ Config::Save();
+
+ closeDlg();
+}
+
+void AudioSettingsDialog::on_AudioSettingsDialog_rejected()
+{
+ Config::AudioVolume = oldVolume;
+
+ closeDlg();
+}
+
+void AudioSettingsDialog::on_slVolume_valueChanged(int val)
+{
+ Config::AudioVolume = val;
+}
+
+void AudioSettingsDialog::onChangeMicMode(int mode)
+{
+ bool iswav = (mode == 3);
+ ui->txtMicWavPath->setEnabled(iswav);
+ ui->btnMicWavBrowse->setEnabled(iswav);
+}
+
+void AudioSettingsDialog::on_btnMicWavBrowse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select WAV file...",
+ EmuDirectory,
+ "WAV files (*.wav);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtMicWavPath->setText(file);
+}
diff --git a/src/frontend/qt_sdl/AudioSettingsDialog.h b/src/frontend/qt_sdl/AudioSettingsDialog.h
new file mode 100644
index 0000000..3bafa30
--- /dev/null
+++ b/src/frontend/qt_sdl/AudioSettingsDialog.h
@@ -0,0 +1,69 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef AUDIOSETTINGSDIALOG_H
+#define AUDIOSETTINGSDIALOG_H
+
+#include <QDialog>
+#include <QButtonGroup>
+
+namespace Ui { class AudioSettingsDialog; }
+class AudioSettingsDialog;
+
+class AudioSettingsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit AudioSettingsDialog(QWidget* parent);
+ ~AudioSettingsDialog();
+
+ static AudioSettingsDialog* currentDlg;
+ static AudioSettingsDialog* openDlg(QWidget* parent)
+ {
+ if (currentDlg)
+ {
+ currentDlg->activateWindow();
+ return currentDlg;
+ }
+
+ currentDlg = new AudioSettingsDialog(parent);
+ currentDlg->show();
+ return currentDlg;
+ }
+ static void closeDlg()
+ {
+ currentDlg = nullptr;
+ }
+
+private slots:
+ void on_AudioSettingsDialog_accepted();
+ void on_AudioSettingsDialog_rejected();
+
+ void on_slVolume_valueChanged(int val);
+ void onChangeMicMode(int mode);
+ void on_btnMicWavBrowse_clicked();
+
+private:
+ Ui::AudioSettingsDialog* ui;
+
+ int oldVolume;
+ QButtonGroup* grpMicMode;
+};
+
+#endif // AUDIOSETTINGSDIALOG_H
diff --git a/src/frontend/qt_sdl/AudioSettingsDialog.ui b/src/frontend/qt_sdl/AudioSettingsDialog.ui
new file mode 100644
index 0000000..bcaf937
--- /dev/null
+++ b/src/frontend/qt_sdl/AudioSettingsDialog.ui
@@ -0,0 +1,174 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AudioSettingsDialog</class>
+ <widget class="QDialog" name="AudioSettingsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>482</width>
+ <height>230</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string>Audio settings - melonDS</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetFixedSize</enum>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Audio output</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Volume:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QSlider" name="slVolume">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Controls the volume of the audio output.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="maximum">
+ <number>256</number>
+ </property>
+ <property name="pageStep">
+ <number>16</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Microphone input</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="txtMicWavPath">
+ <property name="minimumSize">
+ <size>
+ <width>290</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Forward a WAV file to the emulated microphone.&lt;/p&gt;&lt;p&gt;This input mode is activated by holding the microphone hotkey (see Input and Hotkeys).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QRadioButton" name="rbMicWav">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Forward a WAV file to the emulated microphone.&lt;/p&gt;&lt;p&gt;This input mode is activated by holding the microphone hotkey (see Input and Hotkeys).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>WAV file:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QPushButton" name="btnMicWavBrowse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="3">
+ <widget class="QRadioButton" name="rbMicExternal">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Input from an external microphone, if available, will be forwarded to the emulated microphone.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>External microphone</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="3">
+ <widget class="QRadioButton" name="rbMicNoise">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Noise will be forwarded to the emulated microphone, simulating blowing into the microphone.&lt;/p&gt;&lt;p&gt;This input mode is activated by holding the microphone hotkey (see Input and Hotkeys).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>Blow noise</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" colspan="3">
+ <widget class="QRadioButton" name="rbMicNone">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;No microphone input.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>None</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>AudioSettingsDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>AudioSettingsDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/frontend/qt_sdl/CMakeLists.txt b/src/frontend/qt_sdl/CMakeLists.txt
index 0b39a1c..1559cd4 100644
--- a/src/frontend/qt_sdl/CMakeLists.txt
+++ b/src/frontend/qt_sdl/CMakeLists.txt
@@ -2,56 +2,93 @@ project(qt_sdl)
SET(SOURCES_QT_SDL
main.cpp
+ main_shaders.h
+ EmuSettingsDialog.cpp
+ InputConfigDialog.cpp
+ VideoSettingsDialog.cpp
+ AudioSettingsDialog.cpp
+ WifiSettingsDialog.cpp
+ Input.cpp
+ LAN_PCap.cpp
+ LAN_Socket.cpp
+ OSD.cpp
+ OSD_shaders.h
+ font.h
Platform.cpp
PlatformConfig.cpp
-
+
../Util_ROM.cpp
+ ../Util_Video.cpp
../Util_Audio.cpp
../FrontendUtil.h
+ ../mic_blow.h
+
+ ../../../melon.qrc
)
if (WIN32)
set(CMAKE_RC_COMPILE_OBJECT "<CMAKE_RC_COMPILER> -i <SOURCE> -o <OBJECT>")
endif()
-find_package(Qt5 COMPONENTS Core REQUIRED)
-find_package(Qt5 COMPONENTS Gui REQUIRED)
-find_package(Qt5 COMPONENTS Widgets REQUIRED)
-find_package(Threads REQUIRED)
+if (BUILD_STATIC AND QT5_STATIC_DIR)
+ set(QT5_STATIC_BASE ${QT5_STATIC_DIR}/lib/cmake/Qt5)
+ set(Qt5_DIR ${QT5_STATIC_BASE})
+ set(Qt5Core_DIR ${QT5_STATIC_BASE}Core)
+ set(Qt5Gui_DIR ${QT5_STATIC_BASE}Gui)
+ set(Qt5Widgets_DIR ${QT5_STATIC_BASE}Widgets)
+endif()
+
+find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED)
set(CMAKE_AUTOMOC ON)
+set(CMAKE_AUTOUIC ON)
+set(CMAKE_AUTORCC ON)
find_package(PkgConfig REQUIRED)
pkg_check_modules(SDL2 REQUIRED sdl2)
-add_executable(melonDS ${SOURCES_QT_SDL})
+if (WIN32 AND (CMAKE_BUILD_TYPE STREQUAL Release))
+ add_executable(melonDS WIN32 ${SOURCES_QT_SDL})
+else()
+ add_executable(melonDS ${SOURCES_QT_SDL})
+endif()
+
target_include_directories(melonDS PRIVATE ${SDL2_INCLUDE_DIRS})
+target_include_directories(melonDS PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")
target_include_directories(melonDS PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/..")
target_include_directories(melonDS PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../..")
-target_link_libraries(melonDS core ${SDL2_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
+target_link_libraries(melonDS core)
+
+if (BUILD_STATIC)
+ target_link_libraries(melonDS -static ${SDL2_LIBRARIES})
+else()
+ target_link_libraries(melonDS ${SDL2_LIBRARIES})
+endif()
if (UNIX)
option(PORTABLE "Make a portable build that looks for its configuration in the current directory" OFF)
-
- if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
- target_link_libraries(melonDS dl Qt5::Core Qt5::Gui Qt5::Widgets)
- endif ()
+ target_link_libraries(melonDS dl Qt5::Core Qt5::Gui Qt5::Widgets)
elseif (WIN32)
option(PORTABLE "Make a portable build that looks for its configuration in the current directory" ON)
target_sources(melonDS PUBLIC "${CMAKE_SOURCE_DIR}/melon.rc")
- target_link_libraries(melonDS comctl32 d2d1 dwrite uxtheme ws2_32 iphlpapi gdi32 Qt5::Core Qt5::Gui Qt5::Widgets)
-endif ()
+
+ target_link_libraries(melonDS comctl32 d2d1 dwrite uxtheme ws2_32 iphlpapi gdi32)
+ if (BUILD_STATIC)
+ target_link_libraries(melonDS imm32 winmm version setupapi -static Qt5::Core Qt5::Gui Qt5::Widgets z zstd)
+ else()
+ target_link_libraries(melonDS Qt5::Core Qt5::Gui Qt5::Widgets)
+ endif()
+endif()
if (PORTABLE)
add_definitions(-DPORTABLE)
endif()
-install(FILES ../../net.kuribo64.melonDS.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
-install(FILES ../../icon/melon_16x16.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/16x16/apps RENAME net.kuribo64.melonDS.png)
-install(FILES ../../icon/melon_32x32.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/32x32/apps RENAME net.kuribo64.melonDS.png)
-install(FILES ../../icon/melon_48x48.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps RENAME net.kuribo64.melonDS.png)
-install(FILES ../../icon/melon_64x64.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/64x64/apps RENAME net.kuribo64.melonDS.png)
-install(FILES ../../icon/melon_128x128.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128x128/apps RENAME net.kuribo64.melonDS.png)
-install(FILES ../../icon/melon_256x256.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps RENAME net.kuribo64.melonDS.png)
-install(FILES ../../romlist.bin DESTINATION ${CMAKE_INSTALL_PREFIX}/share/melonDS)
+install(FILES ../../../net.kuribo64.melonDS.desktop DESTINATION ${CMAKE_INSTALL_PREFIX}/share/applications)
+install(FILES ../../../icon/melon_16x16.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/16x16/apps RENAME net.kuribo64.melonDS.png)
+install(FILES ../../../icon/melon_32x32.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/32x32/apps RENAME net.kuribo64.melonDS.png)
+install(FILES ../../../icon/melon_48x48.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/48x48/apps RENAME net.kuribo64.melonDS.png)
+install(FILES ../../../icon/melon_64x64.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/64x64/apps RENAME net.kuribo64.melonDS.png)
+install(FILES ../../../icon/melon_128x128.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/128x128/apps RENAME net.kuribo64.melonDS.png)
+install(FILES ../../../icon/melon_256x256.png DESTINATION ${CMAKE_INSTALL_PREFIX}/share/icons/hicolor/256x256/apps RENAME net.kuribo64.melonDS.png)
install(TARGETS melonDS RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)
diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.cpp b/src/frontend/qt_sdl/EmuSettingsDialog.cpp
new file mode 100644
index 0000000..09faf4e
--- /dev/null
+++ b/src/frontend/qt_sdl/EmuSettingsDialog.cpp
@@ -0,0 +1,213 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "types.h"
+#include "Platform.h"
+#include "Config.h"
+#include "PlatformConfig.h"
+
+#include "EmuSettingsDialog.h"
+#include "ui_EmuSettingsDialog.h"
+
+
+EmuSettingsDialog* EmuSettingsDialog::currentDlg = nullptr;
+
+extern char* EmuDirectory;
+
+
+EmuSettingsDialog::EmuSettingsDialog(QWidget* parent) : QDialog(parent), ui(new Ui::EmuSettingsDialog)
+{
+ ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ ui->txtBIOS9Path->setText(Config::BIOS9Path);
+ ui->txtBIOS7Path->setText(Config::BIOS7Path);
+ ui->txtFirmwarePath->setText(Config::FirmwarePath);
+
+ ui->txtDSiBIOS9Path->setText(Config::DSiBIOS9Path);
+ ui->txtDSiBIOS7Path->setText(Config::DSiBIOS7Path);
+ ui->txtDSiFirmwarePath->setText(Config::DSiFirmwarePath);
+ ui->txtDSiNANDPath->setText(Config::DSiNANDPath);
+
+ ui->cbxConsoleType->addItem("DS");
+ ui->cbxConsoleType->addItem("DSi (experimental)");
+ ui->cbxConsoleType->setCurrentIndex(Config::ConsoleType);
+
+ ui->chkDirectBoot->setChecked(Config::DirectBoot != 0);
+}
+
+EmuSettingsDialog::~EmuSettingsDialog()
+{
+ delete ui;
+}
+
+void EmuSettingsDialog::verifyFirmware()
+{
+ // verify the firmware
+ //
+ // there are dumps of an old hacked firmware floating around on the internet
+ // and those are problematic
+ // the hack predates WFC, and, due to this, any game that alters the WFC
+ // access point data will brick that firmware due to it having critical
+ // data in the same area. it has the same problem on hardware.
+ //
+ // but this should help stop users from reporting that issue over and over
+ // again, when the issue is not from melonDS but from their firmware dump.
+ //
+ // I don't know about all the firmware hacks in existence, but the one I
+ // looked at has 0x180 bytes from the header repeated at 0x3FC80, but
+ // bytes 0x0C-0x14 are different.
+
+ char filename[1024];
+ strncpy(filename, ui->txtFirmwarePath->text().toStdString().c_str(), 1023); filename[1023] = '\0';
+ FILE* f = Platform::OpenLocalFile(filename, "rb");
+ u8 chk1[0x180], chk2[0x180];
+
+ fseek(f, 0, SEEK_SET);
+ fread(chk1, 1, 0x180, f);
+ fseek(f, -0x380, SEEK_END);
+ fread(chk2, 1, 0x180, f);
+
+ memset(&chk1[0x0C], 0, 8);
+ memset(&chk2[0x0C], 0, 8);
+
+ fclose(f);
+
+ if (!memcmp(chk1, chk2, 0x180))
+ {
+ QMessageBox::warning((QWidget*)this->parent(),
+ "Problematic firmware dump",
+ "You are using an old hacked firmware dump.\n"
+ "Firmware boot will stop working if you run any game that alters WFC settings.\n\n"
+ "Note that the issue is not from melonDS, it would also happen on an actual DS.");
+ }
+}
+
+void EmuSettingsDialog::on_EmuSettingsDialog_accepted()
+{
+ verifyFirmware();
+
+ strncpy(Config::BIOS9Path, ui->txtBIOS9Path->text().toStdString().c_str(), 1023); Config::BIOS9Path[1023] = '\0';
+ strncpy(Config::BIOS7Path, ui->txtBIOS7Path->text().toStdString().c_str(), 1023); Config::BIOS7Path[1023] = '\0';
+ strncpy(Config::FirmwarePath, ui->txtFirmwarePath->text().toStdString().c_str(), 1023); Config::FirmwarePath[1023] = '\0';
+
+ strncpy(Config::DSiBIOS9Path, ui->txtDSiBIOS9Path->text().toStdString().c_str(), 1023); Config::DSiBIOS9Path[1023] = '\0';
+ strncpy(Config::DSiBIOS7Path, ui->txtDSiBIOS7Path->text().toStdString().c_str(), 1023); Config::DSiBIOS7Path[1023] = '\0';
+ strncpy(Config::DSiFirmwarePath, ui->txtDSiFirmwarePath->text().toStdString().c_str(), 1023); Config::DSiFirmwarePath[1023] = '\0';
+ strncpy(Config::DSiNANDPath, ui->txtDSiNANDPath->text().toStdString().c_str(), 1023); Config::DSiNANDPath[1023] = '\0';
+
+ Config::ConsoleType = ui->cbxConsoleType->currentIndex();
+ Config::DirectBoot = ui->chkDirectBoot->isChecked() ? 1:0;
+
+ Config::Save();
+
+ closeDlg();
+}
+
+void EmuSettingsDialog::on_EmuSettingsDialog_rejected()
+{
+ closeDlg();
+}
+
+void EmuSettingsDialog::on_btnBIOS9Browse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DS-mode ARM9 BIOS...",
+ EmuDirectory,
+ "BIOS files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtBIOS9Path->setText(file);
+}
+
+void EmuSettingsDialog::on_btnBIOS7Browse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DS-mode ARM7 BIOS...",
+ EmuDirectory,
+ "BIOS files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtBIOS7Path->setText(file);
+}
+
+void EmuSettingsDialog::on_btnFirmwareBrowse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DS-mode firmware...",
+ EmuDirectory,
+ "Firmware files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtFirmwarePath->setText(file);
+}
+
+void EmuSettingsDialog::on_btnDSiBIOS9Browse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DSi-mode ARM9 BIOS...",
+ EmuDirectory,
+ "BIOS files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtDSiBIOS9Path->setText(file);
+}
+
+void EmuSettingsDialog::on_btnDSiBIOS7Browse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DSi-mode ARM7 BIOS...",
+ EmuDirectory,
+ "BIOS files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtDSiBIOS7Path->setText(file);
+}
+
+void EmuSettingsDialog::on_btnDSiFirmwareBrowse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DSi DS-mode firmware...",
+ EmuDirectory,
+ "Firmware files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtDSiFirmwarePath->setText(file);
+}
+
+void EmuSettingsDialog::on_btnDSiNANDBrowse_clicked()
+{
+ QString file = QFileDialog::getOpenFileName(this,
+ "Select DSi NAND...",
+ EmuDirectory,
+ "NAND files (*.bin *.rom);;Any file (*.*)");
+
+ if (file.isEmpty()) return;
+
+ ui->txtDSiNANDPath->setText(file);
+}
diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.h b/src/frontend/qt_sdl/EmuSettingsDialog.h
new file mode 100644
index 0000000..f604ba5
--- /dev/null
+++ b/src/frontend/qt_sdl/EmuSettingsDialog.h
@@ -0,0 +1,72 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef EMUSETTINGSDIALOG_H
+#define EMUSETTINGSDIALOG_H
+
+#include <QDialog>
+
+namespace Ui { class EmuSettingsDialog; }
+class EmuSettingsDialog;
+
+class EmuSettingsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit EmuSettingsDialog(QWidget* parent);
+ ~EmuSettingsDialog();
+
+ static EmuSettingsDialog* currentDlg;
+ static EmuSettingsDialog* openDlg(QWidget* parent)
+ {
+ if (currentDlg)
+ {
+ currentDlg->activateWindow();
+ return currentDlg;
+ }
+
+ currentDlg = new EmuSettingsDialog(parent);
+ currentDlg->show();
+ return currentDlg;
+ }
+ static void closeDlg()
+ {
+ currentDlg = nullptr;
+ }
+
+private slots:
+ void on_EmuSettingsDialog_accepted();
+ void on_EmuSettingsDialog_rejected();
+
+ void on_btnBIOS9Browse_clicked();
+ void on_btnBIOS7Browse_clicked();
+ void on_btnFirmwareBrowse_clicked();
+
+ void on_btnDSiBIOS9Browse_clicked();
+ void on_btnDSiBIOS7Browse_clicked();
+ void on_btnDSiFirmwareBrowse_clicked();
+ void on_btnDSiNANDBrowse_clicked();
+
+private:
+ void verifyFirmware();
+
+ Ui::EmuSettingsDialog* ui;
+};
+
+#endif // EMUSETTINGSDIALOG_H
diff --git a/src/frontend/qt_sdl/EmuSettingsDialog.ui b/src/frontend/qt_sdl/EmuSettingsDialog.ui
new file mode 100644
index 0000000..4894fa5
--- /dev/null
+++ b/src/frontend/qt_sdl/EmuSettingsDialog.ui
@@ -0,0 +1,313 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EmuSettingsDialog</class>
+ <widget class="QDialog" name="EmuSettingsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>490</width>
+ <height>392</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string>Emu settings - melonDS</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetFixedSize</enum>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>DS mode</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="txtBIOS9Path">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>290</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="statusTip">
+ <string/>
+ </property>
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DS-mode ARM9 BIOS&lt;/p&gt;&lt;p&gt;Size should be 4 KB&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>DS firmware:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>DS ARM7 BIOS:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>DS ARM9 BIOS:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QPushButton" name="btnBIOS9Browse">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ <property name="autoDefault">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="txtBIOS7Path">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DS-mode ARM7 BIOS&lt;/p&gt;&lt;p&gt;Size should be 16 KB&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QPushButton" name="btnBIOS7Browse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="txtFirmwarePath">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DS-mode firmware&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Possible firmwares:&lt;/p&gt;&lt;p&gt;* 128 KB: DS-mode firmware from a DSi or 3DS. Not bootable.&lt;/p&gt;&lt;p&gt;* 256 KB: regular DS firmware.&lt;/p&gt;&lt;p&gt;* 512 KB: iQue DS firmware.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QPushButton" name="btnFirmwareBrowse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+ <string>DSi mode</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="2">
+ <widget class="QPushButton" name="btnDSiBIOS9Browse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>DSi ARM9 BIOS:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="2">
+ <widget class="QPushButton" name="btnDSiFirmwareBrowse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLineEdit" name="txtDSiBIOS7Path">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DSi-mode ARM7 BIOS&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Size should be 64 KB&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLineEdit" name="txtDSiFirmwarePath">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DSi-mode firmware (used for DS-mode backwards compatibility)&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Size should be 128 KB&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>DSi ARM7 BIOS:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>DSi firmware:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QPushButton" name="btnDSiBIOS7Browse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QLineEdit" name="txtDSiBIOS9Path">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DSi-mode ARM9 BIOS&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Size should be 64 KB&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>DSi NAND:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLineEdit" name="txtDSiNANDPath">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;DSi NAND dump&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Should have 'nocash footer' at the end&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="2">
+ <widget class="QPushButton" name="btnDSiNANDBrowse">
+ <property name="text">
+ <string>Browse...</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>General</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Console type:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="cbxConsoleType">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The type of console to emulate&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QCheckBox" name="chkDirectBoot">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When loading a ROM, completely skip the regular boot process (&amp;quot;Nintendo DS&amp;quot; screen) to boot the ROM directly.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Note: if your firmware dump isn't bootable, the ROM will be booted directly regardless of this setting.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>Boot game directly</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>EmuSettingsDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>EmuSettingsDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/frontend/qt_sdl/Input.cpp b/src/frontend/qt_sdl/Input.cpp
new file mode 100644
index 0000000..84d20ad
--- /dev/null
+++ b/src/frontend/qt_sdl/Input.cpp
@@ -0,0 +1,244 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <QKeyEvent>
+#include <SDL2/SDL.h>
+
+#include "Input.h"
+#include "PlatformConfig.h"
+
+
+namespace Input
+{
+
+int JoystickID;
+SDL_Joystick* Joystick = nullptr;
+
+u32 KeyInputMask, JoyInputMask;
+u32 KeyHotkeyMask, JoyHotkeyMask;
+u32 HotkeyMask, LastHotkeyMask;
+u32 HotkeyPress, HotkeyRelease;
+
+u32 InputMask;
+
+
+void Init()
+{
+ KeyInputMask = 0xFFF;
+ JoyInputMask = 0xFFF;
+ InputMask = 0xFFF;
+
+ KeyHotkeyMask = 0;
+ JoyHotkeyMask = 0;
+ HotkeyMask = 0;
+ LastHotkeyMask = 0;
+}
+
+
+void OpenJoystick()
+{
+ if (Joystick) SDL_JoystickClose(Joystick);
+
+ int num = SDL_NumJoysticks();
+ if (num < 1)
+ {
+ Joystick = nullptr;
+ return;
+ }
+
+ if (JoystickID >= num)
+ JoystickID = 0;
+
+ Joystick = SDL_JoystickOpen(JoystickID);
+}
+
+void CloseJoystick()
+{
+ if (Joystick)
+ {
+ SDL_JoystickClose(Joystick);
+ Joystick = nullptr;
+ }
+}
+
+
+int GetEventKeyVal(QKeyEvent* event)
+{
+ int key = event->key();
+ int mod = event->modifiers();
+ bool ismod = (key == Qt::Key_Control ||
+ key == Qt::Key_Alt ||
+ key == Qt::Key_AltGr ||
+ key == Qt::Key_Shift ||
+ key == Qt::Key_Meta);
+
+ if (!ismod)
+ key |= mod;
+ else if (Input::IsRightModKey(event))
+ key |= (1<<31);
+
+ return key;
+}
+
+void KeyPress(QKeyEvent* event)
+{
+ int keyHK = GetEventKeyVal(event);
+ int keyKP = keyHK & ~event->modifiers();
+
+ for (int i = 0; i < 12; i++)
+ if (keyKP == Config::KeyMapping[i])
+ KeyInputMask &= ~(1<<i);
+
+ for (int i = 0; i < HK_MAX; i++)
+ if (keyHK == Config::HKKeyMapping[i])
+ KeyHotkeyMask |= (1<<i);
+}
+
+void KeyRelease(QKeyEvent* event)
+{
+ int keyHK = GetEventKeyVal(event);
+ int keyKP = keyHK & ~event->modifiers();
+
+ for (int i = 0; i < 12; i++)
+ if (keyKP == Config::KeyMapping[i])
+ KeyInputMask |= (1<<i);
+
+ for (int i = 0; i < HK_MAX; i++)
+ if (keyHK == Config::HKKeyMapping[i])
+ KeyHotkeyMask &= ~(1<<i);
+}
+
+
+bool JoystickButtonDown(int val)
+{
+ if (val == -1) return false;
+
+ bool hasbtn = ((val & 0xFFFF) != 0xFFFF);
+
+ if (hasbtn)
+ {
+ if (val & 0x100)
+ {
+ int hatnum = (val >> 4) & 0xF;
+ int hatdir = val & 0xF;
+ Uint8 hatval = SDL_JoystickGetHat(Joystick, hatnum);
+
+ bool pressed = false;
+ if (hatdir == 0x1) pressed = (hatval & SDL_HAT_UP);
+ else if (hatdir == 0x4) pressed = (hatval & SDL_HAT_DOWN);
+ else if (hatdir == 0x2) pressed = (hatval & SDL_HAT_RIGHT);
+ else if (hatdir == 0x8) pressed = (hatval & SDL_HAT_LEFT);
+
+ if (pressed) return true;
+ }
+ else
+ {
+ int btnnum = val & 0xFFFF;
+ Uint8 btnval = SDL_JoystickGetButton(Joystick, btnnum);
+
+ if (btnval) return true;
+ }
+ }
+
+ if (val & 0x10000)
+ {
+ int axisnum = (val >> 24) & 0xF;
+ int axisdir = (val >> 20) & 0xF;
+ Sint16 axisval = SDL_JoystickGetAxis(Joystick, axisnum);
+
+ switch (axisdir)
+ {
+ case 0: // positive
+ if (axisval > 16384) return true;
+ break;
+
+ case 1: // negative
+ if (axisval < -16384) return true;
+ break;
+
+ case 2: // trigger
+ if (axisval > 0) return true;
+ break;
+ }
+ }
+
+ return false;
+}
+
+void Process()
+{
+ SDL_JoystickUpdate();
+
+ if (Joystick)
+ {
+ if (!SDL_JoystickGetAttached(Joystick))
+ {
+ SDL_JoystickClose(Joystick);
+ Joystick = NULL;
+ }
+ }
+ if (!Joystick && (SDL_NumJoysticks() > 0))
+ {
+ JoystickID = Config::JoystickID;
+ OpenJoystick();
+ }
+
+ JoyInputMask = 0xFFF;
+ for (int i = 0; i < 12; i++)
+ if (JoystickButtonDown(Config::JoyMapping[i]))
+ JoyInputMask &= ~(1<<i);
+
+ InputMask = KeyInputMask & JoyInputMask;
+
+ JoyHotkeyMask = 0;
+ for (int i = 0; i < HK_MAX; i++)
+ if (JoystickButtonDown(Config::HKJoyMapping[i]))
+ JoyHotkeyMask |= (1<<i);
+
+ HotkeyMask = KeyHotkeyMask | JoyHotkeyMask;
+ HotkeyPress = HotkeyMask & ~LastHotkeyMask;
+ HotkeyRelease = LastHotkeyMask & ~HotkeyMask;
+ LastHotkeyMask = HotkeyMask;
+}
+
+
+bool HotkeyDown(int id) { return HotkeyMask & (1<<id); }
+bool HotkeyPressed(int id) { return HotkeyPress & (1<<id); }
+bool HotkeyReleased(int id) { return HotkeyRelease & (1<<id); }
+
+
+// TODO: MacOS version of this!
+// distinguish between left and right modifier keys (Ctrl, Alt, Shift)
+// Qt provides no real cross-platform way to do this, so here we go
+// for Windows and Linux we can distinguish via scancodes (but both
+// provide different scancodes)
+#ifdef __WIN32__
+bool IsRightModKey(QKeyEvent* event)
+{
+ quint32 scan = event->nativeScanCode();
+ return (scan == 0x11D || scan == 0x138 || scan == 0x36);
+}
+#else
+bool IsRightModKey(QKeyEvent* event)
+{
+ quint32 scan = event->nativeScanCode();
+ return (scan == 0x69 || scan == 0x6C || scan == 0x3E);
+}
+#endif
+
+}
diff --git a/src/frontend/qt_sdl/Input.h b/src/frontend/qt_sdl/Input.h
new file mode 100644
index 0000000..14e7ea8
--- /dev/null
+++ b/src/frontend/qt_sdl/Input.h
@@ -0,0 +1,51 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef INPUT_H
+#define INPUT_H
+
+#include "types.h"
+
+namespace Input
+{
+
+extern int JoystickID;
+extern SDL_Joystick* Joystick;
+
+extern u32 InputMask;
+
+void Init();
+
+// set joystickID before calling openJoystick()
+void OpenJoystick();
+void CloseJoystick();
+
+void KeyPress(QKeyEvent* event);
+void KeyRelease(QKeyEvent* event);
+
+void Process();
+
+bool HotkeyDown(int id);
+bool HotkeyPressed(int id);
+bool HotkeyReleased(int id);
+
+bool IsRightModKey(QKeyEvent* event);
+
+}
+
+#endif // INPUT_H
diff --git a/src/frontend/qt_sdl/InputConfigDialog.cpp b/src/frontend/qt_sdl/InputConfigDialog.cpp
new file mode 100644
index 0000000..81baa65
--- /dev/null
+++ b/src/frontend/qt_sdl/InputConfigDialog.cpp
@@ -0,0 +1,494 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <QGroupBox>
+#include <QLabel>
+#include <QKeyEvent>
+
+#include <SDL2/SDL.h>
+
+#include "types.h"
+#include "Config.h"
+#include "PlatformConfig.h"
+
+#include "Input.h"
+#include "InputConfigDialog.h"
+#include "ui_InputConfigDialog.h"
+
+
+InputConfigDialog* InputConfigDialog::currentDlg = nullptr;
+
+const int dskeyorder[12] = {0, 1, 10, 11, 5, 4, 6, 7, 9, 8, 2, 3};
+const char* dskeylabels[12] = {"A", "B", "X", "Y", "Left", "Right", "Up", "Down", "L", "R", "Select", "Start"};
+
+const int hk_addons[] =
+{
+ HK_SolarSensorIncrease,
+ HK_SolarSensorDecrease,
+};
+
+const char* hk_addons_labels[] =
+{
+ "[Boktai] Sunlight + ",
+ "[Boktai] Sunlight - ",
+};
+
+const int hk_general[] =
+{
+ HK_Pause,
+ HK_Reset,
+ HK_FastForward,
+ HK_FastForwardToggle,
+ HK_Lid,
+ HK_Mic,
+};
+
+const char* hk_general_labels[] =
+{
+ "Pause/resume",
+ "Reset",
+ "Fast forward",
+ "Toggle FPS limit",
+ "Close/open lid",
+ "Microphone",
+};
+
+
+InputConfigDialog::InputConfigDialog(QWidget* parent) : QDialog(parent), ui(new Ui::InputConfigDialog)
+{
+ ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ for (int i = 0; i < 12; i++)
+ {
+ keypadKeyMap[i] = Config::KeyMapping[dskeyorder[i]];
+ keypadJoyMap[i] = Config::JoyMapping[dskeyorder[i]];
+ }
+
+ for (int i = 0; i < 2; i++)
+ {
+ addonsKeyMap[i] = Config::HKKeyMapping[hk_addons[i]];
+ addonsJoyMap[i] = Config::HKJoyMapping[hk_addons[i]];
+ }
+
+ for (int i = 0; i < 6; i++)
+ {
+ hkGeneralKeyMap[i] = Config::HKKeyMapping[hk_general[i]];
+ hkGeneralJoyMap[i] = Config::HKJoyMapping[hk_general[i]];
+ }
+
+ populatePage(ui->tabInput, 12, dskeylabels, keypadKeyMap, keypadJoyMap);
+ populatePage(ui->tabAddons, 2, hk_addons_labels, addonsKeyMap, addonsJoyMap);
+ populatePage(ui->tabHotkeysGeneral, 6, hk_general_labels, hkGeneralKeyMap, hkGeneralJoyMap);
+
+ int njoy = SDL_NumJoysticks();
+ if (njoy > 0)
+ {
+ for (int i = 0; i < njoy; i++)
+ {
+ const char* name = SDL_JoystickNameForIndex(i);
+ ui->cbxJoystick->addItem(QString(name));
+ }
+ ui->cbxJoystick->setCurrentIndex(Input::JoystickID);
+ }
+ else
+ {
+ ui->cbxJoystick->addItem("(no joysticks available)");
+ ui->cbxJoystick->setEnabled(false);
+ }
+}
+
+InputConfigDialog::~InputConfigDialog()
+{
+ delete ui;
+}
+
+void InputConfigDialog::populatePage(QWidget* page, int num, const char** labels, int* keymap, int* joymap)
+{
+ // kind of a hack
+ bool ishotkey = (page != ui->tabInput);
+
+ QHBoxLayout* main_layout = new QHBoxLayout();
+
+ QGroupBox* group;
+ QGridLayout* group_layout;
+
+ group = new QGroupBox("Keyboard mappings:");
+ main_layout->addWidget(group);
+ group_layout = new QGridLayout();
+ group_layout->setSpacing(1);
+ for (int i = 0; i < num; i++)
+ {
+ QLabel* label = new QLabel(QString(labels[i])+":");
+ KeyMapButton* btn = new KeyMapButton(&keymap[i], ishotkey);
+
+ group_layout->addWidget(label, i, 0);
+ group_layout->addWidget(btn, i, 1);
+ }
+ group_layout->setRowStretch(num, 1);
+ group->setLayout(group_layout);
+ group->setMinimumWidth(275);
+
+ group = new QGroupBox("Joystick mappings:");
+ main_layout->addWidget(group);
+ group_layout = new QGridLayout();
+ group_layout->setSpacing(1);
+ for (int i = 0; i < num; i++)
+ {
+ QLabel* label = new QLabel(QString(labels[i])+":");
+ JoyMapButton* btn = new JoyMapButton(&joymap[i], ishotkey);
+
+ group_layout->addWidget(label, i, 0);
+ group_layout->addWidget(btn, i, 1);
+ }
+ group_layout->setRowStretch(num, 1);
+ group->setLayout(group_layout);
+ group->setMinimumWidth(275);
+
+ page->setLayout(main_layout);
+}
+
+void InputConfigDialog::on_InputConfigDialog_accepted()
+{
+ for (int i = 0; i < 12; i++)
+ {
+ Config::KeyMapping[dskeyorder[i]] = keypadKeyMap[i];
+ Config::JoyMapping[dskeyorder[i]] = keypadJoyMap[i];
+ }
+
+ for (int i = 0; i < 2; i++)
+ {
+ Config::HKKeyMapping[hk_addons[i]] = addonsKeyMap[i];
+ Config::HKJoyMapping[hk_addons[i]] = addonsJoyMap[i];
+ }
+
+ for (int i = 0; i < 6; i++)
+ {
+ Config::HKKeyMapping[hk_general[i]] = hkGeneralKeyMap[i];
+ Config::HKJoyMapping[hk_general[i]] = hkGeneralJoyMap[i];
+ }
+
+ Config::JoystickID = Input::JoystickID;
+ Config::Save();
+
+ closeDlg();
+}
+
+void InputConfigDialog::on_InputConfigDialog_rejected()
+{
+ Input::JoystickID = Config::JoystickID;
+ Input::OpenJoystick();
+
+ closeDlg();
+}
+
+void InputConfigDialog::on_cbxJoystick_currentIndexChanged(int id)
+{
+ // prevent a spurious change
+ if (ui->cbxJoystick->count() < 2) return;
+
+ Input::JoystickID = id;
+ Input::OpenJoystick();
+}
+
+
+KeyMapButton::KeyMapButton(int* mapping, bool hotkey) : QPushButton()
+{
+ this->mapping = mapping;
+ this->isHotkey = hotkey;
+
+ setCheckable(true);
+ setText(mappingText());
+
+ connect(this, &KeyMapButton::clicked, this, &KeyMapButton::onClick);
+}
+
+KeyMapButton::~KeyMapButton()
+{
+}
+
+void KeyMapButton::keyPressEvent(QKeyEvent* event)
+{
+ if (!isChecked()) return QPushButton::keyPressEvent(event);
+
+ printf("KEY PRESSED = %08X %08X | %08X %08X %08X\n", event->key(), event->modifiers(), event->nativeVirtualKey(), event->nativeModifiers(), event->nativeScanCode());
+
+ int key = event->key();
+ int mod = event->modifiers();
+ bool ismod = (key == Qt::Key_Control ||
+ key == Qt::Key_Alt ||
+ key == Qt::Key_AltGr ||
+ key == Qt::Key_Shift ||
+ key == Qt::Key_Meta);
+
+ if (!mod)
+ {
+ if (key == Qt::Key_Escape) { click(); return; }
+ if (key == Qt::Key_Backspace) { *mapping = -1; click(); return; }
+ }
+
+ if (isHotkey)
+ {
+ if (ismod)
+ return;
+ }
+
+ if (!ismod)
+ key |= mod;
+ else if (Input::IsRightModKey(event))
+ key |= (1<<31);
+
+ *mapping = key;
+ click();
+}
+
+void KeyMapButton::focusOutEvent(QFocusEvent* event)
+{
+ if (isChecked())
+ {
+ // if we lost the focus while mapping, consider it 'done'
+ click();
+ }
+
+ QPushButton::focusOutEvent(event);
+}
+
+void KeyMapButton::onClick()
+{
+ if (isChecked())
+ {
+ setText("[press key]");
+ }
+ else
+ {
+ setText(mappingText());
+ }
+}
+
+QString KeyMapButton::mappingText()
+{
+ int key = *mapping;
+
+ if (key == -1) return "None";
+
+ QString isright = (key & (1<<31)) ? "Right " : "Left ";
+ key &= ~(1<<31);
+
+ switch (key)
+ {
+ case Qt::Key_Control: return isright + "Ctrl";
+ case Qt::Key_Alt: return "Alt";
+ case Qt::Key_AltGr: return "AltGr";
+ case Qt::Key_Shift: return isright + "Shift";
+ case Qt::Key_Meta: return "Meta";
+ }
+
+ QKeySequence seq(key);
+ QString ret = seq.toString();
+
+ // weak attempt at detecting garbage key names
+ if (ret.length() == 2 && ret[0].unicode() > 0xFF)
+ return QString("[%1]").arg(key, 8, 16);
+
+ return ret.replace("&", "&&");
+}
+
+
+JoyMapButton::JoyMapButton(int* mapping, bool hotkey) : QPushButton()
+{
+ this->mapping = mapping;
+ this->isHotkey = hotkey;
+
+ setCheckable(true);
+ setText(mappingText());
+
+ connect(this, &JoyMapButton::clicked, this, &JoyMapButton::onClick);
+
+ timerID = 0;
+}
+
+JoyMapButton::~JoyMapButton()
+{
+}
+
+void JoyMapButton::keyPressEvent(QKeyEvent* event)
+{
+ if (!isChecked()) return QPushButton::keyPressEvent(event);
+
+ int key = event->key();
+ int mod = event->modifiers();
+
+ if (!mod)
+ {
+ if (key == Qt::Key_Escape) { click(); return; }
+ if (key == Qt::Key_Backspace) { *mapping = -1; click(); return; }
+ }
+}
+
+void JoyMapButton::focusOutEvent(QFocusEvent* event)
+{
+ if (isChecked())
+ {
+ // if we lost the focus while mapping, consider it 'done'
+ click();
+ }
+
+ QPushButton::focusOutEvent(event);
+}
+
+void JoyMapButton::timerEvent(QTimerEvent* event)
+{
+ SDL_Joystick* joy = Input::Joystick;
+ if (!joy) { click(); return; }
+ if (!SDL_JoystickGetAttached(joy)) { click(); return; }
+
+ int oldmap;
+ if (*mapping == -1) oldmap = 0xFFFF;
+ else oldmap = *mapping;
+
+ int nbuttons = SDL_JoystickNumButtons(joy);
+ for (int i = 0; i < nbuttons; i++)
+ {
+ if (SDL_JoystickGetButton(joy, i))
+ {
+ *mapping = (oldmap & 0xFFFF0000) | i;
+ click();
+ return;
+ }
+ }
+
+ int nhats = SDL_JoystickNumHats(joy);
+ if (nhats > 16) nhats = 16;
+ for (int i = 0; i < nhats; i++)
+ {
+ Uint8 blackhat = SDL_JoystickGetHat(joy, i);
+ if (blackhat)
+ {
+ if (blackhat & 0x1) blackhat = 0x1;
+ else if (blackhat & 0x2) blackhat = 0x2;
+ else if (blackhat & 0x4) blackhat = 0x4;
+ else blackhat = 0x8;
+
+ *mapping = (oldmap & 0xFFFF0000) | 0x100 | blackhat | (i << 4);
+ click();
+ return;
+ }
+ }
+
+ int naxes = SDL_JoystickNumAxes(joy);
+ if (naxes > 16) naxes = 16;
+ for (int i = 0; i < naxes; i++)
+ {
+ Sint16 axisval = SDL_JoystickGetAxis(joy, i);
+ int diff = abs(axisval - axesRest[i]);
+
+ if (axesRest[i] < -16384 && axisval >= 0)
+ {
+ *mapping = (oldmap & 0xFFFF) | 0x10000 | (2 << 20) | (i << 24);
+ click();
+ return;
+ }
+ else if (diff > 16384)
+ {
+ int axistype;
+ if (axisval > 0) axistype = 0;
+ else axistype = 1;
+
+ *mapping = (oldmap & 0xFFFF) | 0x10000 | (axistype << 20) | (i << 24);
+ click();
+ return;
+ }
+ }
+}
+
+void JoyMapButton::onClick()
+{
+ if (isChecked())
+ {
+ setText("[press button/axis]");
+ timerID = startTimer(50);
+
+ memset(axesRest, 0, sizeof(axesRest));
+ if (Input::Joystick && SDL_JoystickGetAttached(Input::Joystick))
+ {
+ int naxes = SDL_JoystickNumAxes(Input::Joystick);
+ if (naxes > 16) naxes = 16;
+ for (int a = 0; a < naxes; a++)
+ {
+ axesRest[a] = SDL_JoystickGetAxis(Input::Joystick, a);
+ }
+ }
+ }
+ else
+ {
+ setText(mappingText());
+ if (timerID) { killTimer(timerID); timerID = 0; }
+ }
+}
+
+QString JoyMapButton::mappingText()
+{
+ int id = *mapping;
+
+ if (id == -1) return "None";
+
+ bool hasbtn = ((id & 0xFFFF) != 0xFFFF);
+ QString str;
+
+ if (hasbtn)
+ {
+ if (id & 0x100)
+ {
+ int hatnum = ((id >> 4) & 0xF) + 1;
+
+ switch (id & 0xF)
+ {
+ case 0x1: str = "Hat %1 up"; break;
+ case 0x2: str = "Hat %1 right"; break;
+ case 0x4: str = "Hat %1 down"; break;
+ case 0x8: str = "Hat %1 left"; break;
+ }
+
+ str = str.arg(hatnum);
+ }
+ else
+ {
+ str = QString("Button %1").arg((id & 0xFFFF) + 1);
+ }
+ }
+ else
+ {
+ str = "";
+ }
+
+ if (id & 0x10000)
+ {
+ int axisnum = ((id >> 24) & 0xF) + 1;
+
+ if (hasbtn) str += " / ";
+
+ switch ((id >> 20) & 0xF)
+ {
+ case 0: str += QString("Axis %1 +").arg(axisnum); break;
+ case 1: str += QString("Axis %1 -").arg(axisnum); break;
+ case 2: str += QString("Trigger %1").arg(axisnum); break;
+ }
+ }
+
+ return str;
+}
diff --git a/src/frontend/qt_sdl/InputConfigDialog.h b/src/frontend/qt_sdl/InputConfigDialog.h
new file mode 100644
index 0000000..de57414
--- /dev/null
+++ b/src/frontend/qt_sdl/InputConfigDialog.h
@@ -0,0 +1,123 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef INPUTCONFIGDIALOG_H
+#define INPUTCONFIGDIALOG_H
+
+#include <QDialog>
+#include <QPushButton>
+
+namespace Ui { class InputConfigDialog; }
+class InputConfigDialog;
+
+class InputConfigDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit InputConfigDialog(QWidget* parent);
+ ~InputConfigDialog();
+
+ static InputConfigDialog* currentDlg;
+ static InputConfigDialog* openDlg(QWidget* parent)
+ {
+ if (currentDlg)
+ {
+ currentDlg->activateWindow();
+ return currentDlg;
+ }
+
+ currentDlg = new InputConfigDialog(parent);
+ currentDlg->open();
+ return currentDlg;
+ }
+ static void closeDlg()
+ {
+ currentDlg = nullptr;
+ }
+
+private slots:
+ void on_InputConfigDialog_accepted();
+ void on_InputConfigDialog_rejected();
+
+ void on_cbxJoystick_currentIndexChanged(int id);
+
+private:
+ void populatePage(QWidget* page, int num, const char** labels, int* keymap, int* joymap);
+
+ Ui::InputConfigDialog* ui;
+
+ int keypadKeyMap[12], keypadJoyMap[12];
+ int addonsKeyMap[2], addonsJoyMap[2];
+ int hkGeneralKeyMap[6], hkGeneralJoyMap[6];
+};
+
+
+class KeyMapButton : public QPushButton
+{
+ Q_OBJECT
+
+public:
+ explicit KeyMapButton(int* mapping, bool hotkey);
+ ~KeyMapButton();
+
+protected:
+ void keyPressEvent(QKeyEvent* event) override;
+ void focusOutEvent(QFocusEvent* event) override;
+
+ bool focusNextPrevChild(bool next) override { return false; }
+
+private slots:
+ void onClick();
+
+private:
+ QString mappingText();
+
+ int* mapping;
+ bool isHotkey;
+};
+
+class JoyMapButton : public QPushButton
+{
+ Q_OBJECT
+
+public:
+ explicit JoyMapButton(int* mapping, bool hotkey);
+ ~JoyMapButton();
+
+protected:
+ void keyPressEvent(QKeyEvent* event) override;
+ void focusOutEvent(QFocusEvent* event) override;
+ void timerEvent(QTimerEvent* event) override;
+
+ bool focusNextPrevChild(bool next) override { return false; }
+
+private slots:
+ void onClick();
+
+private:
+ QString mappingText();
+
+ int* mapping;
+ bool isHotkey;
+
+ int timerID;
+ int axesRest[16];
+};
+
+#endif // INPUTCONFIGDIALOG_H
diff --git a/src/frontend/qt_sdl/InputConfigDialog.ui b/src/frontend/qt_sdl/InputConfigDialog.ui
new file mode 100644
index 0000000..655da16
--- /dev/null
+++ b/src/frontend/qt_sdl/InputConfigDialog.ui
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>InputConfigDialog</class>
+ <widget class="QDialog" name="InputConfigDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>488</width>
+ <height>365</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Input and hotkeys - melonDS</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetFixedSize</enum>
+ </property>
+ <item>
+ <widget class="QTabWidget" name="tabWidget">
+ <property name="currentIndex">
+ <number>0</number>
+ </property>
+ <widget class="QWidget" name="tabInput">
+ <attribute name="title">
+ <string>DS keypad</string>
+ </attribute>
+ </widget>
+ <widget class="QWidget" name="tabAddons">
+ <attribute name="title">
+ <string>Add-ons</string>
+ </attribute>
+ </widget>
+ <widget class="QWidget" name="tabHotkeysGeneral">
+ <attribute name="title">
+ <string>General hotkeys</string>
+ </attribute>
+ </widget>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <property name="leftMargin">
+ <number>0</number>
+ </property>
+ <property name="topMargin">
+ <number>0</number>
+ </property>
+ <property name="rightMargin">
+ <number>0</number>
+ </property>
+ <property name="bottomMargin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>Joystick:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QComboBox" name="cbxJoystick">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Selects which joystick will be used for joystick input, if any is present.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>InputConfigDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>InputConfigDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/frontend/qt_sdl/LAN_PCap.cpp b/src/frontend/qt_sdl/LAN_PCap.cpp
new file mode 100644
index 0000000..ce278bc
--- /dev/null
+++ b/src/frontend/qt_sdl/LAN_PCap.cpp
@@ -0,0 +1,387 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+// direct LAN interface. Currently powered by libpcap, may change.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <SDL2/SDL.h>
+#include <pcap/pcap.h>
+#include "../Wifi.h"
+#include "LAN_PCap.h"
+#include "PlatformConfig.h"
+
+#ifdef __WIN32__
+ #include <iphlpapi.h>
+#else
+ #include <sys/types.h>
+ #include <ifaddrs.h>
+ #include <netinet/in.h>
+ #include <linux/if_packet.h>
+#endif
+
+
+// welp
+#ifndef PCAP_OPENFLAG_PROMISCUOUS
+#define PCAP_OPENFLAG_PROMISCUOUS 1
+#endif
+
+
+#define DECL_PCAP_FUNC(ret, name, args, args2) \
+ typedef ret (*type_##name) args; \
+ type_##name ptr_##name = NULL; \
+ ret name args { return ptr_##name args2; }
+
+DECL_PCAP_FUNC(int, pcap_findalldevs, (pcap_if_t** alldevs, char* errbuf), (alldevs,errbuf))
+DECL_PCAP_FUNC(void, pcap_freealldevs, (pcap_if_t* alldevs), (alldevs))
+DECL_PCAP_FUNC(pcap_t*, pcap_open_live, (const char* src, int snaplen, int flags, int readtimeout, char* errbuf), (src,snaplen,flags,readtimeout,errbuf))
+DECL_PCAP_FUNC(void, pcap_close, (pcap_t* dev), (dev))
+DECL_PCAP_FUNC(int, pcap_setnonblock, (pcap_t* dev, int nonblock, char* errbuf), (dev,nonblock,errbuf))
+DECL_PCAP_FUNC(int, pcap_sendpacket, (pcap_t* dev, const u_char* data, int len), (dev,data,len))
+DECL_PCAP_FUNC(int, pcap_dispatch, (pcap_t* dev, int num, pcap_handler callback, u_char* data), (dev,num,callback,data))
+DECL_PCAP_FUNC(const u_char*, pcap_next, (pcap_t* dev, struct pcap_pkthdr* hdr), (dev,hdr))
+
+
+namespace LAN_PCap
+{
+
+const char* PCapLibNames[] =
+{
+#ifdef __WIN32__
+ // TODO: name for npcap in non-WinPCap mode
+ "wpcap.dll",
+#else
+ // Linux lib names
+ "libpcap.so.1",
+ "libpcap.so",
+#endif
+ NULL
+};
+
+AdapterData* Adapters = NULL;
+int NumAdapters = 0;
+
+void* PCapLib = NULL;
+pcap_t* PCapAdapter = NULL;
+AdapterData* PCapAdapterData;
+
+u8 PacketBuffer[2048];
+int PacketLen;
+volatile int RXNum;
+
+
+#define LOAD_PCAP_FUNC(sym) \
+ ptr_##sym = (type_##sym)SDL_LoadFunction(lib, #sym); \
+ if (!ptr_##sym) return false;
+
+bool TryLoadPCap(void* lib)
+{
+ LOAD_PCAP_FUNC(pcap_findalldevs)
+ LOAD_PCAP_FUNC(pcap_freealldevs)
+ LOAD_PCAP_FUNC(pcap_open_live)
+ LOAD_PCAP_FUNC(pcap_close)
+ LOAD_PCAP_FUNC(pcap_setnonblock)
+ LOAD_PCAP_FUNC(pcap_sendpacket)
+ LOAD_PCAP_FUNC(pcap_dispatch)
+ LOAD_PCAP_FUNC(pcap_next)
+
+ return true;
+}
+
+bool Init(bool open_adapter)
+{
+ // TODO: how to deal with cases where an adapter is unplugged or changes config??
+ if (!PCapLib)
+ {
+ PCapLib = NULL;
+
+ for (int i = 0; PCapLibNames[i]; i++)
+ {
+ void* lib = SDL_LoadObject(PCapLibNames[i]);
+ if (!lib) continue;
+
+ if (!TryLoadPCap(lib))
+ {
+ SDL_UnloadObject(lib);
+ continue;
+ }
+
+ printf("PCap: lib %s, init successful\n", PCapLibNames[i]);
+ PCapLib = lib;
+ break;
+ }
+
+ if (PCapLib == NULL)
+ {
+ printf("PCap: init failed\n");
+ return false;
+ }
+ }
+
+ PCapAdapter = NULL;
+ PacketLen = 0;
+ RXNum = 0;
+
+ NumAdapters = 0;
+
+ char errbuf[PCAP_ERRBUF_SIZE];
+ int ret;
+
+ pcap_if_t* alldevs;
+ ret = pcap_findalldevs(&alldevs, errbuf);
+ if (ret < 0 || alldevs == NULL)
+ {
+ printf("PCap: no devices available\n");
+ return false;
+ }
+
+ pcap_if_t* dev = alldevs;
+ while (dev) { NumAdapters++; dev = dev->next; }
+
+ Adapters = new AdapterData[NumAdapters];
+ memset(Adapters, 0, sizeof(AdapterData)*NumAdapters);
+
+ AdapterData* adata = &Adapters[0];
+ dev = alldevs;
+ while (dev)
+ {
+ adata->Internal = dev;
+
+#ifdef __WIN32__
+ // hax
+ int len = strlen(dev->name);
+ len -= 12; if (len > 127) len = 127;
+ strncpy(adata->DeviceName, &dev->name[12], len);
+ adata->DeviceName[len] = '\0';
+#else
+ strncpy(adata->DeviceName, dev->name, 127);
+ adata->DeviceName[127] = '\0';
+
+ strncpy(adata->FriendlyName, adata->DeviceName, 127);
+ adata->FriendlyName[127] = '\0';
+#endif // __WIN32__
+
+ dev = dev->next;
+ adata++;
+ }
+
+#ifdef __WIN32__
+
+ ULONG bufsize = 16384;
+ IP_ADAPTER_ADDRESSES* buf = (IP_ADAPTER_ADDRESSES*)HeapAlloc(GetProcessHeap(), 0, bufsize);
+ ULONG uret = GetAdaptersAddresses(AF_INET, 0, NULL, buf, &bufsize);
+ if (uret == ERROR_BUFFER_OVERFLOW)
+ {
+ HeapFree(GetProcessHeap(), 0, buf);
+ buf = (IP_ADAPTER_ADDRESSES*)HeapAlloc(GetProcessHeap(), 0, bufsize);
+ uret = GetAdaptersAddresses(AF_INET, 0, NULL, buf, &bufsize);
+ }
+ if (uret != ERROR_SUCCESS)
+ {
+ printf("GetAdaptersAddresses() shat itself: %08X\n", uret);
+ return false;
+ }
+
+ for (int i = 0; i < NumAdapters; i++)
+ {
+ adata = &Adapters[i];
+ IP_ADAPTER_ADDRESSES* addr = buf;
+ while (addr)
+ {
+ if (strcmp(addr->AdapterName, adata->DeviceName))
+ {
+ addr = addr->Next;
+ continue;
+ }
+
+ WideCharToMultiByte(CP_UTF8, 0, addr->FriendlyName, 127, adata->FriendlyName, 127, NULL, NULL);
+ adata->FriendlyName[127] = '\0';
+
+ WideCharToMultiByte(CP_UTF8, 0, addr->Description, 127, adata->Description, 127, NULL, NULL);
+ adata->Description[127] = '\0';
+
+ if (addr->PhysicalAddressLength != 6)
+ {
+ printf("weird MAC addr length %d for %s\n", addr->PhysicalAddressLength, addr->AdapterName);
+ }
+ else
+ memcpy(adata->MAC, addr->PhysicalAddress, 6);
+
+ IP_ADAPTER_UNICAST_ADDRESS* ipaddr = addr->FirstUnicastAddress;
+ while (ipaddr)
+ {
+ SOCKADDR* sa = ipaddr->Address.lpSockaddr;
+ if (sa->sa_family == AF_INET)
+ {
+ struct in_addr sa4 = ((sockaddr_in*)sa)->sin_addr;
+ memcpy(adata->IP_v4, &sa4, 4);
+ }
+
+ ipaddr = ipaddr->Next;
+ }
+
+ break;
+ }
+ }
+
+ HeapFree(GetProcessHeap(), 0, buf);
+
+#else
+
+ struct ifaddrs* addrs;
+ if (getifaddrs(&addrs) != 0)
+ {
+ printf("getifaddrs() shat itself :(\n");
+ return false;
+ }
+
+ for (int i = 0; i < NumAdapters; i++)
+ {
+ adata = &Adapters[i];
+ struct ifaddrs* curaddr = addrs;
+ while (curaddr)
+ {
+ if (strcmp(curaddr->ifa_name, adata->DeviceName))
+ {
+ curaddr = curaddr->ifa_next;
+ continue;
+ }
+
+ if (!curaddr->ifa_addr)
+ {
+ printf("Device (%s) does not have an address :/\n", curaddr->ifa_name);
+ curaddr = curaddr->ifa_next;
+ continue;
+ }
+
+ u16 af = curaddr->ifa_addr->sa_family;
+ if (af == AF_INET)
+ {
+ struct sockaddr_in* sa = (sockaddr_in*)curaddr->ifa_addr;
+ memcpy(adata->IP_v4, &sa->sin_addr, 4);
+ }
+ else if (af == AF_PACKET)
+ {
+ struct sockaddr_ll* sa = (sockaddr_ll*)curaddr->ifa_addr;
+ if (sa->sll_halen != 6)
+ printf("weird MAC length %d for %s\n", sa->sll_halen, curaddr->ifa_name);
+ else
+ memcpy(adata->MAC, sa->sll_addr, 6);
+ }
+
+ curaddr = curaddr->ifa_next;
+ }
+ }
+
+ freeifaddrs(addrs);
+
+#endif // __WIN32__
+
+ if (!open_adapter) return true;
+ if (PCapAdapter) pcap_close(PCapAdapter);
+
+ // open pcap device
+ PCapAdapterData = &Adapters[0];
+ for (int i = 0; i < NumAdapters; i++)
+ {
+ if (!strncmp(Adapters[i].DeviceName, Config::LANDevice, 128))
+ PCapAdapterData = &Adapters[i];
+ }
+
+ dev = (pcap_if_t*)PCapAdapterData->Internal;
+ PCapAdapter = pcap_open_live(dev->name, 2048, PCAP_OPENFLAG_PROMISCUOUS, 1, errbuf);
+ if (!PCapAdapter)
+ {
+ printf("PCap: failed to open adapter %s\n", errbuf);
+ return false;
+ }
+
+ pcap_freealldevs(alldevs);
+
+ if (pcap_setnonblock(PCapAdapter, 1, errbuf) < 0)
+ {
+ printf("PCap: failed to set nonblocking mode\n");
+ pcap_close(PCapAdapter); PCapAdapter = NULL;
+ return false;
+ }
+
+ return true;
+}
+
+void DeInit()
+{
+ if (PCapLib)
+ {
+ if (PCapAdapter)
+ {
+ pcap_close(PCapAdapter);
+ PCapAdapter = NULL;
+ }
+
+ SDL_UnloadObject(PCapLib);
+ PCapLib = NULL;
+ }
+}
+
+
+void RXCallback(u_char* blarg, const struct pcap_pkthdr* header, const u_char* data)
+{
+ while (RXNum > 0);
+
+ if (header->len > 2048-64) return;
+
+ PacketLen = header->len;
+ memcpy(PacketBuffer, data, PacketLen);
+ RXNum = 1;
+}
+
+int SendPacket(u8* data, int len)
+{
+ if (PCapAdapter == NULL)
+ return 0;
+
+ if (len > 2048)
+ {
+ printf("LAN_SendPacket: error: packet too long (%d)\n", len);
+ return 0;
+ }
+
+ pcap_sendpacket(PCapAdapter, data, len);
+ // TODO: check success
+ return len;
+}
+
+int RecvPacket(u8* data)
+{
+ if (PCapAdapter == NULL)
+ return 0;
+
+ int ret = 0;
+ if (RXNum > 0)
+ {
+ memcpy(data, PacketBuffer, PacketLen);
+ ret = PacketLen;
+ RXNum = 0;
+ }
+
+ pcap_dispatch(PCapAdapter, 1, RXCallback, NULL);
+ return ret;
+}
+
+}
diff --git a/src/frontend/qt_sdl/LAN_PCap.h b/src/frontend/qt_sdl/LAN_PCap.h
new file mode 100644
index 0000000..250b8e9
--- /dev/null
+++ b/src/frontend/qt_sdl/LAN_PCap.h
@@ -0,0 +1,53 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef LAN_PCAP_H
+#define LAN_PCAP_H
+
+#include "../types.h"
+
+namespace LAN_PCap
+{
+
+typedef struct
+{
+ char DeviceName[128];
+ char FriendlyName[128];
+ char Description[128];
+
+ u8 MAC[6];
+ u8 IP_v4[4];
+
+ void* Internal;
+
+} AdapterData;
+
+
+extern AdapterData* Adapters;
+extern int NumAdapters;
+
+
+bool Init(bool open_adapter);
+void DeInit();
+
+int SendPacket(u8* data, int len);
+int RecvPacket(u8* data);
+
+}
+
+#endif // LAN_PCAP_H
diff --git a/src/frontend/qt_sdl/LAN_Socket.cpp b/src/frontend/qt_sdl/LAN_Socket.cpp
new file mode 100644
index 0000000..c6fbd4b
--- /dev/null
+++ b/src/frontend/qt_sdl/LAN_Socket.cpp
@@ -0,0 +1,1145 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+// indirect LAN interface, powered by BSD sockets.
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "../Wifi.h"
+#include "LAN_Socket.h"
+#include "../Config.h"
+
+#ifdef __WIN32__
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
+ #define socket_t SOCKET
+ #define sockaddr_t SOCKADDR
+#else
+ #include <unistd.h>
+ #include <arpa/inet.h>
+ #include <netinet/in.h>
+ #include <sys/types.h>
+ #include <sys/select.h>
+ #include <sys/socket.h>
+ #include <netdb.h>
+ #define socket_t int
+ #define sockaddr_t struct sockaddr
+ #define closesocket close
+#endif
+
+#ifndef INVALID_SOCKET
+#define INVALID_SOCKET (socket_t)-1
+#endif
+
+
+namespace LAN_Socket
+{
+
+const u32 kSubnet = 0x0A400000;
+const u32 kServerIP = kSubnet | 0x01;
+const u32 kDNSIP = kSubnet | 0x02;
+const u32 kClientIP = kSubnet | 0x10;
+
+const u8 kServerMAC[6] = {0x00, 0xAB, 0x33, 0x28, 0x99, 0x44};
+const u8 kDNSMAC[6] = {0x00, 0xAB, 0x33, 0x28, 0x99, 0x55};
+
+u8 PacketBuffer[2048];
+int PacketLen;
+volatile int RXNum;
+
+u16 IPv4ID;
+
+
+// TODO: UDP sockets
+// * use FIFO list
+// * assign new socket when seeing new IP/port
+
+
+typedef struct
+{
+ u8 DestIP[4];
+ u16 SourcePort;
+ u16 DestPort;
+
+ u32 SeqNum; // sequence number for incoming frames
+ u32 AckNum;
+
+ // 0: unused
+ // 1: connected
+ u8 Status;
+
+ socket_t Backend;
+
+} TCPSocket;
+
+typedef struct
+{
+ u8 DestIP[4];
+ u16 SourcePort;
+ u16 DestPort;
+
+ socket_t Backend;
+ struct sockaddr_in BackendAddr;
+
+} UDPSocket;
+
+TCPSocket TCPSocketList[16];
+UDPSocket UDPSocketList[4];
+
+int UDPSocketID = 0;
+
+
+bool Init()
+{
+ // TODO: how to deal with cases where an adapter is unplugged or changes config??
+ //if (PCapLib) return true;
+
+ //Lib = NULL;
+ PacketLen = 0;
+ RXNum = 0;
+
+ IPv4ID = 1;
+
+ memset(TCPSocketList, 0, sizeof(TCPSocketList));
+ memset(UDPSocketList, 0, sizeof(UDPSocketList));
+
+ UDPSocketID = 0;
+
+ return true;
+}
+
+void DeInit()
+{
+ for (int i = 0; i < (sizeof(TCPSocketList)/sizeof(TCPSocket)); i++)
+ {
+ TCPSocket* sock = &TCPSocketList[i];
+ if (sock->Backend) closesocket(sock->Backend);
+ }
+
+ for (int i = 0; i < (sizeof(UDPSocketList)/sizeof(UDPSocket)); i++)
+ {
+ UDPSocket* sock = &UDPSocketList[i];
+ if (sock->Backend) closesocket(sock->Backend);
+ }
+}
+
+
+void FinishUDPFrame(u8* data, int len)
+{
+ u8* ipheader = &data[0xE];
+ u8* udpheader = &data[0x22];
+
+ // lengths
+ *(u16*)&ipheader[2] = htons(len - 0xE);
+ *(u16*)&udpheader[4] = htons(len - (0xE + 0x14));
+
+ // IP checksum
+ u32 tmp = 0;
+
+ for (int i = 0; i < 20; i += 2)
+ tmp += ntohs(*(u16*)&ipheader[i]);
+ while (tmp >> 16)
+ tmp = (tmp & 0xFFFF) + (tmp >> 16);
+ tmp ^= 0xFFFF;
+ *(u16*)&ipheader[10] = htons(tmp);
+
+ // UDP checksum
+ // (note: normally not mandatory, but some older sgIP versions require it)
+ tmp = 0;
+ tmp += ntohs(*(u16*)&ipheader[12]);
+ tmp += ntohs(*(u16*)&ipheader[14]);
+ tmp += ntohs(*(u16*)&ipheader[16]);
+ tmp += ntohs(*(u16*)&ipheader[18]);
+ tmp += ntohs(0x1100);
+ tmp += (len-0x22);
+ for (u8* i = udpheader; i < &udpheader[len-0x23]; i += 2)
+ tmp += ntohs(*(u16*)i);
+ if (len & 1)
+ tmp += ntohs((u_short)udpheader[len-0x23]);
+ while (tmp >> 16)
+ tmp = (tmp & 0xFFFF) + (tmp >> 16);
+ tmp ^= 0xFFFF;
+ if (tmp == 0) tmp = 0xFFFF;
+ *(u16*)&udpheader[6] = htons(tmp);
+}
+
+void FinishTCPFrame(u8* data, int len)
+{
+ u8* ipheader = &data[0xE];
+ u8* tcpheader = &data[0x22];
+
+ // lengths
+ *(u16*)&ipheader[2] = htons(len - 0xE);
+
+ // IP checksum
+ u32 tmp = 0;
+
+ for (int i = 0; i < 20; i += 2)
+ tmp += ntohs(*(u16*)&ipheader[i]);
+ while (tmp >> 16)
+ tmp = (tmp & 0xFFFF) + (tmp >> 16);
+ tmp ^= 0xFFFF;
+ *(u16*)&ipheader[10] = htons(tmp);
+
+ u32 tcplen = ntohs(*(u16*)&ipheader[2]) - 0x14;
+
+ // TCP checksum
+ tmp = 0;
+ tmp += ntohs(*(u16*)&ipheader[12]);
+ tmp += ntohs(*(u16*)&ipheader[14]);
+ tmp += ntohs(*(u16*)&ipheader[16]);
+ tmp += ntohs(*(u16*)&ipheader[18]);
+ tmp += ntohs(0x0600);
+ tmp += tcplen;
+ for (u8* i = tcpheader; i < &tcpheader[tcplen-1]; i += 2)
+ tmp += ntohs(*(u16*)i);
+ if (tcplen & 1)
+ tmp += ntohs((u_short)tcpheader[tcplen-1]);
+ while (tmp >> 16)
+ tmp = (tmp & 0xFFFF) + (tmp >> 16);
+ tmp ^= 0xFFFF;
+ *(u16*)&tcpheader[16] = htons(tmp);
+}
+
+
+void HandleDHCPFrame(u8* data, int len)
+{
+ u8 type = 0xFF;
+
+ u32 transid = *(u32*)&data[0x2E];
+
+ u8* options = &data[0x11A];
+ for (;;)
+ {
+ if (options >= &data[len]) break;
+ u8 opt = *options++;
+ if (opt == 255) break;
+
+ u8 len = *options++;
+ switch (opt)
+ {
+ case 53: // frame type
+ type = options[0];
+ break;
+ }
+
+ options += len;
+ }
+
+ if (type == 0xFF)
+ {
+ printf("DHCP: bad frame\n");
+ return;
+ }
+
+ printf("DHCP: frame type %d, transid %08X\n", type, transid);
+
+ if (type == 1 || // discover
+ type == 3) // request
+ {
+ u8 resp[512];
+ u8* out = &resp[0];
+
+ // ethernet
+ memcpy(out, &data[6], 6); out += 6;
+ memcpy(out, kServerMAC, 6); out += 6;
+ *(u16*)out = htons(0x0800); out += 2;
+
+ // IP
+ u8* ipheader = out;
+ *out++ = 0x45;
+ *out++ = 0x00;
+ *(u16*)out = 0; out += 2; // total length
+ *(u16*)out = htons(IPv4ID); out += 2; IPv4ID++;
+ *out++ = 0x00;
+ *out++ = 0x00;
+ *out++ = 0x80; // TTL
+ *out++ = 0x11; // protocol (UDP)
+ *(u16*)out = 0; out += 2; // checksum
+ *(u32*)out = htonl(kServerIP); out += 4; // source IP
+ if (type == 1)
+ {
+ *(u32*)out = htonl(0xFFFFFFFF); out += 4; // destination IP
+ }
+ else if (type == 3)
+ {
+ *(u32*)out = htonl(kClientIP); out += 4; // destination IP
+ }
+
+ // UDP
+ u8* udpheader = out;
+ *(u16*)out = htons(67); out += 2; // source port
+ *(u16*)out = htons(68); out += 2; // destination port
+ *(u16*)out = 0; out += 2; // length
+ *(u16*)out = 0; out += 2; // checksum
+
+ // DHCP
+ u8* body = out;
+ *out++ = 0x02;
+ *out++ = 0x01;
+ *out++ = 0x06;
+ *out++ = 0x00;
+ *(u32*)out = transid; out += 4;
+ *(u16*)out = 0; out += 2; // seconds elapsed
+ *(u16*)out = 0; out += 2;
+ *(u32*)out = htonl(0x00000000); out += 4; // client IP
+ *(u32*)out = htonl(kClientIP); out += 4; // your IP
+ *(u32*)out = htonl(kServerIP); out += 4; // server IP
+ *(u32*)out = htonl(0x00000000); out += 4; // gateway IP
+ memcpy(out, &data[6], 6); out += 6;
+ memset(out, 0, 10); out += 10;
+ memset(out, 0, 192); out += 192;
+ *(u32*)out = 0x63538263; out += 4; // DHCP magic
+
+ // DHCP options
+ *out++ = 53; *out++ = 1;
+ *out++ = (type==1) ? 2 : 5; // DHCP type: offer/ack
+ *out++ = 1; *out++ = 4;
+ *(u32*)out = htonl(0xFFFFFF00); out += 4; // subnet mask
+ *out++ = 3; *out++ = 4;
+ *(u32*)out = htonl(kServerIP); out += 4; // router
+ *out++ = 51; *out++ = 4;
+ *(u32*)out = htonl(442030); out += 4; // lease time
+ *out++ = 54; *out++ = 4;
+ *(u32*)out = htonl(kServerIP); out += 4; // DHCP server
+ *out++ = 6; *out++ = 4;
+ *(u32*)out = htonl(kDNSIP); out += 4; // DNS (hax)
+
+ *out++ = 0xFF;
+ memset(out, 0, 20); out += 20;
+
+ u32 framelen = (u32)(out - &resp[0]);
+ if (framelen & 1) { *out++ = 0; framelen++; }
+ FinishUDPFrame(resp, framelen);
+
+ // TODO: if there is already a packet queued, this will overwrite it
+ // that being said, this will only happen during DHCP setup, so probably
+ // not a big deal
+
+ PacketLen = framelen;
+ memcpy(PacketBuffer, resp, PacketLen);
+ RXNum = 1;
+ }
+}
+
+void HandleDNSFrame(u8* data, int len)
+{
+ u8* ipheader = &data[0xE];
+ u8* udpheader = &data[0x22];
+ u8* dnsbody = &data[0x2A];
+
+ u32 srcip = ntohl(*(u32*)&ipheader[12]);
+ u16 srcport = ntohs(*(u16*)&udpheader[0]);
+
+ u16 id = ntohs(*(u16*)&dnsbody[0]);
+ u16 flags = ntohs(*(u16*)&dnsbody[2]);
+ u16 numquestions = ntohs(*(u16*)&dnsbody[4]);
+ u16 numanswers = ntohs(*(u16*)&dnsbody[6]);
+ u16 numauth = ntohs(*(u16*)&dnsbody[8]);
+ u16 numadd = ntohs(*(u16*)&dnsbody[10]);
+
+ printf("DNS: ID=%04X, flags=%04X, Q=%d, A=%d, auth=%d, add=%d\n",
+ id, flags, numquestions, numanswers, numauth, numadd);
+
+ // for now we only take 'simple' DNS requests
+ if (flags & 0x8000) return;
+ if (numquestions != 1 || numanswers != 0) return;
+
+ u8 resp[1024];
+ u8* out = &resp[0];
+
+ // ethernet
+ memcpy(out, &data[6], 6); out += 6;
+ memcpy(out, kServerMAC, 6); out += 6;
+ *(u16*)out = htons(0x0800); out += 2;
+
+ // IP
+ u8* resp_ipheader = out;
+ *out++ = 0x45;
+ *out++ = 0x00;
+ *(u16*)out = 0; out += 2; // total length
+ *(u16*)out = htons(IPv4ID); out += 2; IPv4ID++;
+ *out++ = 0x00;
+ *out++ = 0x00;
+ *out++ = 0x80; // TTL
+ *out++ = 0x11; // protocol (UDP)
+ *(u16*)out = 0; out += 2; // checksum
+ *(u32*)out = htonl(kDNSIP); out += 4; // source IP
+ *(u32*)out = htonl(srcip); out += 4; // destination IP
+
+ // UDP
+ u8* resp_udpheader = out;
+ *(u16*)out = htons(53); out += 2; // source port
+ *(u16*)out = htons(srcport); out += 2; // destination port
+ *(u16*)out = 0; out += 2; // length
+ *(u16*)out = 0; out += 2; // checksum
+
+ // DNS
+ u8* resp_body = out;
+ *(u16*)out = htons(id); out += 2; // ID
+ *(u16*)out = htons(0x8000); out += 2; // flags
+ *(u16*)out = htons(numquestions); out += 2; // num questions
+ *(u16*)out = htons(numquestions); out += 2; // num answers
+ *(u16*)out = 0; out += 2; // num authority
+ *(u16*)out = 0; out += 2; // num additional
+
+ u32 curoffset = 12;
+ for (u16 i = 0; i < numquestions; i++)
+ {
+ if (curoffset >= (len-0x2A)) return;
+
+ u8 bitlength = 0;
+ while ((bitlength = dnsbody[curoffset++]) != 0)
+ curoffset += bitlength;
+
+ curoffset += 4;
+ }
+
+ u32 qlen = curoffset-12;
+ if (qlen > 512) return;
+ memcpy(out, &dnsbody[12], qlen); out += qlen;
+
+ curoffset = 12;
+ for (u16 i = 0; i < numquestions; i++)
+ {
+ // assemble the requested domain name
+ u8 bitlength = 0;
+ char domainname[256] = ""; int o = 0;
+ while ((bitlength = dnsbody[curoffset++]) != 0)
+ {
+ if ((o+bitlength) >= 255)
+ {
+ // welp. atleast try not to explode.
+ domainname[o++] = '\0';
+ break;
+ }
+
+ strncpy(&domainname[o], (const char *)&dnsbody[curoffset], bitlength);
+ o += bitlength;
+
+ curoffset += bitlength;
+ if (dnsbody[curoffset] != 0)
+ domainname[o++] = '.';
+ else
+ domainname[o++] = '\0';
+ }
+
+ u16 type = ntohs(*(u16*)&dnsbody[curoffset]);
+ u16 cls = ntohs(*(u16*)&dnsbody[curoffset+2]);
+
+ printf("- q%d: %04X %04X %s", i, type, cls, domainname);
+
+ // get answer
+ struct addrinfo dns_hint;
+ struct addrinfo* dns_res;
+ u32 addr_res;
+
+ memset(&dns_hint, 0, sizeof(dns_hint));
+ dns_hint.ai_family = AF_INET; // TODO: other address types (INET6, etc)
+ if (getaddrinfo(domainname, "0", &dns_hint, &dns_res) == 0)
+ {
+ struct addrinfo* p = dns_res;
+ while (p)
+ {
+ struct sockaddr_in* addr = (struct sockaddr_in*)p->ai_addr;
+ /*printf(" -> %d.%d.%d.%d",
+ addr->sin_addr.S_un.S_un_b.s_b1, addr->sin_addr.S_un.S_un_b.s_b2,
+ addr->sin_addr.S_un.S_un_b.s_b3, addr->sin_addr.S_un.S_un_b.s_b4);*/
+
+ //addr_res = addr->sin_addr.S_un.S_addr;
+ addr_res = *(u32*)&addr->sin_addr;
+ p = p->ai_next;
+ }
+ }
+ else
+ {
+ printf(" shat itself :(");
+ addr_res = 0;
+ }
+
+ printf("\n");
+ curoffset += 4;
+
+ // TODO: betterer support
+ // (under which conditions does the C00C marker work?)
+ *(u16*)out = htons(0xC00C); out += 2;
+ *(u16*)out = htons(type); out += 2;
+ *(u16*)out = htons(cls); out += 2;
+ *(u32*)out = htonl(3600); out += 4; // TTL (hardcoded for now)
+ *(u16*)out = htons(4); out += 2; // address length
+ *(u32*)out = addr_res; out += 4; // address
+ }
+
+ u32 framelen = (u32)(out - &resp[0]);
+ if (framelen & 1) { *out++ = 0; framelen++; }
+ FinishUDPFrame(resp, framelen);
+
+ // TODO: if there is already a packet queued, this will overwrite it
+ // that being said, this will only happen during DHCP setup, so probably
+ // not a big deal
+
+ PacketLen = framelen;
+ memcpy(PacketBuffer, resp, PacketLen);
+ RXNum = 1;
+}
+
+void UDP_BuildIncomingFrame(UDPSocket* sock, u8* data, int len)
+{
+ u8 resp[2048];
+ u8* out = &resp[0];
+
+ if (len > 1536) return;
+
+ // ethernet
+ memcpy(out, Wifi::GetMAC(), 6); out += 6; // hurf
+ memcpy(out, kServerMAC, 6); out += 6;
+ *(u16*)out = htons(0x0800); out += 2;
+
+ // IP
+ u8* resp_ipheader = out;
+ *out++ = 0x45;
+ *out++ = 0x00;
+ *(u16*)out = 0; out += 2; // total length
+ *(u16*)out = htons(IPv4ID); out += 2; IPv4ID++;
+ *out++ = 0x00;
+ *out++ = 0x00;
+ *out++ = 0x80; // TTL
+ *out++ = 0x11; // protocol (UDP)
+ *(u16*)out = 0; out += 2; // checksum
+ memcpy(out, sock->DestIP, 4); out += 4; // source IP
+ *(u32*)out = htonl(kClientIP); out += 4; // destination IP
+
+ // UDP
+ u8* resp_tcpheader = out;
+ *(u16*)out = htons(sock->DestPort); out += 2; // source port
+ *(u16*)out = htons(sock->SourcePort); out += 2; // destination port
+ *(u16*)out = htons(len+8); out += 2; // length of header+data
+ *(u16*)out = 0; out += 2; // checksum
+
+ memcpy(out, data, len); out += len;
+
+ u32 framelen = (u32)(out - &resp[0]);
+ FinishUDPFrame(resp, framelen);
+
+ // TODO: if there is already a packet queued, this will overwrite it
+ // that being said, this will only happen during DHCP setup, so probably
+ // not a big deal
+
+ PacketLen = framelen;
+ memcpy(PacketBuffer, resp, PacketLen);
+ RXNum = 1;
+}
+
+void HandleUDPFrame(u8* data, int len)
+{
+ u8* ipheader = &data[0xE];
+ u8* udpheader = &data[0x22];
+
+ // debug
+ /*for (int j = 0; j < len; j += 16)
+ {
+ int rem = len - j;
+ if (rem > 16) rem = 16;
+ for (int i = 0; i < rem; i++)
+ {
+ printf("%02X ", data[i+j]);
+ }
+ printf("\n");
+ }*/
+
+ u16 srcport = ntohs(*(u16*)&udpheader[0]);
+ u16 dstport = ntohs(*(u16*)&udpheader[2]);
+
+ int sockid = -1;
+ UDPSocket* sock;
+ for (int i = 0; i < (sizeof(UDPSocketList)/sizeof(UDPSocket)); i++)
+ {
+ sock = &UDPSocketList[i];
+ if (sock->Backend != 0 && !memcmp(&sock->DestIP, &ipheader[16], 4) &&
+ sock->SourcePort == srcport && sock->DestPort == dstport)
+ {
+ sockid = i;
+ break;
+ }
+ }
+
+ if (sockid == -1)
+ {
+ sockid = UDPSocketID;
+ sock = &UDPSocketList[sockid];
+
+ UDPSocketID++;
+ if (UDPSocketID >= (sizeof(UDPSocketList)/sizeof(UDPSocket)))
+ UDPSocketID = 0;
+
+ if (sock->Backend != 0)
+ {
+ printf("LANMAGIC: closing previous UDP socket #%d\n", sockid);
+ closesocket(sock->Backend);
+ }
+
+ sock->Backend = socket(AF_INET, SOCK_DGRAM, 0);
+
+ memcpy(sock->DestIP, &ipheader[16], 4);
+ sock->SourcePort = srcport;
+ sock->DestPort = dstport;
+
+ memset(&sock->BackendAddr, 0, sizeof(sock->BackendAddr));
+ sock->BackendAddr.sin_family = AF_INET;
+ sock->BackendAddr.sin_port = htons(dstport);
+ memcpy(&sock->BackendAddr.sin_addr, &ipheader[16], 4);
+ /*if (bind(sock->Backend, (struct sockaddr*)&sock->BackendAddr, sizeof(sock->BackendAddr)) == -1)
+ {
+ printf("bind() shat itself :(\n");
+ }*/
+
+ printf("LANMAGIC: opening UDP socket #%d to %d.%d.%d.%d:%d, srcport %d\n",
+ sockid,
+ ipheader[16], ipheader[17], ipheader[18], ipheader[19],
+ dstport, srcport);
+ }
+
+ u16 udplen = ntohs(*(u16*)&udpheader[4]) - 8;
+
+ printf("UDP: socket %d sending %d bytes\n", sockid, udplen);
+ sendto(sock->Backend, (char*)&udpheader[8], udplen, 0,
+ (struct sockaddr*)&sock->BackendAddr, sizeof(sock->BackendAddr));
+}
+
+void TCP_SYNACK(TCPSocket* sock, u8* data, int len)
+{
+ u8 resp[128];
+ u8* out = &resp[0];
+
+ u8* ipheader = &data[0xE];
+ u8* tcpheader = &data[0x22];
+
+ u32 seqnum = htonl(*(u32*)&tcpheader[4]);
+ seqnum++;
+ sock->AckNum = seqnum;
+
+ //printf("SYNACK SEQ=%08X|%08X\n", sock->SeqNum, sock->AckNum);
+
+ // ethernet
+ memcpy(out, &data[6], 6); out += 6;
+ memcpy(out, kServerMAC, 6); out += 6;
+ *(u16*)out = htons(0x0800); out += 2;
+
+ // IP
+ u8* resp_ipheader = out;
+ *out++ = 0x45;
+ *out++ = 0x00;
+ *(u16*)out = 0; out += 2; // total length
+ *(u16*)out = htons(IPv4ID); out += 2; IPv4ID++;
+ *out++ = 0x00;
+ *out++ = 0x00;
+ *out++ = 0x80; // TTL
+ *out++ = 0x06; // protocol (TCP)
+ *(u16*)out = 0; out += 2; // checksum
+ *(u32*)out = *(u32*)&ipheader[16]; out += 4; // source IP
+ *(u32*)out = *(u32*)&ipheader[12]; out += 4; // destination IP
+
+ // TCP
+ u8* resp_tcpheader = out;
+ *(u16*)out = *(u16*)&tcpheader[2]; out += 2; // source port
+ *(u16*)out = *(u16*)&tcpheader[0]; out += 2; // destination port
+ *(u32*)out = htonl(sock->SeqNum); out += 4; sock->SeqNum++; // seq number
+ *(u32*)out = htonl(seqnum); out += 4; // ack seq number
+ *(u16*)out = htons(0x8012); out += 2; // flags (SYN+ACK)
+ *(u16*)out = htons(0x7000); out += 2; // window size (uuuh)
+ *(u16*)out = 0; out += 2; // checksum
+ *(u16*)out = 0; out += 2; // urgent pointer
+
+ // TCP options
+ *out++ = 0x02; *out++ = 0x04; // max segment size
+ *(u16*)out = htons(0x05B4); out += 2;
+ *out++ = 0x01;
+ *out++ = 0x01;
+ *out++ = 0x04; *out++ = 0x02; // SACK permitted
+ *out++ = 0x01;
+ *out++ = 0x03; *out++ = 0x03; // window size
+ *out++ = 0x08;
+
+ u32 framelen = (u32)(out - &resp[0]);
+ //if (framelen & 1) { *out++ = 0; framelen++; }
+ FinishTCPFrame(resp, framelen);
+
+ // TODO: if there is already a packet queued, this will overwrite it
+ // that being said, this will only happen during DHCP setup, so probably
+ // not a big deal
+
+ PacketLen = framelen;
+ memcpy(PacketBuffer, resp, PacketLen);
+ RXNum = 1;
+}
+
+void TCP_ACK(TCPSocket* sock, bool fin)
+{
+ u8 resp[64];
+ u8* out = &resp[0];
+
+ u16 flags = 0x5010;
+ if (fin) flags |= 0x0001;
+
+ //printf("%sACK SEQ=%08X|%08X\n", fin?"FIN":" ", sock->SeqNum, sock->AckNum);
+
+ // ethernet
+ memcpy(out, Wifi::GetMAC(), 6); out += 6;
+ memcpy(out, kServerMAC, 6); out += 6;
+ *(u16*)out = htons(0x0800); out += 2;
+
+ // IP
+ u8* resp_ipheader = out;
+ *out++ = 0x45;
+ *out++ = 0x00;
+ *(u16*)out = 0; out += 2; // total length
+ *(u16*)out = htons(IPv4ID); out += 2; IPv4ID++;
+ *out++ = 0x00;
+ *out++ = 0x00;
+ *out++ = 0x80; // TTL
+ *out++ = 0x06; // protocol (TCP)
+ *(u16*)out = 0; out += 2; // checksum
+ *(u32*)out = *(u32*)&sock->DestIP; out += 4; // source IP
+ *(u32*)out = htonl(kClientIP); out += 4; // destination IP
+
+ // TCP
+ u8* resp_tcpheader = out;
+ *(u16*)out = htonl(sock->DestPort); out += 2; // source port
+ *(u16*)out = htonl(sock->SourcePort); out += 2; // destination port
+ *(u32*)out = htonl(sock->SeqNum); out += 4; // seq number
+ *(u32*)out = htonl(sock->AckNum); out += 4; // ack seq number
+ *(u16*)out = htons(flags); out += 2; // flags
+ *(u16*)out = htons(0x7000); out += 2; // window size (uuuh)
+ *(u16*)out = 0; out += 2; // checksum
+ *(u16*)out = 0; out += 2; // urgent pointer
+
+ u32 framelen = (u32)(out - &resp[0]);
+ //if (framelen & 1) { *out++ = 0; framelen++; }
+ FinishTCPFrame(resp, framelen);
+
+ // TODO: if there is already a packet queued, this will overwrite it
+ // that being said, this will only happen during DHCP setup, so probably
+ // not a big deal
+
+ PacketLen = framelen;
+ memcpy(PacketBuffer, resp, PacketLen);
+ RXNum = 1;
+}
+
+void TCP_BuildIncomingFrame(TCPSocket* sock, u8* data, int len)
+{
+ u8 resp[2048];
+ u8* out = &resp[0];
+
+ if (len > 1536) return;
+//printf("INCOMING SEQ=%08X|%08X\n", sock->SeqNum, sock->AckNum);
+ // ethernet
+ memcpy(out, Wifi::GetMAC(), 6); out += 6; // hurf
+ memcpy(out, kServerMAC, 6); out += 6;
+ *(u16*)out = htons(0x0800); out += 2;
+
+ // IP
+ u8* resp_ipheader = out;
+ *out++ = 0x45;
+ *out++ = 0x00;
+ *(u16*)out = 0; out += 2; // total length
+ *(u16*)out = htons(IPv4ID); out += 2; IPv4ID++;
+ *out++ = 0x00;
+ *out++ = 0x00;
+ *out++ = 0x80; // TTL
+ *out++ = 0x06; // protocol (TCP)
+ *(u16*)out = 0; out += 2; // checksum
+ memcpy(out, sock->DestIP, 4); out += 4; // source IP
+ *(u32*)out = htonl(kClientIP); out += 4; // destination IP
+
+ // TCP
+ u8* resp_tcpheader = out;
+ *(u16*)out = htons(sock->DestPort); out += 2; // source port
+ *(u16*)out = htons(sock->SourcePort); out += 2; // destination port
+ *(u32*)out = htonl(sock->SeqNum); out += 4; // seq number
+ *(u32*)out = htonl(sock->AckNum); out += 4; // ack seq number
+ *(u16*)out = htons(0x5018); out += 2; // flags (ACK, PSH)
+ *(u16*)out = htons(0x7000); out += 2; // window size (uuuh)
+ *(u16*)out = 0; out += 2; // checksum
+ *(u16*)out = 0; out += 2; // urgent pointer
+
+ memcpy(out, data, len); out += len;
+
+ u32 framelen = (u32)(out - &resp[0]);
+ FinishTCPFrame(resp, framelen);
+
+ // TODO: if there is already a packet queued, this will overwrite it
+ // that being said, this will only happen during DHCP setup, so probably
+ // not a big deal
+
+ PacketLen = framelen;
+ memcpy(PacketBuffer, resp, PacketLen);
+ RXNum = 1;
+
+ sock->SeqNum += len;
+}
+
+void HandleTCPFrame(u8* data, int len)
+{
+ u8* ipheader = &data[0xE];
+ u8* tcpheader = &data[0x22];
+
+ u16 srcport = ntohs(*(u16*)&tcpheader[0]);
+ u16 dstport = ntohs(*(u16*)&tcpheader[2]);
+ u16 flags = ntohs(*(u16*)&tcpheader[12]);
+
+ u32 tcpheaderlen = 4 * (flags >> 12);
+ u32 tcplen = ntohs(*(u16*)&ipheader[2]) - 0x14;
+ u32 tcpdatalen = tcplen - tcpheaderlen;
+
+ /*printf("tcpflags=%04X header=%d data=%d seq=%08X|%08X\n",
+ flags, tcpheaderlen, tcpdatalen,
+ ntohl(*(u32*)&tcpheader[4]),
+ ntohl(*(u32*)&tcpheader[8]));*/
+
+ if (flags & 0x002) // SYN
+ {
+ int sockid = -1;
+ TCPSocket* sock;
+ for (int i = 0; i < (sizeof(TCPSocketList)/sizeof(TCPSocket)); i++)
+ {
+ sock = &TCPSocketList[i];
+ if (sock->Status != 0 && !memcmp(&sock->DestIP, &ipheader[16], 4) &&
+ sock->SourcePort == srcport && sock->DestPort == dstport)
+ {
+ printf("LANMAGIC: duplicate TCP socket\n");
+ sockid = i;
+ break;
+ }
+ }
+
+ if (sockid == -1)
+ {
+ for (int i = 0; i < (sizeof(TCPSocketList)/sizeof(TCPSocket)); i++)
+ {
+ sock = &TCPSocketList[i];
+ if (sock->Status == 0)
+ {
+ sockid = i;
+ break;
+ }
+ }
+ }
+
+ if (sockid == -1)
+ {
+ printf("LANMAGIC: !! TCP SOCKET LIST FULL\n");
+ return;
+ }
+
+ printf("LANMAGIC: opening TCP socket #%d to %d.%d.%d.%d:%d, srcport %d\n",
+ sockid,
+ ipheader[16], ipheader[17], ipheader[18], ipheader[19],
+ dstport, srcport);
+
+ // keep track of it
+ sock->Status = 1;
+ memcpy(sock->DestIP, &ipheader[16], 4);
+ sock->DestPort = dstport;
+ sock->SourcePort = srcport;
+ sock->SeqNum = 0x13370000;
+ sock->AckNum = 0;
+
+ // open backend socket
+ if (!sock->Backend)
+ {
+ sock->Backend = socket(AF_INET, SOCK_STREAM, 0);
+ }
+
+ struct sockaddr_in conn_addr;
+ memset(&conn_addr, 0, sizeof(conn_addr));
+ conn_addr.sin_family = AF_INET;
+ memcpy(&conn_addr.sin_addr, &ipheader[16], 4);
+ conn_addr.sin_port = htons(dstport);
+ if (connect(sock->Backend, (sockaddr*)&conn_addr, sizeof(conn_addr)) == -1)
+ {
+ printf("connect() shat itself :(\n");
+ }
+ else
+ {
+ // acknowledge it
+ TCP_SYNACK(sock, data, len);
+ }
+ }
+ else
+ {
+ int sockid = -1;
+ TCPSocket* sock;
+ for (int i = 0; i < (sizeof(TCPSocketList)/sizeof(TCPSocket)); i++)
+ {
+ sock = &TCPSocketList[i];
+ if (sock->Status != 0 && !memcmp(&sock->DestIP, &ipheader[16], 4) &&
+ sock->SourcePort == srcport && sock->DestPort == dstport)
+ {
+ sockid = i;
+ break;
+ }
+ }
+
+ if (sockid == -1)
+ {
+ printf("LANMAGIC: bad TCP packet\n");
+ return;
+ }
+
+ // TODO: check those
+ u32 seqnum = ntohl(*(u32*)&tcpheader[4]);
+ u32 acknum = ntohl(*(u32*)&tcpheader[8]);
+ sock->SeqNum = acknum;
+ sock->AckNum = seqnum + tcpdatalen;
+
+ // send data over the socket
+ if (tcpdatalen > 0)
+ {
+ u8* tcpdata = &tcpheader[tcpheaderlen];
+
+ printf("TCP: socket %d sending %d bytes (flags=%04X)\n", sockid, tcpdatalen, flags);
+ send(sock->Backend, (char*)tcpdata, tcpdatalen, 0);
+
+ // kind of a hack, there
+ TCP_ACK(sock, false);
+ }
+
+ if (flags & 0x001) // FIN
+ {
+ // TODO: timeout etc
+ printf("TCP: socket %d closing\n", sockid);
+
+ sock->Status = 0;
+ closesocket(sock->Backend);
+ sock->Backend = 0;
+ }
+ }
+}
+
+void HandleARPFrame(u8* data, int len)
+{
+ u16 protocol = ntohs(*(u16*)&data[0x10]);
+ if (protocol != 0x0800) return;
+
+ u16 op = ntohs(*(u16*)&data[0x14]);
+ u32 targetip = ntohl(*(u32*)&data[0x26]);
+
+ // TODO: handle ARP to the client
+ // this only handles ARP to the DHCP/router
+
+ if (op == 1)
+ {
+ // opcode 1=req 2=reply
+ // sender MAC
+ // sender IP
+ // target MAC
+ // target IP
+
+ const u8* targetmac;
+ if (targetip == kServerIP) targetmac = kServerMAC;
+ else if (targetip == kDNSIP) targetmac = kDNSMAC;
+ else return;
+
+ u8 resp[64];
+ u8* out = &resp[0];
+
+ // ethernet
+ memcpy(out, &data[6], 6); out += 6;
+ memcpy(out, kServerMAC, 6); out += 6;
+ *(u16*)out = htons(0x0806); out += 2;
+
+ // ARP
+ *(u16*)out = htons(0x0001); out += 2; // hardware type
+ *(u16*)out = htons(0x0800); out += 2; // protocol
+ *out++ = 6; // MAC address size
+ *out++ = 4; // IP address size
+ *(u16*)out = htons(0x0002); out += 2; // opcode
+ memcpy(out, targetmac, 6); out += 6;
+ *(u32*)out = htonl(targetip); out += 4;
+ memcpy(out, &data[0x16], 6+4); out += 6+4;
+
+ u32 framelen = (u32)(out - &resp[0]);
+
+ // TODO: if there is already a packet queued, this will overwrite it
+ // that being said, this will only happen during DHCP setup, so probably
+ // not a big deal
+
+ PacketLen = framelen;
+ memcpy(PacketBuffer, resp, PacketLen);
+ RXNum = 1;
+ }
+ else
+ {
+ printf("wat??\n");
+ }
+}
+
+void HandlePacket(u8* data, int len)
+{
+ u16 ethertype = ntohs(*(u16*)&data[0xC]);
+
+ if (ethertype == 0x0800) // IPv4
+ {
+ u8 protocol = data[0x17];
+ if (protocol == 0x11) // UDP
+ {
+ u16 srcport = ntohs(*(u16*)&data[0x22]);
+ u16 dstport = ntohs(*(u16*)&data[0x24]);
+ if (srcport == 68 && dstport == 67) // DHCP
+ {
+ printf("LANMAGIC: DHCP packet\n");
+ return HandleDHCPFrame(data, len);
+ }
+ else if (dstport == 53 && htonl(*(u32*)&data[0x1E]) == kDNSIP) // DNS
+ {
+ printf("LANMAGIC: DNS packet\n");
+ return HandleDNSFrame(data, len);
+ }
+
+ printf("LANMAGIC: UDP packet %d->%d\n", srcport, dstport);
+ return HandleUDPFrame(data, len);
+ }
+ else if (protocol == 0x06) // TCP
+ {
+ printf("LANMAGIC: TCP packet\n");
+ return HandleTCPFrame(data, len);
+ }
+ else
+ printf("LANMAGIC: unsupported IP protocol %02X\n", protocol);
+ }
+ else if (ethertype == 0x0806) // ARP
+ {
+ printf("LANMAGIC: ARP packet\n");
+ return HandleARPFrame(data, len);
+ }
+ else
+ printf("LANMAGIC: unsupported ethernet type %04X\n", ethertype);
+}
+
+int SendPacket(u8* data, int len)
+{
+ if (len > 2048)
+ {
+ printf("LAN_SendPacket: error: packet too long (%d)\n", len);
+ return 0;
+ }
+
+ HandlePacket(data, len);
+ return len;
+}
+
+int RecvPacket(u8* data)
+{
+ int ret = 0;
+ if (RXNum > 0)
+ {
+ memcpy(data, PacketBuffer, PacketLen);
+ ret = PacketLen;
+ RXNum = 0;
+ }
+
+ for (int i = 0; i < (sizeof(TCPSocketList)/sizeof(TCPSocket)); i++)
+ {
+ TCPSocket* sock = &TCPSocketList[i];
+ if (sock->Status != 1) continue;
+
+ fd_set fd;
+ struct timeval tv;
+
+ FD_ZERO(&fd);
+ FD_SET(sock->Backend, &fd);
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+
+ if (!select(sock->Backend+1, &fd, 0, 0, &tv))
+ {
+ continue;
+ }
+
+ u8 recvbuf[1024];
+ int recvlen = recv(sock->Backend, (char*)recvbuf, 1024, 0);
+ if (recvlen < 1)
+ {
+ if (recvlen == 0)
+ {
+ // socket has closed from the other side
+ printf("TCP: socket %d closed from other side\n", i);
+ sock->Status = 2;
+ TCP_ACK(sock, true);
+ }
+ continue;
+ }
+
+ printf("TCP: socket %d receiving %d bytes\n", i, recvlen);
+ TCP_BuildIncomingFrame(sock, recvbuf, recvlen);
+
+ // debug
+ /*for (int j = 0; j < recvlen; j += 16)
+ {
+ int rem = recvlen - j;
+ if (rem > 16) rem = 16;
+ for (int k = 0; k < rem; k++)
+ {
+ printf("%02X ", recvbuf[k+j]);
+ }
+ printf("\n");
+ }*/
+
+ //recvlen = recv(sock->Backend, (char*)recvbuf, 1024, 0);
+ //if (recvlen == 0) printf("it closed immediately after\n");
+ }
+
+ for (int i = 0; i < (sizeof(UDPSocketList)/sizeof(UDPSocket)); i++)
+ {
+ UDPSocket* sock = &UDPSocketList[i];
+ if (sock->Backend == 0) continue;
+
+ fd_set fd;
+ struct timeval tv;
+
+ FD_ZERO(&fd);
+ FD_SET(sock->Backend, &fd);
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+
+ if (!select(sock->Backend+1, &fd, 0, 0, &tv))
+ {
+ continue;
+ }
+
+ u8 recvbuf[1024];
+ sockaddr_t fromAddr;
+ socklen_t fromLen = sizeof(sockaddr_t);
+ int recvlen = recvfrom(sock->Backend, (char*)recvbuf, 1024, 0, &fromAddr, &fromLen);
+ if (recvlen < 1) continue;
+
+ if (fromAddr.sa_family != AF_INET) continue;
+ struct sockaddr_in* fromAddrIn = (struct sockaddr_in*)&fromAddr;
+ if (memcmp(&fromAddrIn->sin_addr, sock->DestIP, 4)) continue;
+ if (ntohs(fromAddrIn->sin_port) != sock->DestPort) continue;
+
+ printf("UDP: socket %d receiving %d bytes\n", i, recvlen);
+ UDP_BuildIncomingFrame(sock, recvbuf, recvlen);
+ }
+
+ return ret;
+}
+
+}
diff --git a/src/frontend/qt_sdl/LAN_Socket.h b/src/frontend/qt_sdl/LAN_Socket.h
new file mode 100644
index 0000000..8453a5f
--- /dev/null
+++ b/src/frontend/qt_sdl/LAN_Socket.h
@@ -0,0 +1,38 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef LAN_SOCKET_H
+#define LAN_SOCKET_H
+
+#include "../types.h"
+
+namespace LAN_Socket
+{
+
+//
+
+
+bool Init();
+void DeInit();
+
+int SendPacket(u8* data, int len);
+int RecvPacket(u8* data);
+
+}
+
+#endif // LAN_SOCKET_H
diff --git a/src/frontend/qt_sdl/OSD.cpp b/src/frontend/qt_sdl/OSD.cpp
new file mode 100644
index 0000000..4e4e40f
--- /dev/null
+++ b/src/frontend/qt_sdl/OSD.cpp
@@ -0,0 +1,474 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <string.h>
+#include <deque>
+#include <SDL2/SDL.h>
+#include "../types.h"
+
+#include "main.h"
+#include <QPainter>
+
+#include "OSD.h"
+#include "OSD_shaders.h"
+#include "font.h"
+
+#include "PlatformConfig.h"
+
+extern MainWindow* mainWindow;
+
+namespace OSD
+{
+
+const u32 kOSDMargin = 6;
+
+struct Item
+{
+ Uint32 Timestamp;
+ char Text[256];
+ u32 Color;
+
+ u32 Width, Height;
+ u32* Bitmap;
+
+ bool NativeBitmapLoaded;
+ QImage NativeBitmap;
+
+ bool GLTextureLoaded;
+ GLuint GLTexture;
+
+};
+
+std::deque<Item> ItemQueue;
+
+QOpenGLShaderProgram* Shader;
+GLint uScreenSize, uOSDPos, uOSDSize;
+GLuint OSDVertexArray;
+GLuint OSDVertexBuffer;
+
+volatile bool Rendering;
+
+
+bool Init(QOpenGLFunctions_3_2_Core* f)
+{
+ if (f)
+ {
+ Shader = new QOpenGLShaderProgram();
+ Shader->addShaderFromSourceCode(QOpenGLShader::Vertex, kScreenVS_OSD);
+ Shader->addShaderFromSourceCode(QOpenGLShader::Fragment, kScreenFS_OSD);
+
+ GLuint pid = Shader->programId();
+ f->glBindAttribLocation(pid, 0, "vPosition");
+ f->glBindFragDataLocation(pid, 0, "oColor");
+
+ Shader->link();
+
+ Shader->bind();
+ Shader->setUniformValue("OSDTex", (GLint)0);
+ Shader->release();
+
+ uScreenSize = Shader->uniformLocation("uScreenSize");
+ uOSDPos = Shader->uniformLocation("uOSDPos");
+ uOSDSize = Shader->uniformLocation("uOSDSize");
+
+ float vertices[6*2] =
+ {
+ 0, 0,
+ 1, 1,
+ 1, 0,
+ 0, 0,
+ 0, 1,
+ 1, 1
+ };
+
+ f->glGenBuffers(1, &OSDVertexBuffer);
+ f->glBindBuffer(GL_ARRAY_BUFFER, OSDVertexBuffer);
+ f->glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+
+ f->glGenVertexArrays(1, &OSDVertexArray);
+ f->glBindVertexArray(OSDVertexArray);
+ f->glEnableVertexAttribArray(0); // position
+ f->glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void*)(0));
+ }
+
+ return true;
+}
+
+void DeInit(QOpenGLFunctions_3_2_Core* f)
+{
+ for (auto it = ItemQueue.begin(); it != ItemQueue.end(); )
+ {
+ Item& item = *it;
+
+ if (item.GLTextureLoaded && f) f->glDeleteTextures(1, &item.GLTexture);
+ if (item.Bitmap) delete[] item.Bitmap;
+
+ it = ItemQueue.erase(it);
+ }
+
+ if (f) delete Shader;
+}
+
+
+int FindBreakPoint(const char* text, int i)
+{
+ // i = character that went out of bounds
+
+ for (int j = i; j >= 0; j--)
+ {
+ if (text[j] == ' ')
+ return j;
+ }
+
+ return i;
+}
+
+void LayoutText(const char* text, u32* width, u32* height, int* breaks)
+{
+ u32 w = 0;
+ u32 h = 14;
+ u32 totalw = 0;
+ u32 maxw = mainWindow->panel->width() - (kOSDMargin*2);
+ int lastbreak = -1;
+ int numbrk = 0;
+ u16* ptr;
+
+ memset(breaks, 0, sizeof(int)*64);
+
+ for (int i = 0; text[i] != '\0'; )
+ {
+ int glyphsize;
+ if (text[i] == ' ')
+ {
+ glyphsize = 6;
+ }
+ else
+ {
+ u32 ch = text[i];
+ if (ch < 0x10 || ch > 0x7E) ch = 0x7F;
+
+ ptr = &font[(ch-0x10) << 4];
+ glyphsize = ptr[0];
+ if (!glyphsize) glyphsize = 6;
+ else glyphsize += 2; // space around the character
+ }
+
+ w += glyphsize;
+ if (w > maxw)
+ {
+ // wrap shit as needed
+ if (text[i] == ' ')
+ {
+ if (numbrk >= 64) break;
+ breaks[numbrk++] = i;
+ i++;
+ }
+ else
+ {
+ int brk = FindBreakPoint(text, i);
+ if (brk != lastbreak) i = brk;
+
+ if (numbrk >= 64) break;
+ breaks[numbrk++] = i;
+
+ lastbreak = brk;
+ }
+
+ w = 0;
+ h += 14;
+ }
+ else
+ i++;
+
+ if (w > totalw) totalw = w;
+ }
+
+ *width = totalw;
+ *height = h;
+}
+
+u32 RainbowColor(u32 inc)
+{
+ // inspired from Acmlmboard
+
+ if (inc < 100) return 0xFFFF9B9B + (inc << 8);
+ else if (inc < 200) return 0xFFFFFF9B - ((inc-100) << 16);
+ else if (inc < 300) return 0xFF9BFF9B + (inc-200);
+ else if (inc < 400) return 0xFF9BFFFF - ((inc-300) << 8);
+ else if (inc < 500) return 0xFF9B9BFF + ((inc-400) << 16);
+ else return 0xFFFF9BFF - (inc-500);
+}
+
+void RenderText(u32 color, const char* text, Item* item)
+{
+ u32 w, h;
+ int breaks[64];
+
+ bool rainbow = (color == 0);
+ u32 rainbowinc = ((text[0] * 17) + (SDL_GetTicks() * 13)) % 600;
+
+ color |= 0xFF000000;
+ const u32 shadow = 0xE0000000;
+
+ LayoutText(text, &w, &h, breaks);
+
+ item->Width = w;
+ item->Height = h;
+ item->Bitmap = new u32[w*h];
+ memset(item->Bitmap, 0, w*h*sizeof(u32));
+
+ u32 x = 0, y = 1;
+ u32 maxw = mainWindow->panel->width() - (kOSDMargin*2);
+ int curline = 0;
+ u16* ptr;
+
+ for (int i = 0; text[i] != '\0'; )
+ {
+ int glyphsize;
+ if (text[i] == ' ')
+ {
+ x += 6;
+ }
+ else
+ {
+ u32 ch = text[i];
+ if (ch < 0x10 || ch > 0x7E) ch = 0x7F;
+
+ ptr = &font[(ch-0x10) << 4];
+ int glyphsize = ptr[0];
+ if (!glyphsize) x += 6;
+ else
+ {
+ x++;
+
+ if (rainbow)
+ {
+ color = RainbowColor(rainbowinc);
+ rainbowinc = (rainbowinc + 30) % 600;
+ }
+
+ // draw character
+ for (int cy = 0; cy < 12; cy++)
+ {
+ u16 val = ptr[4+cy];
+
+ for (int cx = 0; cx < glyphsize; cx++)
+ {
+ if (val & (1<<cx))
+ item->Bitmap[((y+cy) * w) + x+cx] = color;
+ }
+ }
+
+ x += glyphsize;
+ x++;
+ }
+ }
+
+ i++;
+ if (breaks[curline] && i >= breaks[curline])
+ {
+ i = breaks[curline++];
+ if (text[i] == ' ') i++;
+
+ x = 0;
+ y += 14;
+ }
+ }
+
+ // shadow
+ for (y = 0; y < h; y++)
+ {
+ for (x = 0; x < w; x++)
+ {
+ u32 val;
+
+ val = item->Bitmap[(y * w) + x];
+ if ((val >> 24) == 0xFF) continue;
+
+ if (x > 0) val = item->Bitmap[(y * w) + x-1];
+ if (x < w-1) val |= item->Bitmap[(y * w) + x+1];
+ if (y > 0)
+ {
+ if (x > 0) val |= item->Bitmap[((y-1) * w) + x-1];
+ val |= item->Bitmap[((y-1) * w) + x];
+ if (x < w-1) val |= item->Bitmap[((y-1) * w) + x+1];
+ }
+ if (y < h-1)
+ {
+ if (x > 0) val |= item->Bitmap[((y+1) * w) + x-1];
+ val |= item->Bitmap[((y+1) * w) + x];
+ if (x < w-1) val |= item->Bitmap[((y+1) * w) + x+1];
+ }
+
+ if ((val >> 24) == 0xFF)
+ item->Bitmap[(y * w) + x] = shadow;
+ }
+ }
+}
+
+
+void AddMessage(u32 color, const char* text)
+{
+ if (!Config::ShowOSD) return;
+
+ while (Rendering);
+
+ Item item;
+
+ item.Timestamp = SDL_GetTicks();
+ strncpy(item.Text, text, 255); item.Text[255] = '\0';
+ item.Color = color;
+ item.Bitmap = nullptr;
+
+ item.NativeBitmapLoaded = false;
+ item.GLTextureLoaded = false;
+
+ ItemQueue.push_back(item);
+}
+
+void Update(QOpenGLFunctions_3_2_Core* f)
+{
+ if (!Config::ShowOSD)
+ {
+ Rendering = true;
+ for (auto it = ItemQueue.begin(); it != ItemQueue.end(); )
+ {
+ Item& item = *it;
+
+ if (item.GLTextureLoaded && f) f->glDeleteTextures(1, &item.GLTexture);
+ if (item.Bitmap) delete[] item.Bitmap;
+
+ it = ItemQueue.erase(it);
+ }
+ Rendering = false;
+ return;
+ }
+
+ Rendering = true;
+
+ Uint32 tick_now = SDL_GetTicks();
+ Uint32 tick_min = tick_now - 2500;
+
+ for (auto it = ItemQueue.begin(); it != ItemQueue.end(); )
+ {
+ Item& item = *it;
+
+ if (item.Timestamp < tick_min)
+ {
+ if (item.GLTextureLoaded) f->glDeleteTextures(1, &item.GLTexture);
+ if (item.Bitmap) delete[] item.Bitmap;
+
+ it = ItemQueue.erase(it);
+ continue;
+ }
+
+ if (!item.Bitmap)
+ {
+ RenderText(item.Color, item.Text, &item);
+ }
+
+ it++;
+ }
+
+ Rendering = false;
+}
+
+void DrawNative(QPainter& painter)
+{
+ if (!Config::ShowOSD) return;
+
+ Rendering = true;
+
+ u32 y = kOSDMargin;
+
+ painter.resetTransform();
+
+ for (auto it = ItemQueue.begin(); it != ItemQueue.end(); )
+ {
+ Item& item = *it;
+
+ if (!item.NativeBitmapLoaded)
+ {
+ item.NativeBitmap = QImage((const uchar*)item.Bitmap, item.Width, item.Height, QImage::Format_ARGB32_Premultiplied);
+ item.NativeBitmapLoaded = true;
+ }
+
+ painter.drawImage(kOSDMargin, y, item.NativeBitmap);
+
+ y += item.Height;
+ it++;
+ }
+
+ Rendering = false;
+}
+
+void DrawGL(QOpenGLFunctions_3_2_Core* f, float w, float h)
+{
+ if (!Config::ShowOSD) return;
+ if (!mainWindow || !mainWindow->panel) return;
+
+ Rendering = true;
+
+ u32 y = kOSDMargin;
+
+ Shader->bind();
+
+ f->glUniform2f(uScreenSize, w, h);
+
+ f->glBindBuffer(GL_ARRAY_BUFFER, OSDVertexBuffer);
+ f->glBindVertexArray(OSDVertexArray);
+
+ f->glActiveTexture(GL_TEXTURE0);
+
+ f->glEnable(GL_BLEND);
+ f->glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
+
+ for (auto it = ItemQueue.begin(); it != ItemQueue.end(); )
+ {
+ Item& item = *it;
+
+ if (!item.GLTextureLoaded)
+ {
+ f->glGenTextures(1, &item.GLTexture);
+ f->glBindTexture(GL_TEXTURE_2D, item.GLTexture);
+ f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ f->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ f->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, item.Width, item.Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, item.Bitmap);
+
+ item.GLTextureLoaded = true;
+ }
+
+ f->glBindTexture(GL_TEXTURE_2D, item.GLTexture);
+ f->glUniform2i(uOSDPos, kOSDMargin, y);
+ f->glUniform2i(uOSDSize, item.Width, item.Height);
+ f->glDrawArrays(GL_TRIANGLES, 0, 2*3);
+
+ y += item.Height;
+ it++;
+ }
+
+ f->glDisable(GL_BLEND);
+ Shader->release();
+
+ Rendering = false;
+}
+
+}
diff --git a/src/frontend/qt_sdl/OSD.h b/src/frontend/qt_sdl/OSD.h
new file mode 100644
index 0000000..79d9df0
--- /dev/null
+++ b/src/frontend/qt_sdl/OSD.h
@@ -0,0 +1,36 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef OSD_H
+#define OSD_H
+
+namespace OSD
+{
+
+bool Init(QOpenGLFunctions_3_2_Core* f);
+void DeInit(QOpenGLFunctions_3_2_Core* f);
+
+void AddMessage(u32 color, const char* text);
+
+void Update(QOpenGLFunctions_3_2_Core* f);
+void DrawNative(QPainter& painter);
+void DrawGL(QOpenGLFunctions_3_2_Core* f, float w, float h);
+
+}
+
+#endif // OSD_H
diff --git a/src/frontend/qt_sdl/OSD_shaders.h b/src/frontend/qt_sdl/OSD_shaders.h
new file mode 100644
index 0000000..5a64f66
--- /dev/null
+++ b/src/frontend/qt_sdl/OSD_shaders.h
@@ -0,0 +1,65 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef OSD_SHADERS_H
+#define OSD_SHADERS_H
+
+const char* kScreenVS_OSD = R"(#version 140
+
+uniform vec2 uScreenSize;
+
+uniform ivec2 uOSDPos;
+uniform ivec2 uOSDSize;
+
+in vec2 vPosition;
+
+smooth out vec2 fTexcoord;
+
+void main()
+{
+ vec4 fpos;
+
+ vec2 osdpos = (vPosition * vec2(uOSDSize));
+ fTexcoord = osdpos;
+ osdpos += uOSDPos;
+
+ fpos.xy = ((osdpos * 2.0) / uScreenSize) - 1.0;
+ fpos.y *= -1;
+ fpos.z = 0.0;
+ fpos.w = 1.0;
+
+ gl_Position = fpos;
+}
+)";
+
+const char* kScreenFS_OSD = R"(#version 140
+
+uniform sampler2D OSDTex;
+
+smooth in vec2 fTexcoord;
+
+out vec4 oColor;
+
+void main()
+{
+ vec4 pixel = texelFetch(OSDTex, ivec2(fTexcoord), 0);
+ oColor = pixel.bgra;
+}
+)";
+
+#endif // OSD_SHADERS_H
diff --git a/src/frontend/qt_sdl/Platform.cpp b/src/frontend/qt_sdl/Platform.cpp
index 125e7ea..47befb0 100644
--- a/src/frontend/qt_sdl/Platform.cpp
+++ b/src/frontend/qt_sdl/Platform.cpp
@@ -27,8 +27,9 @@
#include "Platform.h"
#include "PlatformConfig.h"
-//#include "LAN_Socket.h"
-//#include "LAN_PCap.h"
+#include "LAN_Socket.h"
+#include "LAN_PCap.h"
+#include <string>
#ifdef __WIN32__
#define NTDDI_VERSION 0x06000000 // GROSS FUCKING HACK
@@ -56,9 +57,10 @@
#endif
-extern char* EmuDirectory;
+char* EmuDirectory;
-void Stop(bool internal);
+void emuStop();
+void* oglGetProcAddress(const char* proc);
namespace Platform
@@ -71,11 +73,57 @@ u8 PacketBuffer[2048];
#define NIFI_VER 1
+void Init(int argc, char** argv)
+{
+#if defined(__WIN32__) || defined(UNIX_PORTABLE)
+ if (argc > 0 && strlen(argv[0]) > 0)
+ {
+ int len = strlen(argv[0]);
+ while (len > 0)
+ {
+ if (argv[0][len] == '/') break;
+ if (argv[0][len] == '\\') break;
+ len--;
+ }
+ if (len > 0)
+ {
+ EmuDirectory = new char[len+1];
+ strncpy(EmuDirectory, argv[0], len);
+ EmuDirectory[len] = '\0';
+ }
+ else
+ {
+ EmuDirectory = new char[2];
+ strcpy(EmuDirectory, ".");
+ }
+ }
+ else
+ {
+ EmuDirectory = new char[2];
+ strcpy(EmuDirectory, ".");
+ }
+#else
+ QString confdir;
+ QDir config(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
+ config.mkdir("melonDS");
+ confdir = config.absolutePath() + "/melonDS/";
+ EmuDirectory = new char[confdir.length() + 1];
+ memcpy(EmuDirectory, confdir.toUtf8().data(), confdir.length());
+#endif
+}
+
+void DeInit()
+{
+ delete[] EmuDirectory;
+}
+
+
void StopEmu()
{
- //Stop(true);
+ emuStop();
}
+
FILE* OpenFile(const char* path, const char* mode, bool mustexist)
{
QFile f(path);
@@ -200,30 +248,30 @@ void Semaphore_Post(void* sema)
void* GL_GetProcAddress(const char* proc)
{
- return (void*) QOpenGLContext::globalShareContext()->getProcAddress(proc);
+ return oglGetProcAddress(proc);
}
bool MP_Init()
{
- int opt_true = 1;
- int res;
+ int opt_true = 1;
+ int res;
#ifdef __WIN32__
- WSADATA wsadata;
- if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
- {
- return false;
- }
+ WSADATA wsadata;
+ if (WSAStartup(MAKEWORD(2, 2), &wsadata) != 0)
+ {
+ return false;
+ }
#endif // __WIN32__
- MPSocket = socket(AF_INET, SOCK_DGRAM, 0);
+ MPSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (MPSocket < 0)
{
return false;
}
- res = setsockopt(MPSocket, SOL_SOCKET, SO_REUSEADDR, (const char*) &opt_true, sizeof(int));
+ res = setsockopt(MPSocket, SOL_SOCKET, SO_REUSEADDR, (const char*)&opt_true, sizeof(int));
if (res < 0)
{
closesocket(MPSocket);
@@ -233,8 +281,8 @@ bool MP_Init()
sockaddr_t saddr;
saddr.sa_family = AF_INET;
- *(u32*) &saddr.sa_data[2] = htonl(Config::SocketBindAnyAddr ? INADDR_ANY : INADDR_LOOPBACK);
- *(u16*) &saddr.sa_data[0] = htons(7064);
+ *(u32*)&saddr.sa_data[2] = htonl(Config::SocketBindAnyAddr ? INADDR_ANY : INADDR_LOOPBACK);
+ *(u16*)&saddr.sa_data[0] = htons(7064);
res = bind(MPSocket, &saddr, sizeof(sockaddr_t));
if (res < 0)
{
@@ -243,7 +291,7 @@ bool MP_Init()
return false;
}
- res = setsockopt(MPSocket, SOL_SOCKET, SO_BROADCAST, (const char*) &opt_true, sizeof(int));
+ res = setsockopt(MPSocket, SOL_SOCKET, SO_BROADCAST, (const char*)&opt_true, sizeof(int));
if (res < 0)
{
closesocket(MPSocket);
@@ -252,50 +300,50 @@ bool MP_Init()
}
MPSendAddr.sa_family = AF_INET;
- *(u32*) &MPSendAddr.sa_data[2] = htonl(INADDR_BROADCAST);
- *(u16*) &MPSendAddr.sa_data[0] = htons(7064);
+ *(u32*)&MPSendAddr.sa_data[2] = htonl(INADDR_BROADCAST);
+ *(u16*)&MPSendAddr.sa_data[0] = htons(7064);
return true;
}
void MP_DeInit()
{
- if (MPSocket >= 0)
- closesocket(MPSocket);
+ if (MPSocket >= 0)
+ closesocket(MPSocket);
#ifdef __WIN32__
- WSACleanup();
+ WSACleanup();
#endif // __WIN32__
}
int MP_SendPacket(u8* data, int len)
{
- if (MPSocket < 0)
- return 0;
-
- if (len > 2048 - 8)
- {
- printf("MP_SendPacket: error: packet too long (%d)\n", len);
- return 0;
- }
-
- *(u32*) &PacketBuffer[0] = htonl(0x4946494E); // NIFI
- PacketBuffer[4] = NIFI_VER;
- PacketBuffer[5] = 0;
- *(u16*) &PacketBuffer[6] = htons(len);
- memcpy(&PacketBuffer[8], data, len);
-
- int slen = sendto(MPSocket, (const char*) PacketBuffer, len + 8, 0, &MPSendAddr, sizeof(sockaddr_t));
- if (slen < 8) return 0;
- return slen - 8;
+ if (MPSocket < 0)
+ return 0;
+
+ if (len > 2048-8)
+ {
+ printf("MP_SendPacket: error: packet too long (%d)\n", len);
+ return 0;
+ }
+
+ *(u32*)&PacketBuffer[0] = htonl(0x4946494E); // NIFI
+ PacketBuffer[4] = NIFI_VER;
+ PacketBuffer[5] = 0;
+ *(u16*)&PacketBuffer[6] = htons(len);
+ memcpy(&PacketBuffer[8], data, len);
+
+ int slen = sendto(MPSocket, (const char*)PacketBuffer, len+8, 0, &MPSendAddr, sizeof(sockaddr_t));
+ if (slen < 8) return 0;
+ return slen - 8;
}
int MP_RecvPacket(u8* data, bool block)
{
- if (MPSocket < 0)
- return 0;
+ if (MPSocket < 0)
+ return 0;
- fd_set fd;
+ fd_set fd;
struct timeval tv;
FD_ZERO(&fd);
@@ -303,83 +351,82 @@ int MP_RecvPacket(u8* data, bool block)
tv.tv_sec = 0;
tv.tv_usec = block ? 5000 : 0;
- if (!select(MPSocket + 1, &fd, 0, 0, &tv))
- {
- return 0;
- }
-
- sockaddr_t fromAddr;
- socklen_t fromLen = sizeof(sockaddr_t);
- int rlen = recvfrom(MPSocket, (char*) PacketBuffer, 2048, 0, &fromAddr, &fromLen);
- if (rlen < 8 + 24)
- {
- return 0;
- }
- rlen -= 8;
-
- if (ntohl(*(u32*) &PacketBuffer[0]) != 0x4946494E)
- {
- return 0;
- }
-
- if (PacketBuffer[4] != NIFI_VER)
- {
- return 0;
- }
-
- if (ntohs(*(u16*) &PacketBuffer[6]) != rlen)
- {
- return 0;
- }
-
- memcpy(data, &PacketBuffer[8], rlen);
- return rlen;
+ if (!select(MPSocket+1, &fd, 0, 0, &tv))
+ {
+ return 0;
+ }
+
+ sockaddr_t fromAddr;
+ socklen_t fromLen = sizeof(sockaddr_t);
+ int rlen = recvfrom(MPSocket, (char*)PacketBuffer, 2048, 0, &fromAddr, &fromLen);
+ if (rlen < 8+24)
+ {
+ return 0;
+ }
+ rlen -= 8;
+
+ if (ntohl(*(u32*)&PacketBuffer[0]) != 0x4946494E)
+ {
+ return 0;
+ }
+
+ if (PacketBuffer[4] != NIFI_VER)
+ {
+ return 0;
+ }
+
+ if (ntohs(*(u16*)&PacketBuffer[6]) != rlen)
+ {
+ return 0;
+ }
+
+ memcpy(data, &PacketBuffer[8], rlen);
+ return rlen;
}
+
bool LAN_Init()
{
- /*if (Config::DirectLAN)
- {
- if (!LAN_PCap::Init(true))
- return false;
- }
- else
- {
- if (!LAN_Socket::Init())
- return false;
- }*/
-
- return true;
+ if (Config::DirectLAN)
+ {
+ if (!LAN_PCap::Init(true))
+ return false;
+ }
+ else
+ {
+ if (!LAN_Socket::Init())
+ return false;
+ }
+
+ return true;
}
void LAN_DeInit()
{
- // checkme. blarg
- //if (Config::DirectLAN)
- // LAN_PCap::DeInit();
- //else
- // LAN_Socket::DeInit();
- /*LAN_PCap::DeInit();
- LAN_Socket::DeInit();*/
+ // checkme. blarg
+ //if (Config::DirectLAN)
+ // LAN_PCap::DeInit();
+ //else
+ // LAN_Socket::DeInit();
+ LAN_PCap::DeInit();
+ LAN_Socket::DeInit();
}
int LAN_SendPacket(u8* data, int len)
{
- /*if (Config::DirectLAN)
- return LAN_PCap::SendPacket(data, len);
- else
- return LAN_Socket::SendPacket(data, len);*/
- return 0;
+ if (Config::DirectLAN)
+ return LAN_PCap::SendPacket(data, len);
+ else
+ return LAN_Socket::SendPacket(data, len);
}
int LAN_RecvPacket(u8* data)
{
- /*if (Config::DirectLAN)
- return LAN_PCap::RecvPacket(data);
- else
- return LAN_Socket::RecvPacket(data);*/
- return 0;
+ if (Config::DirectLAN)
+ return LAN_PCap::RecvPacket(data);
+ else
+ return LAN_Socket::RecvPacket(data);
}
diff --git a/src/frontend/qt_sdl/PlatformConfig.cpp b/src/frontend/qt_sdl/PlatformConfig.cpp
index f78b195..06128d7 100644
--- a/src/frontend/qt_sdl/PlatformConfig.cpp
+++ b/src/frontend/qt_sdl/PlatformConfig.cpp
@@ -40,16 +40,24 @@ int ScreenRotation;
int ScreenGap;
int ScreenLayout;
int ScreenSizing;
+int IntegerScaling;
int ScreenFilter;
int ScreenUseGL;
int ScreenVSync;
-int ScreenRatio;
+int ScreenVSyncInterval;
+
+int _3DRenderer;
+int Threaded3D;
+
+int GL_ScaleFactor;
+int GL_Antialias;
int LimitFPS;
int AudioSync;
int ShowOSD;
+int ConsoleType;
int DirectBoot;
int SocketBindAnyAddr;
@@ -60,25 +68,25 @@ int SavestateRelocSRAM;
int AudioVolume;
int MicInputType;
-char MicWavPath[512];
+char MicWavPath[1024];
-char LastROMFolder[512];
+char LastROMFolder[1024];
ConfigEntry PlatformConfigFile[] =
{
- {"Key_A", 0, &KeyMapping[0], 32, NULL, 0},
- {"Key_B", 0, &KeyMapping[1], 31, NULL, 0},
- {"Key_Select", 0, &KeyMapping[2], 57, NULL, 0},
- {"Key_Start", 0, &KeyMapping[3], 28, NULL, 0},
- {"Key_Right", 0, &KeyMapping[4], 333, NULL, 0},
- {"Key_Left", 0, &KeyMapping[5], 331, NULL, 0},
- {"Key_Up", 0, &KeyMapping[6], 328, NULL, 0},
- {"Key_Down", 0, &KeyMapping[7], 336, NULL, 0},
- {"Key_R", 0, &KeyMapping[8], 54, NULL, 0},
- {"Key_L", 0, &KeyMapping[9], 86, NULL, 0},
- {"Key_X", 0, &KeyMapping[10], 17, NULL, 0},
- {"Key_Y", 0, &KeyMapping[11], 30, NULL, 0},
+ {"Key_A", 0, &KeyMapping[0], -1, NULL, 0},
+ {"Key_B", 0, &KeyMapping[1], -1, NULL, 0},
+ {"Key_Select", 0, &KeyMapping[2], -1, NULL, 0},
+ {"Key_Start", 0, &KeyMapping[3], -1, NULL, 0},
+ {"Key_Right", 0, &KeyMapping[4], -1, NULL, 0},
+ {"Key_Left", 0, &KeyMapping[5], -1, NULL, 0},
+ {"Key_Up", 0, &KeyMapping[6], -1, NULL, 0},
+ {"Key_Down", 0, &KeyMapping[7], -1, NULL, 0},
+ {"Key_R", 0, &KeyMapping[8], -1, NULL, 0},
+ {"Key_L", 0, &KeyMapping[9], -1, NULL, 0},
+ {"Key_X", 0, &KeyMapping[10], -1, NULL, 0},
+ {"Key_Y", 0, &KeyMapping[11], -1, NULL, 0},
{"Joy_A", 0, &JoyMapping[0], -1, NULL, 0},
{"Joy_B", 0, &JoyMapping[1], -1, NULL, 0},
@@ -93,14 +101,14 @@ ConfigEntry PlatformConfigFile[] =
{"Joy_X", 0, &JoyMapping[10], -1, NULL, 0},
{"Joy_Y", 0, &JoyMapping[11], -1, NULL, 0},
- {"HKKey_Lid", 0, &HKKeyMapping[HK_Lid], 0x0D, NULL, 0},
- {"HKKey_Mic", 0, &HKKeyMapping[HK_Mic], 0x35, NULL, 0},
- {"HKKey_Pause", 0, &HKKeyMapping[HK_Pause], -1, NULL, 0},
- {"HKKey_Reset", 0, &HKKeyMapping[HK_Reset], -1, NULL, 0},
- {"HKKey_FastForward", 0, &HKKeyMapping[HK_FastForward], 0x0F, NULL, 0},
- {"HKKey_FastForwardToggle", 0, &HKKeyMapping[HK_FastForwardToggle], -1, NULL, 0},
- {"HKKey_SolarSensorDecrease", 0, &HKKeyMapping[HK_SolarSensorDecrease], 0x4B, NULL, 0},
- {"HKKey_SolarSensorIncrease", 0, &HKKeyMapping[HK_SolarSensorIncrease], 0x4D, NULL, 0},
+ {"HKKey_Lid", 0, &HKKeyMapping[HK_Lid], -1, NULL, 0},
+ {"HKKey_Mic", 0, &HKKeyMapping[HK_Mic], -1, NULL, 0},
+ {"HKKey_Pause", 0, &HKKeyMapping[HK_Pause], -1, NULL, 0},
+ {"HKKey_Reset", 0, &HKKeyMapping[HK_Reset], -1, NULL, 0},
+ {"HKKey_FastForward", 0, &HKKeyMapping[HK_FastForward], -1, NULL, 0},
+ {"HKKey_FastForwardToggle", 0, &HKKeyMapping[HK_FastForwardToggle], -1, NULL, 0},
+ {"HKKey_SolarSensorDecrease", 0, &HKKeyMapping[HK_SolarSensorDecrease], -1, NULL, 0},
+ {"HKKey_SolarSensorIncrease", 0, &HKKeyMapping[HK_SolarSensorIncrease], -1, NULL, 0},
{"HKJoy_Lid", 0, &HKJoyMapping[HK_Lid], -1, NULL, 0},
{"HKJoy_Mic", 0, &HKJoyMapping[HK_Mic], -1, NULL, 0},
@@ -121,16 +129,24 @@ ConfigEntry PlatformConfigFile[] =
{"ScreenGap", 0, &ScreenGap, 0, NULL, 0},
{"ScreenLayout", 0, &ScreenLayout, 0, NULL, 0},
{"ScreenSizing", 0, &ScreenSizing, 0, NULL, 0},
+ {"IntegerScaling", 0, &IntegerScaling, 0, NULL, 0},
{"ScreenFilter", 0, &ScreenFilter, 1, NULL, 0},
- {"ScreenUseGL", 0, &ScreenUseGL, 1, NULL, 0},
- {"ScreenVSync", 0, &ScreenVSync, 0, NULL, 0},
- {"ScreenRatio", 0, &ScreenRatio, 0, NULL, 0},
+ {"ScreenUseGL", 0, &ScreenUseGL, 1, NULL, 0},
+ {"ScreenVSync", 0, &ScreenVSync, 0, NULL, 0},
+ {"ScreenVSyncInterval", 0, &ScreenVSyncInterval, 1, NULL, 0},
+
+ {"3DRenderer", 0, &_3DRenderer, 1, NULL, 0},
+ {"Threaded3D", 0, &Threaded3D, 1, NULL, 0},
+
+ {"GL_ScaleFactor", 0, &GL_ScaleFactor, 1, NULL, 0},
+ {"GL_Antialias", 0, &GL_Antialias, 0, NULL, 0},
{"LimitFPS", 0, &LimitFPS, 0, NULL, 0},
{"AudioSync", 0, &AudioSync, 1, NULL, 0},
{"ShowOSD", 0, &ShowOSD, 1, NULL, 0},
+ {"ConsoleType", 0, &ConsoleType, 0, NULL, 0},
{"DirectBoot", 0, &DirectBoot, 1, NULL, 0},
{"SockBindAnyAddr", 0, &SocketBindAnyAddr, 0, NULL, 0},
@@ -141,9 +157,9 @@ ConfigEntry PlatformConfigFile[] =
{"AudioVolume", 0, &AudioVolume, 256, NULL, 0},
{"MicInputType", 0, &MicInputType, 1, NULL, 0},
- {"MicWavPath", 1, MicWavPath, 0, "", 511},
+ {"MicWavPath", 1, MicWavPath, 0, "", 1023},
- {"LastROMFolder", 1, LastROMFolder, 0, "", 511},
+ {"LastROMFolder", 1, LastROMFolder, 0, "", 1023},
{"", -1, NULL, 0, NULL, 0}
};
diff --git a/src/frontend/qt_sdl/PlatformConfig.h b/src/frontend/qt_sdl/PlatformConfig.h
index d0f765b..791bb07 100644
--- a/src/frontend/qt_sdl/PlatformConfig.h
+++ b/src/frontend/qt_sdl/PlatformConfig.h
@@ -53,16 +53,24 @@ extern int ScreenRotation;
extern int ScreenGap;
extern int ScreenLayout;
extern int ScreenSizing;
+extern int IntegerScaling;
extern int ScreenFilter;
extern int ScreenUseGL;
extern int ScreenVSync;
-extern int ScreenRatio;
+extern int ScreenVSyncInterval;
+
+extern int _3DRenderer;
+extern int Threaded3D;
+
+extern int GL_ScaleFactor;
+extern int GL_Antialias;
extern int LimitFPS;
extern int AudioSync;
extern int ShowOSD;
+extern int ConsoleType;
extern int DirectBoot;
extern int SocketBindAnyAddr;
@@ -73,9 +81,9 @@ extern int SavestateRelocSRAM;
extern int AudioVolume;
extern int MicInputType;
-extern char MicWavPath[512];
+extern char MicWavPath[1024];
-extern char LastROMFolder[512];
+extern char LastROMFolder[1024];
}
diff --git a/src/frontend/qt_sdl/VideoSettingsDialog.cpp b/src/frontend/qt_sdl/VideoSettingsDialog.cpp
new file mode 100644
index 0000000..ba433c3
--- /dev/null
+++ b/src/frontend/qt_sdl/VideoSettingsDialog.cpp
@@ -0,0 +1,169 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <QFileDialog>
+
+#include "types.h"
+#include "Platform.h"
+#include "Config.h"
+#include "PlatformConfig.h"
+
+#include "VideoSettingsDialog.h"
+#include "ui_VideoSettingsDialog.h"
+
+
+VideoSettingsDialog* VideoSettingsDialog::currentDlg = nullptr;
+
+
+VideoSettingsDialog::VideoSettingsDialog(QWidget* parent) : QDialog(parent), ui(new Ui::VideoSettingsDialog)
+{
+ ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ oldRenderer = Config::_3DRenderer;
+ oldGLDisplay = Config::ScreenUseGL;
+ oldVSync = Config::ScreenVSync;
+ oldVSyncInterval = Config::ScreenVSyncInterval;
+ oldSoftThreaded = Config::Threaded3D;
+ oldGLScale = Config::GL_ScaleFactor;
+
+ grp3DRenderer = new QButtonGroup(this);
+ grp3DRenderer->addButton(ui->rb3DSoftware, 0);
+ grp3DRenderer->addButton(ui->rb3DOpenGL, 1);
+ connect(grp3DRenderer, SIGNAL(buttonClicked(int)), this, SLOT(onChange3DRenderer(int)));
+ grp3DRenderer->button(Config::_3DRenderer)->setChecked(true);
+
+ ui->cbGLDisplay->setChecked(Config::ScreenUseGL != 0);
+
+ ui->cbVSync->setChecked(Config::ScreenVSync != 0);
+ ui->sbVSyncInterval->setValue(Config::ScreenVSyncInterval);
+
+ ui->cbSoftwareThreaded->setChecked(Config::Threaded3D != 0);
+
+ for (int i = 1; i <= 16; i++)
+ ui->cbxGLResolution->addItem(QString("%1x native (%2x%3)").arg(i).arg(256*i).arg(192*i));
+ ui->cbxGLResolution->setCurrentIndex(Config::GL_ScaleFactor-1);
+
+ if (!Config::ScreenVSync)
+ ui->sbVSyncInterval->setEnabled(false);
+
+ if (Config::_3DRenderer == 0)
+ {
+ ui->cbGLDisplay->setEnabled(true);
+ ui->cbSoftwareThreaded->setEnabled(true);
+ ui->cbxGLResolution->setEnabled(false);
+ }
+ else
+ {
+ ui->cbGLDisplay->setEnabled(false);
+ ui->cbSoftwareThreaded->setEnabled(false);
+ ui->cbxGLResolution->setEnabled(true);
+ }
+}
+
+VideoSettingsDialog::~VideoSettingsDialog()
+{
+ delete ui;
+}
+
+void VideoSettingsDialog::on_VideoSettingsDialog_accepted()
+{
+ Config::Save();
+
+ closeDlg();
+}
+
+void VideoSettingsDialog::on_VideoSettingsDialog_rejected()
+{
+ bool old_gl = (Config::ScreenUseGL != 0) || (Config::_3DRenderer != 0);
+
+ Config::_3DRenderer = oldRenderer;
+ Config::ScreenUseGL = oldGLDisplay;
+ Config::ScreenVSync = oldVSync;
+ Config::ScreenVSyncInterval = oldVSyncInterval;
+ Config::Threaded3D = oldSoftThreaded;
+ Config::GL_ScaleFactor = oldGLScale;
+
+ bool new_gl = (Config::ScreenUseGL != 0) || (Config::_3DRenderer != 0);
+ emit updateVideoSettings(old_gl != new_gl);
+
+ closeDlg();
+}
+
+void VideoSettingsDialog::onChange3DRenderer(int renderer)
+{
+ bool old_gl = (Config::ScreenUseGL != 0) || (Config::_3DRenderer != 0);
+
+ Config::_3DRenderer = renderer;
+
+ if (renderer == 0)
+ {
+ ui->cbGLDisplay->setEnabled(true);
+ ui->cbSoftwareThreaded->setEnabled(true);
+ ui->cbxGLResolution->setEnabled(false);
+ }
+ else
+ {
+ ui->cbGLDisplay->setEnabled(false);
+ ui->cbSoftwareThreaded->setEnabled(false);
+ ui->cbxGLResolution->setEnabled(true);
+ }
+
+ bool new_gl = (Config::ScreenUseGL != 0) || (Config::_3DRenderer != 0);
+ emit updateVideoSettings(old_gl != new_gl);
+}
+
+void VideoSettingsDialog::on_cbGLDisplay_stateChanged(int state)
+{
+ bool old_gl = (Config::ScreenUseGL != 0) || (Config::_3DRenderer != 0);
+
+ Config::ScreenUseGL = (state != 0);
+
+ bool new_gl = (Config::ScreenUseGL != 0) || (Config::_3DRenderer != 0);
+ emit updateVideoSettings(old_gl != new_gl);
+}
+
+void VideoSettingsDialog::on_cbVSync_stateChanged(int state)
+{
+ bool vsync = (state != 0);
+ ui->sbVSyncInterval->setEnabled(vsync);
+ Config::ScreenVSync = vsync;
+}
+
+void VideoSettingsDialog::on_sbVSyncInterval_valueChanged(int val)
+{
+ Config::ScreenVSyncInterval = val;
+}
+
+void VideoSettingsDialog::on_cbSoftwareThreaded_stateChanged(int state)
+{
+ Config::Threaded3D = (state != 0);
+
+ emit updateVideoSettings(false);
+}
+
+void VideoSettingsDialog::on_cbxGLResolution_currentIndexChanged(int idx)
+{
+ // prevent a spurious change
+ if (ui->cbxGLResolution->count() < 16) return;
+
+ Config::GL_ScaleFactor = idx+1;
+
+ emit updateVideoSettings(false);
+}
diff --git a/src/frontend/qt_sdl/VideoSettingsDialog.h b/src/frontend/qt_sdl/VideoSettingsDialog.h
new file mode 100644
index 0000000..2311d4d
--- /dev/null
+++ b/src/frontend/qt_sdl/VideoSettingsDialog.h
@@ -0,0 +1,84 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef VIDEOSETTINGSDIALOG_H
+#define VIDEOSETTINGSDIALOG_H
+
+#include <QDialog>
+#include <QButtonGroup>
+
+namespace Ui { class VideoSettingsDialog; }
+class VideoSettingsDialog;
+
+class VideoSettingsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit VideoSettingsDialog(QWidget* parent);
+ ~VideoSettingsDialog();
+
+ static VideoSettingsDialog* currentDlg;
+ static VideoSettingsDialog* openDlg(QWidget* parent)
+ {
+ if (currentDlg)
+ {
+ currentDlg->activateWindow();
+ return currentDlg;
+ }
+
+ currentDlg = new VideoSettingsDialog(parent);
+ currentDlg->show();
+ return currentDlg;
+ }
+ static void closeDlg()
+ {
+ currentDlg = nullptr;
+ }
+
+signals:
+ void updateVideoSettings(bool glchange);
+
+private slots:
+ void on_VideoSettingsDialog_accepted();
+ void on_VideoSettingsDialog_rejected();
+
+ void onChange3DRenderer(int renderer);
+ void on_cbGLDisplay_stateChanged(int state);
+ void on_cbVSync_stateChanged(int state);
+ void on_sbVSyncInterval_valueChanged(int val);
+
+ void on_cbxGLResolution_currentIndexChanged(int idx);
+
+ void on_cbSoftwareThreaded_stateChanged(int state);
+
+private:
+ Ui::VideoSettingsDialog* ui;
+
+ QButtonGroup* grp3DRenderer;
+
+ int oldRenderer;
+ int oldGLDisplay;
+ int oldVSync;
+ int oldVSyncInterval;
+ int oldSoftThreaded;
+ int oldGLScale;
+};
+
+#endif // VIDEOSETTINGSDIALOG_H
+
diff --git a/src/frontend/qt_sdl/VideoSettingsDialog.ui b/src/frontend/qt_sdl/VideoSettingsDialog.ui
new file mode 100644
index 0000000..6cdd5d8
--- /dev/null
+++ b/src/frontend/qt_sdl/VideoSettingsDialog.ui
@@ -0,0 +1,229 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>VideoSettingsDialog</class>
+ <widget class="QDialog" name="VideoSettingsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>482</width>
+ <height>237</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string>Video settings - melonDS</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetFixedSize</enum>
+ </property>
+ <item row="1" column="1">
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+ <string>OpenGL renderer</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_4">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Internal resolution:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QComboBox" name="cbxGLResolution">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The resolution at which the 3D graphics will be rendered. Higher resolutions improve graphics quality when the main window is enlarged, but may also cause glitches.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Software renderer</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_3">
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="cbSoftwareThreaded">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Run the software renderer on a separate thread. Yields better performance on multi-core CPUs.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>Use separate thread</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item row="4" column="0" colspan="2">
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <spacer name="verticalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>40</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="0" rowspan="3">
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Display settings</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="6" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The interval at which to synchronize to the monitor's refresh rate. Set to 1 for a 60Hz monitor, 2 for 120Hz, ...&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>VSync interval:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="1">
+ <widget class="QSpinBox" name="sbVSyncInterval">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The interval at which to synchronize to the monitor's refresh rate. Set to 1 for a 60Hz monitor, 2 for 120Hz, ...&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>20</number>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0" colspan="2">
+ <widget class="QCheckBox" name="cbGLDisplay">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Use OpenGL to draw the DS screens to the main window. May result in better frame pacing. Mandatory when using the OpenGL 3D renderer.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>OpenGL display</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0" colspan="2">
+ <widget class="QCheckBox" name="cbVSync">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;When using OpenGL, synchronize the video output to your monitor's refresh rate.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>VSync</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" colspan="2">
+ <spacer name="verticalSpacer">
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="0" colspan="2">
+ <widget class="QRadioButton" name="rb3DOpenGL">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The OpenGL renderer may be faster than software and supports graphical enhancements, but is more prone to glitches.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>OpenGL</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" colspan="2">
+ <widget class="QRadioButton" name="rb3DSoftware">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;The software renderer is more accurate and less prone to rendering glitches, but requires more CPU power.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>Software</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" colspan="2">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>3D renderer:</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>VideoSettingsDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>VideoSettingsDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/frontend/qt_sdl/WifiSettingsDialog.cpp b/src/frontend/qt_sdl/WifiSettingsDialog.cpp
new file mode 100644
index 0000000..457a78d
--- /dev/null
+++ b/src/frontend/qt_sdl/WifiSettingsDialog.cpp
@@ -0,0 +1,140 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <QFileDialog>
+
+#include "types.h"
+#include "Platform.h"
+#include "Config.h"
+#include "PlatformConfig.h"
+
+#include "LAN_Socket.h"
+#include "LAN_PCap.h"
+#include "Wifi.h"
+
+#include "WifiSettingsDialog.h"
+#include "ui_WifiSettingsDialog.h"
+
+
+#ifdef __WIN32__
+#define PCAP_NAME "winpcap/npcap"
+#else
+#define PCAP_NAME "libpcap"
+#endif
+
+
+WifiSettingsDialog* WifiSettingsDialog::currentDlg = nullptr;
+
+
+WifiSettingsDialog::WifiSettingsDialog(QWidget* parent) : QDialog(parent), ui(new Ui::WifiSettingsDialog)
+{
+ ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ LAN_Socket::Init();
+ haspcap = LAN_PCap::Init(false);
+
+ ui->cbDirectMode->setText("Direct mode (requires " PCAP_NAME " and ethernet connection)");
+
+ ui->cbBindAnyAddr->setChecked(Config::SocketBindAnyAddr != 0);
+
+ int sel = 0;
+ for (int i = 0; i < LAN_PCap::NumAdapters; i++)
+ {
+ LAN_PCap::AdapterData* adapter = &LAN_PCap::Adapters[i];
+
+ ui->cbxDirectAdapter->addItem(QString(adapter->FriendlyName));
+
+ if (!strncmp(adapter->DeviceName, Config::LANDevice, 128))
+ sel = i;
+ }
+ ui->cbxDirectAdapter->setCurrentIndex(sel);
+
+ ui->cbDirectMode->setChecked(Config::DirectLAN != 0);
+ if (!haspcap) ui->cbDirectMode->setEnabled(false);
+
+ updateAdapterControls();
+}
+
+WifiSettingsDialog::~WifiSettingsDialog()
+{
+ delete ui;
+}
+
+void WifiSettingsDialog::on_WifiSettingsDialog_accepted()
+{
+ Config::SocketBindAnyAddr = ui->cbBindAnyAddr->isChecked() ? 1:0;
+ Config::DirectLAN = ui->cbDirectMode->isChecked() ? 1:0;
+
+ int sel = ui->cbxDirectAdapter->currentIndex();
+ if (sel < 0 || sel >= LAN_PCap::NumAdapters) sel = 0;
+ if (LAN_PCap::NumAdapters < 1)
+ {
+ Config::LANDevice[0] = '\0';
+ }
+ else
+ {
+ strncpy(Config::LANDevice, LAN_PCap::Adapters[sel].DeviceName, 127);
+ Config::LANDevice[127] = '\0';
+ }
+
+ Config::Save();
+
+ closeDlg();
+}
+
+void WifiSettingsDialog::on_WifiSettingsDialog_rejected()
+{
+ closeDlg();
+}
+
+void WifiSettingsDialog::on_cbDirectMode_stateChanged(int state)
+{
+ updateAdapterControls();
+}
+
+void WifiSettingsDialog::on_cbxDirectAdapter_currentIndexChanged(int sel)
+{
+ if (!haspcap) return;
+
+ if (sel < 0 || sel >= LAN_PCap::NumAdapters) return;
+ if (LAN_PCap::NumAdapters < 1) return;
+
+ LAN_PCap::AdapterData* adapter = &LAN_PCap::Adapters[sel];
+ char tmp[64];
+
+ sprintf(tmp, "MAC: %02X:%02X:%02X:%02X:%02X:%02X",
+ adapter->MAC[0], adapter->MAC[1], adapter->MAC[2],
+ adapter->MAC[3], adapter->MAC[4], adapter->MAC[5]);
+ ui->lblAdapterMAC->setText(QString(tmp));
+
+ sprintf(tmp, "IP: %d.%d.%d.%d",
+ adapter->IP_v4[0], adapter->IP_v4[1],
+ adapter->IP_v4[2], adapter->IP_v4[3]);
+ ui->lblAdapterIP->setText(QString(tmp));
+}
+
+void WifiSettingsDialog::updateAdapterControls()
+{
+ bool enable = haspcap && ui->cbDirectMode->isChecked();
+
+ ui->cbxDirectAdapter->setEnabled(enable);
+ ui->lblAdapterMAC->setEnabled(enable);
+ ui->lblAdapterIP->setEnabled(enable);
+}
diff --git a/src/frontend/qt_sdl/WifiSettingsDialog.h b/src/frontend/qt_sdl/WifiSettingsDialog.h
new file mode 100644
index 0000000..f8aad1b
--- /dev/null
+++ b/src/frontend/qt_sdl/WifiSettingsDialog.h
@@ -0,0 +1,68 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef WIFISETTINGSDIALOG_H
+#define WIFISETTINGSDIALOG_H
+
+#include <QDialog>
+
+namespace Ui { class WifiSettingsDialog; }
+class WifiSettingsDialog;
+
+class WifiSettingsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit WifiSettingsDialog(QWidget* parent);
+ ~WifiSettingsDialog();
+
+ static WifiSettingsDialog* currentDlg;
+ static WifiSettingsDialog* openDlg(QWidget* parent)
+ {
+ if (currentDlg)
+ {
+ currentDlg->activateWindow();
+ return currentDlg;
+ }
+
+ currentDlg = new WifiSettingsDialog(parent);
+ currentDlg->show();
+ return currentDlg;
+ }
+ static void closeDlg()
+ {
+ currentDlg = nullptr;
+ }
+
+private slots:
+ void on_WifiSettingsDialog_accepted();
+ void on_WifiSettingsDialog_rejected();
+
+ void on_cbDirectMode_stateChanged(int state);
+ void on_cbxDirectAdapter_currentIndexChanged(int sel);
+
+private:
+ Ui::WifiSettingsDialog* ui;
+
+ bool haspcap;
+
+ void updateAdapterControls();
+};
+
+#endif // WIFISETTINGSDIALOG_H
diff --git a/src/frontend/qt_sdl/WifiSettingsDialog.ui b/src/frontend/qt_sdl/WifiSettingsDialog.ui
new file mode 100644
index 0000000..bfee1fd
--- /dev/null
+++ b/src/frontend/qt_sdl/WifiSettingsDialog.ui
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>WifiSettingsDialog</class>
+ <widget class="QDialog" name="WifiSettingsDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>479</width>
+ <height>217</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string>Wifi settings - melonDS</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <property name="sizeConstraint">
+ <enum>QLayout::SetFixedSize</enum>
+ </property>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Local</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QCheckBox" name="cbBindAnyAddr">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Enabling this allows (theoretically) playing local multiplayer games over a local network. It may or may not help make for a better connection in general.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>Bind socket to any address</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Online</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>MAC address:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" colspan="2">
+ <widget class="QCheckBox" name="cbDirectMode">
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Direct mode directly routes network traffic to the host network. It is the most reliable, but requires an ethernet connection.&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Non-direct mode uses a layer of emulation to get around this, but is more prone to problems.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ <property name="text">
+ <string>Direct mode [TEXT PLACEHOLDER]</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QComboBox" name="cbxDirectAdapter">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>350</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="whatsThis">
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Selects the network adapter through which to route network traffic under direct mode.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Network adapter:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>IP address:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="lblAdapterMAC">
+ <property name="text">
+ <string>[PLACEHOLDER]</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QLabel" name="lblAdapterIP">
+ <property name="text">
+ <string>[PLACEHOLDER]</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QDialogButtonBox" name="buttonBox">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons">
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>accepted()</signal>
+ <receiver>WifiSettingsDialog</receiver>
+ <slot>accept()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>248</x>
+ <y>254</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>157</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>buttonBox</sender>
+ <signal>rejected()</signal>
+ <receiver>WifiSettingsDialog</receiver>
+ <slot>reject()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>316</x>
+ <y>260</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>286</x>
+ <y>274</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/src/frontend/qt_sdl/font.h b/src/frontend/qt_sdl/font.h
new file mode 100644
index 0000000..f2e4f87
--- /dev/null
+++ b/src/frontend/qt_sdl/font.h
@@ -0,0 +1,135 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef FONT_H
+#define FONT_H
+unsigned short font[] = {
+ 12, 0, 0, 0,0x0C03, 0x0E07, 0x070E, 0x039C, 0x01F8, 0x00F0, 0x00F0, 0x01F8, 0x039C, 0x070E, 0x0E07, 0x0C03,
+ 12, 0, 0, 0,0x01C0, 0x00E0, 0x0060, 0x0860, 0x0C60, 0x0FE0, 0x07F0, 0x0038, 0x001C, 0x000E, 0x0007, 0x0003,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 12, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 2, 0, 0, 0,0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000, 0x0003, 0x0003, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x01EF, 0x01EF, 0x018C, 0x01CE, 0x00E7, 0x0063, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x00CC, 0x00CC, 0x03FF, 0x03FF, 0x00CC, 0x00CC, 0x03FF, 0x03FF, 0x00CC, 0x00CC, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x0018, 0x00FE, 0x00FF, 0x001B, 0x007F, 0x00FE, 0x00D8, 0x00FF, 0x007F, 0x0018, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0306, 0x038F, 0x01CF, 0x00E6, 0x0070, 0x0038, 0x019C, 0x03CE, 0x03C7, 0x0183, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x007C, 0x00FE, 0x00C6, 0x00EE, 0x007C, 0x037E, 0x03E7, 0x01F3, 0x03BF, 0x031E, 0x0000, 0x0000,
+ 4, 0, 0, 0,0x000F, 0x000F, 0x000C, 0x000E, 0x0007, 0x0003, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 4, 0, 0, 0,0x000C, 0x000E, 0x0007, 0x0003, 0x0003, 0x0003, 0x0003, 0x0007, 0x000E, 0x000C, 0x0000, 0x0000,
+ 4, 0, 0, 0,0x0003, 0x0007, 0x000E, 0x000C, 0x000C, 0x000C, 0x000C, 0x000E, 0x0007, 0x0003, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0030, 0x0333, 0x03B7, 0x01FE, 0x00FC, 0x00FC, 0x01FE, 0x03B7, 0x0333, 0x0030, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0030, 0x0030, 0x0030, 0x0030, 0x03FF, 0x03FF, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000, 0x0000,
+ 4, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x000F, 0x000F, 0x000C, 0x000E, 0x0007, 0x0003,
+ 10, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 3, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0007, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0300, 0x0380, 0x01C0, 0x00E0, 0x0070, 0x0038, 0x001C, 0x000E, 0x0007, 0x0003, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x007E, 0x00FF, 0x00C3, 0x00C3, 0x00C3, 0x00C3, 0x00C3, 0x00C3, 0x00FF, 0x007E, 0x0000, 0x0000,
+ 4, 0, 0, 0,0x0006, 0x0007, 0x0007, 0x0006, 0x0006, 0x0006, 0x0006, 0x0006, 0x000F, 0x000F, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x007E, 0x00FF, 0x00C3, 0x00C0, 0x00FE, 0x007F, 0x0003, 0x0003, 0x00FF, 0x00FF, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x007F, 0x00FF, 0x00C0, 0x00C0, 0x007C, 0x00FC, 0x00C0, 0x00C0, 0x00FF, 0x007F, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x00FF, 0x00FE, 0x0060, 0x0060, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x00FF, 0x00FF, 0x0003, 0x0003, 0x007F, 0x00FF, 0x00C0, 0x00C0, 0x00FF, 0x007F, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x007E, 0x007F, 0x0003, 0x0003, 0x007F, 0x00FF, 0x00C3, 0x00C3, 0x00FF, 0x007E, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x00FF, 0x00FF, 0x00C0, 0x00E0, 0x0070, 0x0038, 0x001C, 0x000C, 0x000C, 0x000C, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x007E, 0x00FF, 0x00C3, 0x00C3, 0x007E, 0x00FF, 0x00C3, 0x00C3, 0x00FF, 0x007E, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x007E, 0x00FF, 0x00C3, 0x00C3, 0x00FF, 0x00FE, 0x00C0, 0x00C0, 0x00FE, 0x007E, 0x0000, 0x0000,
+ 3, 0, 0, 0,0x0000, 0x0000, 0x0007, 0x0007, 0x0000, 0x0000, 0x0000, 0x0007, 0x0007, 0x0000, 0x0000, 0x0000,
+ 4, 0, 0, 0,0x0000, 0x0000, 0x000E, 0x000E, 0x0000, 0x0000, 0x000C, 0x000E, 0x0007, 0x0003, 0x0000, 0x0000,
+ 6, 0, 0, 0,0x0030, 0x0038, 0x001C, 0x000E, 0x0007, 0x0007, 0x000E, 0x001C, 0x0038, 0x0030, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x007F, 0x007F, 0x0000, 0x0000, 0x007F, 0x007F, 0x0000, 0x0000, 0x0000,
+ 6, 0, 0, 0,0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0038, 0x001C, 0x000E, 0x0007, 0x0003, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x007E, 0x00FF, 0x00C3, 0x00C3, 0x00F0, 0x0078, 0x0018, 0x0000, 0x0018, 0x0018, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x00FC, 0x01FE, 0x0387, 0x0333, 0x037B, 0x03FB, 0x01F3, 0x0007, 0x03FE, 0x03FC, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x00FE, 0x01FF, 0x0183, 0x0183, 0x0183, 0x01FF, 0x01FF, 0x0183, 0x0183, 0x0183, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x00FF, 0x01FF, 0x0183, 0x0183, 0x00FF, 0x01FF, 0x0183, 0x0183, 0x01FF, 0x00FF, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x00FE, 0x00FF, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x00FF, 0x00FE, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x007F, 0x00FF, 0x01C3, 0x0183, 0x0183, 0x0183, 0x0183, 0x01C3, 0x00FF, 0x007F, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x01FF, 0x01FF, 0x0003, 0x0003, 0x00FF, 0x00FF, 0x0003, 0x0003, 0x01FF, 0x01FF, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x01FF, 0x01FF, 0x0003, 0x0003, 0x00FF, 0x00FF, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x01FE, 0x01FF, 0x0003, 0x0003, 0x01F3, 0x01F3, 0x0183, 0x0183, 0x01FF, 0x00FE, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x0183, 0x0183, 0x0183, 0x0183, 0x01FF, 0x01FF, 0x0183, 0x0183, 0x0183, 0x0183, 0x0000, 0x0000,
+ 6, 0, 0, 0,0x003F, 0x003F, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x003F, 0x003F, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x01F0, 0x01F0, 0x00C0, 0x00C0, 0x00C0, 0x00C0, 0x00C3, 0x00C3, 0x00FF, 0x007E, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x0183, 0x01C3, 0x00E3, 0x0073, 0x003F, 0x003F, 0x0073, 0x00E3, 0x01C3, 0x0183, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x007F, 0x007F, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0303, 0x0387, 0x03CF, 0x03FF, 0x037B, 0x0333, 0x0303, 0x0303, 0x0303, 0x0303, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0303, 0x0307, 0x030F, 0x031F, 0x033B, 0x0373, 0x03E3, 0x03C3, 0x0383, 0x0303, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x01FE, 0x03FF, 0x0303, 0x0303, 0x0303, 0x0303, 0x0303, 0x0303, 0x03FF, 0x01FE, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x00FF, 0x01FF, 0x0183, 0x0183, 0x01FF, 0x00FF, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x01FE, 0x03FF, 0x0303, 0x0303, 0x0333, 0x0373, 0x03E3, 0x01C3, 0x03FF, 0x037E, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x00FF, 0x01FF, 0x0183, 0x0183, 0x01FF, 0x00FF, 0x0073, 0x00E3, 0x01C3, 0x0183, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x01FE, 0x01FF, 0x0003, 0x0003, 0x01FF, 0x03FE, 0x0300, 0x0300, 0x03FE, 0x01FE, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x03FF, 0x03FF, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000, 0x0000,
+ 9, 0, 0, 0,0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x0183, 0x01FF, 0x00FE, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0303, 0x0303, 0x0303, 0x0303, 0x0303, 0x0387, 0x01CE, 0x00FC, 0x0078, 0x0030, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0303, 0x0303, 0x0303, 0x0303, 0x0333, 0x037B, 0x03FF, 0x03CF, 0x0387, 0x0303, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0303, 0x0387, 0x01CE, 0x00FC, 0x0078, 0x0078, 0x00FC, 0x01CE, 0x0387, 0x0303, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0303, 0x0387, 0x01CE, 0x00FC, 0x0078, 0x0030, 0x0030, 0x0030, 0x0030, 0x0030, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x03FF, 0x03FF, 0x01C0, 0x00E0, 0x0070, 0x0038, 0x001C, 0x000E, 0x03FF, 0x03FF, 0x0000, 0x0000,
+ 4, 0, 0, 0,0x000F, 0x000F, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x000F, 0x000F, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0003, 0x0007, 0x000E, 0x001C, 0x0038, 0x0070, 0x00E0, 0x01C0, 0x0380, 0x0300, 0x0000, 0x0000,
+ 4, 0, 0, 0,0x000F, 0x000F, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000C, 0x000F, 0x000F, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x0018, 0x003C, 0x007E, 0x00E7, 0x00C3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03FF, 0x03FF,
+ 4, 0, 0, 0,0x000F, 0x000F, 0x0003, 0x0007, 0x000E, 0x000C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x003E, 0x007E, 0x0060, 0x007E, 0x007F, 0x0063, 0x007F, 0x007E, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0003, 0x0003, 0x0003, 0x003F, 0x007F, 0x0063, 0x0063, 0x0063, 0x007F, 0x003F, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x007E, 0x007F, 0x0003, 0x0003, 0x0003, 0x0003, 0x007F, 0x007E, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0060, 0x0060, 0x0060, 0x007E, 0x007F, 0x0063, 0x0063, 0x0063, 0x007F, 0x007E, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x003E, 0x007F, 0x0063, 0x007F, 0x003F, 0x0003, 0x003F, 0x003E, 0x0000, 0x0000,
+ 6, 0, 0, 0,0x003C, 0x003E, 0x0006, 0x0006, 0x001F, 0x001F, 0x0006, 0x0006, 0x0006, 0x0006, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x007E, 0x007F, 0x0063, 0x0063, 0x007F, 0x007E, 0x0060, 0x0060, 0x007E, 0x003E,
+ 7, 0, 0, 0,0x0003, 0x0003, 0x0003, 0x003F, 0x007F, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0000, 0x0000,
+ 2, 0, 0, 0,0x0003, 0x0003, 0x0000, 0x0000, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0060, 0x0060, 0x0000, 0x0000, 0x0060, 0x0060, 0x0060, 0x0060, 0x0060, 0x0063, 0x007F, 0x003E,
+ 8, 0, 0, 0,0x0003, 0x0003, 0x00E3, 0x0073, 0x003B, 0x001F, 0x001F, 0x003B, 0x0073, 0x00E3, 0x0000, 0x0000,
+ 4, 0, 0, 0,0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x000F, 0x000E, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0000, 0x0000, 0x01FF, 0x03FF, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0333, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x003F, 0x007F, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x0000, 0x0000, 0x007E, 0x00FF, 0x00C3, 0x00C3, 0x00C3, 0x00C3, 0x00FF, 0x007E, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x003F, 0x007F, 0x0063, 0x0063, 0x007F, 0x003F, 0x0003, 0x0003, 0x0003, 0x0003,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x007E, 0x007F, 0x0063, 0x0063, 0x007F, 0x007E, 0x0060, 0x0060, 0x0060, 0x0060,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x003B, 0x007F, 0x0067, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x0000, 0x0000, 0x007E, 0x007F, 0x0003, 0x007F, 0x00FE, 0x00C0, 0x00FE, 0x007E, 0x0000, 0x0000,
+ 6, 0, 0, 0,0x0006, 0x0006, 0x003F, 0x003F, 0x0006, 0x0006, 0x0006, 0x0006, 0x003E, 0x003C, 0x0000, 0x0000,
+ 7, 0, 0, 0,0x0000, 0x0000, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x0063, 0x007F, 0x007E, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0000, 0x0000, 0x0303, 0x0303, 0x0303, 0x0387, 0x01CE, 0x00FC, 0x0078, 0x0030, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0000, 0x0000, 0x0303, 0x0303, 0x0333, 0x037B, 0x03FF, 0x03CF, 0x0387, 0x0303, 0x0000, 0x0000,
+ 8, 0, 0, 0,0x0000, 0x0000, 0x00C3, 0x00E7, 0x007E, 0x003C, 0x003C, 0x007E, 0x00E7, 0x00C3, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0000, 0x0000, 0x0303, 0x0307, 0x038E, 0x01DC, 0x00F8, 0x0070, 0x0038, 0x001C, 0x000E, 0x0006,
+ 8, 0, 0, 0,0x0000, 0x0000, 0x00FF, 0x00FF, 0x0070, 0x0038, 0x001C, 0x000E, 0x00FF, 0x00FF, 0x0000, 0x0000,
+ 6, 0, 0, 0,0x0038, 0x003C, 0x000C, 0x000C, 0x000F, 0x000F, 0x000C, 0x000C, 0x003C, 0x0038, 0x0000, 0x0000,
+ 2, 0, 0, 0,0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0000, 0x0000,
+ 6, 0, 0, 0,0x0007, 0x000F, 0x000C, 0x000C, 0x003C, 0x003C, 0x000C, 0x000C, 0x000F, 0x0007, 0x0000, 0x0000,
+ 10, 0, 0, 0,0x0000, 0x0000, 0x0000, 0x031C, 0x03BE, 0x01F7, 0x00E3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 11, 0, 0, 0,0x0555, 0x0000, 0x0401, 0x0000, 0x0401, 0x0000, 0x0401, 0x0000, 0x0401, 0x0000, 0x0555, 0x0000,
+};
+#endif
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index 81fa16f..fa542ad 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -27,18 +27,28 @@
#include <QFileDialog>
#include <QPaintEvent>
#include <QPainter>
-#include <QStandardPaths>
+#include <QKeyEvent>
+#include <QMimeData>
#include <SDL2/SDL.h>
#include "main.h"
+#include "Input.h"
+#include "EmuSettingsDialog.h"
+#include "InputConfigDialog.h"
+#include "VideoSettingsDialog.h"
+#include "AudioSettingsDialog.h"
+#include "WifiSettingsDialog.h"
#include "types.h"
#include "version.h"
#include "FrontendUtil.h"
+#include "OSD.h"
#include "NDS.h"
+#include "GBACart.h"
+#include "OpenGLSupport.h"
#include "GPU.h"
#include "SPU.h"
#include "Wifi.h"
@@ -48,21 +58,34 @@
#include "Savestate.h"
+#include "main_shaders.h"
-// TODO: uniform variable spelling
-char* EmuDirectory;
+// TODO: uniform variable spelling
bool RunningSomething;
MainWindow* mainWindow;
EmuThread* emuThread;
+int autoScreenSizing = 0;
+
+int videoRenderer;
+GPU::RenderSettings videoSettings;
+bool videoSettingsDirty;
+
SDL_AudioDeviceID audioDevice;
int audioFreq;
SDL_cond* audioSync;
SDL_mutex* audioSyncLock;
+SDL_AudioDeviceID micDevice;
+s16 micExtBuffer[2048];
+u32 micExtBufferWritePos;
+
+u32 micWavLength;
+s16* micWavBuffer;
+
void audioCallback(void* data, Uint8* stream, int len)
{
@@ -97,7 +120,134 @@ void audioCallback(void* data, Uint8* stream, int len)
num_in = len_in-margin;
}
- Frontend::AudioOut_Resample(buf_in, num_in, (s16*)stream, len);
+ Frontend::AudioOut_Resample(buf_in, num_in, (s16*)stream, len, Config::AudioVolume);
+}
+
+
+void micLoadWav(const char* name)
+{
+ SDL_AudioSpec format;
+ memset(&format, 0, sizeof(SDL_AudioSpec));
+
+ if (micWavBuffer) delete[] micWavBuffer;
+ micWavBuffer = nullptr;
+ micWavLength = 0;
+
+ u8* buf;
+ u32 len;
+ if (!SDL_LoadWAV(name, &format, &buf, &len))
+ return;
+
+ const u64 dstfreq = 44100;
+
+ if (format.format == AUDIO_S16 || format.format == AUDIO_U16)
+ {
+ int srcinc = format.channels;
+ len /= (2 * srcinc);
+
+ micWavLength = (len * dstfreq) / format.freq;
+ if (micWavLength < 735) micWavLength = 735;
+ micWavBuffer = new s16[micWavLength];
+
+ float res_incr = len / (float)micWavLength;
+ float res_timer = 0;
+ int res_pos = 0;
+
+ for (int i = 0; i < micWavLength; i++)
+ {
+ u16 val = ((u16*)buf)[res_pos];
+ if (SDL_AUDIO_ISUNSIGNED(format.format)) val ^= 0x8000;
+
+ micWavBuffer[i] = val;
+
+ res_timer += res_incr;
+ while (res_timer >= 1.0)
+ {
+ res_timer -= 1.0;
+ res_pos += srcinc;
+ }
+ }
+ }
+ else if (format.format == AUDIO_S8 || format.format == AUDIO_U8)
+ {
+ int srcinc = format.channels;
+ len /= srcinc;
+
+ micWavLength = (len * dstfreq) / format.freq;
+ if (micWavLength < 735) micWavLength = 735;
+ micWavBuffer = new s16[micWavLength];
+
+ float res_incr = len / (float)micWavLength;
+ float res_timer = 0;
+ int res_pos = 0;
+
+ for (int i = 0; i < micWavLength; i++)
+ {
+ u16 val = buf[res_pos] << 8;
+ if (SDL_AUDIO_ISUNSIGNED(format.format)) val ^= 0x8000;
+
+ micWavBuffer[i] = val;
+
+ res_timer += res_incr;
+ while (res_timer >= 1.0)
+ {
+ res_timer -= 1.0;
+ res_pos += srcinc;
+ }
+ }
+ }
+ else
+ printf("bad WAV format %08X\n", format.format);
+
+ SDL_FreeWAV(buf);
+}
+
+void micCallback(void* data, Uint8* stream, int len)
+{
+ s16* input = (s16*)stream;
+ len /= sizeof(s16);
+
+ int maxlen = sizeof(micExtBuffer) / sizeof(s16);
+
+ if ((micExtBufferWritePos + len) > maxlen)
+ {
+ u32 len1 = maxlen - micExtBufferWritePos;
+ memcpy(&micExtBuffer[micExtBufferWritePos], &input[0], len1*sizeof(s16));
+ memcpy(&micExtBuffer[0], &input[len1], (len - len1)*sizeof(s16));
+ micExtBufferWritePos = len - len1;
+ }
+ else
+ {
+ memcpy(&micExtBuffer[micExtBufferWritePos], input, len*sizeof(s16));
+ micExtBufferWritePos += len;
+ }
+}
+
+void micProcess()
+{
+ int type = Config::MicInputType;
+ bool cmd = Input::HotkeyDown(HK_Mic);
+
+ if (type != 1 && !cmd)
+ {
+ type = 0;
+ }
+
+ switch (type)
+ {
+ case 0: // no mic
+ Frontend::Mic_FeedSilence();
+ break;
+
+ case 1: // host mic
+ case 3: // WAV
+ Frontend::Mic_FeedExternalBuffer();
+ break;
+
+ case 2: // white noise
+ Frontend::Mic_FeedNoise();
+ break;
+ }
}
@@ -107,41 +257,94 @@ EmuThread::EmuThread(QObject* parent) : QThread(parent)
EmuRunning = 2;
RunningSomething = false;
+ connect(this, SIGNAL(windowUpdate()), mainWindow->panel, SLOT(update()));
connect(this, SIGNAL(windowTitleChange(QString)), mainWindow, SLOT(onTitleUpdate(QString)));
connect(this, SIGNAL(windowEmuStart()), mainWindow, SLOT(onEmuStart()));
connect(this, SIGNAL(windowEmuStop()), mainWindow, SLOT(onEmuStop()));
+ connect(this, SIGNAL(windowEmuPause()), mainWindow->actPause, SLOT(trigger()));
+ connect(this, SIGNAL(windowEmuReset()), mainWindow->actReset, SLOT(trigger()));
+ connect(this, SIGNAL(screenLayoutChange()), mainWindow->panel, SLOT(onScreenLayoutChanged()));
- emit windowEmuStop();
+ if (mainWindow->hasOGL) initOpenGL();
}
-void EmuThread::run()
+void EmuThread::initOpenGL()
{
- NDS::Init();
+ QOpenGLContext* windowctx = mainWindow->getOGLContext();
+ QSurfaceFormat format = windowctx->format();
- /*MainScreenPos[0] = 0;
- MainScreenPos[1] = 0;
- MainScreenPos[2] = 0;
- AutoScreenSizing = 0;*/
+ format.setSwapInterval(0);
- /*if (Screen_UseGL)
+ oglSurface = new QOffscreenSurface();
+ oglSurface->setFormat(format);
+ oglSurface->create();
+ if (!oglSurface->isValid())
{
- uiGLMakeContextCurrent(GLContext);
- GPU3D::InitRenderer(true);
- uiGLMakeContextCurrent(NULL);
+ // TODO handle this!
+ printf("oglSurface shat itself :(\n");
+ delete oglSurface;
+ return;
+ }
+
+ oglContext = new QOpenGLContext();
+ oglContext->setFormat(oglSurface->format());
+ oglContext->setShareContext(windowctx);
+ if (!oglContext->create())
+ {
+ // TODO handle this!
+ printf("oglContext shat itself :(\n");
+ delete oglContext;
+ delete oglSurface;
+ return;
}
- else*/
+
+ oglContext->moveToThread(this);
+}
+
+void EmuThread::deinitOpenGL()
+{
+ delete oglContext;
+ delete oglSurface;
+}
+
+void* oglGetProcAddress(const char* proc)
+{
+ return emuThread->oglGetProcAddress(proc);
+}
+
+void* EmuThread::oglGetProcAddress(const char* proc)
+{
+ return (void*)oglContext->getProcAddress(proc);
+}
+
+void EmuThread::run()
+{
+ bool hasOGL = mainWindow->hasOGL;
+ u32 mainScreenPos[3];
+
+ NDS::Init();
+
+ mainScreenPos[0] = 0;
+ mainScreenPos[1] = 0;
+ mainScreenPos[2] = 0;
+ autoScreenSizing = 0;
+
+ videoSettingsDirty = false;
+ videoSettings.Soft_Threaded = Config::Threaded3D != 0;
+ videoSettings.GL_ScaleFactor = Config::GL_ScaleFactor;
+
+ if (hasOGL)
{
- GPU3D::InitRenderer(false);
+ oglContext->makeCurrent(oglSurface);
+ videoRenderer = OpenGL::Init() ? Config::_3DRenderer : 0;
}
+ else
+ videoRenderer = 0;
+
+ GPU::InitRenderer(videoRenderer);
+ GPU::SetRenderSettings(videoRenderer, videoSettings);
- /*Touching = false;
- KeyInputMask = 0xFFF;
- JoyInputMask = 0xFFF;
- KeyHotkeyMask = 0;
- JoyHotkeyMask = 0;
- HotkeyMask = 0;
- LastHotkeyMask = 0;
- LidStatus = false;*/
+ Input::Init();
u32 nframes = 0;
u32 starttick = SDL_GetTicks();
@@ -153,69 +356,81 @@ void EmuThread::run()
while (EmuRunning != 0)
{
- /*ProcessInput();
+ Input::Process();
- if (HotkeyPressed(HK_FastForwardToggle))
- {
- Config::LimitFPS = !Config::LimitFPS;
- uiQueueMain(UpdateFPSLimit, NULL);
- }
- // TODO: similar hotkeys for video/audio sync?
+ if (Input::HotkeyPressed(HK_FastForwardToggle)) emit windowLimitFPSChange();
- if (HotkeyPressed(HK_Pause)) uiQueueMain(TogglePause, NULL);
- if (HotkeyPressed(HK_Reset)) uiQueueMain(Reset, NULL);
+ if (Input::HotkeyPressed(HK_Pause)) emit windowEmuPause();
+ if (Input::HotkeyPressed(HK_Reset)) emit windowEmuReset();
if (GBACart::CartInserted && GBACart::HasSolarSensor)
{
- if (HotkeyPressed(HK_SolarSensorDecrease))
+ if (Input::HotkeyPressed(HK_SolarSensorDecrease))
{
if (GBACart_SolarSensor::LightLevel > 0) GBACart_SolarSensor::LightLevel--;
char msg[64];
sprintf(msg, "Solar sensor level set to %d", GBACart_SolarSensor::LightLevel);
OSD::AddMessage(0, msg);
}
- if (HotkeyPressed(HK_SolarSensorIncrease))
+ if (Input::HotkeyPressed(HK_SolarSensorIncrease))
{
if (GBACart_SolarSensor::LightLevel < 10) GBACart_SolarSensor::LightLevel++;
char msg[64];
sprintf(msg, "Solar sensor level set to %d", GBACart_SolarSensor::LightLevel);
OSD::AddMessage(0, msg);
}
- }*/
+ }
if (EmuRunning == 1)
{
EmuStatus = 1;
+ // update render settings if needed
+ if (videoSettingsDirty)
+ {
+ if (hasOGL != mainWindow->hasOGL)
+ {
+ hasOGL = mainWindow->hasOGL;
+ if (hasOGL)
+ {
+ oglContext->makeCurrent(oglSurface);
+ videoRenderer = OpenGL::Init() ? Config::_3DRenderer : 0;
+ }
+ else
+ videoRenderer = 0;
+ }
+ else
+ videoRenderer = hasOGL ? Config::_3DRenderer : 0;
+
+ videoSettingsDirty = false;
+ videoSettings.Soft_Threaded = Config::Threaded3D != 0;
+ videoSettings.GL_ScaleFactor = Config::GL_ScaleFactor;
+ GPU::SetRenderSettings(videoRenderer, videoSettings);
+ }
+
// process input and hotkeys
- NDS::SetKeyMask(0xFFF);
- /*NDS::SetKeyMask(KeyInputMask & JoyInputMask);
+ NDS::SetKeyMask(Input::InputMask);
- if (HotkeyPressed(HK_Lid))
+ if (Input::HotkeyPressed(HK_Lid))
{
- LidStatus = !LidStatus;
- NDS::SetLidClosed(LidStatus);
- OSD::AddMessage(0, LidStatus ? "Lid closed" : "Lid opened");
- }*/
+ bool lid = !NDS::IsLidClosed();
+ NDS::SetLidClosed(lid);
+ OSD::AddMessage(0, lid ? "Lid closed" : "Lid opened");
+ }
// microphone input
- /*FeedMicInput();
-
- if (Screen_UseGL)
- {
- uiGLBegin(GLContext);
- uiGLMakeContextCurrent(GLContext);
- }*/
+ micProcess();
// auto screen layout
- /*{
- MainScreenPos[2] = MainScreenPos[1];
- MainScreenPos[1] = MainScreenPos[0];
- MainScreenPos[0] = NDS::PowerControl9 >> 15;
+ if (Config::ScreenSizing == 3)
+ {
+ mainScreenPos[2] = mainScreenPos[1];
+ mainScreenPos[1] = mainScreenPos[0];
+ mainScreenPos[0] = NDS::PowerControl9 >> 15;
int guess;
- if (MainScreenPos[0] == MainScreenPos[2] &&
- MainScreenPos[0] != MainScreenPos[1])
+ if (mainScreenPos[0] == mainScreenPos[2] &&
+ mainScreenPos[0] != mainScreenPos[1])
{
// constant flickering, likely displaying 3D on both screens
// TODO: when both screens are used for 2D only...???
@@ -223,18 +438,18 @@ void EmuThread::run()
}
else
{
- if (MainScreenPos[0] == 1)
+ if (mainScreenPos[0] == 1)
guess = 1;
else
guess = 2;
}
- if (guess != AutoScreenSizing)
+ if (guess != autoScreenSizing)
{
- AutoScreenSizing = guess;
- SetupScreenRects(WindowWidth, WindowHeight);
+ autoScreenSizing = guess;
+ emit screenLayoutChange();
}
- }*/
+ }
// emulate
u32 nlines = NDS::RunFrame();
@@ -245,16 +460,9 @@ void EmuThread::run()
if (EmuRunning == 0) break;
- /*if (Screen_UseGL)
- {
- GLScreen_DrawScreen();
- uiGLEnd(GLContext);
- }
- uiAreaQueueRedrawAll(MainDrawArea);*/
- mainWindow->update();
+ emit windowUpdate();
- bool fastforward = false;
- //bool fastforward = HotkeyDown(HK_FastForward);
+ bool fastforward = Input::HotkeyDown(HK_FastForward);
if (Config::AudioSync && (!fastforward) && audioDevice)
{
@@ -324,46 +532,28 @@ void EmuThread::run()
lastmeasuretick = lasttick;
fpslimitcount = 0;
- if (EmuRunning == 2)
- {
- /*if (Screen_UseGL)
- {
- uiGLBegin(GLContext);
- uiGLMakeContextCurrent(GLContext);
- GLScreen_DrawScreen();
- uiGLEnd(GLContext);
- }
- uiAreaQueueRedrawAll(MainDrawArea);*/
- mainWindow->update();
- }
-
- //if (Screen_UseGL) uiGLMakeContextCurrent(NULL);
+ emit windowUpdate();
EmuStatus = EmuRunning;
sprintf(melontitle, "melonDS " MELONDS_VERSION);
changeWindowTitle(melontitle);
- SDL_Delay(100);
+ SDL_Delay(75);
}
}
EmuStatus = 0;
- //if (Screen_UseGL) uiGLMakeContextCurrent(GLContext);
-
+ GPU::DeInitRenderer();
NDS::DeInit();
//Platform::LAN_DeInit();
- /*if (Screen_UseGL)
+ if (hasOGL)
{
- OSD::DeInit(true);
- GLScreen_DeInit();
+ oglContext->doneCurrent();
+ deinitOpenGL();
}
- else
- OSD::DeInit(false);*/
-
- //if (Screen_UseGL) uiGLMakeContextCurrent(NULL);
}
void EmuThread::changeWindowTitle(char* title)
@@ -379,25 +569,25 @@ void EmuThread::emuRun()
// checkme
emit windowEmuStart();
if (audioDevice) SDL_PauseAudioDevice(audioDevice, 0);
+ if (micDevice) SDL_PauseAudioDevice(micDevice, 0);
}
-void EmuThread::emuPause(bool refresh)
+void EmuThread::emuPause()
{
- int status = refresh ? 2:3;
PrevEmuStatus = EmuRunning;
- EmuRunning = status;
- while (EmuStatus != status);
+ EmuRunning = 2;
+ while (EmuStatus != 2);
- //emit windowEmuPause();
if (audioDevice) SDL_PauseAudioDevice(audioDevice, 1);
+ if (micDevice) SDL_PauseAudioDevice(micDevice, 1);
}
void EmuThread::emuUnpause()
{
EmuRunning = PrevEmuStatus;
- //emit windowEmuUnpause();
if (audioDevice) SDL_PauseAudioDevice(audioDevice, 0);
+ if (micDevice) SDL_PauseAudioDevice(micDevice, 0);
}
void EmuThread::emuStop()
@@ -405,6 +595,7 @@ void EmuThread::emuStop()
EmuRunning = 0;
if (audioDevice) SDL_PauseAudioDevice(audioDevice, 1);
+ if (micDevice) SDL_PauseAudioDevice(micDevice, 1);
}
bool EmuThread::emuIsRunning()
@@ -413,19 +604,140 @@ bool EmuThread::emuIsRunning()
}
-MainWindowPanel::MainWindowPanel(QWidget* parent) : QWidget(parent)
+void ScreenHandler::screenSetupLayout(int w, int h)
{
- screen[0] = new QImage(256, 192, QImage::Format_RGB32);
- screen[1] = new QImage(256, 192, QImage::Format_RGB32);
+ int sizing = Config::ScreenSizing;
+ if (sizing == 3) sizing = autoScreenSizing;
+
+ Frontend::SetupScreenLayout(w, h,
+ Config::ScreenLayout,
+ Config::ScreenRotation,
+ sizing,
+ Config::ScreenGap,
+ Config::IntegerScaling != 0);
+
+ Frontend::GetScreenTransforms(screenMatrix[0], screenMatrix[1]);
}
-MainWindowPanel::~MainWindowPanel()
+QSize ScreenHandler::screenGetMinSize()
{
- delete screen[0];
- delete screen[1];
+ bool isHori = (Config::ScreenRotation == 1 || Config::ScreenRotation == 3);
+ int gap = Config::ScreenGap;
+
+ int w = 256;
+ int h = 192;
+
+ if (Config::ScreenLayout == 0) // natural
+ {
+ if (isHori)
+ return QSize(h+gap+h, w);
+ else
+ return QSize(w, h+gap+h);
+ }
+ else if (Config::ScreenLayout == 1) // vertical
+ {
+ if (isHori)
+ return QSize(h, w+gap+w);
+ else
+ return QSize(w, h+gap+h);
+ }
+ else // horizontal
+ {
+ if (isHori)
+ return QSize(h+gap+h, w);
+ else
+ return QSize(w+gap+w, h);
+ }
}
-void MainWindowPanel::paintEvent(QPaintEvent* event)
+void ScreenHandler::screenOnMousePress(QMouseEvent* event)
+{
+ event->accept();
+ if (event->button() != Qt::LeftButton) return;
+
+ int x = event->pos().x();
+ int y = event->pos().y();
+
+ Frontend::GetTouchCoords(x, y);
+
+ if (x >= 0 && x < 256 && y >= 0 && y < 192)
+ {
+ touching = true;
+ NDS::TouchScreen(x, y);
+ }
+}
+
+void ScreenHandler::screenOnMouseRelease(QMouseEvent* event)
+{
+ event->accept();
+ if (event->button() != Qt::LeftButton) return;
+
+ if (touching)
+ {
+ touching = false;
+ NDS::ReleaseScreen();
+ }
+}
+
+void ScreenHandler::screenOnMouseMove(QMouseEvent* event)
+{
+ event->accept();
+ if (!(event->buttons() & Qt::LeftButton)) return;
+ if (!touching) return;
+
+ int x = event->pos().x();
+ int y = event->pos().y();
+
+ Frontend::GetTouchCoords(x, y);
+
+ // clamp to screen range
+ if (x < 0) x = 0;
+ else if (x > 255) x = 255;
+ if (y < 0) y = 0;
+ else if (y > 191) y = 191;
+
+ NDS::TouchScreen(x, y);
+}
+
+
+ScreenPanelNative::ScreenPanelNative(QWidget* parent) : QWidget(parent)
+{
+ screen[0] = QImage(256, 192, QImage::Format_RGB32);
+ screen[1] = QImage(256, 192, QImage::Format_RGB32);
+
+ screenTrans[0].reset();
+ screenTrans[1].reset();
+
+ touching = false;
+
+ OSD::Init(nullptr);
+}
+
+ScreenPanelNative::~ScreenPanelNative()
+{
+ OSD::DeInit(nullptr);
+}
+
+void ScreenPanelNative::setupScreenLayout()
+{
+ int w = width();
+ int h = height();
+ float* mtx;
+
+ screenSetupLayout(w, h);
+
+ mtx = screenMatrix[0];
+ screenTrans[0].setMatrix(mtx[0], mtx[1], 0.f,
+ mtx[2], mtx[3], 0.f,
+ mtx[4], mtx[5], 1.f);
+
+ mtx = screenMatrix[1];
+ screenTrans[1].setMatrix(mtx[0], mtx[1], 0.f,
+ mtx[2], mtx[3], 0.f,
+ mtx[4], mtx[5], 1.f);
+}
+
+void ScreenPanelNative::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
@@ -435,22 +747,242 @@ void MainWindowPanel::paintEvent(QPaintEvent* event)
int frontbuf = GPU::FrontBuffer;
if (!GPU::Framebuffer[frontbuf][0] || !GPU::Framebuffer[frontbuf][1]) return;
- memcpy(screen[0]->scanLine(0), GPU::Framebuffer[frontbuf][0], 256*192*4);
- memcpy(screen[1]->scanLine(0), GPU::Framebuffer[frontbuf][1], 256*192*4);
+ memcpy(screen[0].scanLine(0), GPU::Framebuffer[frontbuf][0], 256*192*4);
+ memcpy(screen[1].scanLine(0), GPU::Framebuffer[frontbuf][1], 256*192*4);
+
+ painter.setRenderHint(QPainter::SmoothPixmapTransform, Config::ScreenFilter!=0);
+
+ QRect screenrc(0, 0, 256, 192);
+
+ painter.setTransform(screenTrans[0]);
+ painter.drawImage(screenrc, screen[0]);
+
+ painter.setTransform(screenTrans[1]);
+ painter.drawImage(screenrc, screen[1]);
+
+ OSD::Update(nullptr);
+ OSD::DrawNative(painter);
+}
+
+void ScreenPanelNative::resizeEvent(QResizeEvent* event)
+{
+ setupScreenLayout();
+}
+
+void ScreenPanelNative::mousePressEvent(QMouseEvent* event)
+{
+ screenOnMousePress(event);
+}
+
+void ScreenPanelNative::mouseReleaseEvent(QMouseEvent* event)
+{
+ screenOnMouseRelease(event);
+}
+
+void ScreenPanelNative::mouseMoveEvent(QMouseEvent* event)
+{
+ screenOnMouseMove(event);
+}
+
+void ScreenPanelNative::onScreenLayoutChanged()
+{
+ setMinimumSize(screenGetMinSize());
+ setupScreenLayout();
+}
+
+
+ScreenPanelGL::ScreenPanelGL(QWidget* parent) : QOpenGLWidget(parent)
+{
+ touching = false;
+
+}
+
+ScreenPanelGL::~ScreenPanelGL()
+{
+ makeCurrent();
+
+ OSD::DeInit(this);
+
+ glDeleteTextures(1, &screenTexture);
- QRect src = QRect(0, 0, 256, 192);
+ glDeleteVertexArrays(1, &screenVertexArray);
+ glDeleteBuffers(1, &screenVertexBuffer);
- QRect dstTop = QRect(0, 0, 256, 192); // TODO
- QRect dstBot = QRect(0, 192, 256, 192); // TODO
+ delete screenShader;
- painter.drawImage(dstTop, *screen[0]);
- painter.drawImage(dstBot, *screen[1]);
+ doneCurrent();
+}
+
+void ScreenPanelGL::setupScreenLayout()
+{
+ int w = width();
+ int h = height();
+
+ screenSetupLayout(w, h);
+}
+
+void ScreenPanelGL::initializeGL()
+{
+ initializeOpenGLFunctions();
+
+ const GLubyte* renderer = glGetString(GL_RENDERER); // get renderer string
+ const GLubyte* version = glGetString(GL_VERSION); // version as a string
+ printf("OpenGL: renderer: %s\n", renderer);
+ printf("OpenGL: version: %s\n", version);
+
+ glClearColor(0, 0, 0, 1);
+
+ screenShader = new QOpenGLShaderProgram(this);
+ screenShader->addShaderFromSourceCode(QOpenGLShader::Vertex, kScreenVS);
+ screenShader->addShaderFromSourceCode(QOpenGLShader::Fragment, kScreenFS);
+
+ GLuint pid = screenShader->programId();
+ glBindAttribLocation(pid, 0, "vPosition");
+ glBindAttribLocation(pid, 1, "vTexcoord");
+ glBindFragDataLocation(pid, 0, "oColor");
+
+ screenShader->link();
+
+ screenShader->bind();
+ screenShader->setUniformValue("ScreenTex", (GLint)0);
+ screenShader->release();
+
+
+ float vertices[] =
+ {
+ 0, 0, 0, 0,
+ 0, 192, 0, 0.5,
+ 256, 192, 1, 0.5,
+ 0, 0, 0, 0,
+ 256, 192, 1, 0.5,
+ 256, 0, 1, 0,
+
+ 0, 0, 0, 0.5,
+ 0, 192, 0, 1,
+ 256, 192, 1, 1,
+ 0, 0, 0, 0.5,
+ 256, 192, 1, 1,
+ 256, 0, 1, 0.5
+ };
+
+ glGenBuffers(1, &screenVertexBuffer);
+ glBindBuffer(GL_ARRAY_BUFFER, screenVertexBuffer);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
+
+ glGenVertexArrays(1, &screenVertexArray);
+ glBindVertexArray(screenVertexArray);
+ glEnableVertexAttribArray(0); // position
+ glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 4*4, (void*)(0));
+ glEnableVertexAttribArray(1); // texcoord
+ glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 4*4, (void*)(2*4));
+
+ glGenTextures(1, &screenTexture);
+ glActiveTexture(GL_TEXTURE0);
+ glBindTexture(GL_TEXTURE_2D, screenTexture);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 192*2, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+
+ OSD::Init(this);
+}
+
+void ScreenPanelGL::paintGL()
+{
+ int w = width();
+ int h = height();
+ float factor = devicePixelRatioF();
+
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ glViewport(0, 0, w*factor, h*factor);
+
+ screenShader->bind();
+
+ screenShader->setUniformValue("uScreenSize", (float)w*factor, (float)h*factor);
+
+ int frontbuf = GPU::FrontBuffer;
+ glActiveTexture(GL_TEXTURE0);
+
+ if (GPU::Renderer != 0)
+ {
+ // hardware-accelerated render
+ GPU::GLCompositor::BindOutputTexture();
+ }
+ else
+ {
+ // regular render
+ glBindTexture(GL_TEXTURE_2D, screenTexture);
+
+ if (GPU::Framebuffer[frontbuf][0] && GPU::Framebuffer[frontbuf][1])
+ {
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 256, 192, GL_RGBA,
+ GL_UNSIGNED_BYTE, GPU::Framebuffer[frontbuf][0]);
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 192, 256, 192, GL_RGBA,
+ GL_UNSIGNED_BYTE, GPU::Framebuffer[frontbuf][1]);
+ }
+ }
+
+ GLint filter = Config::ScreenFilter ? GL_LINEAR : GL_NEAREST;
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter);
+
+ glBindBuffer(GL_ARRAY_BUFFER, screenVertexBuffer);
+ glBindVertexArray(screenVertexArray);
+
+ GLint transloc = screenShader->uniformLocation("uTransform");
+
+ glUniformMatrix2x3fv(transloc, 1, GL_TRUE, screenMatrix[0]);
+ glDrawArrays(GL_TRIANGLES, 0, 2*3);
+
+ glUniformMatrix2x3fv(transloc, 1, GL_TRUE, screenMatrix[1]);
+ glDrawArrays(GL_TRIANGLES, 2*3, 2*3);
+
+ screenShader->release();
+
+ OSD::Update(this);
+ OSD::DrawGL(this, w*factor, h*factor);
+}
+
+void ScreenPanelGL::resizeEvent(QResizeEvent* event)
+{
+ setupScreenLayout();
+
+ QOpenGLWidget::resizeEvent(event);
+}
+
+void ScreenPanelGL::resizeGL(int w, int h)
+{
+}
+
+void ScreenPanelGL::mousePressEvent(QMouseEvent* event)
+{
+ screenOnMousePress(event);
+}
+
+void ScreenPanelGL::mouseReleaseEvent(QMouseEvent* event)
+{
+ screenOnMouseRelease(event);
+}
+
+void ScreenPanelGL::mouseMoveEvent(QMouseEvent* event)
+{
+ screenOnMouseMove(event);
+}
+
+void ScreenPanelGL::onScreenLayoutChanged()
+{
+ setMinimumSize(screenGetMinSize());
+ setupScreenLayout();
}
MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
{
setWindowTitle("melonDS " MELONDS_VERSION);
+ setAttribute(Qt::WA_DeleteOnClose);
+ setAcceptDrops(true);
QMenuBar* menubar = new QMenuBar();
{
@@ -470,9 +1002,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
for (int i = 1; i < 9; i++)
{
- char title[16];
- sprintf(title, "%d", i);
- actSaveState[i] = submenu->addAction(title);
+ actSaveState[i] = submenu->addAction(QString("%1").arg(i));
actSaveState[i]->setShortcut(QKeySequence(Qt::ShiftModifier | (Qt::Key_F1+i-1)));
actSaveState[i]->setData(QVariant(i));
connect(actSaveState[i], &QAction::triggered, this, &MainWindow::onSaveState);
@@ -488,9 +1018,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
for (int i = 1; i < 9; i++)
{
- char title[16];
- sprintf(title, "%d", i);
- actLoadState[i] = submenu->addAction(title);
+ actLoadState[i] = submenu->addAction(QString("%1").arg(i));
actLoadState[i]->setShortcut(QKeySequence(Qt::Key_F1+i-1));
actLoadState[i]->setData(QVariant(i));
connect(actLoadState[i], &QAction::triggered, this, &MainWindow::onLoadState);
@@ -524,38 +1052,373 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
actStop = menu->addAction("Stop");
connect(actStop, &QAction::triggered, this, &MainWindow::onStop);
}
+ {
+ QMenu* menu = menubar->addMenu("Config");
+
+ actEmuSettings = menu->addAction("Emu settings");
+ connect(actEmuSettings, &QAction::triggered, this, &MainWindow::onOpenEmuSettings);
+
+ actInputConfig = menu->addAction("Input and hotkeys");
+ connect(actInputConfig, &QAction::triggered, this, &MainWindow::onOpenInputConfig);
+
+ actVideoSettings = menu->addAction("Video settings");
+ connect(actVideoSettings, &QAction::triggered, this, &MainWindow::onOpenVideoSettings);
+
+ actAudioSettings = menu->addAction("Audio settings");
+ connect(actAudioSettings, &QAction::triggered, this, &MainWindow::onOpenAudioSettings);
+
+ actWifiSettings = menu->addAction("Wifi settings");
+ connect(actWifiSettings, &QAction::triggered, this, &MainWindow::onOpenWifiSettings);
+
+ {
+ QMenu* submenu = menu->addMenu("Savestate settings");
+
+ actSavestateSRAMReloc = submenu->addAction("Separate savefiles");
+ actSavestateSRAMReloc->setCheckable(true);
+ connect(actSavestateSRAMReloc, &QAction::triggered, this, &MainWindow::onChangeSavestateSRAMReloc);
+ }
+
+ menu->addSeparator();
+
+ {
+ QMenu* submenu = menu->addMenu("Screen size");
+
+ for (int i = 0; i < 4; i++)
+ {
+ int data = i+1;
+ actScreenSize[i] = submenu->addAction(QString("%1x").arg(data));
+ actScreenSize[i]->setData(QVariant(data));
+ connect(actScreenSize[i], &QAction::triggered, this, &MainWindow::onChangeScreenSize);
+ }
+ }
+ {
+ QMenu* submenu = menu->addMenu("Screen rotation");
+ grpScreenRotation = new QActionGroup(submenu);
+
+ for (int i = 0; i < 4; i++)
+ {
+ int data = i*90;
+ actScreenRotation[i] = submenu->addAction(QString("%1°").arg(data));
+ actScreenRotation[i]->setActionGroup(grpScreenRotation);
+ actScreenRotation[i]->setData(QVariant(i));
+ actScreenRotation[i]->setCheckable(true);
+ }
+
+ connect(grpScreenRotation, &QActionGroup::triggered, this, &MainWindow::onChangeScreenRotation);
+ }
+ {
+ QMenu* submenu = menu->addMenu("Screen gap");
+ grpScreenGap = new QActionGroup(submenu);
+
+ const int screengap[] = {0, 1, 8, 64, 90, 128};
+
+ for (int i = 0; i < 6; i++)
+ {
+ int data = screengap[i];
+ actScreenGap[i] = submenu->addAction(QString("%1 px").arg(data));
+ actScreenGap[i]->setActionGroup(grpScreenGap);
+ actScreenGap[i]->setData(QVariant(data));
+ actScreenGap[i]->setCheckable(true);
+ }
+
+ connect(grpScreenGap, &QActionGroup::triggered, this, &MainWindow::onChangeScreenGap);
+ }
+ {
+ QMenu* submenu = menu->addMenu("Screen layout");
+ grpScreenLayout = new QActionGroup(submenu);
+
+ const char* screenlayout[] = {"Natural", "Vertical", "Horizontal"};
+
+ for (int i = 0; i < 3; i++)
+ {
+ actScreenLayout[i] = submenu->addAction(QString(screenlayout[i]));
+ actScreenLayout[i]->setActionGroup(grpScreenLayout);
+ actScreenLayout[i]->setData(QVariant(i));
+ actScreenLayout[i]->setCheckable(true);
+ }
+
+ connect(grpScreenLayout, &QActionGroup::triggered, this, &MainWindow::onChangeScreenLayout);
+ }
+ {
+ QMenu* submenu = menu->addMenu("Screen sizing");
+ grpScreenSizing = new QActionGroup(submenu);
+
+ const char* screensizing[] = {"Even", "Emphasize top", "Emphasize bottom", "Auto"};
+
+ for (int i = 0; i < 4; i++)
+ {
+ actScreenSizing[i] = submenu->addAction(QString(screensizing[i]));
+ actScreenSizing[i]->setActionGroup(grpScreenSizing);
+ actScreenSizing[i]->setData(QVariant(i));
+ actScreenSizing[i]->setCheckable(true);
+ }
+
+ connect(grpScreenSizing, &QActionGroup::triggered, this, &MainWindow::onChangeScreenSizing);
+
+ submenu->addSeparator();
+
+ actIntegerScaling = submenu->addAction("Force integer scaling");
+ actIntegerScaling->setCheckable(true);
+ connect(actIntegerScaling, &QAction::triggered, this, &MainWindow::onChangeIntegerScaling);
+ }
+
+ actScreenFiltering = menu->addAction("Screen filtering");
+ actScreenFiltering->setCheckable(true);
+ connect(actScreenFiltering, &QAction::triggered, this, &MainWindow::onChangeScreenFiltering);
+
+ actShowOSD = menu->addAction("Show OSD");
+ actShowOSD->setCheckable(true);
+ connect(actShowOSD, &QAction::triggered, this, &MainWindow::onChangeShowOSD);
+
+ menu->addSeparator();
+
+ actLimitFramerate = menu->addAction("Limit framerate");
+ actLimitFramerate->setCheckable(true);
+ connect(actLimitFramerate, &QAction::triggered, this, &MainWindow::onChangeLimitFramerate);
+
+ actAudioSync = menu->addAction("Audio sync");
+ actAudioSync->setCheckable(true);
+ connect(actAudioSync, &QAction::triggered, this, &MainWindow::onChangeAudioSync);
+ }
setMenuBar(menubar);
- panel = new MainWindowPanel(this);
- setCentralWidget(panel);
- panel->setMinimumSize(256, 384);
+ resize(Config::WindowWidth, Config::WindowHeight);
+
+ show();
+ createScreenPanel();
+
+ for (int i = 0; i < 9; i++)
+ {
+ actSaveState[i]->setEnabled(false);
+ actLoadState[i]->setEnabled(false);
+ }
+ actUndoStateLoad->setEnabled(false);
+
+ actPause->setEnabled(false);
+ actReset->setEnabled(false);
+ actStop->setEnabled(false);
+
+
+ actSavestateSRAMReloc->setChecked(Config::SavestateRelocSRAM != 0);
+
+ actScreenRotation[Config::ScreenRotation]->setChecked(true);
+
+ for (int i = 0; i < 6; i++)
+ {
+ if (actScreenGap[i]->data().toInt() == Config::ScreenGap)
+ {
+ actScreenGap[i]->setChecked(true);
+ break;
+ }
+ }
+
+ actScreenLayout[Config::ScreenLayout]->setChecked(true);
+ actScreenSizing[Config::ScreenSizing]->setChecked(true);
+ actIntegerScaling->setChecked(Config::IntegerScaling != 0);
+
+ actScreenFiltering->setChecked(Config::ScreenFilter != 0);
+ actShowOSD->setChecked(Config::ShowOSD != 0);
+
+ actLimitFramerate->setChecked(Config::LimitFPS != 0);
+ actAudioSync->setChecked(Config::AudioSync != 0);
}
MainWindow::~MainWindow()
{
}
+void MainWindow::createScreenPanel()
+{
+ hasOGL = (Config::ScreenUseGL != 0) || (Config::_3DRenderer != 0);
+
+ if (hasOGL)
+ {
+ ScreenPanelGL* panelGL = new ScreenPanelGL(this);
+ panelGL->show();
+
+ if (!panelGL->isValid())
+ hasOGL = false;
+ else
+ {
+ QSurfaceFormat fmt = panelGL->format();
+ if (fmt.majorVersion() < 3 || (fmt.majorVersion() == 3 && fmt.minorVersion() < 2))
+ hasOGL = false;
+ }
+
+ if (!hasOGL)
+ delete panelGL;
+ else
+ panel = panelGL;
+ }
+
+ if (!hasOGL)
+ {
+ panel = new ScreenPanelNative(this);
+ panel->show();
+ }
+
+ setCentralWidget(panel);
+ connect(this, SIGNAL(screenLayoutChange()), panel, SLOT(onScreenLayoutChanged()));
+ emit screenLayoutChange();
+}
+
+QOpenGLContext* MainWindow::getOGLContext()
+{
+ if (!hasOGL) return nullptr;
+
+ QOpenGLWidget* glpanel = (QOpenGLWidget*)panel;
+ return glpanel->context();
+}
+
+void MainWindow::resizeEvent(QResizeEvent* event)
+{
+ int w = event->size().width();
+ int h = event->size().height();
+
+ Config::WindowWidth = w;
+ Config::WindowHeight = h;
+
+ // TODO: detect when the window gets maximized!
+}
void MainWindow::keyPressEvent(QKeyEvent* event)
{
- printf("key press. %d %d %08X %08X\n", event->key(), event->nativeScanCode(), event->modifiers(), event->nativeModifiers());
+ if (event->isAutoRepeat()) return;
+
+ Input::KeyPress(event);
+}
+
+void MainWindow::keyReleaseEvent(QKeyEvent* event)
+{
+ if (event->isAutoRepeat()) return;
+
+ Input::KeyRelease(event);
+}
+
+
+void MainWindow::dragEnterEvent(QDragEnterEvent* event)
+{
+ if (!event->mimeData()->hasUrls()) return;
+
+ QList<QUrl> urls = event->mimeData()->urls();
+ if (urls.count() > 1) return; // not handling more than one file at once
+
+ QString filename = urls.at(0).toLocalFile();
+ QString ext = filename.right(3);
+
+ if (ext == "nds" || ext == "srl" || (ext == "gba" && RunningSomething))
+ event->acceptProposedAction();
+}
+
+void MainWindow::dropEvent(QDropEvent* event)
+{
+ if (!event->mimeData()->hasUrls()) return;
+
+ QList<QUrl> urls = event->mimeData()->urls();
+ if (urls.count() > 1) return; // not handling more than one file at once
+
+ emuThread->emuPause();
+
+ QString filename = urls.at(0).toLocalFile();
+ QString ext = filename.right(3);
+
+ char _filename[1024];
+ strncpy(_filename, filename.toStdString().c_str(), 1023); _filename[1023] = '\0';
+
+ int slot; int res;
+ if (ext == "gba")
+ {
+ slot = 1;
+ res = Frontend::LoadROM(_filename, Frontend::ROMSlot_GBA);
+ }
+ else
+ {
+ slot = 0;
+ res = Frontend::LoadROM(_filename, Frontend::ROMSlot_NDS);
+ }
+
+ if (res != Frontend::Load_OK)
+ {
+ QMessageBox::critical(this,
+ "melonDS",
+ loadErrorStr(res));
+ emuThread->emuUnpause();
+ }
+ else if (slot == 1)
+ {
+ // checkme
+ emuThread->emuUnpause();
+ }
+ else
+ {
+ emuThread->emuRun();
+ }
+}
+
+
+QString MainWindow::loadErrorStr(int error)
+{
+ switch (error)
+ {
+ case Frontend::Load_BIOS9Missing:
+ return "DS ARM9 BIOS was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_BIOS9Bad:
+ return "DS ARM9 BIOS is not a valid BIOS dump.";
+
+ case Frontend::Load_BIOS7Missing:
+ return "DS ARM7 BIOS was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_BIOS7Bad:
+ return "DS ARM7 BIOS is not a valid BIOS dump.";
+
+ case Frontend::Load_FirmwareMissing:
+ return "DS firmware was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_FirmwareBad:
+ return "DS firmware is not a valid firmware dump.";
+ case Frontend::Load_FirmwareNotBootable:
+ return "DS firmware is not bootable.";
+
+ case Frontend::Load_DSiBIOS9Missing:
+ return "DSi ARM9 BIOS was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_DSiBIOS9Bad:
+ return "DSi ARM9 BIOS is not a valid BIOS dump.";
+
+ case Frontend::Load_DSiBIOS7Missing:
+ return "DSi ARM7 BIOS was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_DSiBIOS7Bad:
+ return "DSi ARM7 BIOS is not a valid BIOS dump.";
+
+ case Frontend::Load_DSiNANDMissing:
+ return "DSi NAND was not found or could not be accessed. Check your emu settings.";
+ case Frontend::Load_DSiNANDBad:
+ return "DSi NAND is not a valid NAND dump.";
+
+ case Frontend::Load_ROMLoadError:
+ return "Failed to load the ROM. Make sure the file is accessible and isn't used by another application.";
+
+ default: return "Unknown error during launch; smack Arisotura.";
+ }
}
void MainWindow::onOpenFile()
{
- emuThread->emuPause(true);
+ emuThread->emuPause();
QString filename = QFileDialog::getOpenFileName(this,
"Open ROM",
Config::LastROMFolder,
- "DS ROMs (*.nds *.srl);;GBA ROMs (*.gba);;Any file (*.*)");
+ "DS ROMs (*.nds *.dsi *.srl);;GBA ROMs (*.gba);;Any file (*.*)");
if (filename.isEmpty())
{
emuThread->emuUnpause();
return;
}
+ // TODO: validate the input file!!
+ // * check that it is a proper ROM
+ // * ensure the binary offsets are sane
+ // * etc
+
// this shit is stupid
char file[1024];
strncpy(file, filename.toStdString().c_str(), 1023); file[1023] = '\0';
@@ -566,7 +1429,7 @@ void MainWindow::onOpenFile()
Config::LastROMFolder[pos] = '\0';
char* ext = &file[strlen(file)-3];
- int slot; bool res;
+ int slot; int res;
if (!strcasecmp(ext, "gba"))
{
slot = 1;
@@ -578,11 +1441,11 @@ void MainWindow::onOpenFile()
res = Frontend::LoadROM(file, Frontend::ROMSlot_NDS);
}
- if (!res)
+ if (res != Frontend::Load_OK)
{
QMessageBox::critical(this,
"melonDS",
- "Failed to load the ROM.\n\nMake sure the file is accessible and isn't used by another application.");
+ loadErrorStr(res));
emuThread->emuUnpause();
}
else if (slot == 1)
@@ -598,16 +1461,16 @@ void MainWindow::onOpenFile()
void MainWindow::onBootFirmware()
{
- // TODO: ensure the firmware is actually bootable!!
// TODO: check the whole GBA cart shito
- emuThread->emuPause(true);
+ emuThread->emuPause();
- bool res = Frontend::LoadBIOS();
- if (!res)
+ int res = Frontend::LoadBIOS();
+ if (res != Frontend::Load_OK)
{
- // TODO!
-
+ QMessageBox::critical(this,
+ "melonDS",
+ loadErrorStr(res));
emuThread->emuUnpause();
}
else
@@ -620,7 +1483,7 @@ void MainWindow::onSaveState()
{
int slot = ((QAction*)sender())->data().toInt();
- emuThread->emuPause(true);
+ emuThread->emuPause();
char filename[1024];
if (slot > 0)
@@ -645,13 +1508,16 @@ void MainWindow::onSaveState()
if (Frontend::SaveState(filename))
{
- // TODO: OSD message
+ char msg[64];
+ if (slot > 0) sprintf(msg, "State saved to slot %d", slot);
+ else sprintf(msg, "State saved to file");
+ OSD::AddMessage(0, msg);
actLoadState[slot]->setEnabled(true);
}
else
{
- // TODO: OSD error message?
+ OSD::AddMessage(0xFFA0A0, "State save failed");
}
emuThread->emuUnpause();
@@ -661,7 +1527,7 @@ void MainWindow::onLoadState()
{
int slot = ((QAction*)sender())->data().toInt();
- emuThread->emuPause(true);
+ emuThread->emuPause();
char filename[1024];
if (slot > 0)
@@ -686,10 +1552,10 @@ void MainWindow::onLoadState()
if (!Platform::FileExists(filename))
{
- /*char msg[64];
+ char msg[64];
if (slot > 0) sprintf(msg, "State slot %d is empty", slot);
else sprintf(msg, "State file does not exist");
- OSD::AddMessage(0xFFA0A0, msg);*/
+ OSD::AddMessage(0xFFA0A0, msg);
emuThread->emuUnpause();
return;
@@ -697,11 +1563,14 @@ void MainWindow::onLoadState()
if (Frontend::LoadState(filename))
{
- // TODO: OSD message
+ char msg[64];
+ if (slot > 0) sprintf(msg, "State loaded from slot %d", slot);
+ else sprintf(msg, "State loaded from file");
+ OSD::AddMessage(0, msg);
}
else
{
- // TODO: OSD error message?
+ OSD::AddMessage(0xFFA0A0, "State load failed");
}
emuThread->emuUnpause();
@@ -709,9 +1578,11 @@ void MainWindow::onLoadState()
void MainWindow::onUndoStateLoad()
{
- emuThread->emuPause(true);
+ emuThread->emuPause();
Frontend::UndoStateLoad();
emuThread->emuUnpause();
+
+ OSD::AddMessage(0, "State load undone");
}
void MainWindow::onQuit()
@@ -722,24 +1593,220 @@ void MainWindow::onQuit()
void MainWindow::onPause(bool checked)
{
- if (emuThread->emuIsRunning())
+ if (!RunningSomething) return;
+
+ if (checked)
{
- emuThread->emuPause(true);
+ emuThread->emuPause();
+ OSD::AddMessage(0, "Paused");
}
else
{
emuThread->emuUnpause();
+ OSD::AddMessage(0, "Resumed");
}
}
void MainWindow::onReset()
{
- //
+ if (!RunningSomething) return;
+
+ emuThread->emuPause();
+
+ actUndoStateLoad->setEnabled(false);
+
+ int res = Frontend::Reset();
+ if (res != Frontend::Load_OK)
+ {
+ QMessageBox::critical(this,
+ "melonDS",
+ loadErrorStr(res));
+ emuThread->emuUnpause();
+ }
+ else
+ {
+ OSD::AddMessage(0, "Reset");
+ emuThread->emuRun();
+ }
}
void MainWindow::onStop()
{
- //
+ if (!RunningSomething) return;
+
+ emuThread->emuPause();
+ NDS::Stop();
+}
+
+
+void MainWindow::onOpenEmuSettings()
+{
+ EmuSettingsDialog::openDlg(this);
+}
+
+void MainWindow::onOpenInputConfig()
+{
+ emuThread->emuPause();
+
+ InputConfigDialog* dlg = InputConfigDialog::openDlg(this);
+ connect(dlg, &InputConfigDialog::finished, this, &MainWindow::onInputConfigFinished);
+}
+
+void MainWindow::onInputConfigFinished(int res)
+{
+ emuThread->emuUnpause();
+}
+
+void MainWindow::onOpenVideoSettings()
+{
+ VideoSettingsDialog* dlg = VideoSettingsDialog::openDlg(this);
+ connect(dlg, &VideoSettingsDialog::updateVideoSettings, this, &MainWindow::onUpdateVideoSettings);
+}
+
+void MainWindow::onOpenAudioSettings()
+{
+ AudioSettingsDialog* dlg = AudioSettingsDialog::openDlg(this);
+ connect(dlg, &AudioSettingsDialog::finished, this, &MainWindow::onAudioSettingsFinished);
+}
+
+void MainWindow::onAudioSettingsFinished(int res)
+{
+ if (Config::MicInputType == 3)
+ {
+ micLoadWav(Config::MicWavPath);
+ Frontend::Mic_SetExternalBuffer(micWavBuffer, micWavLength);
+ }
+ else
+ {
+ delete[] micWavBuffer;
+ micWavBuffer = nullptr;
+
+ if (Config::MicInputType == 1)
+ Frontend::Mic_SetExternalBuffer(micExtBuffer, sizeof(micExtBuffer)/sizeof(s16));
+ else
+ Frontend::Mic_SetExternalBuffer(NULL, 0);
+ }
+}
+
+void MainWindow::onOpenWifiSettings()
+{
+ WifiSettingsDialog* dlg = WifiSettingsDialog::openDlg(this);
+ connect(dlg, &WifiSettingsDialog::finished, this, &MainWindow::onWifiSettingsFinished);
+}
+
+void MainWindow::onWifiSettingsFinished(int res)
+{
+ emuThread->emuPause();
+
+ if (Wifi::MPInited)
+ {
+ Platform::MP_DeInit();
+ Platform::MP_Init();
+ }
+
+ Platform::LAN_DeInit();
+ Platform::LAN_Init();
+
+ emuThread->emuUnpause();
+}
+
+void MainWindow::onChangeSavestateSRAMReloc(bool checked)
+{
+ Config::SavestateRelocSRAM = checked?1:0;
+}
+
+void MainWindow::onChangeScreenSize()
+{
+ int factor = ((QAction*)sender())->data().toInt();
+
+ bool isHori = (Config::ScreenRotation == 1 || Config::ScreenRotation == 3);
+ int gap = Config::ScreenGap;
+
+ int w = 256*factor;
+ int h = 192*factor;
+
+ QSize diff = size() - panel->size();
+
+ if (Config::ScreenLayout == 0) // natural
+ {
+ if (isHori)
+ resize(QSize(h+gap+h, w) + diff);
+ else
+ resize(QSize(w, h+gap+h) + diff);
+ }
+ else if (Config::ScreenLayout == 1) // vertical
+ {
+ if (isHori)
+ resize(QSize(h, w+gap+w) + diff);
+ else
+ resize(QSize(w, h+gap+h) + diff);
+ }
+ else // horizontal
+ {
+ if (isHori)
+ resize(QSize(h+gap+h, w) + diff);
+ else
+ resize(QSize(w+gap+w, h) + diff);
+ }
+}
+
+void MainWindow::onChangeScreenRotation(QAction* act)
+{
+ int rot = act->data().toInt();
+ Config::ScreenRotation = rot;
+
+ emit screenLayoutChange();
+}
+
+void MainWindow::onChangeScreenGap(QAction* act)
+{
+ int gap = act->data().toInt();
+ Config::ScreenGap = gap;
+
+ emit screenLayoutChange();
+}
+
+void MainWindow::onChangeScreenLayout(QAction* act)
+{
+ int layout = act->data().toInt();
+ Config::ScreenLayout = layout;
+
+ emit screenLayoutChange();
+}
+
+void MainWindow::onChangeScreenSizing(QAction* act)
+{
+ int sizing = act->data().toInt();
+ Config::ScreenSizing = sizing;
+
+ emit screenLayoutChange();
+}
+
+void MainWindow::onChangeIntegerScaling(bool checked)
+{
+ Config::IntegerScaling = checked?1:0;
+
+ emit screenLayoutChange();
+}
+
+void MainWindow::onChangeScreenFiltering(bool checked)
+{
+ Config::ScreenFilter = checked?1:0;
+}
+
+void MainWindow::onChangeShowOSD(bool checked)
+{
+ Config::ShowOSD = checked?1:0;
+}
+
+void MainWindow::onChangeLimitFramerate(bool checked)
+{
+ Config::LimitFPS = checked?1:0;
+}
+
+void MainWindow::onChangeAudioSync(bool checked)
+{
+ Config::AudioSync = checked?1:0;
}
@@ -757,7 +1824,7 @@ void MainWindow::onEmuStart()
}
actSaveState[0]->setEnabled(true);
actLoadState[0]->setEnabled(true);
- actUndoStateLoad->setEnabled(true);
+ actUndoStateLoad->setEnabled(false);
actPause->setEnabled(true);
actPause->setChecked(false);
@@ -767,6 +1834,8 @@ void MainWindow::onEmuStart()
void MainWindow::onEmuStop()
{
+ emuThread->emuPause();
+
for (int i = 0; i < 9; i++)
{
actSaveState[i]->setEnabled(false);
@@ -779,17 +1848,40 @@ void MainWindow::onEmuStop()
actStop->setEnabled(false);
}
-void MainWindow::onEmuPause()
+void MainWindow::onUpdateVideoSettings(bool glchange)
{
- //
+ if (glchange)
+ {
+ emuThread->emuPause();
+
+ if (hasOGL) emuThread->deinitOpenGL();
+ delete panel;
+ createScreenPanel();
+ connect(emuThread, SIGNAL(windowUpdate()), panel, SLOT(update()));
+ if (hasOGL) emuThread->initOpenGL();
+ }
+
+ videoSettingsDirty = true;
+
+ if (glchange)
+ emuThread->emuUnpause();
}
-void MainWindow::onEmuUnpause()
+
+void emuStop()
{
- //
+ RunningSomething = false;
+
+ Frontend::UnloadROM(Frontend::ROMSlot_NDS);
+ Frontend::UnloadROM(Frontend::ROMSlot_GBA);
+
+ emit emuThread->windowEmuStop();
+
+ OSD::AddMessage(0xFFC040, "Shutdown");
}
+
int main(int argc, char** argv)
{
srand(time(NULL));
@@ -797,40 +1889,10 @@ int main(int argc, char** argv)
printf("melonDS " MELONDS_VERSION "\n");
printf(MELONDS_URL "\n");
-#if defined(__WIN32__) || defined(UNIX_PORTABLE)
- if (argc > 0 && strlen(argv[0]) > 0)
- {
- int len = strlen(argv[0]);
- while (len > 0)
- {
- if (argv[0][len] == '/') break;
- if (argv[0][len] == '\\') break;
- len--;
- }
- if (len > 0)
- {
- EmuDirectory = new char[len+1];
- strncpy(EmuDirectory, argv[0], len);
- EmuDirectory[len] = '\0';
- }
- else
- {
- EmuDirectory = new char[2];
- strcpy(EmuDirectory, ".");
- }
- }
- else
- {
- EmuDirectory = new char[2];
- strcpy(EmuDirectory, ".");
- }
-#else
- QString confdir = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + "/melonDS";
- EmuDirectory = new char[confdir.length() + 1];
- strcat(EmuDirectory, confdir.toStdString().c_str());
-#endif
+ Platform::Init(argc, argv);
QApplication melon(argc, argv);
+ melon.setWindowIcon(QIcon(":/melon-icon"));
// http://stackoverflow.com/questions/14543333/joystick-wont-work-using-sdl
SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
@@ -849,107 +1911,26 @@ int main(int argc, char** argv)
Config::Load();
- //if (Config::AudioVolume < 0) Config::AudioVolume = 0;
- //else if (Config::AudioVolume > 256) Config::AudioVolume = 256;
-
- // TODO: those should be checked before running anything
- // (as to let the user specify their own BIOS/firmware path etc)
-#if 0
- if (!Platform::LocalFileExists("bios7.bin") ||
- !Platform::LocalFileExists("bios9.bin") ||
- !Platform::LocalFileExists("firmware.bin"))
- {
-#if defined(__WIN32__) || defined(UNIX_PORTABLE)
- const char* locationName = "the directory you run melonDS from";
-#else
- char* locationName = EmuDirectory;
-#endif
- char msgboxtext[512];
- sprintf(msgboxtext,
- "One or more of the following required files don't exist or couldn't be accessed:\n\n"
- "bios7.bin -- ARM7 BIOS\n"
- "bios9.bin -- ARM9 BIOS\n"
- "firmware.bin -- firmware image\n\n"
- "Dump the files from your DS and place them in %s.\n"
- "Make sure that the files can be accessed.",
- locationName
- );
-
- uiMsgBoxError(NULL, "BIOS/Firmware not found", msgboxtext);
-
- uiUninit();
- SDL_Quit();
- return 0;
- }
- if (!Platform::LocalFileExists("firmware.bin.bak"))
- {
- // verify the firmware
- //
- // there are dumps of an old hacked firmware floating around on the internet
- // and those are problematic
- // the hack predates WFC, and, due to this, any game that alters the WFC
- // access point data will brick that firmware due to it having critical
- // data in the same area. it has the same problem on hardware.
- //
- // but this should help stop users from reporting that issue over and over
- // again, when the issue is not from melonDS but from their firmware dump.
- //
- // I don't know about all the firmware hacks in existence, but the one I
- // looked at has 0x180 bytes from the header repeated at 0x3FC80, but
- // bytes 0x0C-0x14 are different.
-
- FILE* f = Platform::OpenLocalFile("firmware.bin", "rb");
- u8 chk1[0x180], chk2[0x180];
-
- fseek(f, 0, SEEK_SET);
- fread(chk1, 1, 0x180, f);
- fseek(f, -0x380, SEEK_END);
- fread(chk2, 1, 0x180, f);
-
- memset(&chk1[0x0C], 0, 8);
- memset(&chk2[0x0C], 0, 8);
-
- fclose(f);
-
- if (!memcmp(chk1, chk2, 0x180))
- {
- uiMsgBoxError(NULL,
- "Problematic firmware dump",
- "You are using an old hacked firmware dump.\n"
- "Firmware boot will stop working if you run any game that alters WFC settings.\n\n"
- "Note that the issue is not from melonDS, it would also happen on an actual DS.");
- }
- }
- {
- const char* romlist_missing = "Save memory type detection will not work correctly.\n\n"
- "You should use the latest version of romlist.bin (provided in melonDS release packages).";
-#if !defined(UNIX_PORTABLE) && !defined(__WIN32__)
- std::string missingstr = std::string(romlist_missing) +
- "\n\nThe ROM list should be placed in " + g_get_user_data_dir() + "/melonds/, otherwise "
- "melonDS will search for it in the current working directory.";
- const char* romlist_missing_text = missingstr.c_str();
-#else
- const char* romlist_missing_text = romlist_missing;
-#endif
-
- FILE* f = Platform::OpenDataFile("romlist.bin");
- if (f)
- {
- u32 data;
- fread(&data, 4, 1, f);
- fclose(f);
-
- if ((data >> 24) == 0) // old CRC-based list
- {
- uiMsgBoxError(NULL, "Your version of romlist.bin is outdated.", romlist_missing_text);
- }
- }
- else
- {
- uiMsgBoxError(NULL, "romlist.bin not found.", romlist_missing_text);
- }
- }
-#endif
+#define SANITIZE(var, min, max) { if (var < min) var = min; else if (var > max) var = max; }
+ SANITIZE(Config::ConsoleType, 0, 1);
+ SANITIZE(Config::_3DRenderer, 0, 1);
+ SANITIZE(Config::ScreenVSyncInterval, 1, 20);
+ SANITIZE(Config::GL_ScaleFactor, 1, 16);
+ SANITIZE(Config::AudioVolume, 0, 256);
+ SANITIZE(Config::MicInputType, 0, 3);
+ SANITIZE(Config::ScreenRotation, 0, 3);
+ SANITIZE(Config::ScreenGap, 0, 500);
+ SANITIZE(Config::ScreenLayout, 0, 2);
+ SANITIZE(Config::ScreenSizing, 0, 3);
+#undef SANITIZE
+
+ QSurfaceFormat format;
+ format.setDepthBufferSize(24);
+ format.setStencilBufferSize(8);
+ format.setVersion(3, 2);
+ format.setProfile(QSurfaceFormat::CoreProfile);
+ format.setSwapInterval(0);
+ QSurfaceFormat::setDefaultFormat(format);
audioSync = SDL_CreateCond();
audioSyncLock = SDL_CreateMutex();
@@ -974,17 +1955,49 @@ int main(int argc, char** argv)
SDL_PauseAudioDevice(audioDevice, 1);
}
+ memset(&whatIwant, 0, sizeof(SDL_AudioSpec));
+ whatIwant.freq = 44100;
+ whatIwant.format = AUDIO_S16LSB;
+ whatIwant.channels = 1;
+ whatIwant.samples = 1024;
+ whatIwant.callback = micCallback;
+ micDevice = SDL_OpenAudioDevice(NULL, 1, &whatIwant, &whatIget, 0);
+ if (!micDevice)
+ {
+ printf("Mic init failed: %s\n", SDL_GetError());
+ }
+ else
+ {
+ SDL_PauseAudioDevice(micDevice, 1);
+ }
+
+
+ memset(micExtBuffer, 0, sizeof(micExtBuffer));
+ micExtBufferWritePos = 0;
+ micWavBuffer = nullptr;
+
Frontend::Init_ROM();
Frontend::Init_Audio(audioFreq);
+ if (Config::MicInputType == 1)
+ {
+ Frontend::Mic_SetExternalBuffer(micExtBuffer, sizeof(micExtBuffer)/sizeof(s16));
+ }
+ else if (Config::MicInputType == 3)
+ {
+ micLoadWav(Config::MicWavPath);
+ Frontend::Mic_SetExternalBuffer(micWavBuffer, micWavLength);
+ }
+
+ Input::JoystickID = Config::JoystickID;
+ Input::OpenJoystick();
+
mainWindow = new MainWindow();
- mainWindow->show();
emuThread = new EmuThread();
emuThread->start();
- emuThread->emuPause(true);
+ emuThread->emuPause();
- #if 0
if (argc > 1)
{
char* file = argv[1];
@@ -992,51 +2005,46 @@ int main(int argc, char** argv)
if (!strcasecmp(ext, "nds") || !strcasecmp(ext, "srl"))
{
- strncpy(ROMPath[0], file, 1023);
- ROMPath[0][1023] = '\0';
-
- //SetupSRAMPath(0);
-
- //if (NDS::LoadROM(ROMPath[0], SRAMPath[0], Config::DirectBoot))
- // Run();
- }
-
- if (argc > 2)
- {
- file = argv[2];
- ext = &file[strlen(file)-3];
+ int res = Frontend::LoadROM(file, Frontend::ROMSlot_NDS);
- if (!strcasecmp(ext, "gba"))
+ if (res == Frontend::Load_OK)
{
- strncpy(ROMPath[1], file, 1023);
- ROMPath[1][1023] = '\0';
+ if (argc > 2)
+ {
+ file = argv[2];
+ ext = &file[strlen(file)-3];
- //SetupSRAMPath(1);
+ if (!strcasecmp(ext, "gba"))
+ {
+ Frontend::LoadROM(file, Frontend::ROMSlot_GBA);
+ }
+ }
- //NDS::LoadGBAROM(ROMPath[1], SRAMPath[1]);
+ emuThread->emuRun();
}
}
}
- #endif
int ret = melon.exec();
emuThread->emuStop();
emuThread->wait();
+ delete emuThread;
+
+ Input::CloseJoystick();
- //if (Joystick) SDL_JoystickClose(Joystick);
if (audioDevice) SDL_CloseAudioDevice(audioDevice);
- //if (MicDevice) SDL_CloseAudioDevice(MicDevice);
+ if (micDevice) SDL_CloseAudioDevice(micDevice);
SDL_DestroyCond(audioSync);
SDL_DestroyMutex(audioSyncLock);
- //if (MicWavBuffer) delete[] MicWavBuffer;
+ if (micWavBuffer) delete[] micWavBuffer;
Config::Save();
SDL_Quit();
- delete[] EmuDirectory;
+ Platform::DeInit();
return ret;
}
diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h
index 30cef1f..279aed8 100644
--- a/src/frontend/qt_sdl/main.h
+++ b/src/frontend/qt_sdl/main.h
@@ -21,8 +21,17 @@
#include <QThread>
#include <QWidget>
+#include <QWindow>
#include <QMainWindow>
#include <QImage>
+#include <QActionGroup>
+
+#include <QOffscreenSurface>
+#include <QOpenGLWidget>
+#include <QOpenGLContext>
+#include <QOpenGLFunctions>
+#include <QOpenGLFunctions_3_2_Core>
+#include <QOpenGLShaderProgram>
class EmuThread : public QThread
@@ -33,43 +42,124 @@ class EmuThread : public QThread
public:
explicit EmuThread(QObject* parent = nullptr);
+ void initOpenGL();
+ void deinitOpenGL();
+
+ void* oglGetProcAddress(const char* proc);
+
void changeWindowTitle(char* title);
// to be called from the UI thread
void emuRun();
- void emuPause(bool refresh);
+ void emuPause();
void emuUnpause();
void emuStop();
bool emuIsRunning();
signals:
+ void windowUpdate();
void windowTitleChange(QString title);
void windowEmuStart();
void windowEmuStop();
- void windowPauseToggle();
+ void windowEmuPause();
+ void windowEmuReset();
+
+ void windowLimitFPSChange();
+
+ void screenLayoutChange();
private:
volatile int EmuStatus;
int PrevEmuStatus;
int EmuRunning;
+
+ QOffscreenSurface* oglSurface;
+ QOpenGLContext* oglContext;
+};
+
+
+class ScreenHandler
+{
+ Q_GADGET
+
+public:
+ virtual ~ScreenHandler() {}
+
+protected:
+ void screenSetupLayout(int w, int h);
+
+ QSize screenGetMinSize();
+
+ void screenOnMousePress(QMouseEvent* event);
+ void screenOnMouseRelease(QMouseEvent* event);
+ void screenOnMouseMove(QMouseEvent* event);
+
+ float screenMatrix[2][6];
+
+ bool touching;
};
-class MainWindowPanel : public QWidget
+class ScreenPanelNative : public QWidget, public ScreenHandler
{
Q_OBJECT
public:
- explicit MainWindowPanel(QWidget* parent);
- ~MainWindowPanel();
+ explicit ScreenPanelNative(QWidget* parent);
+ ~ScreenPanelNative();
protected:
void paintEvent(QPaintEvent* event) override;
+ void resizeEvent(QResizeEvent* event) override;
+
+ void mousePressEvent(QMouseEvent* event) override;
+ void mouseReleaseEvent(QMouseEvent* event) override;
+ void mouseMoveEvent(QMouseEvent* event) override;
+
+private slots:
+ void onScreenLayoutChanged();
+
private:
- QImage* screen[2];
+ void setupScreenLayout();
+
+ QImage screen[2];
+ QTransform screenTrans[2];
+};
+
+
+class ScreenPanelGL : public QOpenGLWidget, public ScreenHandler, protected QOpenGLFunctions_3_2_Core
+{
+ Q_OBJECT
+
+public:
+ explicit ScreenPanelGL(QWidget* parent);
+ ~ScreenPanelGL();
+
+protected:
+ void initializeGL() override;
+
+ void paintGL() override;
+
+ void resizeEvent(QResizeEvent* event) override;
+ void resizeGL(int w, int h) override;
+
+ void mousePressEvent(QMouseEvent* event) override;
+ void mouseReleaseEvent(QMouseEvent* event) override;
+ void mouseMoveEvent(QMouseEvent* event) override;
+
+private slots:
+ void onScreenLayoutChanged();
+
+private:
+ void setupScreenLayout();
+
+ QOpenGLShaderProgram* screenShader;
+ GLuint screenVertexBuffer;
+ GLuint screenVertexArray;
+ GLuint screenTexture;
};
@@ -81,8 +171,20 @@ public:
explicit MainWindow(QWidget* parent = nullptr);
~MainWindow();
+ bool hasOGL;
+ QOpenGLContext* getOGLContext();
+
protected:
+ void resizeEvent(QResizeEvent* event) override;
+
void keyPressEvent(QKeyEvent* event) override;
+ void keyReleaseEvent(QKeyEvent* event) override;
+
+ void dragEnterEvent(QDragEnterEvent* event) override;
+ void dropEvent(QDropEvent* event) override;
+
+signals:
+ void screenLayoutChange();
private slots:
void onOpenFile();
@@ -96,15 +198,40 @@ private slots:
void onReset();
void onStop();
+ void onOpenEmuSettings();
+ void onOpenInputConfig();
+ void onInputConfigFinished(int res);
+ void onOpenVideoSettings();
+ void onOpenAudioSettings();
+ void onAudioSettingsFinished(int res);
+ void onOpenWifiSettings();
+ void onWifiSettingsFinished(int res);
+ void onChangeSavestateSRAMReloc(bool checked);
+ void onChangeScreenSize();
+ void onChangeScreenRotation(QAction* act);
+ void onChangeScreenGap(QAction* act);
+ void onChangeScreenLayout(QAction* act);
+ void onChangeScreenSizing(QAction* act);
+ void onChangeIntegerScaling(bool checked);
+ void onChangeScreenFiltering(bool checked);
+ void onChangeShowOSD(bool checked);
+ void onChangeLimitFramerate(bool checked);
+ void onChangeAudioSync(bool checked);
+
void onTitleUpdate(QString title);
void onEmuStart();
void onEmuStop();
- void onEmuPause();
- void onEmuUnpause();
+
+ void onUpdateVideoSettings(bool glchange);
private:
- MainWindowPanel* panel;
+ void createScreenPanel();
+
+ QString loadErrorStr(int error);
+
+public:
+ QWidget* panel;
QAction* actOpenROM;
QAction* actBootFirmware;
@@ -116,6 +243,27 @@ private:
QAction* actPause;
QAction* actReset;
QAction* actStop;
+
+ QAction* actEmuSettings;
+ QAction* actInputConfig;
+ QAction* actVideoSettings;
+ QAction* actAudioSettings;
+ QAction* actWifiSettings;
+ QAction* actSavestateSRAMReloc;
+ QAction* actScreenSize[4];
+ QActionGroup* grpScreenRotation;
+ QAction* actScreenRotation[4];
+ QActionGroup* grpScreenGap;
+ QAction* actScreenGap[6];
+ QActionGroup* grpScreenLayout;
+ QAction* actScreenLayout[3];
+ QActionGroup* grpScreenSizing;
+ QAction* actScreenSizing[4];
+ QAction* actIntegerScaling;
+ QAction* actScreenFiltering;
+ QAction* actShowOSD;
+ QAction* actLimitFramerate;
+ QAction* actAudioSync;
};
#endif // MAIN_H
diff --git a/src/frontend/qt_sdl/main_shaders.h b/src/frontend/qt_sdl/main_shaders.h
new file mode 100644
index 0000000..c55f79e
--- /dev/null
+++ b/src/frontend/qt_sdl/main_shaders.h
@@ -0,0 +1,64 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef MAIN_SHADERS_H
+#define MAIN_SHADERS_H
+
+const char* kScreenVS = R"(#version 140
+
+uniform vec2 uScreenSize;
+uniform mat2x3 uTransform;
+
+in vec2 vPosition;
+in vec2 vTexcoord;
+
+smooth out vec2 fTexcoord;
+
+void main()
+{
+ vec4 fpos;
+
+ fpos.xy = vec3(vPosition, 1.0) * uTransform;
+
+ fpos.xy = ((fpos.xy * 2.0) / uScreenSize) - 1.0;
+ fpos.y *= -1;
+ fpos.z = 0.0;
+ fpos.w = 1.0;
+
+ gl_Position = fpos;
+ fTexcoord = vTexcoord;
+}
+)";
+
+const char* kScreenFS = R"(#version 140
+
+uniform sampler2D ScreenTex;
+
+smooth in vec2 fTexcoord;
+
+out vec4 oColor;
+
+void main()
+{
+ vec4 pixel = texture(ScreenTex, fTexcoord);
+
+ oColor = vec4(pixel.bgr, 1.0);
+}
+)";
+
+#endif // MAIN_SHADERS_H
diff --git a/src/pcap/bluetooth.h b/src/frontend/qt_sdl/pcap/bluetooth.h
index 15dc5a8..15dc5a8 100644
--- a/src/pcap/bluetooth.h
+++ b/src/frontend/qt_sdl/pcap/bluetooth.h
diff --git a/src/pcap/bpf.h b/src/frontend/qt_sdl/pcap/bpf.h
index 1a953a9..1a953a9 100644
--- a/src/pcap/bpf.h
+++ b/src/frontend/qt_sdl/pcap/bpf.h
diff --git a/src/pcap/can_socketcan.h b/src/frontend/qt_sdl/pcap/can_socketcan.h
index 332d9ff..332d9ff 100644
--- a/src/pcap/can_socketcan.h
+++ b/src/frontend/qt_sdl/pcap/can_socketcan.h
diff --git a/src/pcap/compiler-tests.h b/src/frontend/qt_sdl/pcap/compiler-tests.h
index 8876c67..8876c67 100644
--- a/src/pcap/compiler-tests.h
+++ b/src/frontend/qt_sdl/pcap/compiler-tests.h
diff --git a/src/pcap/dlt.h b/src/frontend/qt_sdl/pcap/dlt.h
index 609bcaf..609bcaf 100644
--- a/src/pcap/dlt.h
+++ b/src/frontend/qt_sdl/pcap/dlt.h
diff --git a/src/pcap/funcattrs.h b/src/frontend/qt_sdl/pcap/funcattrs.h
index d1cc2bf..d1cc2bf 100644
--- a/src/pcap/funcattrs.h
+++ b/src/frontend/qt_sdl/pcap/funcattrs.h
diff --git a/src/pcap/ipnet.h b/src/frontend/qt_sdl/pcap/ipnet.h
index 5330847..5330847 100644
--- a/src/pcap/ipnet.h
+++ b/src/frontend/qt_sdl/pcap/ipnet.h
diff --git a/src/pcap/namedb.h b/src/frontend/qt_sdl/pcap/namedb.h
index 73fb40a..73fb40a 100644
--- a/src/pcap/namedb.h
+++ b/src/frontend/qt_sdl/pcap/namedb.h
diff --git a/src/pcap/nflog.h b/src/frontend/qt_sdl/pcap/nflog.h
index 29a71d2..29a71d2 100644
--- a/src/pcap/nflog.h
+++ b/src/frontend/qt_sdl/pcap/nflog.h
diff --git a/src/pcap/pcap-inttypes.h b/src/frontend/qt_sdl/pcap/pcap-inttypes.h
index af2c23c..af2c23c 100644
--- a/src/pcap/pcap-inttypes.h
+++ b/src/frontend/qt_sdl/pcap/pcap-inttypes.h
diff --git a/src/pcap/pcap.h b/src/frontend/qt_sdl/pcap/pcap.h
index d32e2a9..d32e2a9 100644
--- a/src/pcap/pcap.h
+++ b/src/frontend/qt_sdl/pcap/pcap.h
diff --git a/src/pcap/sll.h b/src/frontend/qt_sdl/pcap/sll.h
index c4d0886..c4d0886 100644
--- a/src/pcap/sll.h
+++ b/src/frontend/qt_sdl/pcap/sll.h
diff --git a/src/pcap/usb.h b/src/frontend/qt_sdl/pcap/usb.h
index e485ec8..e485ec8 100644
--- a/src/pcap/usb.h
+++ b/src/frontend/qt_sdl/pcap/usb.h
diff --git a/src/pcap/vlan.h b/src/frontend/qt_sdl/pcap/vlan.h
index b29dd73..b29dd73 100644
--- a/src/pcap/vlan.h
+++ b/src/frontend/qt_sdl/pcap/vlan.h
diff --git a/src/sha1/sha1.c b/src/sha1/sha1.c
new file mode 100644
index 0000000..3729550
--- /dev/null
+++ b/src/sha1/sha1.c
@@ -0,0 +1,277 @@
+
+/* from valgrind tests */
+
+/* ================ sha1.c ================ */
+/*
+SHA-1 in C
+By Steve Reid <steve@edmweb.com>
+100% Public Domain
+
+Test Vectors (from FIPS PUB 180-1)
+"abc"
+ A9993E36 4706816A BA3E2571 7850C26C 9CD0D89D
+"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"
+ 84983E44 1C3BD26E BAAE4AA1 F95129E5 E54670F1
+A million repetitions of "a"
+ 34AA973C D4C4DAA4 F61EEB2B DBAD2731 6534016F
+*/
+
+/* #define LITTLE_ENDIAN * This should be #define'd already, if true. */
+/* #define SHA1HANDSOFF * Copies data before messing with it. */
+
+#define SHA1HANDSOFF
+
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h> /* for u_int*_t */
+#if defined(__sun)
+#include "solarisfixes.h"
+#endif
+#include "sha1.h"
+
+#ifndef BYTE_ORDER
+#if (BSD >= 199103)
+# include <machine/endian.h>
+#else
+#if defined(linux) || defined(__linux__)
+# include <endian.h>
+#else
+#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax, pc) */
+#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */
+#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp)*/
+
+#if defined(vax) || defined(ns32000) || defined(sun386) || defined(__i386__) || \
+ defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \
+ defined(__alpha__) || defined(__alpha) || \
+ defined(__WIN32__)
+#define BYTE_ORDER LITTLE_ENDIAN
+#endif
+
+#if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \
+ defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \
+ defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\
+ defined(apollo) || defined(__convex__) || defined(_CRAY) || \
+ defined(__hppa) || defined(__hp9000) || \
+ defined(__hp9000s300) || defined(__hp9000s700) || \
+ defined (BIT_ZERO_ON_LEFT) || defined(m68k) || defined(__sparc)
+#define BYTE_ORDER BIG_ENDIAN
+#endif
+#endif /* linux */
+#endif /* BSD */
+#endif /* BYTE_ORDER */
+
+#if defined(__BYTE_ORDER) && !defined(BYTE_ORDER)
+#if (__BYTE_ORDER == __LITTLE_ENDIAN)
+#define BYTE_ORDER LITTLE_ENDIAN
+#else
+#define BYTE_ORDER BIG_ENDIAN
+#endif
+#endif
+
+#if !defined(BYTE_ORDER) || \
+ (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \
+ BYTE_ORDER != PDP_ENDIAN)
+ /* you must determine what the correct bit order is for
+ * your compiler - the next line is an intentional error
+ * which will force your compiles to bomb until you fix
+ * the above macros.
+ */
+#error "Undefined or invalid BYTE_ORDER"
+#endif
+
+#define rol(value, bits) (((value) << (bits)) | ((value) >> (32 - (bits))))
+
+/* blk0() and blk() perform the initial expand. */
+/* I got the idea of expanding during the round function from SSLeay */
+#if BYTE_ORDER == LITTLE_ENDIAN
+#define blk0(i) (block->l[i] = (rol(block->l[i],24)&0xFF00FF00) \
+ |(rol(block->l[i],8)&0x00FF00FF))
+#elif BYTE_ORDER == BIG_ENDIAN
+#define blk0(i) block->l[i]
+#else
+#error "Endianness not defined!"
+#endif
+#define blk(i) (block->l[i&15] = rol(block->l[(i+13)&15]^block->l[(i+8)&15] \
+ ^block->l[(i+2)&15]^block->l[i&15],1))
+
+/* (R0+R1), R2, R3, R4 are the different operations used in SHA1 */
+#define R0(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk0(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R1(v,w,x,y,z,i) z+=((w&(x^y))^y)+blk(i)+0x5A827999+rol(v,5);w=rol(w,30);
+#define R2(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0x6ED9EBA1+rol(v,5);w=rol(w,30);
+#define R3(v,w,x,y,z,i) z+=(((w|x)&y)|(w&x))+blk(i)+0x8F1BBCDC+rol(v,5);w=rol(w,30);
+#define R4(v,w,x,y,z,i) z+=(w^x^y)+blk(i)+0xCA62C1D6+rol(v,5);w=rol(w,30);
+
+
+/* Hash a single 512-bit block. This is the core of the algorithm. */
+
+void SHA1Transform(uint32_t state[5], const unsigned char buffer[64])
+{
+uint32_t a, b, c, d, e;
+typedef union {
+ unsigned char c[64];
+ uint32_t l[16];
+} CHAR64LONG16;
+#ifdef SHA1HANDSOFF
+CHAR64LONG16 block[1]; /* use array to appear as a pointer */
+ memcpy(block, buffer, 64);
+#else
+ /* The following had better never be used because it causes the
+ * pointer-to-const buffer to be cast into a pointer to non-const.
+ * And the result is written through. I threw a "const" in, hoping
+ * this will cause a diagnostic.
+ */
+CHAR64LONG16* block = (const CHAR64LONG16*)buffer;
+#endif
+ /* Copy context->state[] to working vars */
+ a = state[0];
+ b = state[1];
+ c = state[2];
+ d = state[3];
+ e = state[4];
+ /* 4 rounds of 20 operations each. Loop unrolled. */
+ R0(a,b,c,d,e, 0); R0(e,a,b,c,d, 1); R0(d,e,a,b,c, 2); R0(c,d,e,a,b, 3);
+ R0(b,c,d,e,a, 4); R0(a,b,c,d,e, 5); R0(e,a,b,c,d, 6); R0(d,e,a,b,c, 7);
+ R0(c,d,e,a,b, 8); R0(b,c,d,e,a, 9); R0(a,b,c,d,e,10); R0(e,a,b,c,d,11);
+ R0(d,e,a,b,c,12); R0(c,d,e,a,b,13); R0(b,c,d,e,a,14); R0(a,b,c,d,e,15);
+ R1(e,a,b,c,d,16); R1(d,e,a,b,c,17); R1(c,d,e,a,b,18); R1(b,c,d,e,a,19);
+ R2(a,b,c,d,e,20); R2(e,a,b,c,d,21); R2(d,e,a,b,c,22); R2(c,d,e,a,b,23);
+ R2(b,c,d,e,a,24); R2(a,b,c,d,e,25); R2(e,a,b,c,d,26); R2(d,e,a,b,c,27);
+ R2(c,d,e,a,b,28); R2(b,c,d,e,a,29); R2(a,b,c,d,e,30); R2(e,a,b,c,d,31);
+ R2(d,e,a,b,c,32); R2(c,d,e,a,b,33); R2(b,c,d,e,a,34); R2(a,b,c,d,e,35);
+ R2(e,a,b,c,d,36); R2(d,e,a,b,c,37); R2(c,d,e,a,b,38); R2(b,c,d,e,a,39);
+ R3(a,b,c,d,e,40); R3(e,a,b,c,d,41); R3(d,e,a,b,c,42); R3(c,d,e,a,b,43);
+ R3(b,c,d,e,a,44); R3(a,b,c,d,e,45); R3(e,a,b,c,d,46); R3(d,e,a,b,c,47);
+ R3(c,d,e,a,b,48); R3(b,c,d,e,a,49); R3(a,b,c,d,e,50); R3(e,a,b,c,d,51);
+ R3(d,e,a,b,c,52); R3(c,d,e,a,b,53); R3(b,c,d,e,a,54); R3(a,b,c,d,e,55);
+ R3(e,a,b,c,d,56); R3(d,e,a,b,c,57); R3(c,d,e,a,b,58); R3(b,c,d,e,a,59);
+ R4(a,b,c,d,e,60); R4(e,a,b,c,d,61); R4(d,e,a,b,c,62); R4(c,d,e,a,b,63);
+ R4(b,c,d,e,a,64); R4(a,b,c,d,e,65); R4(e,a,b,c,d,66); R4(d,e,a,b,c,67);
+ R4(c,d,e,a,b,68); R4(b,c,d,e,a,69); R4(a,b,c,d,e,70); R4(e,a,b,c,d,71);
+ R4(d,e,a,b,c,72); R4(c,d,e,a,b,73); R4(b,c,d,e,a,74); R4(a,b,c,d,e,75);
+ R4(e,a,b,c,d,76); R4(d,e,a,b,c,77); R4(c,d,e,a,b,78); R4(b,c,d,e,a,79);
+ /* Add the working vars back into context.state[] */
+ state[0] += a;
+ state[1] += b;
+ state[2] += c;
+ state[3] += d;
+ state[4] += e;
+ /* Wipe variables */
+ a = b = c = d = e = 0;
+#ifdef SHA1HANDSOFF
+ memset(block, '\0', sizeof(block));
+#endif
+}
+
+
+/* SHA1Init - Initialize new context */
+
+void SHA1Init(SHA1_CTX* context)
+{
+ /* SHA1 initialization constants */
+ context->state[0] = 0x67452301;
+ context->state[1] = 0xEFCDAB89;
+ context->state[2] = 0x98BADCFE;
+ context->state[3] = 0x10325476;
+ context->state[4] = 0xC3D2E1F0;
+ context->count[0] = context->count[1] = 0;
+}
+
+
+/* Run your data through this. */
+
+void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len)
+{
+uint32_t i;
+uint32_t j;
+
+ j = context->count[0];
+ if ((context->count[0] += len << 3) < j)
+ context->count[1]++;
+ context->count[1] += (len>>29);
+ j = (j >> 3) & 63;
+ if ((j + len) > 63) {
+ memcpy(&context->buffer[j], data, (i = 64-j));
+ SHA1Transform(context->state, context->buffer);
+ for ( ; i + 63 < len; i += 64) {
+ SHA1Transform(context->state, &data[i]);
+ }
+ j = 0;
+ }
+ else i = 0;
+ memcpy(&context->buffer[j], &data[i], len - i);
+}
+
+
+/* Add padding and return the message digest. */
+
+void SHA1Final(unsigned char digest[20], SHA1_CTX* context)
+{
+unsigned i;
+unsigned char finalcount[8];
+unsigned char c;
+
+#if 0 /* untested "improvement" by DHR */
+ /* Convert context->count to a sequence of bytes
+ * in finalcount. Second element first, but
+ * big-endian order within element.
+ * But we do it all backwards.
+ */
+ unsigned char *fcp = &finalcount[8];
+
+ for (i = 0; i < 2; i++)
+ {
+ uint32_t t = context->count[i];
+ int j;
+
+ for (j = 0; j < 4; t >>= 8, j++)
+ *--fcp = (unsigned char) t
+ }
+#else
+ for (i = 0; i < 8; i++) {
+ finalcount[i] = (unsigned char)((context->count[(i >= 4 ? 0 : 1)]
+ >> ((3-(i & 3)) * 8) ) & 255); /* Endian independent */
+ }
+#endif
+ c = 0200;
+ SHA1Update(context, &c, 1);
+ while ((context->count[0] & 504) != 448) {
+ c = 0000;
+ SHA1Update(context, &c, 1);
+ }
+ SHA1Update(context, finalcount, 8); /* Should cause a SHA1Transform() */
+ for (i = 0; i < 20; i++) {
+ digest[i] = (unsigned char)
+ ((context->state[i>>2] >> ((3-(i & 3)) * 8) ) & 255);
+ }
+ /* Wipe variables */
+ memset(context, '\0', sizeof(*context));
+ memset(&finalcount, '\0', sizeof(finalcount));
+}
+/* ================ end of sha1.c ================ */
+
+#if 0
+#define BUFSIZE 4096
+
+int
+main(int argc, char **argv)
+{
+ SHA1_CTX ctx;
+ unsigned char hash[20], buf[BUFSIZE];
+ int i;
+
+ for(i=0;i<BUFSIZE;i++)
+ buf[i] = i;
+
+ SHA1Init(&ctx);
+ for(i=0;i<1000;i++)
+ SHA1Update(&ctx, buf, BUFSIZE);
+ SHA1Final(hash, &ctx);
+
+ printf("SHA1=");
+ for(i=0;i<20;i++)
+ printf("%02x", hash[i]);
+ printf("\n");
+ return 0;
+}
+
+#endif
diff --git a/src/sha1/sha1.h b/src/sha1/sha1.h
new file mode 100644
index 0000000..56ffa56
--- /dev/null
+++ b/src/sha1/sha1.h
@@ -0,0 +1,19 @@
+/* ================ sha1.h ================ */
+/*
+SHA-1 in C
+By Steve Reid <steve@edmweb.com>
+100% Public Domain
+*/
+
+#include <stdint.h>
+
+typedef struct {
+ uint32_t state[5];
+ uint32_t count[2];
+ unsigned char buffer[64];
+} SHA1_CTX;
+
+void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]);
+void SHA1Init(SHA1_CTX* context);
+void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len);
+void SHA1Final(unsigned char digest[20], SHA1_CTX* context);
diff --git a/src/tiny-AES-c/README.md b/src/tiny-AES-c/README.md
new file mode 100644
index 0000000..e32e25e
--- /dev/null
+++ b/src/tiny-AES-c/README.md
@@ -0,0 +1,80 @@
+### Tiny AES in C
+
+This is a small and portable implementation of the AES [ECB](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_.28ECB.29), [CTR](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_.28CTR.29) and [CBC](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Cipher_Block_Chaining_.28CBC.29) encryption algorithms written in C.
+
+You can override the default key-size of 128 bit with 192 or 256 bit by defining the symbols AES192 or AES256 in `aes.h`.
+
+The API is very simple and looks like this (I am using C99 `<stdint.h>`-style annotated types):
+
+```C
+/* Initialize context calling one of: */
+void AES_init_ctx(struct AES_ctx* ctx, const uint8_t* key);
+void AES_init_ctx_iv(struct AES_ctx* ctx, const uint8_t* key, const uint8_t* iv);
+
+/* ... or reset IV at random point: */
+void AES_ctx_set_iv(struct AES_ctx* ctx, const uint8_t* iv);
+
+/* Then start encrypting and decrypting with the functions below: */
+void AES_ECB_encrypt(const struct AES_ctx* ctx, uint8_t* buf);
+void AES_ECB_decrypt(const struct AES_ctx* ctx, uint8_t* buf);
+
+void AES_CBC_encrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length);
+void AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length);
+
+/* Same function for encrypting as for decrypting in CTR mode */
+void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length);
+```
+
+Note:
+ * No padding is provided so for CBC and ECB all buffers should be multiples of 16 bytes. For padding [PKCS7](https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7) is recommendable.
+ * ECB mode is considered unsafe for most uses and is not implemented in streaming mode. If you need this mode, call the function for every block of 16 bytes you need encrypted. See [wikipedia's article on ECB](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Electronic_Codebook_(ECB)) for more details.
+
+You can choose to use any or all of the modes-of-operations, by defining the symbols CBC, CTR or ECB. See the header file for clarification.
+
+C++ users should `#include` [aes.hpp](https://github.com/kokke/tiny-AES-c/blob/master/aes.hpp) instead of [aes.h](https://github.com/kokke/tiny-AES-c/blob/master/aes.h)
+
+There is no built-in error checking or protection from out-of-bounds memory access errors as a result of malicious input.
+
+The module uses less than 200 bytes of RAM and 1-2K ROM when compiled for ARM, but YMMV depending on which modes are enabled.
+
+It is one of the smallest implementations in C I've seen yet, but do contact me if you know of something smaller (or have improvements to the code here).
+
+I've successfully used the code on 64bit x86, 32bit ARM and 8 bit AVR platforms.
+
+
+GCC size output when only CTR mode is compiled for ARM:
+
+ $ arm-none-eabi-gcc -Os -DCBC=0 -DECB=0 -DCTR=1 -c aes.c
+ $ size aes.o
+ text data bss dec hex filename
+ 1343 0 0 1343 53f aes.o
+
+.. and when compiling for the THUMB instruction set, we end up just below 1K in code size.
+
+ $ arm-none-eabi-gcc -Os -mthumb -DCBC=0 -DECB=0 -DCTR=1 -c aes.c
+ $ size aes.o
+ text data bss dec hex filename
+ 979 0 0 979 3d3 aes.o
+
+
+I am using the Free Software Foundation, ARM GCC compiler:
+
+ $ arm-none-eabi-gcc --version
+ arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 8-2018-q4-major) 8.2.1 20181213 (release)
+ Copyright (C) 2018 Free Software Foundation, Inc.
+ This is free software; see the source for copying conditions. There is NO
+ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+
+
+This implementation is verified against the data in:
+
+[National Institute of Standards and Technology Special Publication 800-38A 2001 ED](http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf) Appendix F: Example Vectors for Modes of Operation of the AES.
+
+The other appendices in the document are valuable for implementation details on e.g. padding, generation of IVs and nonces in CTR-mode etc.
+
+
+A heartfelt thank-you to all the nice people out there who have contributed to this project.
+
+
+All material in this repository is in the public domain.
diff --git a/src/tiny-AES-c/aes.c b/src/tiny-AES-c/aes.c
new file mode 100644
index 0000000..313ff71
--- /dev/null
+++ b/src/tiny-AES-c/aes.c
@@ -0,0 +1,572 @@
+/*
+
+This is an implementation of the AES algorithm, specifically ECB, CTR and CBC mode.
+Block size can be chosen in aes.h - available choices are AES128, AES192, AES256.
+
+The implementation is verified against the test vectors in:
+ National Institute of Standards and Technology Special Publication 800-38A 2001 ED
+
+ECB-AES128
+----------
+
+ plain-text:
+ 6bc1bee22e409f96e93d7e117393172a
+ ae2d8a571e03ac9c9eb76fac45af8e51
+ 30c81c46a35ce411e5fbc1191a0a52ef
+ f69f2445df4f9b17ad2b417be66c3710
+
+ key:
+ 2b7e151628aed2a6abf7158809cf4f3c
+
+ resulting cipher
+ 3ad77bb40d7a3660a89ecaf32466ef97
+ f5d3d58503b9699de785895a96fdbaaf
+ 43b1cd7f598ece23881b00e3ed030688
+ 7b0c785e27e8ad3f8223207104725dd4
+
+
+NOTE: String length must be evenly divisible by 16byte (str_len % 16 == 0)
+ You should pad the end of the string with zeros if this is not the case.
+ For AES192/256 the key size is proportionally larger.
+
+*/
+
+
+/*****************************************************************************/
+/* Includes: */
+/*****************************************************************************/
+#include <stdint.h>
+#include <string.h> // CBC mode, for memset
+#include "aes.h"
+
+/*****************************************************************************/
+/* Defines: */
+/*****************************************************************************/
+// The number of columns comprising a state in AES. This is a constant in AES. Value=4
+#define Nb 4
+
+#if defined(AES256) && (AES256 == 1)
+ #define Nk 8
+ #define Nr 14
+#elif defined(AES192) && (AES192 == 1)
+ #define Nk 6
+ #define Nr 12
+#else
+ #define Nk 4 // The number of 32 bit words in a key.
+ #define Nr 10 // The number of rounds in AES Cipher.
+#endif
+
+// jcallan@github points out that declaring Multiply as a function
+// reduces code size considerably with the Keil ARM compiler.
+// See this link for more information: https://github.com/kokke/tiny-AES-C/pull/3
+#ifndef MULTIPLY_AS_A_FUNCTION
+ #define MULTIPLY_AS_A_FUNCTION 0
+#endif
+
+
+
+
+/*****************************************************************************/
+/* Private variables: */
+/*****************************************************************************/
+// state - array holding the intermediate results during decryption.
+typedef uint8_t state_t[4][4];
+
+
+
+// The lookup-tables are marked const so they can be placed in read-only storage instead of RAM
+// The numbers below can be computed dynamically trading ROM for RAM -
+// This can be useful in (embedded) bootloader applications, where ROM is often limited.
+static const uint8_t sbox[256] = {
+ //0 1 2 3 4 5 6 7 8 9 A B C D E F
+ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
+ 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
+ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
+ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
+ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
+ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
+ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
+ 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
+ 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
+ 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
+ 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 };
+
+static const uint8_t rsbox[256] = {
+ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
+ 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
+ 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+ 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
+ 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
+ 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+ 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
+ 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
+ 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+ 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
+ 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
+ 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+ 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
+ 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
+ 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+ 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d };
+
+// The round constant word array, Rcon[i], contains the values given by
+// x to the power (i-1) being powers of x (x is denoted as {02}) in the field GF(2^8)
+static const uint8_t Rcon[11] = {
+ 0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36 };
+
+/*
+ * Jordan Goulder points out in PR #12 (https://github.com/kokke/tiny-AES-C/pull/12),
+ * that you can remove most of the elements in the Rcon array, because they are unused.
+ *
+ * From Wikipedia's article on the Rijndael key schedule @ https://en.wikipedia.org/wiki/Rijndael_key_schedule#Rcon
+ *
+ * "Only the first some of these constants are actually used – up to rcon[10] for AES-128 (as 11 round keys are needed),
+ * up to rcon[8] for AES-192, up to rcon[7] for AES-256. rcon[0] is not used in AES algorithm."
+ */
+
+
+/*****************************************************************************/
+/* Private functions: */
+/*****************************************************************************/
+/*
+static uint8_t getSBoxValue(uint8_t num)
+{
+ return sbox[num];
+}
+*/
+#define getSBoxValue(num) (sbox[(num)])
+/*
+static uint8_t getSBoxInvert(uint8_t num)
+{
+ return rsbox[num];
+}
+*/
+#define getSBoxInvert(num) (rsbox[(num)])
+
+// This function produces Nb(Nr+1) round keys. The round keys are used in each round to decrypt the states.
+static void KeyExpansion(uint8_t* RoundKey, const uint8_t* Key)
+{
+ unsigned i, j, k;
+ uint8_t tempa[4]; // Used for the column/row operations
+
+ // The first round key is the key itself.
+ for (i = 0; i < Nk; ++i)
+ {
+ RoundKey[(i * 4) + 0] = Key[(i * 4) + 0];
+ RoundKey[(i * 4) + 1] = Key[(i * 4) + 1];
+ RoundKey[(i * 4) + 2] = Key[(i * 4) + 2];
+ RoundKey[(i * 4) + 3] = Key[(i * 4) + 3];
+ }
+
+ // All other round keys are found from the previous round keys.
+ for (i = Nk; i < Nb * (Nr + 1); ++i)
+ {
+ {
+ k = (i - 1) * 4;
+ tempa[0]=RoundKey[k + 0];
+ tempa[1]=RoundKey[k + 1];
+ tempa[2]=RoundKey[k + 2];
+ tempa[3]=RoundKey[k + 3];
+
+ }
+
+ if (i % Nk == 0)
+ {
+ // This function shifts the 4 bytes in a word to the left once.
+ // [a0,a1,a2,a3] becomes [a1,a2,a3,a0]
+
+ // Function RotWord()
+ {
+ const uint8_t u8tmp = tempa[0];
+ tempa[0] = tempa[1];
+ tempa[1] = tempa[2];
+ tempa[2] = tempa[3];
+ tempa[3] = u8tmp;
+ }
+
+ // SubWord() is a function that takes a four-byte input word and
+ // applies the S-box to each of the four bytes to produce an output word.
+
+ // Function Subword()
+ {
+ tempa[0] = getSBoxValue(tempa[0]);
+ tempa[1] = getSBoxValue(tempa[1]);
+ tempa[2] = getSBoxValue(tempa[2]);
+ tempa[3] = getSBoxValue(tempa[3]);
+ }
+
+ tempa[0] = tempa[0] ^ Rcon[i/Nk];
+ }
+#if defined(AES256) && (AES256 == 1)
+ if (i % Nk == 4)
+ {
+ // Function Subword()
+ {
+ tempa[0] = getSBoxValue(tempa[0]);
+ tempa[1] = getSBoxValue(tempa[1]);
+ tempa[2] = getSBoxValue(tempa[2]);
+ tempa[3] = getSBoxValue(tempa[3]);
+ }
+ }
+#endif
+ j = i * 4; k=(i - Nk) * 4;
+ RoundKey[j + 0] = RoundKey[k + 0] ^ tempa[0];
+ RoundKey[j + 1] = RoundKey[k + 1] ^ tempa[1];
+ RoundKey[j + 2] = RoundKey[k + 2] ^ tempa[2];
+ RoundKey[j + 3] = RoundKey[k + 3] ^ tempa[3];
+ }
+}
+
+void AES_init_ctx(struct AES_ctx* ctx, const uint8_t* key)
+{
+ KeyExpansion(ctx->RoundKey, key);
+}
+#if (defined(CBC) && (CBC == 1)) || (defined(CTR) && (CTR == 1))
+void AES_init_ctx_iv(struct AES_ctx* ctx, const uint8_t* key, const uint8_t* iv)
+{
+ KeyExpansion(ctx->RoundKey, key);
+ memcpy (ctx->Iv, iv, AES_BLOCKLEN);
+}
+void AES_ctx_set_iv(struct AES_ctx* ctx, const uint8_t* iv)
+{
+ memcpy (ctx->Iv, iv, AES_BLOCKLEN);
+}
+#endif
+
+// This function adds the round key to state.
+// The round key is added to the state by an XOR function.
+static void AddRoundKey(uint8_t round, state_t* state, const uint8_t* RoundKey)
+{
+ uint8_t i,j;
+ for (i = 0; i < 4; ++i)
+ {
+ for (j = 0; j < 4; ++j)
+ {
+ (*state)[i][j] ^= RoundKey[(round * Nb * 4) + (i * Nb) + j];
+ }
+ }
+}
+
+// The SubBytes Function Substitutes the values in the
+// state matrix with values in an S-box.
+static void SubBytes(state_t* state)
+{
+ uint8_t i, j;
+ for (i = 0; i < 4; ++i)
+ {
+ for (j = 0; j < 4; ++j)
+ {
+ (*state)[j][i] = getSBoxValue((*state)[j][i]);
+ }
+ }
+}
+
+// The ShiftRows() function shifts the rows in the state to the left.
+// Each row is shifted with different offset.
+// Offset = Row number. So the first row is not shifted.
+static void ShiftRows(state_t* state)
+{
+ uint8_t temp;
+
+ // Rotate first row 1 columns to left
+ temp = (*state)[0][1];
+ (*state)[0][1] = (*state)[1][1];
+ (*state)[1][1] = (*state)[2][1];
+ (*state)[2][1] = (*state)[3][1];
+ (*state)[3][1] = temp;
+
+ // Rotate second row 2 columns to left
+ temp = (*state)[0][2];
+ (*state)[0][2] = (*state)[2][2];
+ (*state)[2][2] = temp;
+
+ temp = (*state)[1][2];
+ (*state)[1][2] = (*state)[3][2];
+ (*state)[3][2] = temp;
+
+ // Rotate third row 3 columns to left
+ temp = (*state)[0][3];
+ (*state)[0][3] = (*state)[3][3];
+ (*state)[3][3] = (*state)[2][3];
+ (*state)[2][3] = (*state)[1][3];
+ (*state)[1][3] = temp;
+}
+
+static uint8_t xtime(uint8_t x)
+{
+ return ((x<<1) ^ (((x>>7) & 1) * 0x1b));
+}
+
+// MixColumns function mixes the columns of the state matrix
+static void MixColumns(state_t* state)
+{
+ uint8_t i;
+ uint8_t Tmp, Tm, t;
+ for (i = 0; i < 4; ++i)
+ {
+ t = (*state)[i][0];
+ Tmp = (*state)[i][0] ^ (*state)[i][1] ^ (*state)[i][2] ^ (*state)[i][3] ;
+ Tm = (*state)[i][0] ^ (*state)[i][1] ; Tm = xtime(Tm); (*state)[i][0] ^= Tm ^ Tmp ;
+ Tm = (*state)[i][1] ^ (*state)[i][2] ; Tm = xtime(Tm); (*state)[i][1] ^= Tm ^ Tmp ;
+ Tm = (*state)[i][2] ^ (*state)[i][3] ; Tm = xtime(Tm); (*state)[i][2] ^= Tm ^ Tmp ;
+ Tm = (*state)[i][3] ^ t ; Tm = xtime(Tm); (*state)[i][3] ^= Tm ^ Tmp ;
+ }
+}
+
+// Multiply is used to multiply numbers in the field GF(2^8)
+// Note: The last call to xtime() is unneeded, but often ends up generating a smaller binary
+// The compiler seems to be able to vectorize the operation better this way.
+// See https://github.com/kokke/tiny-AES-c/pull/34
+#if MULTIPLY_AS_A_FUNCTION
+static uint8_t Multiply(uint8_t x, uint8_t y)
+{
+ return (((y & 1) * x) ^
+ ((y>>1 & 1) * xtime(x)) ^
+ ((y>>2 & 1) * xtime(xtime(x))) ^
+ ((y>>3 & 1) * xtime(xtime(xtime(x)))) ^
+ ((y>>4 & 1) * xtime(xtime(xtime(xtime(x)))))); /* this last call to xtime() can be omitted */
+ }
+#else
+#define Multiply(x, y) \
+ ( ((y & 1) * x) ^ \
+ ((y>>1 & 1) * xtime(x)) ^ \
+ ((y>>2 & 1) * xtime(xtime(x))) ^ \
+ ((y>>3 & 1) * xtime(xtime(xtime(x)))) ^ \
+ ((y>>4 & 1) * xtime(xtime(xtime(xtime(x)))))) \
+
+#endif
+
+#if (defined(CBC) && CBC == 1) || (defined(ECB) && ECB == 1)
+// MixColumns function mixes the columns of the state matrix.
+// The method used to multiply may be difficult to understand for the inexperienced.
+// Please use the references to gain more information.
+static void InvMixColumns(state_t* state)
+{
+ int i;
+ uint8_t a, b, c, d;
+ for (i = 0; i < 4; ++i)
+ {
+ a = (*state)[i][0];
+ b = (*state)[i][1];
+ c = (*state)[i][2];
+ d = (*state)[i][3];
+
+ (*state)[i][0] = Multiply(a, 0x0e) ^ Multiply(b, 0x0b) ^ Multiply(c, 0x0d) ^ Multiply(d, 0x09);
+ (*state)[i][1] = Multiply(a, 0x09) ^ Multiply(b, 0x0e) ^ Multiply(c, 0x0b) ^ Multiply(d, 0x0d);
+ (*state)[i][2] = Multiply(a, 0x0d) ^ Multiply(b, 0x09) ^ Multiply(c, 0x0e) ^ Multiply(d, 0x0b);
+ (*state)[i][3] = Multiply(a, 0x0b) ^ Multiply(b, 0x0d) ^ Multiply(c, 0x09) ^ Multiply(d, 0x0e);
+ }
+}
+
+
+// The SubBytes Function Substitutes the values in the
+// state matrix with values in an S-box.
+static void InvSubBytes(state_t* state)
+{
+ uint8_t i, j;
+ for (i = 0; i < 4; ++i)
+ {
+ for (j = 0; j < 4; ++j)
+ {
+ (*state)[j][i] = getSBoxInvert((*state)[j][i]);
+ }
+ }
+}
+
+static void InvShiftRows(state_t* state)
+{
+ uint8_t temp;
+
+ // Rotate first row 1 columns to right
+ temp = (*state)[3][1];
+ (*state)[3][1] = (*state)[2][1];
+ (*state)[2][1] = (*state)[1][1];
+ (*state)[1][1] = (*state)[0][1];
+ (*state)[0][1] = temp;
+
+ // Rotate second row 2 columns to right
+ temp = (*state)[0][2];
+ (*state)[0][2] = (*state)[2][2];
+ (*state)[2][2] = temp;
+
+ temp = (*state)[1][2];
+ (*state)[1][2] = (*state)[3][2];
+ (*state)[3][2] = temp;
+
+ // Rotate third row 3 columns to right
+ temp = (*state)[0][3];
+ (*state)[0][3] = (*state)[1][3];
+ (*state)[1][3] = (*state)[2][3];
+ (*state)[2][3] = (*state)[3][3];
+ (*state)[3][3] = temp;
+}
+#endif // #if (defined(CBC) && CBC == 1) || (defined(ECB) && ECB == 1)
+
+// Cipher is the main function that encrypts the PlainText.
+static void Cipher(state_t* state, const uint8_t* RoundKey)
+{
+ uint8_t round = 0;
+
+ // Add the First round key to the state before starting the rounds.
+ AddRoundKey(0, state, RoundKey);
+
+ // There will be Nr rounds.
+ // The first Nr-1 rounds are identical.
+ // These Nr-1 rounds are executed in the loop below.
+ for (round = 1; round < Nr; ++round)
+ {
+ SubBytes(state);
+ ShiftRows(state);
+ MixColumns(state);
+ AddRoundKey(round, state, RoundKey);
+ }
+
+ // The last round is given below.
+ // The MixColumns function is not here in the last round.
+ SubBytes(state);
+ ShiftRows(state);
+ AddRoundKey(Nr, state, RoundKey);
+}
+
+#if (defined(CBC) && CBC == 1) || (defined(ECB) && ECB == 1)
+static void InvCipher(state_t* state, const uint8_t* RoundKey)
+{
+ uint8_t round = 0;
+
+ // Add the First round key to the state before starting the rounds.
+ AddRoundKey(Nr, state, RoundKey);
+
+ // There will be Nr rounds.
+ // The first Nr-1 rounds are identical.
+ // These Nr-1 rounds are executed in the loop below.
+ for (round = (Nr - 1); round > 0; --round)
+ {
+ InvShiftRows(state);
+ InvSubBytes(state);
+ AddRoundKey(round, state, RoundKey);
+ InvMixColumns(state);
+ }
+
+ // The last round is given below.
+ // The MixColumns function is not here in the last round.
+ InvShiftRows(state);
+ InvSubBytes(state);
+ AddRoundKey(0, state, RoundKey);
+}
+#endif // #if (defined(CBC) && CBC == 1) || (defined(ECB) && ECB == 1)
+
+/*****************************************************************************/
+/* Public functions: */
+/*****************************************************************************/
+#if defined(ECB) && (ECB == 1)
+
+
+void AES_ECB_encrypt(const struct AES_ctx* ctx, uint8_t* buf)
+{
+ // The next function call encrypts the PlainText with the Key using AES algorithm.
+ Cipher((state_t*)buf, ctx->RoundKey);
+}
+
+void AES_ECB_decrypt(const struct AES_ctx* ctx, uint8_t* buf)
+{
+ // The next function call decrypts the PlainText with the Key using AES algorithm.
+ InvCipher((state_t*)buf, ctx->RoundKey);
+}
+
+
+#endif // #if defined(ECB) && (ECB == 1)
+
+
+
+
+
+#if defined(CBC) && (CBC == 1)
+
+
+static void XorWithIv(uint8_t* buf, const uint8_t* Iv)
+{
+ uint8_t i;
+ for (i = 0; i < AES_BLOCKLEN; ++i) // The block in AES is always 128bit no matter the key size
+ {
+ buf[i] ^= Iv[i];
+ }
+}
+
+void AES_CBC_encrypt_buffer(struct AES_ctx *ctx, uint8_t* buf, uint32_t length)
+{
+ uintptr_t i;
+ uint8_t *Iv = ctx->Iv;
+ for (i = 0; i < length; i += AES_BLOCKLEN)
+ {
+ XorWithIv(buf, Iv);
+ Cipher((state_t*)buf, ctx->RoundKey);
+ Iv = buf;
+ buf += AES_BLOCKLEN;
+ //printf("Step %d - %d", i/16, i);
+ }
+ /* store Iv in ctx for next call */
+ memcpy(ctx->Iv, Iv, AES_BLOCKLEN);
+}
+
+void AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length)
+{
+ uintptr_t i;
+ uint8_t storeNextIv[AES_BLOCKLEN];
+ for (i = 0; i < length; i += AES_BLOCKLEN)
+ {
+ memcpy(storeNextIv, buf, AES_BLOCKLEN);
+ InvCipher((state_t*)buf, ctx->RoundKey);
+ XorWithIv(buf, ctx->Iv);
+ memcpy(ctx->Iv, storeNextIv, AES_BLOCKLEN);
+ buf += AES_BLOCKLEN;
+ }
+
+}
+
+#endif // #if defined(CBC) && (CBC == 1)
+
+
+
+#if defined(CTR) && (CTR == 1)
+
+/* Symmetrical operation: same function for encrypting as for decrypting. Note any IV/nonce should never be reused with the same key */
+void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length)
+{
+ uint8_t buffer[AES_BLOCKLEN];
+
+ unsigned i;
+ int bi;
+ for (i = 0, bi = AES_BLOCKLEN; i < length; ++i, ++bi)
+ {
+ if (bi == AES_BLOCKLEN) /* we need to regen xor compliment in buffer */
+ {
+
+ memcpy(buffer, ctx->Iv, AES_BLOCKLEN);
+ Cipher((state_t*)buffer,ctx->RoundKey);
+
+ /* Increment Iv and handle overflow */
+ for (bi = (AES_BLOCKLEN - 1); bi >= 0; --bi)
+ {
+ /* inc will overflow */
+ if (ctx->Iv[bi] == 255)
+ {
+ ctx->Iv[bi] = 0;
+ continue;
+ }
+ ctx->Iv[bi] += 1;
+ break;
+ }
+ bi = 0;
+ }
+
+ buf[i] = (buf[i] ^ buffer[bi]);
+ }
+}
+
+#endif // #if defined(CTR) && (CTR == 1)
+
diff --git a/src/tiny-AES-c/aes.h b/src/tiny-AES-c/aes.h
new file mode 100644
index 0000000..87f1471
--- /dev/null
+++ b/src/tiny-AES-c/aes.h
@@ -0,0 +1,90 @@
+#ifndef _AES_H_
+#define _AES_H_
+
+#include <stdint.h>
+
+// #define the macros below to 1/0 to enable/disable the mode of operation.
+//
+// CBC enables AES encryption in CBC-mode of operation.
+// CTR enables encryption in counter-mode.
+// ECB enables the basic ECB 16-byte block algorithm. All can be enabled simultaneously.
+
+// The #ifndef-guard allows it to be configured before #include'ing or at compile time.
+#ifndef CBC
+ #define CBC 1
+#endif
+
+#ifndef ECB
+ #define ECB 1
+#endif
+
+#ifndef CTR
+ #define CTR 1
+#endif
+
+
+#define AES128 1
+//#define AES192 1
+//#define AES256 1
+
+#define AES_BLOCKLEN 16 //Block length in bytes AES is 128b block only
+
+#if defined(AES256) && (AES256 == 1)
+ #define AES_KEYLEN 32
+ #define AES_keyExpSize 240
+#elif defined(AES192) && (AES192 == 1)
+ #define AES_KEYLEN 24
+ #define AES_keyExpSize 208
+#else
+ #define AES_KEYLEN 16 // Key length in bytes
+ #define AES_keyExpSize 176
+#endif
+
+struct AES_ctx
+{
+ uint8_t RoundKey[AES_keyExpSize];
+#if (defined(CBC) && (CBC == 1)) || (defined(CTR) && (CTR == 1))
+ uint8_t Iv[AES_BLOCKLEN];
+#endif
+};
+
+void AES_init_ctx(struct AES_ctx* ctx, const uint8_t* key);
+#if (defined(CBC) && (CBC == 1)) || (defined(CTR) && (CTR == 1))
+void AES_init_ctx_iv(struct AES_ctx* ctx, const uint8_t* key, const uint8_t* iv);
+void AES_ctx_set_iv(struct AES_ctx* ctx, const uint8_t* iv);
+#endif
+
+#if defined(ECB) && (ECB == 1)
+// buffer size is exactly AES_BLOCKLEN bytes;
+// you need only AES_init_ctx as IV is not used in ECB
+// NB: ECB is considered insecure for most uses
+void AES_ECB_encrypt(const struct AES_ctx* ctx, uint8_t* buf);
+void AES_ECB_decrypt(const struct AES_ctx* ctx, uint8_t* buf);
+
+#endif // #if defined(ECB) && (ECB == !)
+
+
+#if defined(CBC) && (CBC == 1)
+// buffer size MUST be mutile of AES_BLOCKLEN;
+// Suggest https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7 for padding scheme
+// NOTES: you need to set IV in ctx via AES_init_ctx_iv() or AES_ctx_set_iv()
+// no IV should ever be reused with the same key
+void AES_CBC_encrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length);
+void AES_CBC_decrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length);
+
+#endif // #if defined(CBC) && (CBC == 1)
+
+
+#if defined(CTR) && (CTR == 1)
+
+// Same function for encrypting as for decrypting.
+// IV is incremented for every block, and used after encryption as XOR-compliment for output
+// Suggesting https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7 for padding scheme
+// NOTES: you need to set IV in ctx with AES_init_ctx_iv() or AES_ctx_set_iv()
+// no IV should ever be reused with the same key
+void AES_CTR_xcrypt_buffer(struct AES_ctx* ctx, uint8_t* buf, uint32_t length);
+
+#endif // #if defined(CTR) && (CTR == 1)
+
+
+#endif //_AES_H_
diff --git a/src/tiny-AES-c/aes.hpp b/src/tiny-AES-c/aes.hpp
new file mode 100644
index 0000000..ade1642
--- /dev/null
+++ b/src/tiny-AES-c/aes.hpp
@@ -0,0 +1,12 @@
+#ifndef _AES_HPP_
+#define _AES_HPP_
+
+#ifndef __cplusplus
+#error Do not include the hpp header in a c project!
+#endif //__cplusplus
+
+extern "C" {
+#include "aes.h"
+}
+
+#endif //_AES_HPP_
diff --git a/src/tiny-AES-c/unlicense.txt b/src/tiny-AES-c/unlicense.txt
new file mode 100644
index 0000000..68a49da
--- /dev/null
+++ b/src/tiny-AES-c/unlicense.txt
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+For more information, please refer to <http://unlicense.org/>