From ac9a4ef77777050e60d94eaec5c557a3cba5ce3a Mon Sep 17 00:00:00 2001 From: Anthony Konzel Date: Mon, 22 Feb 2016 17:50:11 -0600 Subject: [PATCH] Apply C64 core update patch. --- .../Database/FirmwareDatabase.cs | 9 +- .../BizHawk.Emulation.Cores.csproj | 61 +- .../CPUs/MOS 6502X/MOS6502X.cs | 6 + .../Computers/Commodore64/C64.IDebuggable.cs | 181 +- .../Commodore64/C64.IDisassemblable.cs | 106 +- .../Computers/Commodore64/C64.IDriveLight.cs | 9 - .../Commodore64/C64.IInputPollable.cs | 19 +- .../Commodore64/C64.IMemoryDomains.cs | 52 +- .../Computers/Commodore64/C64.ISettable.cs | 66 +- .../Computers/Commodore64/C64.IStatable.cs | 21 +- .../Computers/Commodore64/C64.Input.cs | 78 +- .../Computers/Commodore64/C64.Motherboard.cs | 436 +- .../Commodore64/C64.MotherboardInterface.cs | 141 +- .../Computers/Commodore64/C64.cs | 281 +- .../Computers/Commodore64/C64Util.cs | 22 +- .../Computers/Commodore64/Cartridge/Cart.cs | 268 -- .../Commodore64/Cartridge/CartridgeDevice.cs | 268 ++ .../Commodore64/Cartridge/CartridgePort.cs | 124 + .../Commodore64/Cartridge/Mapper0000.cs | 170 +- .../Commodore64/Cartridge/Mapper0005.cs | 269 +- .../Commodore64/Cartridge/Mapper000B.cs | 92 +- .../Commodore64/Cartridge/Mapper000F.cs | 211 +- .../Commodore64/Cartridge/Mapper0011.cs | 55 +- .../Commodore64/Cartridge/Mapper0012.cs | 124 +- .../Commodore64/Cartridge/Mapper0013.cs | 207 +- .../Commodore64/Cartridge/Mapper0020.cs | 538 ++- .../Commodore64/Cassette/CassettePort.cs | 57 + .../Cassette/CassettePortDevice.cs | 34 + .../Commodore64/Cassette/TapeDrive.cs | 40 + .../CassettePort/CassettePortDevice.cs | 41 - .../Commodore64/CassettePort/Tape.cs | 101 - .../Computers/Commodore64/InputFileInfo.cs | 7 +- .../Commodore64/MOS/CartridgePort.cs | 86 - .../Computers/Commodore64/MOS/Chip2114.cs | 27 +- .../Computers/Commodore64/MOS/Chip23128.cs | 45 + .../Computers/Commodore64/MOS/Chip23XX.cs | 60 - .../Computers/Commodore64/MOS/Chip4864.cs | 36 +- .../Commodore64/MOS/Chip6510.IDebuggable.cs | 159 + .../MOS/Chip6510.IDisassemblable.cs | 34 + .../Computers/Commodore64/MOS/Chip6510.cs | 242 + .../Computers/Commodore64/MOS/Chip6526.cs | 72 + .../Computers/Commodore64/MOS/Chip6567R56A.cs | 40 + .../Computers/Commodore64/MOS/Chip6567R8.cs | 40 + .../Computers/Commodore64/MOS/Chip6569.cs | 40 + .../Computers/Commodore64/MOS/Chip6572.cs | 40 + .../Computers/Commodore64/MOS/Chip6581R2.cs | 22 + .../Computers/Commodore64/MOS/Chip6581R3.cs | 23 + .../Computers/Commodore64/MOS/Chip6581R4AR.cs | 23 + .../Computers/Commodore64/MOS/Chip8580R5.cs | 22 + .../Computers/Commodore64/MOS/Chip90611401.cs | 352 ++ .../Computers/Commodore64/MOS/Cia.Port.cs | 148 + .../Commodore64/MOS/Cia.Registers.cs | 284 ++ .../Computers/Commodore64/MOS/Cia.Tod.cs | 69 + .../Computers/Commodore64/MOS/Cia.cs | 504 ++ .../MOS/{Port.cs => LatchedPort.cs} | 170 +- .../Computers/Commodore64/MOS/MOS6510.cs | 220 - .../Computers/Commodore64/MOS/MOS6522.cs | 570 --- .../Commodore64/MOS/MOS6526-2.Interface.cs | 90 - .../Commodore64/MOS/MOS6526-2.PortIO.cs | 19 - .../Commodore64/MOS/MOS6526-2.Registers.cs | 250 - .../Computers/Commodore64/MOS/MOS6526-2.cs | 448 -- .../Computers/Commodore64/MOS/MOS6526.cs | 786 ---- .../Computers/Commodore64/MOS/MOS6567R56A.cs | 45 - .../Computers/Commodore64/MOS/MOS6567R8.cs | 41 - .../Computers/Commodore64/MOS/MOS6569.cs | 41 - .../Computers/Commodore64/MOS/MOS6572.cs | 44 - .../Computers/Commodore64/MOS/MOS6581.cs | 4127 ----------------- .../Computers/Commodore64/MOS/MOSPLA.cs | 353 -- .../Computers/Commodore64/MOS/SerialPort.cs | 38 - .../Computers/Commodore64/MOS/Sid.Envelope.cs | 247 +- .../Commodore64/MOS/Sid.Registers.cs | 230 +- .../Commodore64/MOS/Sid.SoundProvider.cs | 41 + .../Computers/Commodore64/MOS/Sid.Voice.cs | 283 +- .../Computers/Commodore64/MOS/Sid.cs | 248 +- .../Computers/Commodore64/MOS/UserPort.cs | 73 - .../Computers/Commodore64/MOS/Via.Port.cs | 126 + .../Commodore64/MOS/Via.Registers.cs | 261 ++ .../Computers/Commodore64/MOS/Via.cs | 248 + .../Computers/Commodore64/MOS/Vic.Parse.cs | 452 +- .../Commodore64/MOS/Vic.Registers.cs | 543 +-- .../Computers/Commodore64/MOS/Vic.Render.cs | 379 +- .../Computers/Commodore64/MOS/Vic.Sprite.cs | 86 +- .../Computers/Commodore64/MOS/Vic.State.cs | 305 +- .../Commodore64/MOS/Vic.TimingBuilder.cs | 196 +- .../Commodore64/MOS/Vic.VideoProvider.cs | 56 +- .../Computers/Commodore64/MOS/Vic.cs | 454 +- .../Computers/Commodore64/Media/D64.cs | 202 +- .../Computers/Commodore64/Media/Disk.cs | 123 +- .../Computers/Commodore64/Media/G64.cs | 69 +- .../Computers/Commodore64/Media/PRG.cs | 38 +- .../Computers/Commodore64/Media/Tape.cs | 101 + .../Computers/Commodore64/SaveState.cs | 381 +- .../Serial/Drive1541.FluxTransitions.cs | 132 + .../Serial/Drive1541.IDebuggable.cs | 157 + .../Serial/Drive1541.IDisassemblable.cs | 34 + .../Commodore64/Serial/Drive1541.Motor.cs | 52 + .../Computers/Commodore64/Serial/Drive1541.cs | 309 ++ .../Commodore64/Serial/SerialPort.cs | 81 + .../Commodore64/Serial/SerialPortDevice.cs | 47 + .../Computers/Commodore64/User/UserPort.cs | 75 + .../Commodore64/User/UserPortDevice.cs | 49 + .../Commodore64/UserPort/UserPortDevice.cs | 77 - .../Computers/Commodore64/docs/CRT.TXT | 1201 ----- 103 files changed, 8311 insertions(+), 12749 deletions(-) delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Cart.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/CartridgeDevice.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/CartridgePort.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/CassettePort.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/CassettePortDevice.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/TapeDrive.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/CassettePort/CassettePortDevice.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/CassettePort/Tape.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/CartridgePort.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip23128.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip23XX.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.IDebuggable.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.IDisassemblable.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6526.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6567R56A.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6567R8.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6569.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6572.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R2.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R3.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R4AR.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip8580R5.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip90611401.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Port.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Registers.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Tod.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.cs rename BizHawk.Emulation.Cores/Computers/Commodore64/MOS/{Port.cs => LatchedPort.cs} (79%) delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6510.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6522.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.Interface.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.PortIO.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.Registers.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6567R56A.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6567R8.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6569.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6572.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6581.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOSPLA.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/SerialPort.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.SoundProvider.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/UserPort.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.Port.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.Registers.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Media/Tape.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.FluxTransitions.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.IDebuggable.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.IDisassemblable.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.Motor.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Serial/SerialPort.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/Serial/SerialPortDevice.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/User/UserPort.cs create mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/User/UserPortDevice.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/UserPort/UserPortDevice.cs delete mode 100644 BizHawk.Emulation.Cores/Computers/Commodore64/docs/CRT.TXT diff --git a/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs b/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs index fd841ef1c0..d94537b65d 100644 --- a/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs +++ b/BizHawk.Emulation.Common/Database/FirmwareDatabase.cs @@ -46,13 +46,16 @@ namespace BizHawk.Emulation.Common //FirmwareAndOption("BFAAC75F101C135E32E2AAF541DE6B1BE4C8C62D", "NDS", "Bios_Arm9", "biosnds9.rom", "ARM9 Bios"); FirmwareAndOption("5A65B922B562CB1F57DAB51B73151283F0E20C7A", 8192, "INTV", "EROM", "erom.bin", "Executive Rom"); FirmwareAndOption("F9608BB4AD1CFE3640D02844C7AD8E0BCD974917", 2048, "INTV", "GROM", "grom.bin", "Graphics Rom"); + FirmwareAndOption("1D503E56DF85A62FEE696E7618DC5B4E781DF1BB", 8192, "C64", "Kernal", "c64-kernal.bin", "Kernal Rom"); FirmwareAndOption("79015323128650C742A3694C9429AA91F355905E", 8192, "C64", "Basic", "c64-basic.bin", "Basic Rom"); FirmwareAndOption("ADC7C31E18C7C7413D54802EF2F4193DA14711AA", 4096, "C64", "Chargen", "c64-chargen.bin", "Chargen Rom"); + FirmwareAndOption("AB16F56989B27D89BABE5F89C5A8CB3DA71A82F0", 16384, "C64", "Drive1541", "drive-1541.bin", "1541 Disk Drive Rom"); + FirmwareAndOption("D3B78C3DBAC55F5199F33F3FE0036439811F7FB3", 16384, "C64", "Drive1541II", "drive-1541ii.bin", "1541-II Disk Drive Rom"); - //for saturn, we think any bios region can pretty much run any iso - //so, we're going to lay this out carefully so that we choose things in a sensible order, but prefer the correct region - var ss_100_j = File("2B8CB4F87580683EB4D760E4ED210813D667F0A2", 524288, "saturn-1.00-(J).bin", "Bios v1.00 (J)"); + //for saturn, we think any bios region can pretty much run any iso + //so, we're going to lay this out carefully so that we choose things in a sensible order, but prefer the correct region + var ss_100_j = File("2B8CB4F87580683EB4D760E4ED210813D667F0A2", 524288, "saturn-1.00-(J).bin", "Bios v1.00 (J)"); var ss_100_ue = File("FAA8EA183A6D7BBE5D4E03BB1332519800D3FBC3", 524288, "saturn-1.00-(U+E).bin", "Bios v1.00 (U+E)"); var ss_100a_ue = File("3BB41FEB82838AB9A35601AC666DE5AACFD17A58", 524288, "saturn-1.00a-(U+E).bin", "Bios v1.00a (U+E)"); //?? is this size correct? var ss_101_j = File("DF94C5B4D47EB3CC404D88B33A8FDA237EAF4720", 524288, "saturn-1.01-(J).bin", "Bios v1.01 (J)"); //?? is this size correct? diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index e729bc31ad..f2fe4a4d32 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -177,37 +177,54 @@ - - + + + - - + + + - + - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + - + + + + + + + + + + + @@ -217,7 +234,7 @@ - + Atari2600.cs @@ -926,7 +943,6 @@ - @@ -969,7 +985,6 @@ - diff --git a/BizHawk.Emulation.Cores/CPUs/MOS 6502X/MOS6502X.cs b/BizHawk.Emulation.Cores/CPUs/MOS 6502X/MOS6502X.cs index 684be9377d..46384b15a1 100644 --- a/BizHawk.Emulation.Cores/CPUs/MOS 6502X/MOS6502X.cs +++ b/BizHawk.Emulation.Cores/CPUs/MOS 6502X/MOS6502X.cs @@ -243,6 +243,12 @@ namespace BizHawk.Emulation.Cores.Components.M6502 return (ushort)(ReadMemory(address) | (ReadMemory(highAddress) << 8)); } + // SO pin + public void SetOverflow() + { + FlagV = true; + } + private static readonly byte[] TableNZ = { 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDebuggable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDebuggable.cs index 8e29874b02..ad389ed80b 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDebuggable.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDebuggable.cs @@ -1,160 +1,69 @@ using System; using System.Collections.Generic; - +using System.Linq; using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.Commodore64 { public partial class C64 : IDebuggable { - public IDictionary GetCpuFlagsAndRegisters() + [SaveState.DoNotSave] private IDebuggable _selectedDebuggable; + + private IEnumerable GetAvailableDebuggables() + { + yield return _board.Cpu; + if (_board.DiskDrive != null) + { + yield return _board.DiskDrive; + } + } + + private void SetDefaultDebuggable() + { + _selectedDebuggable = GetAvailableDebuggables().First(); + } + + IDictionary IDebuggable.GetCpuFlagsAndRegisters() { - return new Dictionary - { - { "A", board.cpu.A }, - { "X", board.cpu.X }, - { "Y", board.cpu.Y }, - { "S", board.cpu.S }, - { "PC", board.cpu.PC }, - { "Flag C", board.cpu.FlagC }, - { "Flag Z", board.cpu.FlagZ }, - { "Flag I", board.cpu.FlagI }, - { "Flag D", board.cpu.FlagD }, - { "Flag B", board.cpu.FlagB }, - { "Flag V", board.cpu.FlagV }, - { "Flag N", board.cpu.FlagN }, - { "Flag T", board.cpu.FlagT } - }; + if (_selectedDebuggable == null) + { + SetDefaultDebuggable(); + } + return _selectedDebuggable.GetCpuFlagsAndRegisters(); } - public void SetCpuRegister(string register, int value) + void IDebuggable.SetCpuRegister(string register, int value) { - switch (register) - { - default: - throw new InvalidOperationException(); - case "A": - board.cpu.A = (byte)value; - break; - case "X": - board.cpu.X = (byte)value; - break; - case "Y": - board.cpu.Y = (byte)value; - break; - case "S": - board.cpu.S = (byte)value; - break; - case "PC": - board.cpu.PC = (ushort)value; - break; - } + if (_selectedDebuggable == null) + { + SetDefaultDebuggable(); + } + _selectedDebuggable.SetCpuRegister(register, value); } - public bool CanStep(StepType type) + bool IDebuggable.CanStep(StepType type) { - switch (type) - { - case StepType.Into: - case StepType.Over: - case StepType.Out: - return true; - default: - return false; - } + if (_selectedDebuggable == null) + { + SetDefaultDebuggable(); + } + return _selectedDebuggable.CanStep(type); } - public void Step(StepType type) + void IDebuggable.Step(StepType type) { - switch (type) - { - case StepType.Into: - StepInto(); - break; - case StepType.Out: - StepOut(); - break; - case StepType.Over: - StepOver(); - break; - } + if (_selectedDebuggable == null) + { + SetDefaultDebuggable(); + } + _selectedDebuggable.Step(type); } - private void StepInto() - { - while (board.cpu.AtInstructionStart()) - { - DoCycle(); - } - while (!board.cpu.AtInstructionStart()) - { - DoCycle(); - } - } + [SaveState.DoNotSave] + private readonly IMemoryCallbackSystem _memoryCallbacks; - private void StepOver() - { - var instruction = board.cpu.Peek(board.cpu.PC); - - if (instruction == JSR) - { - var destination = board.cpu.PC + JSRSize; - while (board.cpu.PC != destination) - { - StepInto(); - } - } - else - { - StepInto(); - } - } - - private void StepOut() - { - var instr = board.cpu.Peek(board.cpu.PC); - - JSRCount = instr == JSR ? 1 : 0; - - var bailOutFrame = Frame + 1; - - while (true) - { - StepInto(); - instr = board.cpu.Peek(board.cpu.PC); - if (instr == JSR) - { - JSRCount++; - } - else if ((instr == RTS || instr == RTI) && JSRCount <= 0) - { - StepInto(); - JSRCount = 0; - break; - } - else if (instr == RTS || instr == RTI) - { - JSRCount--; - } - else //Emergency Bailout Logic - { - if (Frame == bailOutFrame) - { - break; - } - } - } - } - - private int JSRCount = 0; - - private const byte JSR = 0x20; - private const byte RTI = 0x40; - private const byte RTS = 0x60; - - private const byte JSRSize = 3; - - public IMemoryCallbackSystem MemoryCallbacks { get; private set; } + [SaveState.DoNotSave] + IMemoryCallbackSystem IDebuggable.MemoryCallbacks { get { return _memoryCallbacks; } } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDisassemblable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDisassemblable.cs index 9afa0b3220..787d07fe42 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDisassemblable.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDisassemblable.cs @@ -1,30 +1,76 @@ -using System; -using System.Collections.Generic; - -using BizHawk.Emulation.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64 -{ - public partial class C64 : IDisassemblable - { - public string Cpu - { - get { return "6510"; } set { } - } - - public string PCRegisterName - { - get { return "PC"; } - } - - public IEnumerable AvailableCpus - { - get { yield return "6510"; } - } - - public string Disassemble(MemoryDomain m, uint addr, out int length) - { - return Components.M6502.MOS6502X.Disassemble((ushort)addr, out length, (a) => m.PeekByte(a)); - } - } -} +using System; +using System.Collections.Generic; +using System.Linq; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64 +{ + public partial class C64 : IDisassemblable + { + [SaveState.DoNotSave] private IDisassemblable _selectedDisassemblable; + + private IEnumerable GetAvailableDisassemblables() + { + yield return _board.Cpu; + if (_board.DiskDrive != null) + { + yield return _board.DiskDrive; + } + } + + private void SetDefaultDisassemblable() + { + _selectedDisassemblable = GetAvailableDisassemblables().First(); + } + + [SaveState.DoNotSave] + public string Cpu + { + get + { + if (_selectedDisassemblable == null) + { + SetDefaultDisassemblable(); + } + return _selectedDisassemblable.Cpu; + } + set + { + var currentSelectedDisassemblable = _selectedDisassemblable; + _selectedDisassemblable = GetAvailableDisassemblables().FirstOrDefault(d => d.Cpu == value) ?? currentSelectedDisassemblable; + if (_selectedDisassemblable is IDebuggable) + { + _selectedDebuggable = _selectedDisassemblable as IDebuggable; + } + } + } + + [SaveState.DoNotSave] + public string PCRegisterName + { + get + { + if (_selectedDisassemblable == null) + { + SetDefaultDisassemblable(); + } + return _selectedDisassemblable.PCRegisterName; + } + } + + [SaveState.DoNotSave] + public IEnumerable AvailableCpus + { + get { return GetAvailableDisassemblables().SelectMany(d => d.AvailableCpus); } + } + + public string Disassemble(MemoryDomain m, uint addr, out int length) + { + if (_selectedDisassemblable == null) + { + SetDefaultDisassemblable(); + } + return _selectedDisassemblable.Disassemble(m, addr, out length); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDriveLight.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDriveLight.cs index 769c1d79e5..7a1834497d 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDriveLight.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IDriveLight.cs @@ -6,14 +6,5 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 { public bool DriveLightEnabled { get { return true; } } public bool DriveLightOn { get; private set; } - - public bool DriveLED - { - get - { - //return (disk.PeekVia1(0x00) & 0x08) != 0; - return false; - } - } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IInputPollable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IInputPollable.cs index fd668b5830..8f5ca1d344 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IInputPollable.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IInputPollable.cs @@ -4,21 +4,10 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 { public partial class C64 : IInputPollable { - public bool IsLagFrame - { - get { return _islag; } - set { _islag = value; } - } + public bool IsLagFrame { get; set; } + public int LagCount { get; set; } - public int LagCount - { - get { return _lagcount; } - set { _lagcount = value; } - } - - public IInputCallbackSystem InputCallbacks { get; private set; } - - private bool _islag = true; - private int _lagcount = 0; + [SaveState.DoNotSave] + public IInputCallbackSystem InputCallbacks { get; private set; } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IMemoryDomains.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IMemoryDomains.cs index 072e97bb1f..8f30e1df60 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IMemoryDomains.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IMemoryDomains.cs @@ -1,29 +1,45 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.Commodore64 { public partial class C64 { - private IMemoryDomains memoryDomains; + private IMemoryDomains _memoryDomains; - private void SetupMemoryDomains() + private void SetupMemoryDomains(bool diskDriveEnabled) { + var domains = new List + { + C64MemoryDomainFactory.Create("System Bus", 0x10000, a => _board.Cpu.Peek(a), (a, v) => _board.Cpu.Poke(a, v)), + C64MemoryDomainFactory.Create("RAM", 0x10000, a => _board.Ram.Peek(a), (a, v) => _board.Ram.Poke(a, v)), + C64MemoryDomainFactory.Create("CIA0", 0x10, a => _board.Cia0.Peek(a), (a, v) => _board.Cia0.Poke(a, v)), + C64MemoryDomainFactory.Create("CIA1", 0x10, a => _board.Cia1.Peek(a), (a, v) => _board.Cia1.Poke(a, v)), + C64MemoryDomainFactory.Create("VIC", 0x40, a => _board.Vic.Peek(a), (a, v) => _board.Vic.Poke(a, v)), + C64MemoryDomainFactory.Create("SID", 0x20, a => _board.Sid.Peek(a), (a, v) => _board.Sid.Poke(a, v)), + }; - // chips must be initialized before this code runs! - var domains = new List(1); - domains.Add(new MemoryDomain("System Bus", 0x10000, MemoryDomain.Endian.Little, board.cpu.Peek, board.cpu.Poke)); - domains.Add(new MemoryDomain("RAM", 0x10000, MemoryDomain.Endian.Little, board.ram.Peek, board.ram.Poke)); - domains.Add(new MemoryDomain("CIA0", 0x10, MemoryDomain.Endian.Little, board.cia0.Peek, board.cia0.Poke)); - domains.Add(new MemoryDomain("CIA1", 0x10, MemoryDomain.Endian.Little, board.cia1.Peek, board.cia1.Poke)); - domains.Add(new MemoryDomain("VIC", 0x40, MemoryDomain.Endian.Little, board.vic.Peek, board.vic.Poke)); - domains.Add(new MemoryDomain("SID", 0x20, MemoryDomain.Endian.Little, board.sid.Peek, board.sid.Poke)); - //domains.Add(new MemoryDomain("1541 Bus", 0x10000, MemoryDomain.Endian.Little, new Func(disk.Peek), new Action(disk.Poke))); - //domains.Add(new MemoryDomain("1541 VIA0", 0x10, MemoryDomain.Endian.Little, new Func(disk.PeekVia0), new Action(disk.PokeVia0))); - //domains.Add(new MemoryDomain("1541 VIA1", 0x10, MemoryDomain.Endian.Little, new Func(disk.PeekVia1), new Action(disk.PokeVia1))); - //domains.Add(new MemoryDomain("1541 RAM", 0x1000, MemoryDomain.Endian.Little, new Func(disk.PeekRam), new Action(disk.PokeRam))); - memoryDomains = new MemoryDomainList(domains); - (ServiceProvider as BasicServiceProvider).Register(memoryDomains); + if (diskDriveEnabled) + { + domains.AddRange(new[] + { + C64MemoryDomainFactory.Create("1541 Bus", 0x10000, a => _board.DiskDrive.Peek(a), (a, v) => _board.DiskDrive.Poke(a, v)), + C64MemoryDomainFactory.Create("1541 RAM", 0x800, a => _board.DiskDrive.Peek(a), (a, v) => _board.DiskDrive.Poke(a, v)), + C64MemoryDomainFactory.Create("1541 VIA0", 0x10, a => _board.DiskDrive.PeekVia0(a), (a, v) => _board.DiskDrive.PokeVia0(a, v)), + C64MemoryDomainFactory.Create("1541 VIA1", 0x10, a => _board.DiskDrive.PeekVia1(a), (a, v) => _board.DiskDrive.PokeVia1(a, v)) + }); + } + _memoryDomains = new MemoryDomainList(domains); + ((BasicServiceProvider) ServiceProvider).Register(_memoryDomains); } - } + + private static class C64MemoryDomainFactory + { + public static MemoryDomain Create(string name, int size, Func peekByte, Action pokeByte) + { + return new MemoryDomain(name, size, MemoryDomain.Endian.Little, addr => unchecked((byte)peekByte((int)addr)), (addr, val) => pokeByte(unchecked((int)addr), val)); + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.ISettable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.ISettable.cs index b6e382a294..5ea9385b54 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.ISettable.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.ISettable.cs @@ -9,13 +9,12 @@ using System.Drawing; namespace BizHawk.Emulation.Cores.Computers.Commodore64 { - // adelikat: changing settings to default object untl there are actually settings, as the ui depends on it to know if there are any settings avaialable - public partial class C64 : ISettable + // adelikat: changing settings to default object until there are actually settings, as the ui depends on it to know if there are any settings avaialable + public partial class C64 : ISettable { - public object /*C64Settings*/ GetSettings() + public C64Settings GetSettings() { - //return Settings.Clone(); - return null; + return Settings.Clone(); } public C64SyncSettings GetSyncSettings() @@ -23,9 +22,9 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 return SyncSettings.Clone(); } - public bool PutSettings(object /*C64Settings*/ o) + public bool PutSettings(C64Settings o) { - //Settings = o; + Settings = o; return false; } @@ -40,6 +39,11 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 public class C64Settings { + [DisplayName("Border type")] + [Description("Select how to show the border area")] + [DefaultValue(BorderType.SmallProportional)] + public BorderType BorderType { get; set; } + public C64Settings Clone() { return (C64Settings)MemberwiseClone(); @@ -55,10 +59,25 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 { [DisplayName("VIC type")] [Description("Set the type of video chip to use")] - [DefaultValue(VicType.PAL)] - public VicType vicType { get; set; } + [DefaultValue(VicType.Pal)] + public VicType VicType { get; set; } - public C64SyncSettings Clone() + [DisplayName("SID type")] + [Description("Set the type of sound chip to use")] + [DefaultValue(SidType.OldR2)] + public SidType SidType { get; set; } + + [DisplayName("Tape drive type")] + [Description("Set the type of tape drive attached")] + [DefaultValue(TapeDriveType.None)] + public TapeDriveType TapeDriveType { get; set; } + + [DisplayName("Disk drive type")] + [Description("Set the type of disk drive attached")] + [DefaultValue(DiskDriveType.None)] + public DiskDriveType DiskDriveType { get; set; } + + public C64SyncSettings Clone() { return (C64SyncSettings)MemberwiseClone(); } @@ -71,7 +90,32 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 public enum VicType { - PAL, NTSC, NTSC_OLD, DREAN + Pal, Ntsc, NtscOld, Drean } + + public enum CiaType + { + Pal, Ntsc, PalRevA, NtscRevA + } + + public enum BorderType + { + SmallProportional, SmallFixed, Normal, Full + } + + public enum SidType + { + OldR2, OldR3, OldR4AR, NewR5 + } + + public enum TapeDriveType + { + None, Commodore1530 + } + + public enum DiskDriveType + { + None, Commodore1541 + } } } \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IStatable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IStatable.cs index 11f44197a7..7cafb90d5e 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IStatable.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IStatable.cs @@ -5,7 +5,7 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.Commodore64 { - sealed public partial class C64 : IStatable + public sealed partial class C64 : IStatable { public bool BinarySaveStatesPreferred { get { return false; } } @@ -31,20 +31,19 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 public byte[] SaveStateBinary() { - MemoryStream ms = new MemoryStream(); - BinaryWriter bw = new BinaryWriter(ms); - SaveStateBinary(bw); - bw.Flush(); - return ms.ToArray(); - } + using (var ms = new MemoryStream()) + { + var bw = new BinaryWriter(ms); + SaveStateBinary(bw); + bw.Flush(); + return ms.ToArray(); + } + } private void SyncState(Serializer ser) { ser.BeginSection("core"); - ser.Sync("frame", ref _frame); - ser.Sync("islag", ref _islag); - ser.Sync("lagcount", ref _lagcount); - board.SyncState(ser); + SaveState.SyncObject(ser, this); ser.EndSection(); } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.Input.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.Input.cs index 096002f352..ae24fd052b 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.Input.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.Input.cs @@ -2,17 +2,15 @@ { public sealed partial class Motherboard { - private int[] joystickPressed = new int[10]; - private int[] keyboardPressed = new int[64]; + private readonly int[] _joystickPressed = new int[10]; + private readonly int[] _keyboardPressed = new int[64]; - private static string[,] joystickMatrix = new string[2, 5] - { + private static readonly string[,] JoystickMatrix = { {"P1 Up", "P1 Down", "P1 Left", "P1 Right", "P1 Button"}, {"P2 Up", "P2 Down", "P2 Left", "P2 Right", "P2 Button"} }; - private static string[,] keyboardMatrix = new string[8, 8] - { + private static readonly string[,] KeyboardMatrix = { { "Key Insert/Delete", "Key Return", "Key Cursor Left/Right", "Key F7", "Key F1", "Key F3", "Key F5", "Key Cursor Up/Down" }, { "Key 3", "Key W", "Key A", "Key 4", "Key Z", "Key S", "Key E", "Key Left Shift" }, { "Key 5", "Key R", "Key D", "Key 6", "Key C", "Key F", "Key T", "Key X" }, @@ -23,79 +21,33 @@ { "Key 1", "Key Left Arrow", "Key Control", "Key 2", "Key Space", "Key Commodore", "Key Q", "Key Run/Stop" } }; - static private byte[] inputBitMask = new byte[] { 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F }; - static private byte[] inputBitSelect = new byte[] { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 }; - - byte cia0InputLatchA; - byte cia0InputLatchB; - int pollIndex; + [SaveState.DoNotSave] int _pollIndex; + private bool _restorePressed; public void PollInput() { _c64.InputCallbacks.Call(); // scan joysticks - pollIndex = 0; - for (int j = 0; j < 5; j++) + _pollIndex = 0; + for (var j = 0; j < 2; j++) { - for (int i = 0; i < 2; i++) + for (var i = 0; i < 5; i++) { - joystickPressed[pollIndex++] = controller[joystickMatrix[i, j]] ? -1 : 0; + _joystickPressed[_pollIndex++] = Controller[JoystickMatrix[j, i]] ? -1 : 0; } } // scan keyboard - pollIndex = 0; - for (int i = 0; i < 8; i++) + _pollIndex = 0; + for (var i = 0; i < 8; i++) { - for (int j = 0; j < 8; j++) + for (var j = 0; j < 8; j++) { - keyboardPressed[pollIndex++] = controller[keyboardMatrix[i, j]] ? -1 : 0; - } - } - } - - private void WriteInputPort() - { - byte portA = cia0.PortAData; - byte portB = cia0.PortBData; - byte resultA = 0xFF; - byte resultB = 0xFF; - byte joyA = 0xFF; - byte joyB = 0xFF; - - pollIndex = 0; - for (int i = 0; i < 8; i++) - { - for (int j = 0; j < 8; j++) - { - if (keyboardPressed[pollIndex++] != 0) - { - if (((portA & inputBitSelect[i]) == 0) || ((portB & inputBitSelect[j]) == 0)) - { - resultA &= inputBitMask[i]; - resultB &= inputBitMask[j]; - } - } + _keyboardPressed[_pollIndex++] = Controller[KeyboardMatrix[i, j]] ? -1 : 0; } } - pollIndex = 0; - for (int i = 0; i < 5; i++) - { - if (joystickPressed[pollIndex++] != 0) - joyB &= inputBitMask[i]; - if (joystickPressed[pollIndex++] != 0) - joyA &= inputBitMask[i]; - } - - resultA &= joyA; - resultB &= joyB; - - cia0InputLatchA = resultA; - cia0InputLatchB = resultB; - - // this joystick has special rules. - cia0.PortAMask = joyA; + _restorePressed = Controller["Key Restore"]; } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.Motherboard.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.Motherboard.cs index 7fc07731ba..c406f435d3 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.Motherboard.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.Motherboard.cs @@ -2,280 +2,282 @@ using BizHawk.Common; using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge; +using BizHawk.Emulation.Cores.Computers.Commodore64.Cassette; using BizHawk.Emulation.Cores.Computers.Commodore64.MOS; -using BizHawk.Emulation.Cores.Computers.Commodore64.CassettePort; -using BizHawk.Emulation.Cores.Computers.Commodore64.UserPort; +using BizHawk.Emulation.Cores.Computers.Commodore64.Serial; +using BizHawk.Emulation.Cores.Computers.Commodore64.User; namespace BizHawk.Emulation.Cores.Computers.Commodore64 { /// /// Contains the onboard chipset and glue. /// - sealed public partial class Motherboard + public sealed partial class Motherboard { - // chips - public Chip23XX basicRom; - public Chip23XX charRom; - public MOS6526 cia0; - public MOS6526 cia1; - public Chip2114 colorRam; - public MOS6510 cpu; - public Chip23XX kernalRom; - public MOSPLA pla; - public Chip4864 ram; - public Sid sid; - public Vic vic; + // chips + public readonly Chip23128 BasicRom; + public readonly Chip23128 CharRom; + public readonly Cia Cia0; + public readonly Cia Cia1; + public readonly Chip2114 ColorRam; + public readonly Chip6510 Cpu; + public readonly Chip23128 KernalRom; + public readonly Chip90611401 Pla; + public readonly Chip4864 Ram; + public readonly Sid Sid; + public readonly Vic Vic; - // ports - public CartridgePort cartPort; - public CassettePortDevice cassPort; - public IController controller; - public SerialPort serPort; - public UserPortDevice userPort; + // ports + public readonly CartridgePort CartPort; + public readonly CassettePort Cassette; + public IController Controller; + public readonly SerialPort Serial; + public readonly TapeDrive TapeDrive; + public readonly UserPort User; - // state - //public int address; - public byte bus; - public bool inputRead; - public bool irq; - public bool nmi; + // devices + public readonly Drive1541 DiskDrive; - private C64 _c64; + // state + //public int address; + public int Bus; + public bool InputRead; + public bool Irq; + public bool Nmi; - public Motherboard(C64 c64, C64.VicType initRegion) + private readonly C64 _c64; + + public Motherboard(C64 c64, C64.VicType initRegion, C64.BorderType borderType, C64.SidType sidType, C64.TapeDriveType tapeDriveType, C64.DiskDriveType diskDriveType) { // note: roms need to be added on their own externally _c64 = c64; - int clockNum, clockDen, mainsFrq; + int clockNum, clockDen; switch (initRegion) { - case C64.VicType.PAL: + case C64.VicType.Pal: clockNum = 17734475; clockDen = 18; - mainsFrq = 50; - break; - case C64.VicType.NTSC: - case C64.VicType.NTSC_OLD: + break; + case C64.VicType.Ntsc: + clockNum = 14318181; + clockDen = 14; + break; + case C64.VicType.NtscOld: clockNum = 11250000; clockDen = 11; - mainsFrq = 60; - break; - case C64.VicType.DREAN: + break; + case C64.VicType.Drean: clockNum = 14328225; clockDen = 14; - mainsFrq = 50; - break; + break; default: throw new System.Exception(); } - cartPort = new CartridgePort(); - cassPort = new CassettePortDevice(); - cia0 = new MOS6526(clockNum, clockDen*mainsFrq); - cia1 = new MOS6526(clockNum, clockDen*mainsFrq); - colorRam = new Chip2114(); - cpu = new MOS6510(); - pla = new MOSPLA(); - ram = new Chip4864(); - serPort = new SerialPort(); - sid = MOS6581.Create(44100, clockNum, clockDen); + CartPort = new CartridgePort(); + Cassette = new CassettePort(); + ColorRam = new Chip2114(); + Cpu = new Chip6510(); + Pla = new Chip90611401(); + Ram = new Chip4864(); + Serial = new SerialPort(); + + switch (sidType) + { + case C64.SidType.OldR2: + Sid = Chip6581R2.Create(44100, clockNum, clockDen); + break; + case C64.SidType.OldR3: + Sid = Chip6581R3.Create(44100, clockNum, clockDen); + break; + case C64.SidType.OldR4AR: + Sid = Chip6581R4AR.Create(44100, clockNum, clockDen); + break; + case C64.SidType.NewR5: + Sid = Chip8580R5.Create(44100, clockNum, clockDen); + break; + } + switch (initRegion) { - case C64.VicType.NTSC: vic = MOS6567R8.Create(); break; - case C64.VicType.PAL: vic = MOS6569.Create(); break; - case C64.VicType.NTSC_OLD: vic = MOS6567R56A.Create(); break; - case C64.VicType.DREAN: vic = MOS6572.Create(); break; + case C64.VicType.Ntsc: + Vic = Chip6567R8.Create(borderType); + Cia0 = Chip6526.Create(C64.CiaType.Ntsc, _keyboardPressed, _joystickPressed); + Cia1 = Chip6526.Create(C64.CiaType.Ntsc, Cia1_ReadPortA); + break; + case C64.VicType.Pal: + Vic = Chip6569.Create(borderType); + Cia0 = Chip6526.Create(C64.CiaType.Pal, _keyboardPressed, _joystickPressed); + Cia1 = Chip6526.Create(C64.CiaType.Pal, Cia1_ReadPortA); + break; + case C64.VicType.NtscOld: + Vic = Chip6567R56A.Create(borderType); + Cia0 = Chip6526.Create(C64.CiaType.NtscRevA, _keyboardPressed, _joystickPressed); + Cia1 = Chip6526.Create(C64.CiaType.NtscRevA, Cia1_ReadPortA); + break; + case C64.VicType.Drean: + Vic = Chip6572.Create(borderType); + Cia0 = Chip6526.Create(C64.CiaType.Pal, _keyboardPressed, _joystickPressed); + Cia1 = Chip6526.Create(C64.CiaType.Pal, Cia1_ReadPortA); + break; } - userPort = new UserPortDevice(); + User = new UserPort(); + + ClockNumerator = clockNum; + ClockDenominator = clockDen; + + // Initialize disk drive + switch (diskDriveType) + { + case C64.DiskDriveType.Commodore1541: + DiskDrive = new Drive1541(ClockNumerator, ClockDenominator); + Serial.Connect(DiskDrive); + break; + } + + // Initialize tape drive + switch (tapeDriveType) + { + case C64.TapeDriveType.Commodore1530: + TapeDrive = new TapeDrive(); + Cassette.Connect(TapeDrive); + break; + } + + BasicRom = new Chip23128(); + CharRom = new Chip23128(); + KernalRom = new Chip23128(); } + [SaveState.DoNotSave] public int ClockNumerator { get; private set; } + [SaveState.DoNotSave] public int ClockDenominator { get; private set; } + // ----------------------------------------- public void Execute() { - vic.ExecutePhase1(); - cpu.ExecutePhase1(); - cia0.ExecutePhase1(); - cia1.ExecutePhase1(); + _vicBank = (0x3 - (Cia1.EffectivePrA & 0x3)) << 14; - vic.ExecutePhase2(); - cpu.ExecutePhase2(); - cia0.ExecutePhase2(); - cia1.ExecutePhase2(); - sid.ExecutePhase2(); + Vic.ExecutePhase(); + Cassette.ExecutePhase(); + Serial.ExecutePhase(); + Sid.ExecutePhase(); + Cia0.ExecutePhase(); + Cia1.ExecutePhase(); + Cpu.ExecutePhase(); } public void Flush() { - sid.Flush(); + Sid.Flush(); } // ----------------------------------------- public void HardReset() { - bus = 0xFF; - inputRead = false; + Bus = 0xFF; + InputRead = false; - cpu.HardReset(); - cia0.HardReset(); - cia1.HardReset(); - colorRam.HardReset(); - ram.HardReset(); - serPort.HardReset(); - sid.HardReset(); - vic.HardReset(); - userPort.HardReset(); - cassPort.HardReset(); + Cia0.HardReset(); + Cia1.HardReset(); + ColorRam.HardReset(); + Ram.HardReset(); + Serial.HardReset(); + Sid.HardReset(); + Vic.HardReset(); + User.HardReset(); + Cassette.HardReset(); + Serial.HardReset(); + Cpu.HardReset(); + } - // because of how mapping works, the cpu needs to be hard reset twice - cpu.HardReset(); - } - - public void Init() + public void Init() { - cartPort.ReadIRQ = Glue_ReadIRQ; - cartPort.ReadNMI = cia1.ReadIRQBuffer; + Cassette.ReadDataOutput = CassPort_ReadDataOutput; + Cassette.ReadMotor = CassPort_ReadMotor; - cassPort.ReadDataOutput = CassPort_ReadDataOutput; - cassPort.ReadMotor = CassPort_ReadMotor; + Cia0.ReadFlag = Cassette.ReadDataInputBuffer; - cia0.ReadCNT = Cia0_ReadCnt; - cia0.ReadFlag = cassPort.ReadDataInputBuffer; - cia0.ReadPortA = Cia0_ReadPortA; - cia0.ReadPortB = Cia0_ReadPortB; - cia0.ReadSP = Cia0_ReadSP; + Cpu.PeekMemory = Pla.Peek; + Cpu.PokeMemory = Pla.Poke; + Cpu.ReadAec = Vic.ReadAec; + Cpu.ReadIrq = Glue_ReadIRQ; + Cpu.ReadNmi = Glue_ReadNMI; + Cpu.ReadPort = Cpu_ReadPort; + Cpu.ReadRdy = Vic.ReadBa; + Cpu.ReadMemory = Pla.Read; + Cpu.WriteMemory = Pla.Write; + Cpu.WriteMemoryPort = Cpu_WriteMemoryPort; - cia1.ReadCNT = Cia1_ReadCnt; - cia1.ReadFlag = userPort.ReadFlag2; - cia1.ReadPortA = Cia1_ReadPortA; - cia1.ReadPortB = userPort.ReadData; - cia1.ReadSP = Cia1_ReadSP; + Pla.PeekBasicRom = BasicRom.Peek; + Pla.PeekCartridgeHi = CartPort.PeekHiRom; + Pla.PeekCartridgeLo = CartPort.PeekLoRom; + Pla.PeekCharRom = CharRom.Peek; + Pla.PeekCia0 = Cia0.Peek; + Pla.PeekCia1 = Cia1.Peek; + Pla.PeekColorRam = ColorRam.Peek; + Pla.PeekExpansionHi = CartPort.PeekHiExp; + Pla.PeekExpansionLo = CartPort.PeekLoExp; + Pla.PeekKernalRom = KernalRom.Peek; + Pla.PeekMemory = Ram.Peek; + Pla.PeekSid = Sid.Peek; + Pla.PeekVic = Vic.Peek; + Pla.PokeCartridgeHi = CartPort.PokeHiRom; + Pla.PokeCartridgeLo = CartPort.PokeLoRom; + Pla.PokeCia0 = Cia0.Poke; + Pla.PokeCia1 = Cia1.Poke; + Pla.PokeColorRam = ColorRam.Poke; + Pla.PokeExpansionHi = CartPort.PokeHiExp; + Pla.PokeExpansionLo = CartPort.PokeLoExp; + Pla.PokeMemory = Ram.Poke; + Pla.PokeSid = Sid.Poke; + Pla.PokeVic = Vic.Poke; + Pla.ReadAec = Vic.ReadAec; + Pla.ReadBa = Vic.ReadBa; + Pla.ReadBasicRom = BasicRom.Read; + Pla.ReadCartridgeHi = CartPort.ReadHiRom; + Pla.ReadCartridgeLo = CartPort.ReadLoRom; + Pla.ReadCharen = Pla_ReadCharen; + Pla.ReadCharRom = CharRom.Read; + Pla.ReadCia0 = Pla_ReadCia0; + Pla.ReadCia1 = Cia1.Read; + Pla.ReadColorRam = Pla_ReadColorRam; + Pla.ReadExpansionHi = Pla_ReadExpansion1; + Pla.ReadExpansionLo = Pla_ReadExpansion0; + Pla.ReadExRom = CartPort.ReadExRom; + Pla.ReadGame = CartPort.ReadGame; + Pla.ReadHiRam = Pla_ReadHiRam; + Pla.ReadKernalRom = KernalRom.Read; + Pla.ReadLoRam = Pla_ReadLoRam; + Pla.ReadMemory = Ram.Read; + Pla.ReadSid = Sid.Read; + Pla.ReadVic = Vic.Read; + Pla.WriteCartridgeHi = CartPort.WriteHiRom; + Pla.WriteCartridgeLo = CartPort.WriteLoRom; + Pla.WriteCia0 = Cia0.Write; + Pla.WriteCia1 = Cia1.Write; + Pla.WriteColorRam = ColorRam.Write; + Pla.WriteExpansionHi = CartPort.WriteHiExp; + Pla.WriteExpansionLo = CartPort.WriteLoExp; + Pla.WriteMemory = Ram.Write; + Pla.WriteSid = Sid.Write; + Pla.WriteVic = Vic.Write; - cpu.PeekMemory = pla.Peek; - cpu.PokeMemory = pla.Poke; - cpu.ReadAEC = vic.ReadAECBuffer; - cpu.ReadIRQ = Glue_ReadIRQ; - cpu.ReadNMI = cia1.ReadIRQBuffer; - cpu.ReadPort = Cpu_ReadPort; - cpu.ReadRDY = vic.ReadBABuffer; - cpu.ReadMemory = pla.Read; - cpu.WriteMemory = pla.Write; - cpu.WriteMemoryPort = Cpu_WriteMemoryPort; + Serial.ReadMasterAtn = SerPort_ReadAtnOut; + Serial.ReadMasterClk = SerPort_ReadClockOut; + Serial.ReadMasterData = SerPort_ReadDataOut; - pla.PeekBasicRom = basicRom.Peek; - pla.PeekCartridgeHi = cartPort.PeekHiRom; - pla.PeekCartridgeLo = cartPort.PeekLoRom; - pla.PeekCharRom = charRom.Peek; - pla.PeekCia0 = cia0.Peek; - pla.PeekCia1 = cia1.Peek; - pla.PeekColorRam = colorRam.Peek; - pla.PeekExpansionHi = cartPort.PeekHiExp; - pla.PeekExpansionLo = cartPort.PeekLoExp; - pla.PeekKernalRom = kernalRom.Peek; - pla.PeekMemory = ram.Peek; - pla.PeekSid = sid.Peek; - pla.PeekVic = vic.Peek; - pla.PokeCartridgeHi = cartPort.PokeHiRom; - pla.PokeCartridgeLo = cartPort.PokeLoRom; - pla.PokeCia0 = cia0.Poke; - pla.PokeCia1 = cia1.Poke; - pla.PokeColorRam = colorRam.Poke; - pla.PokeExpansionHi = cartPort.PokeHiExp; - pla.PokeExpansionLo = cartPort.PokeLoExp; - pla.PokeMemory = ram.Poke; - pla.PokeSid = sid.Poke; - pla.PokeVic = vic.Poke; - pla.ReadAEC = vic.ReadAECBuffer; - pla.ReadBA = vic.ReadBABuffer; - pla.ReadBasicRom = basicRom.Read; - pla.ReadCartridgeHi = cartPort.ReadHiRom; - pla.ReadCartridgeLo = cartPort.ReadLoRom; - pla.ReadCharen = Pla_ReadCharen; - pla.ReadCharRom = charRom.Read; - pla.ReadCia0 = Pla_ReadCia0; - pla.ReadCia1 = cia1.Read; - pla.ReadColorRam = Pla_ReadColorRam; - pla.ReadExpansionHi = cartPort.ReadHiExp; - pla.ReadExpansionLo = cartPort.ReadLoExp; - pla.ReadExRom = cartPort.ReadExRom; - pla.ReadGame = cartPort.ReadGame; - pla.ReadHiRam = Pla_ReadHiRam; - pla.ReadKernalRom = kernalRom.Read; - pla.ReadLoRam = Pla_ReadLoRam; - pla.ReadMemory = ram.Read; - pla.ReadSid = sid.Read; - pla.ReadVic = vic.Read; - pla.WriteCartridgeHi = cartPort.WriteHiRom; - pla.WriteCartridgeLo = cartPort.WriteLoRom; - pla.WriteCia0 = cia0.Write; - pla.WriteCia1 = cia1.Write; - pla.WriteColorRam = colorRam.Write; - pla.WriteExpansionHi = cartPort.WriteHiExp; - pla.WriteExpansionLo = cartPort.WriteLoExp; - pla.WriteMemory = ram.Write; - pla.WriteSid = sid.Write; - pla.WriteVic = vic.Write; + Sid.ReadPotX = Sid_ReadPotX; + Sid.ReadPotY = Sid_ReadPotY; - serPort.ReadAtnOut = SerPort_ReadAtnOut; - serPort.ReadClockOut = SerPort_ReadClockOut; - serPort.ReadDataOut = SerPort_ReadDataOut; - - sid.ReadPotX = Sid_ReadPotX; - sid.ReadPotY = Sid_ReadPotY; - - vic.ReadMemory = Vic_ReadMemory; - vic.ReadColorRam = colorRam.Read; + Vic.ReadMemory = Vic_ReadMemory; + Vic.ReadColorRam = ColorRam.Read; } public void SyncState(Serializer ser) { - ser.BeginSection("motherboard"); - SaveState.SyncObject(ser, this); - ser.EndSection(); - - //ser.BeginSection("cartridge"); - //cartPort.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("cassette"); - //cassPort.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("cia0"); - //cia0.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("cia1"); - //cia1.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("colorram"); - //colorRam.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("cpu"); - //cpu.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("pla"); - //pla.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("ram"); - //ram.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("sid"); - //sid.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("user"); - //userPort.SyncState(ser); - //ser.EndSection(); - - //ser.BeginSection("vic"); - //vic.SyncState(ser); - //ser.EndSection(); - } - } + SaveState.SyncObject(ser, this); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.MotherboardInterface.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.MotherboardInterface.cs index b4e895e707..537ff06888 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.MotherboardInterface.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.MotherboardInterface.cs @@ -5,140 +5,163 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.Commodore64 { - sealed public partial class Motherboard + public sealed partial class Motherboard { - bool CassPort_ReadDataOutput() + private int _lastReadVicAddress = 0x3FFF; + private int _lastReadVicData = 0xFF; + private int _vicBank = 0xC000; + private int _tempCia1Cra; + + private bool CassPort_ReadDataOutput() { - return (cpu.PortData & 0x08) != 0; + return (Cpu.PortData & 0x08) != 0; } - bool CassPort_ReadMotor() + private bool CassPort_ReadMotor() { - return (cpu.PortData & 0x20) != 0; + return (Cpu.PortData & 0x20) != 0; } - bool Cia0_ReadCnt() + /* + private bool Cia0_ReadCnt() { - return (userPort.ReadCounter1Buffer() && cia0.ReadCNTBuffer()); + return User.ReadCounter1() && Cia0.ReadCntBuffer(); } - byte Cia0_ReadPortA() + private int Cia0_ReadPortA() { return cia0InputLatchA; } - byte Cia0_ReadPortB() + private int Cia0_ReadPortB() { return cia0InputLatchB; } - bool Cia0_ReadSP() + private bool Cia0_ReadSP() { - return (userPort.ReadSerial1Buffer() && cia0.ReadSPBuffer()); + return User.ReadSerial1() && Cia0.ReadSpBuffer(); } - bool Cia1_ReadCnt() + private bool Cia1_ReadSP() { - return (userPort.ReadCounter2Buffer() && cia1.ReadCNTBuffer()); + return User.ReadSerial2() && Cia1.ReadSpBuffer(); } - byte Cia1_ReadPortA() + private bool Cia1_ReadCnt() { - // the low bits are actually the VIC memory address. - byte result = 0xFF; - if (serPort.WriteDataIn()) - result &= 0x7F; - if (serPort.WriteClockIn()) - result &= 0xBF; - return result; + return User.ReadCounter2() && Cia1.ReadCntBuffer(); + } + */ + + private int Cia1_ReadPortA() + { + // the low bits are actually the VIC memory address. + return (SerPort_ReadDataOut() && Serial.ReadDeviceData() ? 0x80 : 0x00) | + (SerPort_ReadClockOut() && Serial.ReadDeviceClock() ? 0x40 : 0x00); } - bool Cia1_ReadSP() - { - return (userPort.ReadSerial2Buffer() && cia1.ReadSPBuffer()); - } + private int Cia1_ReadPortB() + { + return 0xFF; + } - byte Cpu_ReadPort() + private int Cpu_ReadPort() { - byte data = 0x1F; - if (!cassPort.ReadSenseBuffer()) + var data = 0x1F; + if (!Cassette.ReadSenseBuffer()) data &= 0xEF; return data; } - void Cpu_WriteMemoryPort(int addr, byte val) + private void Cpu_WriteMemoryPort(int addr, int val) { - pla.WriteMemory(addr, bus); + Pla.WriteMemory(addr, Bus); } - bool Glue_ReadIRQ() + private bool Glue_ReadIRQ() { - return cia0.ReadIRQBuffer() & vic.ReadIRQBuffer() & cartPort.ReadIRQBuffer(); + return Cia0.ReadIrq() && Vic.ReadIrq() && CartPort.ReadIrq(); } - bool Pla_ReadCharen() + private bool Glue_ReadNMI() + { + return !_restorePressed && Cia1.ReadIrq() && CartPort.ReadNmi(); + } + + private bool Pla_ReadCharen() { - return (cpu.PortData & 0x04) != 0; + return (Cpu.PortData & 0x04) != 0; } - byte Pla_ReadCia0(int addr) + private int Pla_ReadCia0(int addr) { if (addr == 0xDC00 || addr == 0xDC01) { - WriteInputPort(); - inputRead = true; + InputRead = true; } - return cia0.Read(addr); + return Cia0.Read(addr); } - byte Pla_ReadColorRam(int addr) + private int Pla_ReadColorRam(int addr) { - byte result = bus; + var result = Bus; result &= 0xF0; - result |= colorRam.Read(addr); + result |= ColorRam.Read(addr); return result; } - bool Pla_ReadHiRam() + private bool Pla_ReadHiRam() { - return (cpu.PortData & 0x02) != 0; + return (Cpu.PortData & 0x02) != 0; } - bool Pla_ReadLoRam() + private bool Pla_ReadLoRam() { - return (cpu.PortData & 0x01) != 0; + return (Cpu.PortData & 0x01) != 0; } - bool SerPort_ReadAtnOut() + private int Pla_ReadExpansion0(int addr) + { + return CartPort.IsConnected ? CartPort.ReadLoExp(addr) : _lastReadVicData; + } + + private int Pla_ReadExpansion1(int addr) + { + return CartPort.IsConnected ? CartPort.ReadHiExp(addr) : _lastReadVicData; + } + + private bool SerPort_ReadAtnOut() { - return (cia1.PortBData & 0x08) == 0; + return !((Cia1.DdrA & 0x08) != 0 && (Cia1.PrA & 0x08) != 0); } - bool SerPort_ReadClockOut() - { - return (cia1.PortAData & 0x10) == 0; + private bool SerPort_ReadClockOut() + { + return !((Cia1.DdrA & 0x10) != 0 && (Cia1.PrA & 0x10) != 0); } - bool SerPort_ReadDataOut() + private bool SerPort_ReadDataOut() { - return (cia1.PortAData & 0x20) == 0; - } + return !((Cia1.DdrA & 0x20) != 0 && (Cia1.PrA & 0x20) != 0); + } - byte Sid_ReadPotX() + private int Sid_ReadPotX() { return 0; } - byte Sid_ReadPotY() + private int Sid_ReadPotY() { return 0; } - byte Vic_ReadMemory(int addr) + private int Vic_ReadMemory(int addr) { - // the system sees (cia1.PortAData & 0x3) but we use a shortcut - addr |= (0x3 - (((cia1.PortALatch & cia1.PortADirection) | (~cia1.PortADirection)) & 0x3)) << 14; - return pla.VicRead(addr); + // the system sees (cia1.PortAData & 0x3) but we use a shortcut + _lastReadVicAddress = addr | _vicBank; + _lastReadVicData = Pla.VicRead(_lastReadVicAddress); + return _lastReadVicData; } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs index 2294bb131f..33778c5e99 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.cs @@ -1,101 +1,102 @@ using System; using System.Collections.Generic; using System.IO; - +using System.Linq; using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Computers.Commodore64.MOS; using System.Windows.Forms; +using BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge; +using BizHawk.Emulation.Cores.Computers.Commodore64.Cassette; +using BizHawk.Emulation.Cores.Computers.Commodore64.Media; +using BizHawk.Emulation.Cores.Computers.Commodore64.Serial; namespace BizHawk.Emulation.Cores.Computers.Commodore64 { [CoreAttributes( "C64Hawk", - "SaxxonPIke", + "SaxxonPike", isPorted: false, isReleased: false )] [ServiceNotApplicable(typeof(ISettable<,>))] - sealed public partial class C64 : IEmulator, IStatable, IInputPollable, IDriveLight, IDebuggable, IDisassemblable, IRegionable, ISettable + public sealed partial class C64 : IEmulator, IRegionable { // framework - public C64(CoreComm comm, GameInfo game, byte[] rom, string romextension, object Settings, object SyncSettings) + public C64(CoreComm comm, GameInfo game, byte[] rom, string romextension, object settings, object syncSettings) { - PutSyncSettings((C64SyncSettings)SyncSettings ?? new C64SyncSettings()); - PutSettings((C64Settings)Settings ?? new C64Settings()); + PutSyncSettings((C64SyncSettings)syncSettings ?? new C64SyncSettings()); + PutSettings((C64Settings)settings ?? new C64Settings()); ServiceProvider = new BasicServiceProvider(this); InputCallbacks = new InputCallbackSystem(); - inputFileInfo = new InputFileInfo(); - inputFileInfo.Data = rom; - inputFileInfo.Extension = romextension; - CoreComm = comm; - Init(this.SyncSettings.vicType); - cyclesPerFrame = board.vic.CyclesPerFrame; - SetupMemoryDomains(); - MemoryCallbacks = new MemoryCallbackSystem(); + _inputFileInfo = new InputFileInfo + { + Data = rom, + Extension = romextension + }; + + CoreComm = comm; + Init(SyncSettings.VicType, Settings.BorderType, SyncSettings.SidType, SyncSettings.TapeDriveType, SyncSettings.DiskDriveType); + _cyclesPerFrame = _board.Vic.CyclesPerFrame; + SetupMemoryDomains(_board.DiskDrive != null); + _memoryCallbacks = new MemoryCallbackSystem(); HardReset(); - (ServiceProvider as BasicServiceProvider).Register(board.vic); - } + switch (SyncSettings.VicType) + { + case VicType.Ntsc: + case VicType.Drean: + case VicType.NtscOld: + Region = DisplayType.NTSC; + break; + case VicType.Pal: + Region = DisplayType.PAL; + break; + } - - /*private DisplayType queryUserForRegion() - { - Form prompt = new Form() { Width = 160, Height = 120, FormBorderStyle = FormBorderStyle.FixedDialog, Text = "Region selector", StartPosition = FormStartPosition.CenterScreen }; - Label textLabel = new Label() { Left = 10, Top = 10, Width = 260, Text = "Please choose a region:" }; - RadioButton palButton = new RadioButton() { Left = 10, Top = 30, Width = 70, Text = "PAL", Checked = true }; - RadioButton ntscButton = new RadioButton() { Left = 80, Top = 30, Width = 70, Text = "NTSC" }; - Button confirmation = new Button() { Text = "Ok", Left = 40, Width = 80, Top = 60, DialogResult = DialogResult.OK }; - confirmation.Click += (sender, e) => { prompt.Close(); }; - prompt.Controls.Add(textLabel); - prompt.Controls.Add(palButton); - prompt.Controls.Add(ntscButton); - prompt.Controls.Add(confirmation); - prompt.AcceptButton = confirmation; - - if (prompt.ShowDialog() != DialogResult.OK || !palButton.Checked && !ntscButton.Checked) - { - throw new Exception("Can't construct new C64 because you didn't choose anything"); - } - return palButton.Checked ? DisplayType.PAL : DisplayType.NTSC; - }*/ + ((BasicServiceProvider) ServiceProvider).Register(_board.Vic); + ((BasicServiceProvider) ServiceProvider).Register(_board.Serial); + } // internal variables - private int _frame = 0; - private int cyclesPerFrame; - private InputFileInfo inputFileInfo; + private int _frame; + [SaveState.DoNotSave] private readonly int _cyclesPerFrame; + [SaveState.DoNotSave] private InputFileInfo _inputFileInfo; + private bool _driveLed; - // bizhawk I/O - public CoreComm CoreComm { get; private set; } + // bizhawk I/O + [SaveState.DoNotSave] public CoreComm CoreComm { get; private set; } - // game/rom specific - public GameInfo game; - public string SystemId { get { return "C64"; } } + // game/rom specific + [SaveState.DoNotSave] public GameInfo Game; + [SaveState.DoNotSave] public string SystemId { get { return "C64"; } } - public string BoardName { get { return null; } } + [SaveState.DoNotSave] public string BoardName { get { return null; } } // running state public bool DeterministicEmulation { get { return true; } set { ; } } - public int Frame { get { return _frame; } set { _frame = value; } } + [SaveState.DoNotSave] public int Frame { get { return _frame; } set { _frame = value; } } public void ResetCounters() { _frame = 0; - _lagcount = 0; - _islag = false; - frameCycles = 0; + LagCount = 0; + IsLagFrame = false; + _frameCycles = 0; } // audio/video public void EndAsyncSound() { } //TODO - public ISoundProvider SoundProvider { get { return null; } } + [SaveState.DoNotSave] public ISoundProvider SoundProvider { get { return null; } } public bool StartAsyncSound() { return false; } //TODO - public ISyncSoundProvider SyncSoundProvider { get { return board.sid.resampler; } } + [SaveState.DoNotSave] public ISyncSoundProvider SyncSoundProvider { get { return DCFilter.AsISyncSoundProvider(_board.Sid, 512); } } // controller - public ControllerDefinition ControllerDefinition { get { return C64ControllerDefinition; } } - public IController Controller { get { return board.controller; } set { board.controller = value; } } - public static readonly ControllerDefinition C64ControllerDefinition = new ControllerDefinition + [SaveState.DoNotSave] public ControllerDefinition ControllerDefinition { get { return C64ControllerDefinition; } } + [SaveState.DoNotSave] public IController Controller { get { return _board.Controller; } set { _board.Controller = value; } } + + [SaveState.DoNotSave] + private static readonly ControllerDefinition C64ControllerDefinition = new ControllerDefinition { Name = "Commodore 64 Controller", BoolButtons = @@ -111,7 +112,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 } }; - public IEmulatorServiceProvider ServiceProvider { get; private set; } + [SaveState.DoNotSave] public IEmulatorServiceProvider ServiceProvider { get; private set; } public DisplayType Region { @@ -121,14 +122,9 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 public void Dispose() { - if (board.sid != null) - { - board.sid.Dispose(); - board.sid = null; - } } - int frameCycles; + private int _frameCycles; // process frame public void FrameAdvance(bool render, bool rendersound) @@ -137,130 +133,157 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 { DoCycle(); } - while (frameCycles != 0); + while (_frameCycles != 0); } private void DoCycle() { - if (frameCycles == 0) { - board.inputRead = false; - board.PollInput(); - board.cpu.LagCycles = 0; + if (_frameCycles == 0) { + _board.InputRead = false; + _board.PollInput(); + _board.Cpu.LagCycles = 0; } - //disk.Execute(); - board.Execute(); - frameCycles++; + _driveLed = _board.Serial.ReadDeviceLight(); + + _board.Execute(); + _frameCycles++; // load PRG file if needed - if (loadPrg) + if (_loadPrg) { // check to see if cpu PC is at the BASIC warm start vector - if (board.cpu.PC == ((board.ram.Peek(0x0303) << 8) | board.ram.Peek(0x0302))) + if (_board.Cpu.Pc != 0 && _board.Cpu.Pc == ((_board.Ram.Peek(0x0303) << 8) | _board.Ram.Peek(0x0302))) { - //board.ram.Poke(0x0302, 0xAE); - //board.ram.Poke(0x0303, 0xA7); - ////board.ram.Poke(0x0302, board.ram.Peek(0x0308)); - ////board.ram.Poke(0x0303, board.ram.Peek(0x0309)); - - //if (inputFileInfo.Data.Length >= 6) - //{ - // board.ram.Poke(0x0039, inputFileInfo.Data[4]); - // board.ram.Poke(0x003A, inputFileInfo.Data[5]); - //} - PRG.Load(board.pla, inputFileInfo.Data); - loadPrg = false; + Prg.Load(_board.Pla, _inputFileInfo.Data); + _loadPrg = false; } } - if (frameCycles == cyclesPerFrame) - { - board.Flush(); - _islag = !board.inputRead; + if (_frameCycles != _cyclesPerFrame) + { + return; + } - if (_islag) - _lagcount++; - frameCycles -= cyclesPerFrame; - _frame++; + _board.Flush(); + IsLagFrame = !_board.InputRead; - //Console.WriteLine("CPUPC: " + C64Util.ToHex(board.cpu.PC, 4) + " 1541PC: " + C64Util.ToHex(disk.PC, 4)); - - int test = board.cpu.LagCycles; - DriveLightOn = DriveLED; - } + if (IsLagFrame) + LagCount++; + _frameCycles -= _cyclesPerFrame; + _frame++; } private void HandleFirmwareError(string file) { - System.Windows.Forms.MessageBox.Show("the C64 core is referencing a firmware file which could not be found. Please make sure it's in your configured C64 firmwares folder. The referenced filename is: " + file); + MessageBox.Show("the C64 core is referencing a firmware file which could not be found. Please make sure it's in your configured C64 firmwares folder. The referenced filename is: " + file); throw new FileNotFoundException(); } - private Motherboard board; - private bool loadPrg; + private Motherboard _board; + private bool _loadPrg; - private byte[] GetFirmware(string name, int length) + private byte[] GetFirmware(int length, params string[] names) { - byte[] result = CoreComm.CoreFileProvider.GetFirmware("C64", name, true); - if (result.Length != length) - throw new MissingFirmwareException(string.Format("Firmware {0} was {1} bytes, should be {2} bytes", name, result.Length, length)); + var result = names.Select(n => CoreComm.CoreFileProvider.GetFirmware("C64", n, false)).FirstOrDefault(b => b != null && b.Length == length); + if (result == null) + throw new MissingFirmwareException(string.Format("At least one of these firmwares is required: {0}", string.Join(", ", names))); return result; } - private void Init(VicType initRegion) + private void Init(VicType initRegion, BorderType borderType, SidType sidType, TapeDriveType tapeDriveType, DiskDriveType diskDriveType) { - board = new Motherboard(this, initRegion); - InitRoms(); - board.Init(); + // Force certain drive types to be available depending on ROM type + switch (_inputFileInfo.Extension.ToUpper()) + { + case @".D64": + case @".G64": + if (diskDriveType == DiskDriveType.None) + { + diskDriveType = DiskDriveType.Commodore1541; + } + break; + case @".TAP": + if (tapeDriveType == TapeDriveType.None) + { + tapeDriveType = TapeDriveType.Commodore1530; + } + break; + } + + _board = new Motherboard(this, initRegion, borderType, sidType, tapeDriveType, diskDriveType); + InitRoms(diskDriveType); + _board.Init(); InitMedia(); - // configure video - CoreComm.VsyncDen = board.vic.CyclesPerFrame; - CoreComm.VsyncNum = board.vic.CyclesPerSecond; - } + + + // configure video + CoreComm.VsyncDen = _board.Vic.CyclesPerFrame; + CoreComm.VsyncNum = _board.Vic.CyclesPerSecond; + } private void InitMedia() { - switch (inputFileInfo.Extension.ToUpper()) + switch (_inputFileInfo.Extension.ToUpper()) { - case @".CRT": - Cart cart = Cart.Load(inputFileInfo.Data); + case @".D64": + var d64 = D64.Read(_inputFileInfo.Data); + if (d64 != null) + { + _board.DiskDrive.InsertMedia(d64); + } + break; + case @".G64": + var g64 = G64.Read(_inputFileInfo.Data); + if (g64 != null) + { + _board.DiskDrive.InsertMedia(g64); + } + break; + case @".CRT": + var cart = CartridgeDevice.Load(_inputFileInfo.Data); if (cart != null) { - board.cartPort.Connect(cart); + _board.CartPort.Connect(cart); } break; case @".TAP": - CassettePort.Tape tape = CassettePort.Tape.Load(inputFileInfo.Data); + var tape = Tape.Load(_inputFileInfo.Data); if (tape != null) { - board.cassPort.Connect(tape); + _board.TapeDrive.Insert(tape); } break; case @".PRG": - if (inputFileInfo.Data.Length > 2) - loadPrg = true; + if (_inputFileInfo.Data.Length > 2) + _loadPrg = true; break; } } - private void InitRoms() + private void InitRoms(DiskDriveType diskDriveType) { - byte[] basicRom = GetFirmware("Basic", 0x2000); - byte[] charRom = GetFirmware("Chargen", 0x1000); - byte[] kernalRom = GetFirmware("Kernal", 0x2000); + var basicRom = GetFirmware(0x2000, "Basic"); + var charRom = GetFirmware(0x1000, "Chargen"); + var kernalRom = GetFirmware(0x2000, "Kernal"); - board.basicRom = new Chip23XX(Chip23XXmodel.Chip2364, basicRom); - board.kernalRom = new Chip23XX(Chip23XXmodel.Chip2364, kernalRom); - board.charRom = new Chip23XX(Chip23XXmodel.Chip2332, charRom); + _board.BasicRom.Flash(basicRom); + _board.KernalRom.Flash(kernalRom); + _board.CharRom.Flash(charRom); + + if (diskDriveType == DiskDriveType.Commodore1541) + { + var diskRom = GetFirmware(0x4000, "Drive1541II", "Drive1541"); + _board.DiskDrive.DriveRom.Flash(diskRom); + } } // ------------------------------------ public void HardReset() { - board.HardReset(); - //disk.HardReset(); + _board.HardReset(); } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64Util.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64Util.cs index 3dcf7699dc..c2bfab34b4 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64Util.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64Util.cs @@ -1,35 +1,37 @@ -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +using System.Text; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64 { public static class C64Util { - static public string ToBinary(int n, int charsmin) + public static string ToBinary(int n, int charsmin) { - string result = ""; + var result = new StringBuilder(string.Empty); while (n > 0 || charsmin > 0) { - result = (((n & 0x1) != 0) ? "1" : "0") + result; + result.Insert(0, (n & 0x1) != 0 ? "1" : "0"); n >>= 1; if (charsmin > 0) charsmin--; } - return result; + return result.ToString(); } - static public string ToHex(int n, int charsmin) + public static string ToHex(int n, int charsmin) { - string result = ""; + var result = new StringBuilder(string.Empty); - while (n > 0 || charsmin > 0) + while (n > 0 || charsmin > 0) { - result = "0123456789ABCDEF".Substring((n & 0xF), 1) + result; + result.Insert(0, "0123456789ABCDEF".Substring(n & 0xF, 1)); n >>= 4; if (charsmin > 0) charsmin--; } - return result; + return result.ToString(); } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Cart.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Cart.cs deleted file mode 100644 index db3a548db1..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Cart.cs +++ /dev/null @@ -1,268 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; - -using BizHawk.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64 -{ - // this is the base cartridge class - - public class Cart - { - // --------------------------------- - - static public Cart Load(byte[] crtFile) - { - Cart result = null; - MemoryStream mem = new MemoryStream(crtFile); - BinaryReader reader = new BinaryReader(mem); - - if (new string(reader.ReadChars(16)) == "C64 CARTRIDGE ") - { - List chipAddress = new List(); - List chipBank = new List(); - List chipData = new List(); - List chipType = new List(); - - int headerLength = ReadCRTInt(reader); - int version = ReadCRTShort(reader); - int mapper = ReadCRTShort(reader); - bool exrom = (reader.ReadByte() != 0); - bool game = (reader.ReadByte() != 0); - - // reserved - reader.ReadBytes(6); - - // cartridge name - reader.ReadBytes(0x20); - - // skip extra header bytes - if (headerLength > 0x40) - { - reader.ReadBytes(headerLength - 0x40); - } - - // read chips - while (reader.PeekChar() >= 0) - { - if (new string(reader.ReadChars(4)) == "CHIP") - { - int chipLength = ReadCRTInt(reader); - chipType.Add(ReadCRTShort(reader)); - chipBank.Add(ReadCRTShort(reader)); - chipAddress.Add(ReadCRTShort(reader)); - int chipDataLength = ReadCRTShort(reader); - chipData.Add(reader.ReadBytes(chipDataLength)); - chipLength -= (chipDataLength + 0x10); - if (chipLength > 0) - reader.ReadBytes(chipLength); - } - } - - if (chipData.Count > 0) - { - switch (mapper) - { - case 0x0000: - result = new Mapper0000(chipAddress, chipBank, chipData, game, exrom); - break; - case 0x0005: - result = new Mapper0005(chipAddress, chipBank, chipData); - break; - case 0x000B: - result = new Mapper000B(chipAddress, chipBank, chipData); - break; - case 0x000F: - result = new Mapper000F(chipAddress, chipBank, chipData); - break; - case 0x0011: - result = new Mapper0011(chipAddress, chipBank, chipData); - break; - case 0x0012: - result = new Mapper0012(chipAddress, chipBank, chipData); - break; - case 0x0013: - result = new Mapper0013(chipAddress, chipBank, chipData); - break; - case 0x0020: - result = new Mapper0020(chipAddress, chipBank, chipData); - break; - default: - throw new Exception("This cartridge file uses an unrecognized mapper: " + mapper); - } - result.HardReset(); - } - } - - return result; - } - - static private int ReadCRTShort(BinaryReader reader) - { - int result; - result = (int)reader.ReadByte() << 8; - result |= (int)reader.ReadByte(); - return result; - } - - static private int ReadCRTInt(BinaryReader reader) - { - int result; - result = (int)reader.ReadByte() << 24; - result |= (int)reader.ReadByte() << 16; - result |= (int)reader.ReadByte() << 8; - result |= (int)reader.ReadByte(); - return result; - } - - // --------------------------------- - - protected bool pinExRom; - protected bool pinGame; - protected bool pinIRQ; - protected bool pinNMI; - protected bool pinReset; - protected bool validCartridge; - - public virtual void ExecutePhase1() - { - } - - public virtual void ExecutePhase2() - { - } - - public bool ExRom - { - get - { - return pinExRom; - } - } - - public bool Game - { - get - { - return pinGame; - } - } - - public virtual void HardReset() - { - pinIRQ = true; - pinNMI = true; - pinReset = true; - } - - public bool IRQ - { - get - { - return pinIRQ; - } - } - - public bool NMI - { - get - { - return pinNMI; - } - } - - public virtual byte Peek8000(int addr) - { - return 0xFF; - } - - public virtual byte PeekA000(int addr) - { - return 0xFF; - } - - public virtual byte PeekDE00(int addr) - { - return 0xFF; - } - - public virtual byte PeekDF00(int addr) - { - return 0xFF; - } - - public virtual void Poke8000(int addr, byte val) - { - } - - public virtual void PokeA000(int addr, byte val) - { - } - - public virtual void PokeDE00(int addr, byte val) - { - } - - public virtual void PokeDF00(int addr, byte val) - { - } - - public virtual byte Read8000(int addr) - { - return 0xFF; - } - - public virtual byte ReadA000(int addr) - { - return 0xFF; - } - - public virtual byte ReadDE00(int addr) - { - return 0xFF; - } - - public virtual byte ReadDF00(int addr) - { - return 0xFF; - } - - public bool Reset - { - get - { - return pinReset; - } - } - - public virtual void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - - public bool Valid - { - get - { - return validCartridge; - } - } - - public virtual void Write8000(int addr, byte val) - { - } - - public virtual void WriteA000(int addr, byte val) - { - } - - public virtual void WriteDE00(int addr, byte val) - { - } - - public virtual void WriteDF00(int addr, byte val) - { - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/CartridgeDevice.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/CartridgeDevice.cs new file mode 100644 index 0000000000..4e322315d4 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/CartridgeDevice.cs @@ -0,0 +1,268 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge +{ + public abstract partial class CartridgeDevice + { + // --------------------------------- + + public static CartridgeDevice Load(byte[] crtFile) + { + var mem = new MemoryStream(crtFile); + var reader = new BinaryReader(mem); + + if (new string(reader.ReadChars(16)) != "C64 CARTRIDGE ") + { + return null; + } + + var chipAddress = new List(); + var chipBank = new List(); + var chipData = new List(); + var chipType = new List(); + + var headerLength = ReadCRTInt(reader); + var version = ReadCRTShort(reader); + var mapper = ReadCRTShort(reader); + var exrom = reader.ReadByte() != 0; + var game = reader.ReadByte() != 0; + + // reserved + reader.ReadBytes(6); + + // cartridge name + reader.ReadBytes(0x20); + + // skip extra header bytes + if (headerLength > 0x40) + { + reader.ReadBytes(headerLength - 0x40); + } + + // read chips + while (reader.PeekChar() >= 0) + { + if (new string(reader.ReadChars(4)) != "CHIP") + { + break; + } + + var chipLength = ReadCRTInt(reader); + chipType.Add(ReadCRTShort(reader)); + chipBank.Add(ReadCRTShort(reader)); + chipAddress.Add(ReadCRTShort(reader)); + var chipDataLength = ReadCRTShort(reader); + chipData.Add(reader.ReadBytes(chipDataLength).Select(x => (int)x).ToArray()); + chipLength -= chipDataLength + 0x10; + if (chipLength > 0) + reader.ReadBytes(chipLength); + } + + if (chipData.Count <= 0) + { + return null; + } + + CartridgeDevice result; + switch (mapper) + { + case 0x0000: + result = new Mapper0000(chipAddress, chipBank, chipData, game, exrom); + break; + case 0x0005: + result = new Mapper0005(chipAddress, chipBank, chipData); + break; + case 0x000B: + result = new Mapper000B(chipAddress, chipBank, chipData); + break; + case 0x000F: + result = new Mapper000F(chipAddress, chipBank, chipData); + break; + case 0x0011: + result = new Mapper0011(chipAddress, chipBank, chipData); + break; + case 0x0012: + result = new Mapper0012(chipAddress, chipBank, chipData); + break; + case 0x0013: + result = new Mapper0013(chipAddress, chipBank, chipData); + break; + case 0x0020: + result = new Mapper0020(chipAddress, chipBank, chipData); + break; + default: + throw new Exception("This cartridge file uses an unrecognized mapper: " + mapper); + } + result.HardReset(); + + return result; + } + + private static int ReadCRTShort(BinaryReader reader) + { + return (reader.ReadByte() << 8) | + reader.ReadByte(); + } + + private static int ReadCRTInt(BinaryReader reader) + { + return (reader.ReadByte() << 24) | + (reader.ReadByte() << 16) | + (reader.ReadByte() << 8) | + reader.ReadByte(); + } + + // --------------------------------- + + protected bool pinExRom; + protected bool pinGame; + protected bool pinIRQ; + protected bool pinNMI; + protected bool pinReset; + protected bool validCartridge; + + public virtual void ExecutePhase1() + { + } + + public virtual void ExecutePhase2() + { + } + + public bool ExRom + { + get + { + return pinExRom; + } + } + + public bool Game + { + get + { + return pinGame; + } + } + + public virtual void HardReset() + { + pinIRQ = true; + pinNMI = true; + pinReset = true; + } + + public bool IRQ + { + get + { + return pinIRQ; + } + } + + public bool NMI + { + get + { + return pinNMI; + } + } + + public virtual int Peek8000(int addr) + { + return 0xFF; + } + + public virtual int PeekA000(int addr) + { + return 0xFF; + } + + public virtual int PeekDE00(int addr) + { + return 0xFF; + } + + public virtual int PeekDF00(int addr) + { + return 0xFF; + } + + public virtual void Poke8000(int addr, int val) + { + } + + public virtual void PokeA000(int addr, int val) + { + } + + public virtual void PokeDE00(int addr, int val) + { + } + + public virtual void PokeDF00(int addr, int val) + { + } + + public virtual int Read8000(int addr) + { + return 0xFF; + } + + public virtual int ReadA000(int addr) + { + return 0xFF; + } + + public virtual int ReadDE00(int addr) + { + return 0xFF; + } + + public virtual int ReadDF00(int addr) + { + return 0xFF; + } + + public bool Reset + { + get + { + return pinReset; + } + } + + public virtual void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + + public bool Valid + { + get + { + return validCartridge; + } + } + + public virtual void Write8000(int addr, int val) + { + } + + public virtual void WriteA000(int addr, int val) + { + } + + public virtual void WriteDE00(int addr, int val) + { + } + + public virtual void WriteDF00(int addr, int val) + { + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/CartridgePort.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/CartridgePort.cs new file mode 100644 index 0000000000..8ea04893cb --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/CartridgePort.cs @@ -0,0 +1,124 @@ +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge +{ + public sealed class CartridgePort + { + private CartridgeDevice _cartridgeDevice; + private bool _connected; + + public CartridgePort() + { + // start up with no media connected + Disconnect(); + } + + // ------------------------------------------ + + public int PeekHiExp(int addr) + { + return _connected ? _cartridgeDevice.PeekDF00(addr & 0x00FF) : 0xFF; + } + + public int PeekHiRom(int addr) + { + return _connected ? _cartridgeDevice.PeekA000(addr & 0x1FFF) : 0xFF; + } + + public int PeekLoExp(int addr) + { + return _connected ? _cartridgeDevice.PeekDE00(addr & 0x00FF) : 0xFF; + } + + public int PeekLoRom(int addr) + { + return _connected ? _cartridgeDevice.Peek8000(addr & 0x1FFF) : 0xFF; + } + + public void PokeHiExp(int addr, int val) { if (_connected) { _cartridgeDevice.PokeDF00(addr & 0x00FF, val); } } + public void PokeHiRom(int addr, int val) { if (_connected) { _cartridgeDevice.PokeA000(addr & 0x1FFF, val); } } + public void PokeLoExp(int addr, int val) { if (_connected) { _cartridgeDevice.PokeDE00(addr & 0x00FF, val); } } + public void PokeLoRom(int addr, int val) { if (_connected) { _cartridgeDevice.Poke8000(addr & 0x1FFF, val); } } + + public bool ReadExRom() + { + return !_connected || _cartridgeDevice.ExRom; + } + + public bool ReadGame() + { + return !_connected || _cartridgeDevice.Game; + } + + public int ReadHiExp(int addr) + { + return _connected ? _cartridgeDevice.ReadDF00(addr & 0x00FF) : 0xFF; + } + + public int ReadHiRom(int addr) + { + return _connected ? _cartridgeDevice.ReadA000(addr & 0x1FFF) : 0xFF; + } + + public int ReadLoExp(int addr) + { + return _connected ? _cartridgeDevice.ReadDE00(addr & 0x00FF) : 0xFF; + } + + public int ReadLoRom(int addr) + { + return _connected ? _cartridgeDevice.Read8000(addr & 0x1FFF) : 0xFF; + } + + public void WriteHiExp(int addr, int val) { if (_connected) { _cartridgeDevice.WriteDF00(addr & 0x00FF, val); } } + public void WriteHiRom(int addr, int val) { if (_connected) { _cartridgeDevice.WriteA000(addr & 0x1FFF, val); } } + public void WriteLoExp(int addr, int val) { if (_connected) { _cartridgeDevice.WriteDE00(addr & 0x00FF, val); } } + public void WriteLoRom(int addr, int val) { if (_connected) { _cartridgeDevice.Write8000(addr & 0x1FFF, val); } } + + // ------------------------------------------ + + public void Connect(CartridgeDevice newCartridgeDevice) + { + _connected = true; + _cartridgeDevice = newCartridgeDevice; + } + + public void Disconnect() + { + _cartridgeDevice = null; + _connected = false; + } + + public void HardReset() + { + // note: this will not disconnect any attached media + if (_connected) + { + _cartridgeDevice.HardReset(); + } + } + + public bool IsConnected + { + get + { + return _connected; + } + } + + public bool ReadIrq() + { + return !_connected || _cartridgeDevice.IRQ; + } + + public bool ReadNmi() + { + return !_connected || _cartridgeDevice.NMI; + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0000.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0000.cs index 39dd6730cb..1aa840440c 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0000.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0000.cs @@ -1,96 +1,100 @@ using System; using System.Collections.Generic; +using System.Linq; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge { - sealed public class Mapper0000 : Cart - { - private byte[] romA; - private int romAMask; - private byte[] romB; - private int romBMask; + public abstract partial class CartridgeDevice + { + private sealed class Mapper0000 : CartridgeDevice + { + private readonly int[] _romA; + private readonly int _romAMask; + private readonly int[] _romB; + private readonly int _romBMask; - // standard cartridge mapper (Commodore) - // note that this format also covers Ultimax carts + // standard cartridge mapper (Commodore) + // note that this format also covers Ultimax carts - public Mapper0000(List newAddresses, List newBanks, List newData, bool game, bool exrom) - { - pinGame = game; - pinExRom = exrom; + public Mapper0000(IList newAddresses, IList newBanks, IList newData, bool game, bool exrom) + { + pinGame = game; + pinExRom = exrom; - validCartridge = true; - - // default to empty banks - romA = new byte[1]; - romB = new byte[1]; - romA[0] = 0xFF; - romB[0] = 0xFF; + validCartridge = true; - for (int i = 0; i < newAddresses.Count; i++) - { - if (newAddresses[i] == 0x8000) - { - switch (newData[i].Length) - { - case 0x1000: - romAMask = 0x0FFF; - romA = newData[i]; - break; - case 0x2000: - romAMask = 0x1FFF; - romA = newData[i]; - break; - case 0x4000: - romAMask = 0x1FFF; - romBMask = 0x1FFF; - // split the rom into two banks - romA = new byte[0x2000]; - romB = new byte[0x2000]; - Array.Copy(newData[i], 0x0000, romA, 0x0000, 0x2000); - Array.Copy(newData[i], 0x2000, romB, 0x0000, 0x2000); - break; - default: - validCartridge = false; - return; - } - } - else if (newAddresses[i] == 0xA000 || newAddresses[i] == 0xE000) - { - switch (newData[i].Length) - { - case 0x1000: - romBMask = 0x0FFF; - break; - case 0x2000: - romBMask = 0x1FFF; - break; - default: - validCartridge = false; - return; - } - romB = newData[i]; - } - } - } + // default to empty banks + _romA = new int[1]; + _romB = new int[1]; + _romA[0] = 0xFF; + _romB[0] = 0xFF; - public override byte Peek8000(int addr) - { - return romA[addr & romAMask]; - } + for (var i = 0; i < newAddresses.Count; i++) + { + if (newAddresses[i] == 0x8000) + { + switch (newData[i].Length) + { + case 0x1000: + _romAMask = 0x0FFF; + _romA = newData[i]; + break; + case 0x2000: + _romAMask = 0x1FFF; + _romA = newData[i]; + break; + case 0x4000: + _romAMask = 0x1FFF; + _romBMask = 0x1FFF; + // split the rom into two banks + _romA = new int[0x2000]; + _romB = new int[0x2000]; + Array.Copy(newData[i], 0x0000, _romA, 0x0000, 0x2000); + Array.Copy(newData[i], 0x2000, _romB, 0x0000, 0x2000); + break; + default: + validCartridge = false; + return; + } + } + else if (newAddresses[i] == 0xA000 || newAddresses[i] == 0xE000) + { + switch (newData[i].Length) + { + case 0x1000: + _romBMask = 0x0FFF; + break; + case 0x2000: + _romBMask = 0x1FFF; + break; + default: + validCartridge = false; + return; + } + _romB = newData[i]; + } + } + } - public override byte PeekA000(int addr) - { - return romB[addr & romBMask]; - } + public override int Peek8000(int addr) + { + return _romA[addr & _romAMask]; + } - public override byte Read8000(int addr) - { - return romA[addr & romAMask]; - } + public override int PeekA000(int addr) + { + return _romB[addr & _romBMask]; + } - public override byte ReadA000(int addr) - { - return romB[addr & romBMask]; - } - } + public override int Read8000(int addr) + { + return _romA[addr & _romAMask]; + } + + public override int ReadA000(int addr) + { + return _romB[addr & _romBMask]; + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0005.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0005.cs index 8169984eb1..a8fe648890 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0005.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0005.cs @@ -1,159 +1,150 @@ using System; using System.Collections.Generic; - +using System.Linq; using BizHawk.Common; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge { - sealed public class Mapper0005 : Cart - { - private byte[][] banksA = new byte[0][]; //8000 - private byte[][] banksB = new byte[0][]; //A000 - private int bankMask; - private int bankNumber; - private byte[] currentBankA; - private byte[] currentBankB; - private byte[] dummyBank; + public abstract partial class CartridgeDevice + { + private sealed class Mapper0005 : CartridgeDevice + { + private readonly int[][] _banksA; //8000 + private readonly int[][] _banksB = new int[0][]; //A000 + private readonly int _bankMask; + private int _bankNumber; + private int[] _currentBankA; + private int[] _currentBankB; + private readonly int[] _dummyBank; - public Mapper0005(List newAddresses, List newBanks, List newData) - { - int count = newAddresses.Count; + public Mapper0005(IList newAddresses, IList newBanks, IList newData) + { + var count = newAddresses.Count; - // build dummy bank - dummyBank = new byte[0x2000]; - for (int i = 0; i < 0x2000; i++) - dummyBank[i] = 0xFF; // todo: determine if this is correct + // build dummy bank + _dummyBank = new int[0x2000]; + for (var i = 0; i < 0x2000; i++) + _dummyBank[i] = 0xFF; // todo: determine if this is correct - if (count == 64) //512k - { - pinGame = true; - pinExRom = false; - bankMask = 0x3F; - banksA = new byte[64][]; - } - else if (count == 32) //256k - { - // this specific config is a weird exception - pinGame = false; - pinExRom = false; - bankMask = 0x0F; - banksA = new byte[16][]; - banksB = new byte[16][]; - } - else if (count == 16) //128k - { - pinGame = true; - pinExRom = false; - bankMask = 0x0F; - banksA = new byte[16][]; - } - else if (count == 8) //64k - { - pinGame = true; - pinExRom = false; - bankMask = 0x07; - banksA = new byte[8][]; - } - else if (count == 4) //32k - { - pinGame = true; - pinExRom = false; - bankMask = 0x03; - banksA = new byte[4][]; - } - else if (count == 2) //16k - { - pinGame = true; - pinExRom = false; - bankMask = 0x01; - banksA = new byte[2][]; - } - else if (count == 1) //8k - { - pinGame = true; - pinExRom = false; - bankMask = 0x00; - banksA = new byte[1][]; - } - else - { - // we don't know what format this is... - throw new Exception("This looks like an Ocean cartridge but cannot be loaded..."); - } + switch (count) + { + case 64: + pinGame = true; + pinExRom = false; + _bankMask = 0x3F; + _banksA = new int[64][]; + break; + case 32: + // this specific config is a weird exception + pinGame = false; + pinExRom = false; + _bankMask = 0x0F; + _banksA = new int[16][]; + _banksB = new int[16][]; + break; + case 16: + pinGame = true; + pinExRom = false; + _bankMask = 0x0F; + _banksA = new int[16][]; + break; + case 8: + pinGame = true; + pinExRom = false; + _bankMask = 0x07; + _banksA = new int[8][]; + break; + case 4: + pinGame = true; + pinExRom = false; + _bankMask = 0x03; + _banksA = new int[4][]; + break; + case 2: + pinGame = true; + pinExRom = false; + _bankMask = 0x01; + _banksA = new int[2][]; + break; + case 1: + pinGame = true; + pinExRom = false; + _bankMask = 0x00; + _banksA = new int[1][]; + break; + default: + throw new Exception("This looks like an Ocean cartridge but cannot be loaded..."); + } - // for safety, initialize all banks to dummy - for (int i = 0; i < banksA.Length; i++) - banksA[i] = dummyBank; - for (int i = 0; i < banksB.Length; i++) - banksB[i] = dummyBank; + // for safety, initialize all banks to dummy + for (var i = 0; i < _banksA.Length; i++) + _banksA[i] = _dummyBank; + for (var i = 0; i < _banksB.Length; i++) + _banksB[i] = _dummyBank; - // now load in the banks - for (int i = 0; i < count; i++) - { - if (newAddresses[i] == 0x8000) - { - banksA[newBanks[i] & bankMask] = newData[i]; - } - else if (newAddresses[i] == 0xA000 || newAddresses[i] == 0xE000) - { - banksB[newBanks[i] & bankMask] = newData[i]; - } - } + // now load in the banks + for (var i = 0; i < count; i++) + { + switch (newAddresses[i]) + { + case 0x8000: + _banksA[newBanks[i] & _bankMask] = newData[i]; + break; + case 0xA000: + case 0xE000: + _banksB[newBanks[i] & _bankMask] = newData[i]; + break; + } + } - BankSet(0); - } + BankSet(0); + } - private void BankSet(int index) - { - bankNumber = index & bankMask; - if (!pinExRom) - currentBankA = banksA[bankNumber]; - else - currentBankA = dummyBank; + private void BankSet(int index) + { + _bankNumber = index & _bankMask; + _currentBankA = !pinExRom ? _banksA[_bankNumber] : _dummyBank; + _currentBankB = !pinGame ? _banksB[_bankNumber] : _dummyBank; + } - if (!pinGame) - currentBankB = banksB[bankNumber]; - else - currentBankB = dummyBank; - } + public override int Peek8000(int addr) + { + return _currentBankA[addr]; + } - public override byte Peek8000(int addr) - { - return currentBankA[addr]; - } + public override int PeekA000(int addr) + { + return _currentBankB[addr]; + } - public override byte PeekA000(int addr) - { - return currentBankB[addr]; - } + public override void PokeDE00(int addr, int val) + { + if (addr == 0x00) + BankSet(val); + } - public override void PokeDE00(int addr, byte val) - { - if (addr == 0x00) - BankSet(val); - } + public override int Read8000(int addr) + { + return _currentBankA[addr]; + } - public override byte Read8000(int addr) - { - return currentBankA[addr]; - } + public override int ReadA000(int addr) + { + return _currentBankB[addr]; + } - public override byte ReadA000(int addr) - { - return currentBankB[addr]; - } + public override void WriteDE00(int addr, int val) + { + if (addr == 0x00) + BankSet(val); + } - public override void WriteDE00(int addr, byte val) - { - if (addr == 0x00) - BankSet(val); - } - - public override void SyncState(Serializer ser) - { - base.SyncState(ser); - if (ser.IsReader) - BankSet(bankNumber); - } - } + public override void SyncState(Serializer ser) + { + base.SyncState(ser); + if (ser.IsReader) + BankSet(_bankNumber); + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper000B.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper000B.cs index 222c490207..ab46dfe7e1 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper000B.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper000B.cs @@ -1,57 +1,63 @@ using System; using System.Collections.Generic; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge { - // Westermann Learning mapper. - // Starts up with both banks enabled, any read to DFxx - // turns off the high bank by bringing GAME high. - // I suspect that the game loads by copying all hirom to - // the RAM underneath (BASIC variable values probably) - // and then disables once loaded. + // Westermann Learning mapper. + // Starts up with both banks enabled, any read to DFxx + // turns off the high bank by bringing GAME high. + // I suspect that the game loads by copying all hirom to + // the RAM underneath (BASIC variable values probably) + // and then disables once loaded. - sealed public class Mapper000B : Cart - { - private byte[] rom = new byte[0x4000]; + public abstract partial class CartridgeDevice + { + private sealed class Mapper000B : CartridgeDevice + { + private readonly int[] _rom = new int[0x4000]; - public Mapper000B(List newAddresses, List newBanks, List newData) - { - validCartridge = false; + public Mapper000B(IList newAddresses, IList newBanks, IList newData) + { + validCartridge = false; - for (int i = 0; i < 0x4000; i++) - rom[i] = 0xFF; + for (var i = 0; i < 0x4000; i++) + _rom[i] = 0xFF; - if (newAddresses[0] == 0x8000) - { - Array.Copy(newData[0], rom, Math.Min(newData[0].Length, 0x4000)); - validCartridge = true; - } - } + if (newAddresses[0] != 0x8000) + { + return; + } - public override byte Peek8000(int addr) - { - return rom[addr]; - } + Array.Copy(newData[0], _rom, Math.Min(newData[0].Length, 0x4000)); + validCartridge = true; + } - public override byte PeekA000(int addr) - { - return rom[addr | 0x2000]; - } + public override int Peek8000(int addr) + { + return _rom[addr]; + } - public override byte Read8000(int addr) - { - return rom[addr]; - } + public override int PeekA000(int addr) + { + return _rom[addr | 0x2000]; + } - public override byte ReadA000(int addr) - { - return rom[addr | 0x2000]; - } + public override int Read8000(int addr) + { + return _rom[addr]; + } + + public override int ReadA000(int addr) + { + return _rom[addr | 0x2000]; + } + + public override int ReadDF00(int addr) + { + pinGame = true; + return base.ReadDF00(addr); + } + } + } - public override byte ReadDF00(int addr) - { - pinGame = true; - return base.ReadDF00(addr); - } - } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper000F.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper000F.cs index 5b8634ea43..2cec7f2eb4 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper000F.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper000F.cs @@ -1,130 +1,125 @@ using System; using System.Collections.Generic; - +using System.Linq; using BizHawk.Common; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge { - // This is a mapper used commonly by System 3. It is - // also utilized by the short-lived C64 Game System. + // This is a mapper used commonly by System 3. It is + // also utilized by the short-lived C64 Game System. - // Bank select is DExx. You select them by writing to the - // register DE00+BankNr. For example, bank 01 is a write - // to DE01. + // Bank select is DExx. You select them by writing to the + // register DE00+BankNr. For example, bank 01 is a write + // to DE01. - public class Mapper000F : Cart - { - private byte[][] banks = new byte[0][]; //8000 - private int bankMask; - private int bankNumber; - private byte[] currentBank; - private byte[] dummyBank; + public abstract partial class CartridgeDevice + { + private class Mapper000F : CartridgeDevice + { + private readonly int[][] _banks; //8000 + private readonly int _bankMask; + private int _bankNumber; + private int[] _currentBank; - public Mapper000F(List newAddresses, List newBanks, List newData) - { - int count = newAddresses.Count; + public Mapper000F(IList newAddresses, IList newBanks, IList newData) + { + var count = newAddresses.Count; - pinGame = true; - pinExRom = false; + pinGame = true; + pinExRom = false; - // build dummy bank - dummyBank = new byte[0x2000]; - for (int i = 0; i < 0x2000; i++) - dummyBank[i] = 0xFF; // todo: determine if this is correct + // build dummy bank + var dummyBank = new int[0x2000]; + for (var i = 0; i < 0x2000; i++) + dummyBank[i] = 0xFF; // todo: determine if this is correct - if (count == 64) //512k - { - bankMask = 0x3F; - banks = new byte[64][]; - } - else if (count == 32) //256k - { - bankMask = 0x1F; - banks = new byte[32][]; - } - else if (count == 16) //128k - { - bankMask = 0x0F; - banks = new byte[16][]; - } - else if (count == 8) //64k - { - bankMask = 0x07; - banks = new byte[8][]; - } - else if (count == 4) //32k - { - bankMask = 0x03; - banks = new byte[4][]; - } - else if (count == 2) //16k - { - bankMask = 0x01; - banks = new byte[2][]; - } - else if (count == 1) //8k - { - bankMask = 0x00; - banks = new byte[1][]; - } - else - { - // we don't know what format this is... - throw new Exception("This looks like a System 3/C64GS cartridge but cannot be loaded..."); - } + switch (count) + { + case 64: + _bankMask = 0x3F; + _banks = new int[64][]; + break; + case 32: + _bankMask = 0x1F; + _banks = new int[32][]; + break; + case 16: + _bankMask = 0x0F; + _banks = new int[16][]; + break; + case 8: + _bankMask = 0x07; + _banks = new int[8][]; + break; + case 4: + _bankMask = 0x03; + _banks = new int[4][]; + break; + case 2: + _bankMask = 0x01; + _banks = new int[2][]; + break; + case 1: + _bankMask = 0x00; + _banks = new int[1][]; + break; + default: + throw new Exception("This looks like a System 3/C64GS cartridge but cannot be loaded..."); + } - // for safety, initialize all banks to dummy - for (int i = 0; i < banks.Length; i++) - banks[i] = dummyBank; + // for safety, initialize all banks to dummy + for (var i = 0; i < _banks.Length; i++) + _banks[i] = dummyBank; - // now load in the banks - for (int i = 0; i < count; i++) - { - if (newAddresses[i] == 0x8000) - { - banks[newBanks[i] & bankMask] = newData[i]; - } - } + // now load in the banks + for (var i = 0; i < count; i++) + { + if (newAddresses[i] == 0x8000) + { + _banks[newBanks[i] & _bankMask] = newData[i]; + } + } - BankSet(0); - } + BankSet(0); + } - protected void BankSet(int index) - { - bankNumber = index & bankMask; - UpdateState(); - } + protected void BankSet(int index) + { + _bankNumber = index & _bankMask; + UpdateState(); + } - public override byte Peek8000(int addr) - { - return currentBank[addr]; - } + public override int Peek8000(int addr) + { + return _currentBank[addr]; + } - public override void PokeDE00(int addr, byte val) - { - BankSet(addr); - } + public override void PokeDE00(int addr, int val) + { + BankSet(addr); + } - public override byte Read8000(int addr) - { - return currentBank[addr]; - } + public override int Read8000(int addr) + { + return _currentBank[addr]; + } - private void UpdateState() - { - currentBank = banks[bankNumber]; - } + private void UpdateState() + { + _currentBank = _banks[_bankNumber]; + } - public override void WriteDE00(int addr, byte val) - { - BankSet(addr); - } + public override void WriteDE00(int addr, int val) + { + BankSet(addr); + } - public override void SyncState(Serializer ser) - { - base.SyncState(ser); - if (ser.IsReader) - BankSet(bankNumber); - } - } + public override void SyncState(Serializer ser) + { + base.SyncState(ser); + if (ser.IsReader) + BankSet(_bankNumber); + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0011.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0011.cs index 1fdc16a413..f4591d3764 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0011.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0011.cs @@ -1,34 +1,37 @@ using System.Collections.Generic; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge { - // This mapper comes from Dinamic. It is in fact identical - // to the System 3 mapper (000F) except that bank switching is - // done by reads to the DExx region instead of writes. - // This is why mapper 0011 inherits directly from 000F. + // This mapper comes from Dinamic. It is in fact identical + // to the System 3 mapper (000F) except that bank switching is + // done by reads to the DExx region instead of writes. + // This is why mapper 0011 inherits directly from 000F. - public class Mapper0011 : Mapper000F - { - public Mapper0011(List newAddresses, List newBanks, List newData) - : base(newAddresses, newBanks, newData) - { - // required to pass information to base class - } + public abstract partial class CartridgeDevice + { + private class Mapper0011 : Mapper000F + { + public Mapper0011(IList newAddresses, IList newBanks, IList newData) + : base(newAddresses, newBanks, newData) + { + // required to pass information to base class + } - public override void PokeDE00(int addr, byte val) - { - // do nothing - } + public override void PokeDE00(int addr, int val) + { + // do nothing + } - public override byte ReadDE00(int addr) - { - BankSet(addr); - return base.ReadDE00(addr); - } + public override int ReadDE00(int addr) + { + BankSet(addr); + return base.ReadDE00(addr); + } - public override void WriteDE00(int addr, byte val) - { - // do nothing - } - } + public override void WriteDE00(int addr, int val) + { + // do nothing + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0012.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0012.cs index 15af6f3dbd..6008df1297 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0012.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0012.cs @@ -1,80 +1,82 @@ using System; using System.Collections.Generic; - using BizHawk.Common; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge { - sealed public class Mapper0012 : Cart - { - private byte[] bankMain; - private byte[][] bankHigh; - private byte[] bankHighSelected; - private int bankIndex; - private byte[] dummyBank; + public abstract partial class CartridgeDevice + { + private sealed class Mapper0012 : CartridgeDevice + { + private readonly int[] _bankMain; + private readonly int[][] _bankHigh; + private int[] _bankHighSelected; + private int _bankIndex; - // Zaxxon and Super Zaxxon cartridges - // - read to 8xxx selects bank 0 in A000-BFFF - // - read to 9xxx selects bank 1 in A000-BFFF + // Zaxxon and Super Zaxxon cartridges + // - read to 8xxx selects bank 0 in A000-BFFF + // - read to 9xxx selects bank 1 in A000-BFFF - public Mapper0012(List newAddresses, List newBanks, List newData) - { - bankMain = new byte[0x2000]; - bankHigh = new byte[2][]; - dummyBank = new byte[0x2000]; + public Mapper0012(IList newAddresses, IList newBanks, IList newData) + { + _bankMain = new int[0x2000]; + _bankHigh = new int[2][]; + var dummyBank = new int[0x2000]; - // create dummy bank just in case - for (int i = 0; i < 0x2000; i++) - dummyBank[i] = 0xFF; + // create dummy bank just in case + for (var i = 0; i < 0x2000; i++) + dummyBank[i] = 0xFF; - bankHigh[0] = dummyBank; - bankHigh[1] = dummyBank; + _bankHigh[0] = dummyBank; + _bankHigh[1] = dummyBank; - // load in the banks - for (int i = 0; i < newAddresses.Count; i++) - { - if (newAddresses[i] == 0x8000) - Array.Copy(newData[i], bankMain, 0x1000); - else if ((newAddresses[i] == 0xA000 || newAddresses[i] == 0xE000) && newBanks[i] < 2) - bankHigh[newBanks[i]] = newData[i]; - } + // load in the banks + for (var i = 0; i < newAddresses.Count; i++) + { + if (newAddresses[i] == 0x8000) + Array.Copy(newData[i], _bankMain, 0x1000); + else if ((newAddresses[i] == 0xA000 || newAddresses[i] == 0xE000) && newBanks[i] < 2) + _bankHigh[newBanks[i]] = newData[i]; + } - // mirror the main rom from 8000 to 9000 - Array.Copy(bankMain, 0x0000, bankMain, 0x1000, 0x1000); + // mirror the main rom from 8000 to 9000 + Array.Copy(_bankMain, 0x0000, _bankMain, 0x1000, 0x1000); - // set both pins low for 16k rom config - pinExRom = false; - pinGame = false; + // set both pins low for 16k rom config + pinExRom = false; + pinGame = false; - } + } - public override byte Peek8000(int addr) - { - return bankMain[addr]; - } + public override int Peek8000(int addr) + { + return _bankMain[addr]; + } - public override byte PeekA000(int addr) - { - return bankHighSelected[addr]; - } + public override int PeekA000(int addr) + { + return _bankHighSelected[addr]; + } - public override byte Read8000(int addr) - { - bankIndex = (addr & 0x1000) >> 12; - bankHighSelected = bankHigh[bankIndex]; - return bankMain[addr]; - } + public override int Read8000(int addr) + { + _bankIndex = (addr & 0x1000) >> 12; + _bankHighSelected = _bankHigh[_bankIndex]; + return _bankMain[addr]; + } - public override byte ReadA000(int addr) - { - return bankHighSelected[addr]; - } + public override int ReadA000(int addr) + { + return _bankHighSelected[addr]; + } - public override void SyncState(Serializer ser) - { - base.SyncState(ser); - if (ser.IsReader) - bankHighSelected = bankHigh[bankIndex]; - } - } + public override void SyncState(Serializer ser) + { + base.SyncState(ser); + if (ser.IsReader) + _bankHighSelected = _bankHigh[_bankIndex]; + } + } + + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0013.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0013.cs index f0198edc42..538f41201e 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0013.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0013.cs @@ -2,124 +2,123 @@ using System.Collections.Generic; using BizHawk.Common; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge { - // Mapper for a few Domark and HES Australia games. - // It seems a lot of people dumping these have remapped - // them to the Ocean mapper (0005) but this is still here - // for compatibility. - // - // Bank select is DE00, bit 7 enabled means to disable - // ROM in 8000-9FFF. + // Mapper for a few Domark and HES Australia games. + // It seems a lot of people dumping these have remapped + // them to the Ocean mapper (0005) but this is still here + // for compatibility. + // + // Bank select is DE00, bit 7 enabled means to disable + // ROM in 8000-9FFF. - sealed public class Mapper0013 : Cart - { - private byte[][] banks = new byte[0][]; //8000 - private int bankMask; - private int bankNumber; - private byte[] currentBank; - private byte[] dummyBank; - private bool romEnable; + public abstract partial class CartridgeDevice + { + private sealed class Mapper0013 : CartridgeDevice + { + private readonly int[][] _banks; //8000 + private readonly int _bankMask; + private int _bankNumber; + private int[] _currentBank; + private bool _romEnable; - public Mapper0013(List newAddresses, List newBanks, List newData) - { - int count = newAddresses.Count; + public Mapper0013(IList newAddresses, IList newBanks, IList newData) + { + var count = newAddresses.Count; - pinGame = true; - pinExRom = false; - romEnable = true; + pinGame = true; + pinExRom = false; + _romEnable = true; - // build dummy bank - dummyBank = new byte[0x2000]; - for (int i = 0; i < 0x2000; i++) - dummyBank[i] = 0xFF; // todo: determine if this is correct + // build dummy bank + var dummyBank = new int[0x2000]; + for (var i = 0; i < 0x2000; i++) + dummyBank[i] = 0xFF; // todo: determine if this is correct - if (count == 16) //128k - { - bankMask = 0x0F; - banks = new byte[16][]; - } - else if (count == 8) //64k - { - bankMask = 0x07; - banks = new byte[8][]; - } - else if (count == 4) //32k - { - bankMask = 0x03; - banks = new byte[4][]; - } - else - { - // we don't know what format this is... - throw new Exception("This looks like a Domark/HES cartridge but cannot be loaded..."); - } + switch (count) + { + case 16: + _bankMask = 0x0F; + _banks = new int[16][]; + break; + case 8: + _bankMask = 0x07; + _banks = new int[8][]; + break; + case 4: + _bankMask = 0x03; + _banks = new int[4][]; + break; + default: + throw new Exception("This looks like a Domark/HES cartridge but cannot be loaded..."); + } - // for safety, initialize all banks to dummy - for (int i = 0; i < banks.Length; i++) - banks[i] = dummyBank; + // for safety, initialize all banks to dummy + for (var i = 0; i < _banks.Length; i++) + _banks[i] = dummyBank; - // now load in the banks - for (int i = 0; i < count; i++) - { - if (newAddresses[i] == 0x8000) - { - banks[newBanks[i] & bankMask] = newData[i]; - } - } + // now load in the banks + for (var i = 0; i < count; i++) + { + if (newAddresses[i] == 0x8000) + { + _banks[newBanks[i] & _bankMask] = newData[i]; + } + } - BankSet(0); - } + BankSet(0); + } - private void BankSet(int index) - { - bankNumber = index & bankMask; - romEnable = ((index & 0x80) == 0); - UpdateState(); - } + private void BankSet(int index) + { + _bankNumber = index & _bankMask; + _romEnable = (index & 0x80) == 0; + UpdateState(); + } - public override byte Peek8000(int addr) - { - return currentBank[addr]; - } + public override int Peek8000(int addr) + { + return _currentBank[addr]; + } - public override void PokeDE00(int addr, byte val) - { - if (addr == 0x00) - BankSet(val); - } + public override void PokeDE00(int addr, int val) + { + if (addr == 0x00) + BankSet(val); + } - public override byte Read8000(int addr) - { - return currentBank[addr]; - } + public override int Read8000(int addr) + { + return _currentBank[addr]; + } - private void UpdateState() - { - currentBank = banks[bankNumber]; - if (romEnable) - { - pinExRom = false; - pinGame = true; - } - else - { - pinExRom = true; - pinGame = true; - } - } + private void UpdateState() + { + _currentBank = _banks[_bankNumber]; + if (_romEnable) + { + pinExRom = false; + pinGame = true; + } + else + { + pinExRom = true; + pinGame = true; + } + } - public override void WriteDE00(int addr, byte val) - { - if (addr == 0x00) - BankSet(val); - } + public override void WriteDE00(int addr, int val) + { + if (addr == 0x00) + BankSet(val); + } - public override void SyncState(Serializer ser) - { - base.SyncState(ser); - if (ser.IsReader) - BankSet(bankNumber | (romEnable ? 0x00 : 0x80)); - } - } + public override void SyncState(Serializer ser) + { + base.SyncState(ser); + if (ser.IsReader) + BankSet(_bankNumber | (_romEnable ? 0x00 : 0x80)); + } + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0020.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0020.cs index 66dcb69217..7a65d27320 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0020.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cartridge/Mapper0020.cs @@ -1,290 +1,270 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; using BizHawk.Common; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cartridge { - // EasyFlash cartridge - // No official games came on one of these but there - // are a few dumps from GameBase64 that use this mapper + // EasyFlash cartridge + // No official games came on one of these but there + // are a few dumps from GameBase64 that use this mapper - // There are 64 banks total, DE00 is bank select. - // Selecing a bank will select both Lo and Hi ROM. - // DE02 will switch exrom/game bits: bit 0=game, - // bit 1=exrom, bit 2=for our cases, always set true. - // These two registers are write only. + // There are 64 banks total, DE00 is bank select. + // Selecing a bank will select both Lo and Hi ROM. + // DE02 will switch exrom/game bits: bit 0=game, + // bit 1=exrom, bit 2=for our cases, always set true. + // These two registers are write only. - // This cartridge always starts up in Ultimax mode, - // with Game set high and ExRom set low. + // This cartridge always starts up in Ultimax mode, + // with Game set high and ExRom set low. - // There is also 256 bytes RAM at DF00-DFFF. + // There is also 256 bytes RAM at DF00-DFFF. - // We emulate having the AM29F040 chip. + // We emulate having the AM29F040 chip. - sealed public class Mapper0020 : Cart - { - private byte[][] banksA = new byte[64][]; //8000 - private byte[][] banksB = new byte[64][]; //A000 - private int bankNumber; - private bool boardLed; - private byte[] currentBankA; - private byte[] currentBankB; - private byte[] dummyBank; - private bool jumper = false; - private int stateBits; - private byte[] ram = new byte[256]; - private bool commandLatch55; - private bool commandLatchAA; - private int internalRomState; - - public Mapper0020(List newAddresses, List newBanks, List newData) - { - int count = newAddresses.Count; - - // build dummy bank - dummyBank = new byte[0x2000]; - for (int i = 0; i < 0x2000; i++) - dummyBank[i] = 0xFF; // todo: determine if this is correct - - // force ultimax mode (the cart SHOULD set this - // otherwise on load, according to the docs) - pinGame = false; - pinExRom = true; - - // for safety, initialize all banks to dummy - for (int i = 0; i < 64; i++) - banksA[i] = dummyBank; - for (int i = 0; i < 64; i++) - banksB[i] = dummyBank; - - // load in all banks - for (int i = 0; i < count; i++) - { - if (newAddresses[i] == 0x8000) - { - banksA[newBanks[i]] = newData[i]; - } - else if (newAddresses[i] == 0xA000 || newAddresses[i] == 0xE000) - { - banksB[newBanks[i]] = newData[i]; - } - } - - // default to bank 0 - BankSet(0); - - // internal operation settings - commandLatch55 = false; - commandLatchAA = false; - internalRomState = 0; - } - - private void BankSet(int index) - { - bankNumber = index & 0x3F; - UpdateState(); - } - - public override byte Peek8000(int addr) - { - return currentBankA[addr]; - } - - public override byte PeekA000(int addr) - { - return currentBankB[addr]; - } - - public override byte PeekDE00(int addr) - { - // normally you can't read these regs - // but Peek is provided here for debug reasons - // and may not stay around - addr &= 0x02; - if (addr == 0x00) - return (byte)bankNumber; - else - return (byte)stateBits; - } - - public override byte PeekDF00(int addr) - { - return ram[addr]; - } - - public override void PokeDE00(int addr, byte val) - { - addr &= 0x02; - if (addr == 0x00) - BankSet(val); - else - StateSet(val); - } - - public override void PokeDF00(int addr, byte val) - { - ram[addr] = val; - } - - public override byte Read8000(int addr) - { - return ReadInternal(addr); - } - - public override byte ReadA000(int addr) - { - return ReadInternal(addr | 0x2000); - } - - public override byte ReadDF00(int addr) - { - return ram[addr]; - } - - private byte ReadInternal(int addr) - { - switch (internalRomState) - { - case 0x80: - break; - case 0x90: - switch (addr & 0x1FFF) - { - case 0x0000: - return 0x01; - case 0x0001: - return 0xA4; - case 0x0002: - return 0x00; - } - break; - case 0xA0: - break; - case 0xF0: - break; - } - if ((addr & 0x3FFF) < 0x2000) - { - return currentBankA[addr & 0x1FFF]; - } - else - { - return currentBankB[addr & 0x1FFF]; - } - } - - private void StateSet(byte val) - { - stateBits = val &= 0x87; - if ((val & 0x04) != 0) - pinGame = ((val & 0x01) == 0); - else - pinGame = jumper; - pinExRom = ((val & 0x02) == 0); - boardLed = ((val & 0x80) != 0); - internalRomState = 0; - UpdateState(); - } - - private void UpdateState() - { - currentBankA = banksA[bankNumber]; - currentBankB = banksB[bankNumber]; - } - - public override void Write8000(int addr, byte val) + public abstract partial class CartridgeDevice + { + private sealed class Mapper0020 : CartridgeDevice { - WriteInternal(addr, val); + private int _bankOffset = 63 << 13; + private readonly int[] _banksA = new int[64 << 13]; //8000 + private readonly int[] _banksB = new int[64 << 13]; //A000 + private bool _boardLed; + private bool _jumper = false; + private int _stateBits; + private readonly int[] _ram = new int[256]; + private bool _commandLatch55; + private bool _commandLatchAa; + private int _internalRomState; + + public Mapper0020(IList newAddresses, IList newBanks, IList newData) + { + var count = newAddresses.Count; + + // force ultimax mode (the cart SHOULD set this + // otherwise on load, according to the docs) + pinGame = false; + pinExRom = true; + + // for safety, initialize all banks to dummy + for (var i = 0; i < 64*0x2000; i++) + { + _banksA[i] = 0xFF; + _banksB[i] = 0xFF; + } + + // load in all banks + for (var i = 0; i < count; i++) + { + switch (newAddresses[i]) + { + case 0x8000: + Array.Copy(newData[i], 0, _banksA, newBanks[i] * 0x2000, 0x2000); + break; + case 0xA000: + case 0xE000: + Array.Copy(newData[i], 0, _banksB, newBanks[i] * 0x2000, 0x2000); + break; + } + } + + // default to bank 0 + BankSet(0); + + // internal operation settings + _commandLatch55 = false; + _commandLatchAa = false; + _internalRomState = 0; + } + + private void BankSet(int index) + { + _bankOffset = (index & 0x3F) << 13; + } + + public override int Peek8000(int addr) + { + addr &= 0x1FFF; + return _banksA[addr | _bankOffset]; + } + + public override int PeekA000(int addr) + { + addr &= 0x1FFF; + return _banksB[addr | _bankOffset]; + } + + public override int PeekDE00(int addr) + { + // normally you can't read these regs + // but Peek is provided here for debug reasons + // and may not stay around + addr &= 0x02; + return addr == 0x00 ? _bankOffset >> 13 : _stateBits; + } + + public override int PeekDF00(int addr) + { + addr &= 0xFF; + return _ram[addr]; + } + + public override void PokeDE00(int addr, int val) + { + addr &= 0x02; + if (addr == 0x00) + BankSet(val); + else + StateSet(val); + } + + public override void PokeDF00(int addr, int val) + { + addr &= 0xFF; + _ram[addr] = val & 0xFF; + } + + public override int Read8000(int addr) + { + return ReadInternal(addr & 0x1FFF, _banksA); + } + + public override int ReadA000(int addr) + { + return ReadInternal(addr & 0x1FFF, _banksB); + } + + public override int ReadDF00(int addr) + { + addr &= 0xFF; + return _ram[addr]; + } + + private int ReadInternal(int addr, int[] bank) + { + switch (_internalRomState) + { + case 0x80: + break; + case 0x90: + switch (addr & 0x1FFF) + { + case 0x0000: + return 0x01; + case 0x0001: + return 0xA4; + case 0x0002: + return 0x00; + } + break; + case 0xA0: + break; + case 0xF0: + break; + } + + return bank[addr | _bankOffset]; + } + + private void StateSet(int val) + { + _stateBits = val &= 0x87; + if ((val & 0x04) != 0) + pinGame = (val & 0x01) == 0; + else + pinGame = _jumper; + pinExRom = (val & 0x02) == 0; + _boardLed = (val & 0x80) != 0; + _internalRomState = 0; + } + + public override void Write8000(int addr, int val) + { + WriteInternal(addr, val); + } + + public override void WriteA000(int addr, int val) + { + WriteInternal(addr | 0x2000, val); + } + + private void WriteInternal(int addr, int val) + { + if (pinGame || !pinExRom) + { + return; + } + + if (val == 0xF0) // any address, resets flash + { + _internalRomState = 0; + _commandLatch55 = false; + _commandLatchAa = false; + } + else if (_internalRomState != 0x00 && _internalRomState != 0xF0) + { + switch (_internalRomState) + { + case 0xA0: + if ((addr & 0x2000) == 0) + { + addr &= 0x1FFF; + _banksA[addr | _bankOffset] = val & 0xFF; + } + else + { + addr &= 0x1FFF; + _banksB[addr | _bankOffset] = val & 0xFF; + } + break; + } + } + else if (addr == 0x0555) // $8555 + { + if (!_commandLatchAa) + { + if (val == 0xAA) + { + _commandLatch55 = true; + } + } + else + { + // process EZF command + _internalRomState = val; + } + } + else if (addr == 0x02AA) // $82AA + { + if (_commandLatch55 && val == 0x55) + { + _commandLatchAa = true; + } + else + { + _commandLatch55 = false; + } + } + else + { + _commandLatch55 = false; + _commandLatchAa = false; + } + } + + public override void WriteDE00(int addr, int val) + { + addr &= 0x02; + if (addr == 0x00) + BankSet(val); + else + StateSet(val); + } + + public override void WriteDF00(int addr, int val) + { + _ram[addr] = val & 0xFF; + } } - - public override void WriteA000(int addr, byte val) - { - WriteInternal(addr | 0x2000, val); - } - - private void WriteInternal(int addr, byte val) - { - if (!pinGame && pinExRom) - { - System.Diagnostics.Debug.WriteLine("EasyFlash Write: $" + C64Util.ToHex(addr | 0x8000, 4) + " = " + C64Util.ToHex(val, 2)); - if (val == 0xF0) // any address, resets flash - { - internalRomState = 0; - commandLatch55 = false; - commandLatchAA = false; - } - else if (internalRomState != 0x00 && internalRomState != 0xF0) - { - switch (internalRomState) - { - case 0xA0: - if ((addr & 0x2000) == 0) - { - addr &= 0x1FFF; - banksA[bankNumber][addr] = val; - currentBankA[addr] = val; - } - else - { - addr &= 0x1FFF; - banksB[bankNumber][addr] = val; - currentBankB[addr] = val; - } - break; - } - } - else if (addr == 0x0555) // $8555 - { - if (!commandLatchAA) - { - if (val == 0xAA) - { - commandLatch55 = true; - } - } - else - { - // process EZF command - internalRomState = val; - } - } - else if (addr == 0x02AA) // $82AA - { - if (commandLatch55 && val == 0x55) - { - commandLatchAA = true; - } - else - { - commandLatch55 = false; - } - } - else - { - commandLatch55 = false; - commandLatchAA = false; - } - } - } - - public override void WriteDE00(int addr, byte val) - { - addr &= 0x02; - if (addr == 0x00) - BankSet(val); - else - StateSet(val); - } - - public override void WriteDF00(int addr, byte val) - { - ram[addr] = val; - } - - public override void SyncState(Serializer ser) - { - base.SyncState(ser); - if (ser.IsReader) - UpdateState(); - } - } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/CassettePort.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/CassettePort.cs new file mode 100644 index 0000000000..33f6cd10c4 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/CassettePort.cs @@ -0,0 +1,57 @@ +using System; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cassette +{ + public sealed class CassettePort + { + public Func ReadDataOutput = () => true; + public Func ReadMotor = () => true; + private CassettePortDevice _device; + private bool _connected; + + public void HardReset() + { + if (_connected) + { + _device.HardReset(); + } + } + + public void ExecutePhase() + { + if (_connected) + { + _device.ExecutePhase2(); + } + } + + public bool ReadDataInputBuffer() + { + return !_connected || _device.ReadDataInputBuffer(); + } + + public bool ReadSenseBuffer() + { + return !_connected || _device.ReadSenseBuffer(); + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + + public void Connect(CassettePortDevice device) + { + _connected = device != null; + _device = device; + if (_device == null) + { + return; + } + + _device.ReadDataOutput = () => ReadDataOutput(); + _device.ReadMotor = () => ReadMotor(); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/CassettePortDevice.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/CassettePortDevice.cs new file mode 100644 index 0000000000..09f88f79f7 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/CassettePortDevice.cs @@ -0,0 +1,34 @@ +using System; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cassette +{ + public abstract class CassettePortDevice + { + public Func ReadDataOutput; + public Func ReadMotor; + + public virtual void ExecutePhase2() + { + } + + public virtual void HardReset() + { + } + + public virtual bool ReadDataInputBuffer() + { + return true; + } + + public virtual bool ReadSenseBuffer() + { + return true; + } + + public virtual void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/TapeDrive.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/TapeDrive.cs new file mode 100644 index 0000000000..340eb7b444 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Cassette/TapeDrive.cs @@ -0,0 +1,40 @@ +using BizHawk.Common; +using BizHawk.Emulation.Cores.Computers.Commodore64.Media; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Cassette +{ + public class TapeDrive : CassettePortDevice + { + private Tape _tape; + + public override void ExecutePhase2() + { + if (_tape != null && !ReadMotor()) _tape.ExecuteCycle(); + } + + public override void HardReset() + { + if (_tape != null) _tape.Rewind(); + } + + public override bool ReadDataInputBuffer() + { + return _tape == null || _tape.Read(); + } + + public override bool ReadSenseBuffer() + { + return _tape == null; + } + + public override void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + + public void Insert(Tape tape) + { + _tape = tape; + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/CassettePort/CassettePortDevice.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/CassettePort/CassettePortDevice.cs deleted file mode 100644 index 44aa71e893..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/CassettePort/CassettePortDevice.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using BizHawk.Common; -using BizHawk.Emulation.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.CassettePort -{ - public class CassettePortDevice - { - public Func ReadDataOutput; - public Func ReadMotor; - Commodore64.CassettePort.Tape tape; - - public void HardReset() - { - if (tape != null) tape.rewind(); - } - - virtual public bool ReadDataInputBuffer() - { - return tape != null && !ReadMotor() ? tape.read() : true; - } - - virtual public bool ReadSenseBuffer() - { - return tape == null; // Just assume that "play" is constantly pressed as long as a tape is inserted - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - - internal void Connect(Tape tape) - { - this.tape = tape; - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/CassettePort/Tape.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/CassettePort/Tape.cs deleted file mode 100644 index 2c04d1bf09..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/CassettePort/Tape.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.IO; - -using BizHawk.Common; - - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.CassettePort -{ - /** - * This class represents a tape. Only TAP-style tapes are supported for now. - */ - class Tape - { - private readonly byte[] tapeData; - private readonly byte version; - private uint pos, cycle; - private readonly uint start, end; - - public Tape(byte version, byte[] tapeData, uint start, uint end) - { - this.version = version; - this.tapeData = tapeData; - this.start = start; - this.end = end; - rewind(); - } - - // Rewinds the tape back to start - public void rewind() - { - pos = start; - cycle = 0; - } - - // Reads from tape, this will tell the caller if the flag pin should be raised - public bool read() - { - if (cycle == 0) - { - if (pos >= end) - { - return true; - } - else - { - cycle = ((uint)tapeData[pos++])*8; - if (cycle == 0) - { - if (version == 0) - { - cycle = 256 * 8; // unspecified overflow condition - } - else - { - cycle = BitConverter.ToUInt32(tapeData, (int)pos-1)>>8; - pos += 3; - if (cycle == 0) - { - throw new Exception("Bad tape data"); - } - } - } - } - } - - // Send a single negative pulse at the end of a cycle - return --cycle != 0; - } - - // Try to construct a tape file from file data. Returns null if not a tape file, throws exceptions for bad tape files. - // (Note that some error conditions aren't caught right here.) - static public Tape Load(byte[] tapeFile) - { - Tape result = null; - - if (System.Text.Encoding.ASCII.GetString(tapeFile, 0, 12) == "C64-TAPE-RAW") - { - byte version = tapeFile[12]; - if (version > 1) throw new Exception("This tape has an unsupported version"); - uint size = BitConverter.ToUInt32(tapeFile, 16); - if (size + 20 != tapeFile.Length) - { - throw new Exception("Tape file header specifies a length that doesn't match the file size"); - } - result = new Tape(version, tapeFile, 20, (uint)tapeFile.Length); - } - return result; - } - - public void SyncState(Serializer ser) - { - ser.BeginSection("tape"); - ser.Sync("pos", ref pos); - ser.Sync("cycle", ref cycle); - ser.EndSection(); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/InputFileInfo.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/InputFileInfo.cs index ecbea24aa3..464d647d6e 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/InputFileInfo.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/InputFileInfo.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64 { public struct InputFileInfo { diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/CartridgePort.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/CartridgePort.cs deleted file mode 100644 index 41019763e7..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/CartridgePort.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using BizHawk.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - sealed public class CartridgePort - { - public Func ReadIRQ; - public Func ReadNMI; - - Cart cart; - bool connected; - - public CartridgePort() - { - // start up with no media connected - Disconnect(); - } - - // ------------------------------------------ - - public byte PeekHiExp(int addr) { if (connected) { return cart.PeekDF00(addr & 0x00FF); } else { return 0xFF; } } - public byte PeekHiRom(int addr) { if (connected) { return cart.PeekA000(addr & 0x1FFF); } else { return 0xFF; } } - public byte PeekLoExp(int addr) { if (connected) { return cart.PeekDE00(addr & 0x00FF); } else { return 0xFF; } } - public byte PeekLoRom(int addr) { if (connected) { return cart.Peek8000(addr & 0x1FFF); } else { return 0xFF; } } - - public void PokeHiExp(int addr, byte val) { if (connected) { cart.PokeDF00(addr & 0x00FF, val); } } - public void PokeHiRom(int addr, byte val) { if (connected) { cart.PokeA000(addr & 0x1FFF, val); } } - public void PokeLoExp(int addr, byte val) { if (connected) { cart.PokeDE00(addr & 0x00FF, val); } } - public void PokeLoRom(int addr, byte val) { if (connected) { cart.Poke8000(addr & 0x1FFF, val); } } - - public bool ReadExRom() { if (connected) { return cart.ExRom; } else { return true; } } - public bool ReadGame() { if (connected) { return cart.Game; } else { return true; } } - public byte ReadHiExp(int addr) { if (connected) { return cart.ReadDF00((addr & 0x00FF)); } else { return 0xFF; } } - public byte ReadHiRom(int addr) { if (connected) { return cart.ReadA000((addr & 0x1FFF)); } else { return 0xFF; } } - public byte ReadLoExp(int addr) { if (connected) { return cart.ReadDE00((addr & 0x00FF)); } else { return 0xFF; } } - public byte ReadLoRom(int addr) { if (connected) { return cart.Read8000((addr & 0x1FFF)); } else { return 0xFF; } } - - public void WriteHiExp(int addr, byte val) { if (connected) { cart.WriteDF00((addr & 0x00FF), val); } } - public void WriteHiRom(int addr, byte val) { if (connected) { cart.WriteA000((addr & 0x1FFF), val); } } - public void WriteLoExp(int addr, byte val) { if (connected) { cart.WriteDE00((addr & 0x00FF), val); } } - public void WriteLoRom(int addr, byte val) { if (connected) { cart.Write8000((addr & 0x1FFF), val); } } - - // ------------------------------------------ - - public void Connect(Cart newCart) - { - cart = newCart; - connected = true; - } - - public void Disconnect() - { - cart = null; - connected = false; - } - - public void HardReset() - { - // note: this will not disconnect any attached media - } - - public bool IsConnected - { - get - { - return connected; - } - } - - public bool ReadIRQBuffer() - { - return true; - } - - public bool ReadNMIBuffer() - { - return true; - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip2114.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip2114.cs index 436010cf4b..8f90ffc053 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip2114.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip2114.cs @@ -4,9 +4,9 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { // used as Color RAM in C64 - sealed public class Chip2114 + public sealed class Chip2114 { - byte[] ram; + private int[] _ram = new int[0x400]; public Chip2114() { @@ -15,27 +15,30 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS public void HardReset() { - ram = new byte[0x400]; + for (var i = 0; i < 0x400; i++) + { + _ram[i] = 0x0; + } } - public byte Peek(int addr) + public int Peek(int addr) { - return ram[addr & 0x3FF]; + return _ram[addr & 0x3FF]; } - public void Poke(int addr, byte val) + public void Poke(int addr, int val) { - ram[addr & 0x3FF] = (byte)(val & 0xF); + _ram[addr & 0x3FF] = val & 0xF; } - public byte Read(int addr) + public int Read(int addr) { - return ram[addr & 0x3FF]; + return _ram[addr & 0x3FF]; } public int ReadInt(int addr) { - return ram[addr & 0x3FF]; + return _ram[addr & 0x3FF]; } public void SyncState(Serializer ser) @@ -43,9 +46,9 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS SaveState.SyncObject(ser, this); } - public void Write(int addr, byte val) + public void Write(int addr, int val) { - ram[addr & 0x3FF] = (byte)(val & 0xF); + _ram[addr & 0x3FF] = val & 0xF; } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip23128.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip23128.cs new file mode 100644 index 0000000000..4ad52fa711 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip23128.cs @@ -0,0 +1,45 @@ +using System; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // ROM chips + public sealed class Chip23128 + { + [SaveState.DoNotSave] private readonly int[] _rom; + + public Chip23128() + { + _rom = new int[0x4000]; + } + + public Chip23128(byte[] data) : this() + { + Flash(data); + } + + public void Flash(byte[] data) + { + // ensures ROM is mirrored + for (var i = 0; i < _rom.Length; i += data.Length) + { + Array.Copy(data, 0, _rom, i, data.Length); + } + } + + public int Peek(int addr) + { + return _rom[addr & 0x3FFF]; + } + + public int Read(int addr) + { + return _rom[addr & 0x3FFF]; + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip23XX.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip23XX.cs deleted file mode 100644 index 053ecebc55..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip23XX.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using BizHawk.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // ROM chips - // 2332: 32 kbit (4kbyte) - // 2364: 64 kbit (8kbyte) - // 23128: 128 kbit (16kbyte) - - public enum Chip23XXmodel - { - Chip2332, - Chip2364, - Chip23128 - } - - sealed public class Chip23XX - { - int addrMask; - byte[] rom; - - public Chip23XX(Chip23XXmodel model, byte[] data) - { - switch (model) - { - case Chip23XXmodel.Chip2332: - rom = new byte[0x1000]; - addrMask = 0xFFF; - break; - case Chip23XXmodel.Chip2364: - rom = new byte[0x2000]; - addrMask = 0x1FFF; - break; - case Chip23XXmodel.Chip23128: - rom = new byte[0x4000]; - addrMask = 0x3FFF; - break; - default: - throw new Exception("Invalid chip model."); - } - Array.Copy(data, rom, rom.Length); - } - - public byte Peek(int addr) - { - return rom[addr & addrMask]; - } - - public byte Read(int addr) - { - return rom[addr & addrMask]; - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip4864.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip4864.cs index 55fbd0d865..225cd8eda6 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip4864.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip4864.cs @@ -13,46 +13,36 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS // memory is striped 00/FF at intervals of 0x40 - sealed public class Chip4864 + public sealed class Chip4864 { - byte[] ram; + private int[] _ram; public Chip4864() { - ram = new byte[0x10000]; + _ram = new int[0x10000]; HardReset(); } public void HardReset() { // stripe the ram - for (int i = 0; i < 10000; i++) - ram[i] = ((i & 0x40) != 0) ? (byte)0xFF : (byte)0x00; + for (var i = 0; i < 10000; i++) + _ram[i] = (i & 0x40) != 0 ? 0xFF : 0x00; } - public byte Peek(long addr) + public int Peek(int addr) { - return ram[addr]; + return _ram[addr]; } - public void Poke(long addr, byte val) + public void Poke(int addr, int val) { - ram[addr] = val; + _ram[addr] = val; } - public byte Peek(int addr) + public int Read(int addr) { - return ram[addr]; - } - - public void Poke(int addr, byte val) - { - ram[addr] = val; - } - - public byte Read(int addr) - { - return ram[addr]; + return _ram[addr]; } public void SyncState(Serializer ser) @@ -60,9 +50,9 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS SaveState.SyncObject(ser, this); } - public void Write(int addr, byte val) + public void Write(int addr, int val) { - ram[addr] = val; + _ram[addr] = val; } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.IDebuggable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.IDebuggable.cs new file mode 100644 index 0000000000..f390bbf0f5 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.IDebuggable.cs @@ -0,0 +1,159 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Chip6510 : IDebuggable + { + IDictionary IDebuggable.GetCpuFlagsAndRegisters() + { + return new Dictionary + { + { "A", _cpu.A }, + { "X", _cpu.X }, + { "Y", _cpu.Y }, + { "S", _cpu.S }, + { "PC", _cpu.PC }, + { "Flag C", _cpu.FlagC }, + { "Flag Z", _cpu.FlagZ }, + { "Flag I", _cpu.FlagI }, + { "Flag D", _cpu.FlagD }, + { "Flag B", _cpu.FlagB }, + { "Flag V", _cpu.FlagV }, + { "Flag N", _cpu.FlagN }, + { "Flag T", _cpu.FlagT } + }; + } + + void IDebuggable.SetCpuRegister(string register, int value) + { + switch (register) + { + default: + throw new InvalidOperationException(); + case "A": + _cpu.A = (byte)value; + break; + case "X": + _cpu.X = (byte)value; + break; + case "Y": + _cpu.Y = (byte)value; + break; + case "S": + _cpu.S = (byte)value; + break; + case "PC": + _cpu.PC = (ushort)value; + break; + } + } + + bool IDebuggable.CanStep(StepType type) + { + switch (type) + { + case StepType.Into: + case StepType.Over: + case StepType.Out: + return DebuggerStep != null; + default: + return false; + } + } + + + void IDebuggable.Step(StepType type) + { + switch (type) + { + case StepType.Into: + StepInto(); + break; + case StepType.Out: + StepOut(); + break; + case StepType.Over: + StepOver(); + break; + } + } + + private void StepInto() + { + while (_cpu.AtInstructionStart()) + { + DebuggerStep(); + } + while (!_cpu.AtInstructionStart()) + { + DebuggerStep(); + } + } + + private void StepOver() + { + var instruction = CpuPeek(_cpu.PC); + + if (instruction == Jsr) + { + var destination = _cpu.PC + JsrSize; + while (_cpu.PC != destination) + { + StepInto(); + } + } + else + { + StepInto(); + } + } + + private void StepOut() + { + var instructionsBeforeBailout = 1000000; + var instr = CpuPeek(_cpu.PC); + _jsrCount = instr == Jsr ? 1 : 0; + + while (--instructionsBeforeBailout > 0) + { + StepInto(); + instr = CpuPeek(_cpu.PC); + if (instr == Jsr) + { + _jsrCount++; + } + else if ((instr == Rts || instr == Rti) && _jsrCount <= 0) + { + StepInto(); + _jsrCount = 0; + break; + } + else if (instr == Rts || instr == Rti) + { + _jsrCount--; + } + } + } + + [SaveState.DoNotSave] + private int _jsrCount; + [SaveState.DoNotSave] + private const byte Jsr = 0x20; + [SaveState.DoNotSave] + private const byte Rti = 0x40; + [SaveState.DoNotSave] + private const byte Rts = 0x60; + + [SaveState.DoNotSave] + private const byte JsrSize = 3; + + [SaveState.DoNotSave] private IMemoryCallbackSystem _memoryCallbacks = new MemoryCallbackSystem(); + + [SaveState.DoNotSave] + IMemoryCallbackSystem IDebuggable.MemoryCallbacks { get; } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.IDisassemblable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.IDisassemblable.cs new file mode 100644 index 0000000000..9bd804fb51 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.IDisassemblable.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Chip6510 : IDisassemblable + { + public IEnumerable AvailableCpus + { + get { yield return "6510"; } + } + + public string Cpu + { + get { return "6510"; } + set + { + } + } + + public string PCRegisterName + { + get { return "PC"; } + } + + public string Disassemble(MemoryDomain m, uint addr, out int length) + { + return Components.M6502.MOS6502X.Disassemble((ushort)addr, out length, CpuPeek); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.cs new file mode 100644 index 0000000000..9c60b28a78 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6510.cs @@ -0,0 +1,242 @@ +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +using BizHawk.Common; +using BizHawk.Emulation.Cores.Components.M6502; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // an extension of the 6502 processor + + public sealed partial class Chip6510 + { + // ------------------------------------ + + private MOS6502X _cpu; + private bool _pinNmiLast; + private LatchedPort _port; + private bool _thisNmi; + + public Func PeekMemory; + public Action PokeMemory; + public Func ReadAec; + public Func ReadIrq; + public Func ReadNmi; + public Func ReadRdy; + public Func ReadMemory; + public Func ReadPort; + public Action WriteMemory; + public Action WriteMemoryPort; + + public Action DebuggerStep; + + // ------------------------------------ + + public Chip6510() + { + // configure cpu r/w + _cpu = new MOS6502X + { + DummyReadMemory = CpuRead, + ReadMemory = CpuRead, + WriteMemory = CpuWrite, + PeekMemory = CpuPeek + }; + + // perform hard reset + HardReset(); + } + + public void SetOverflow() + { + } + + private byte CpuPeek(ushort addr) + { + return unchecked((byte)Peek(addr)); + } + + private byte CpuRead(ushort addr) + { + return unchecked((byte) Read(addr)); + } + + private void CpuWrite(ushort addr, byte val) + { + Write(addr, val); + } + + public void HardReset() + { + _cpu.NESSoftReset(); + _port = new LatchedPort + { + Direction = 0x00, + Latch = 0xFF + }; + _pinNmiLast = true; + } + + // ------------------------------------ + + public void ExecutePhase() + { + _cpu.RDY = ReadRdy(); + + if (ReadAec()) + { + _cpu.IRQ = !ReadIrq(); + _pinNmiLast = _thisNmi; + _thisNmi = ReadNmi(); + _cpu.NMI |= _pinNmiLast && !_thisNmi; + _cpu.ExecuteOne(); + } + else + { + LagCycles++; + } + } + + public int LagCycles; + + internal bool AtInstructionStart() + { + return _cpu.AtInstructionStart(); + } + + // ------------------------------------ + + [SaveState.DoNotSave] + public ushort Pc + { + get + { + return _cpu.PC; + } + set + { + _cpu.PC = value; + } + } + + [SaveState.DoNotSave] + public int A + { + get { return _cpu.A; } set { _cpu.A = unchecked((byte)value); } + } + + [SaveState.DoNotSave] + public int X + { + get { return _cpu.X; } set { _cpu.X = unchecked((byte)value); } + } + + [SaveState.DoNotSave] + public int Y + { + get { return _cpu.Y; } set { _cpu.Y = unchecked((byte)value); } + } + + [SaveState.DoNotSave] + public int S + { + get { return _cpu.S; } set { _cpu.S = unchecked((byte)value); } + } + + [SaveState.DoNotSave] + public bool FlagC { get { return _cpu.FlagC; } } + [SaveState.DoNotSave] + public bool FlagZ { get { return _cpu.FlagZ; } } + [SaveState.DoNotSave] + public bool FlagI { get { return _cpu.FlagI; } } + [SaveState.DoNotSave] + public bool FlagD { get { return _cpu.FlagD; } } + [SaveState.DoNotSave] + public bool FlagB { get { return _cpu.FlagB; } } + [SaveState.DoNotSave] + public bool FlagV { get { return _cpu.FlagV; } } + [SaveState.DoNotSave] + public bool FlagN { get { return _cpu.FlagN; } } + [SaveState.DoNotSave] + public bool FlagT { get { return _cpu.FlagT; } } + + public int Peek(int addr) + { + switch (addr) + { + case 0x0000: + return _port.Direction; + case 0x0001: + return PortData; + default: + return PeekMemory(addr); + } + } + + public void Poke(int addr, int val) + { + switch (addr) + { + case 0x0000: + _port.Direction = val; + break; + case 0x0001: + _port.Latch = val; + break; + default: + PokeMemory(addr, val); + break; + } + } + + [SaveState.DoNotSave] + public int PortData + { + get + { + return _port.ReadInput(ReadPort()); + } + set + { + _port.Latch = value; + } + } + + public int Read(int addr) + { + switch (addr) + { + case 0x0000: + return _port.Direction; + case 0x0001: + return PortData; + default: + return ReadMemory(addr); + } + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + + public void Write(int addr, int val) + { + switch (addr) + { + case 0x0000: + _port.Direction = val; + WriteMemoryPort(addr, val); + break; + case 0x0001: + _port.Latch = val; + WriteMemoryPort(addr, val); + break; + default: + WriteMemory(addr, val); + break; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6526.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6526.cs new file mode 100644 index 0000000000..cf330cddb5 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6526.cs @@ -0,0 +1,72 @@ +using System; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // MOS technology 6526 "CIA" + // + // emulation notes: + // * CS, R/W and RS# pins are not emulated. (not needed) + // * A low RES pin is emulated via HardReset(). + + public static class Chip6526 + { + public static Cia Create(C64.CiaType type, Func readIec) + { + switch (type) + { + case C64.CiaType.Ntsc: + return new Cia(14318181, 14*60, readIec) + { + DelayedInterrupts = true + }; + case C64.CiaType.NtscRevA: + return new Cia(14318181, 14 * 60, readIec) + { + DelayedInterrupts = false + }; + case C64.CiaType.Pal: + return new Cia(17734472, 18 * 50, readIec) + { + DelayedInterrupts = true + }; + case C64.CiaType.PalRevA: + return new Cia(17734472, 18 * 50, readIec) + { + DelayedInterrupts = false + }; + default: + throw new Exception("Unrecognized CIA timer type."); + } + } + + public static Cia Create(C64.CiaType type, int[] keyboard, int[] joysticks) + { + switch (type) + { + case C64.CiaType.Ntsc: + return new Cia(14318181, 14 * 60, keyboard, joysticks) + { + DelayedInterrupts = true + }; + case C64.CiaType.NtscRevA: + return new Cia(14318181, 14 * 60, keyboard, joysticks) + { + DelayedInterrupts = false + }; + case C64.CiaType.Pal: + return new Cia(17734472, 18 * 50, keyboard, joysticks) + { + DelayedInterrupts = true + }; + case C64.CiaType.PalRevA: + return new Cia(17734472, 18 * 50, keyboard, joysticks) + { + DelayedInterrupts = false + }; + default: + throw new Exception("Unrecognized CIA timer type."); + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6567R56A.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6567R56A.cs new file mode 100644 index 0000000000..e06869438e --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6567R56A.cs @@ -0,0 +1,40 @@ +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // vic ntsc old + public static class Chip6567R56A + { + private static readonly int Cycles = 64; + private static readonly int ScanWidth = Cycles * 8; + private static readonly int Lines = 262; + private static readonly int Vblankstart = 0x00D % Lines; + private static readonly int VblankEnd = 0x018 % Lines; + private static readonly int HblankOffset = 24; + private static readonly int HblankStart = (0x18C + HblankOffset) % ScanWidth; + private static readonly int HblankEnd = (0x1F0 + HblankOffset) % ScanWidth; + + private static readonly int[] Timing = Vic.TimingBuilder_XRaster(0x19C, 0x200, ScanWidth, -1, -1); + private static readonly int[] Fetch = Vic.TimingBuilder_Fetch(Timing, 0x16C); + private static readonly int[] Ba = Vic.TimingBuilder_BA(Fetch); + private static readonly int[] Act = Vic.TimingBuilder_Act(Timing, 0x004, 0x154, 0x164); + + private static readonly int[][] Pipeline = { + Timing, + Fetch, + Ba, + Act + }; + + public static Vic Create(C64.BorderType borderType) + { + return new Vic( + Cycles, Lines, + Pipeline, + 14318181 / 14, + HblankStart, HblankEnd, + Vblankstart, VblankEnd, + borderType, + 762, 1000 + ); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6567R8.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6567R8.cs new file mode 100644 index 0000000000..ba77ff8d96 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6567R8.cs @@ -0,0 +1,40 @@ +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // vic ntsc + public static class Chip6567R8 + { + private static readonly int Cycles = 65; + private static readonly int ScanWidth = Cycles * 8; + private static readonly int Lines = 263; + private static readonly int VblankStart = 0x00D % Lines; + private static readonly int VblankEnd = 0x018 % Lines; + private static readonly int HblankOffset = 24; + private static readonly int HblankStart = (0x18C + HblankOffset) % ScanWidth; + private static readonly int HblankEnd = (0x1F0 + HblankOffset) % ScanWidth; + + private static readonly int[] Timing = Vic.TimingBuilder_XRaster(0x19C, 0x200, ScanWidth, 0x184, 8); + private static readonly int[] Fetch = Vic.TimingBuilder_Fetch(Timing, 0x174); + private static readonly int[] Ba = Vic.TimingBuilder_BA(Fetch); + private static readonly int[] Act = Vic.TimingBuilder_Act(Timing, 0x004, 0x154, 0x16C); + + private static readonly int[][] Pipeline = { + Timing, + Fetch, + Ba, + Act + }; + + public static Vic Create(C64.BorderType borderType) + { + return new Vic( + Cycles, Lines, + Pipeline, + 14318181 / 14, + HblankStart, HblankEnd, + VblankStart, VblankEnd, + borderType, + 6136, 8182 + ); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6569.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6569.cs new file mode 100644 index 0000000000..333f19f54c --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6569.cs @@ -0,0 +1,40 @@ +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // vic pal + public static class Chip6569 + { + private static readonly int Cycles = 63; + private static readonly int ScanWidth = Cycles * 8; + private static readonly int Lines = 312; + private static readonly int VblankStart = 0x120 % Lines; + private static readonly int VblankEnd = 0x00F % Lines; + private static readonly int HblankOffset = 24; + private static readonly int HblankStart = (0x178 + HblankOffset) % ScanWidth; + private static readonly int HblankEnd = (0x1F0 + HblankOffset) % ScanWidth; + + private static readonly int[] Timing = Vic.TimingBuilder_XRaster(0x194, 0x1F8, ScanWidth, -1, -1); + private static readonly int[] Fetch = Vic.TimingBuilder_Fetch(Timing, 0x164); + private static readonly int[] Ba = Vic.TimingBuilder_BA(Fetch); + private static readonly int[] Act = Vic.TimingBuilder_Act(Timing, 0x004, 0x14C, 0x164); + + private static readonly int[][] Pipeline = { + Timing, + Fetch, + Ba, + Act + }; + + public static Vic Create(C64.BorderType borderType) + { + return new Vic( + Cycles, Lines, + Pipeline, + 17734472 / 18, + HblankStart, HblankEnd, + VblankStart, VblankEnd, + borderType, + 7375, 7882 + ); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6572.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6572.cs new file mode 100644 index 0000000000..9c68200c44 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6572.cs @@ -0,0 +1,40 @@ +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // pal n / drean - TODO correct? + public static class Chip6572 + { + private static readonly int Cycles = 65; + private static readonly int ScanWidth = Cycles * 8; + private static readonly int Lines = 312; + private static readonly int VblankStart = 0x12C % Lines; + private static readonly int VblankEnd = 0x00F % Lines; + private static readonly int HblankOffset = 24; + private static readonly int HblankStart = (0x18C + HblankOffset) % ScanWidth; + private static readonly int HblankEnd = (0x1F0 + HblankOffset) % ScanWidth; + + private static readonly int[] Timing = Vic.TimingBuilder_XRaster(0x19C, 0x200, ScanWidth, 0x18C, 8); + private static readonly int[] Fetch = Vic.TimingBuilder_Fetch(Timing, 0x174); + private static readonly int[] Ba = Vic.TimingBuilder_BA(Fetch); + private static readonly int[] Act = Vic.TimingBuilder_Act(Timing, 0x004, 0x154, 0x16C); + + private static readonly int[][] Pipeline = { + Timing, + Fetch, + Ba, + Act + }; + + public static Vic Create(C64.BorderType borderType) + { + return new Vic( + Cycles, Lines, + Pipeline, + 14328225 / 14, + HblankStart, HblankEnd, + VblankStart, VblankEnd, + borderType, + 908, 1000 + ); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R2.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R2.cs new file mode 100644 index 0000000000..4cc6cdfe86 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R2.cs @@ -0,0 +1,22 @@ +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // SID Wavetables courtesy of Kevtris + public static class Chip6581R2 + { + private static readonly int[][] WaveTable = { + new[] { 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff }, + new[] { 0x000, 0x002, 0x004, 0x006, 0x008, 0x00a, 0x00c, 0x00e, 0x010, 0x012, 0x014, 0x016, 0x018, 0x01a, 0x01c, 0x01e, 0x020, 0x022, 0x024, 0x026, 0x028, 0x02a, 0x02c, 0x02e, 0x030, 0x032, 0x034, 0x036, 0x038, 0x03a, 0x03c, 0x03e, 0x040, 0x042, 0x044, 0x046, 0x048, 0x04a, 0x04c, 0x04e, 0x050, 0x052, 0x054, 0x056, 0x058, 0x05a, 0x05c, 0x05e, 0x060, 0x062, 0x064, 0x066, 0x068, 0x06a, 0x06c, 0x06e, 0x070, 0x072, 0x074, 0x076, 0x078, 0x07a, 0x07c, 0x07e, 0x080, 0x082, 0x084, 0x086, 0x088, 0x08a, 0x08c, 0x08e, 0x090, 0x092, 0x094, 0x096, 0x098, 0x09a, 0x09c, 0x09e, 0x0a0, 0x0a2, 0x0a4, 0x0a6, 0x0a8, 0x0aa, 0x0ac, 0x0ae, 0x0b0, 0x0b2, 0x0b4, 0x0b6, 0x0b8, 0x0ba, 0x0bc, 0x0be, 0x0c0, 0x0c2, 0x0c4, 0x0c6, 0x0c8, 0x0ca, 0x0cc, 0x0ce, 0x0d0, 0x0d2, 0x0d4, 0x0d6, 0x0d8, 0x0da, 0x0dc, 0x0de, 0x0e0, 0x0e2, 0x0e4, 0x0e6, 0x0e8, 0x0ea, 0x0ec, 0x0ee, 0x0f0, 0x0f2, 0x0f4, 0x0f6, 0x0f8, 0x0fa, 0x0fc, 0x0fe, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12c, 0x12e, 0x130, 0x132, 0x134, 0x136, 0x138, 0x13a, 0x13c, 0x13e, 0x140, 0x142, 0x144, 0x146, 0x148, 0x14a, 0x14c, 0x14e, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15a, 0x15c, 0x15e, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x176, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x182, 0x184, 0x186, 0x188, 0x18a, 0x18c, 0x18e, 0x190, 0x192, 0x194, 0x196, 0x198, 0x19a, 0x19c, 0x19e, 0x1a0, 0x1a2, 0x1a4, 0x1a6, 0x1a8, 0x1aa, 0x1ac, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b6, 0x1b8, 0x1ba, 0x1bc, 0x1be, 0x1c0, 0x1c2, 0x1c4, 0x1c6, 0x1c8, 0x1ca, 0x1cc, 0x1ce, 0x1d0, 0x1d2, 0x1d4, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1de, 0x1e0, 0x1e2, 0x1e4, 0x1e6, 0x1e8, 0x1ea, 0x1ec, 0x1ee, 0x1f0, 0x1f2, 0x1f4, 0x1f6, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21c, 0x21e, 0x220, 0x222, 0x224, 0x226, 0x228, 0x22a, 0x22c, 0x22e, 0x230, 0x232, 0x234, 0x236, 0x238, 0x23a, 0x23c, 0x23e, 0x240, 0x242, 0x244, 0x246, 0x248, 0x24a, 0x24c, 0x24e, 0x250, 0x252, 0x254, 0x256, 0x258, 0x25a, 0x25c, 0x25e, 0x260, 0x262, 0x264, 0x266, 0x268, 0x26a, 0x26c, 0x26e, 0x270, 0x272, 0x274, 0x276, 0x278, 0x27a, 0x27c, 0x27e, 0x280, 0x282, 0x284, 0x286, 0x288, 0x28a, 0x28c, 0x28e, 0x290, 0x292, 0x294, 0x296, 0x298, 0x29a, 0x29c, 0x29e, 0x2a0, 0x2a2, 0x2a4, 0x2a6, 0x2a8, 0x2aa, 0x2ac, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2bc, 0x2be, 0x2c0, 0x2c2, 0x2c4, 0x2c6, 0x2c8, 0x2ca, 0x2cc, 0x2ce, 0x2d0, 0x2d2, 0x2d4, 0x2d6, 0x2d8, 0x2da, 0x2dc, 0x2de, 0x2e0, 0x2e2, 0x2e4, 0x2e6, 0x2e8, 0x2ea, 0x2ec, 0x2ee, 0x2f0, 0x2f2, 0x2f4, 0x2f6, 0x2f8, 0x2fa, 0x2fc, 0x2fe, 0x300, 0x302, 0x304, 0x306, 0x308, 0x30a, 0x30c, 0x30e, 0x310, 0x312, 0x314, 0x316, 0x318, 0x31a, 0x31c, 0x31e, 0x320, 0x322, 0x324, 0x326, 0x328, 0x32a, 0x32c, 0x32e, 0x330, 0x332, 0x334, 0x336, 0x338, 0x33a, 0x33c, 0x33e, 0x340, 0x342, 0x344, 0x346, 0x348, 0x34a, 0x34c, 0x34e, 0x350, 0x352, 0x354, 0x356, 0x358, 0x35a, 0x35c, 0x35e, 0x360, 0x362, 0x364, 0x366, 0x368, 0x36a, 0x36c, 0x36e, 0x370, 0x372, 0x374, 0x376, 0x378, 0x37a, 0x37c, 0x37e, 0x380, 0x382, 0x384, 0x386, 0x388, 0x38a, 0x38c, 0x38e, 0x390, 0x392, 0x394, 0x396, 0x398, 0x39a, 0x39c, 0x39e, 0x3a0, 0x3a2, 0x3a4, 0x3a6, 0x3a8, 0x3aa, 0x3ac, 0x3ae, 0x3b0, 0x3b2, 0x3b4, 0x3b6, 0x3b8, 0x3ba, 0x3bc, 0x3be, 0x3c0, 0x3c2, 0x3c4, 0x3c6, 0x3c8, 0x3ca, 0x3cc, 0x3ce, 0x3d0, 0x3d2, 0x3d4, 0x3d6, 0x3d8, 0x3da, 0x3dc, 0x3de, 0x3e0, 0x3e2, 0x3e4, 0x3e6, 0x3e8, 0x3ea, 0x3ec, 0x3ee, 0x3f0, 0x3f2, 0x3f4, 0x3f6, 0x3f8, 0x3fa, 0x3fc, 0x3fe, 0x400, 0x402, 0x404, 0x406, 0x408, 0x40a, 0x40c, 0x40e, 0x410, 0x412, 0x414, 0x416, 0x418, 0x41a, 0x41c, 0x41e, 0x420, 0x422, 0x424, 0x426, 0x428, 0x42a, 0x42c, 0x42e, 0x430, 0x432, 0x434, 0x436, 0x438, 0x43a, 0x43c, 0x43e, 0x440, 0x442, 0x444, 0x446, 0x448, 0x44a, 0x44c, 0x44e, 0x450, 0x452, 0x454, 0x456, 0x458, 0x45a, 0x45c, 0x45e, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46a, 0x46c, 0x46e, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47a, 0x47c, 0x47e, 0x480, 0x482, 0x484, 0x486, 0x488, 0x48a, 0x48c, 0x48e, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49a, 0x49c, 0x49e, 0x4a0, 0x4a2, 0x4a4, 0x4a6, 0x4a8, 0x4aa, 0x4ac, 0x4ae, 0x4b0, 0x4b2, 0x4b4, 0x4b6, 0x4b8, 0x4ba, 0x4bc, 0x4be, 0x4c0, 0x4c2, 0x4c4, 0x4c6, 0x4c8, 0x4ca, 0x4cc, 0x4ce, 0x4d0, 0x4d2, 0x4d4, 0x4d6, 0x4d8, 0x4da, 0x4dc, 0x4de, 0x4e0, 0x4e2, 0x4e4, 0x4e6, 0x4e8, 0x4ea, 0x4ec, 0x4ee, 0x4f0, 0x4f2, 0x4f4, 0x4f6, 0x4f8, 0x4fa, 0x4fc, 0x4fe, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50a, 0x50c, 0x50e, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51a, 0x51c, 0x51e, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52a, 0x52c, 0x52e, 0x530, 0x532, 0x534, 0x536, 0x538, 0x53a, 0x53c, 0x53e, 0x540, 0x542, 0x544, 0x546, 0x548, 0x54a, 0x54c, 0x54e, 0x550, 0x552, 0x554, 0x556, 0x558, 0x55a, 0x55c, 0x55e, 0x560, 0x562, 0x564, 0x566, 0x568, 0x56a, 0x56c, 0x56e, 0x570, 0x572, 0x574, 0x576, 0x578, 0x57a, 0x57c, 0x57e, 0x580, 0x582, 0x584, 0x586, 0x588, 0x58a, 0x58c, 0x58e, 0x590, 0x592, 0x594, 0x596, 0x598, 0x59a, 0x59c, 0x59e, 0x5a0, 0x5a2, 0x5a4, 0x5a6, 0x5a8, 0x5aa, 0x5ac, 0x5ae, 0x5b0, 0x5b2, 0x5b4, 0x5b6, 0x5b8, 0x5ba, 0x5bc, 0x5be, 0x5c0, 0x5c2, 0x5c4, 0x5c6, 0x5c8, 0x5ca, 0x5cc, 0x5ce, 0x5d0, 0x5d2, 0x5d4, 0x5d6, 0x5d8, 0x5da, 0x5dc, 0x5de, 0x5e0, 0x5e2, 0x5e4, 0x5e6, 0x5e8, 0x5ea, 0x5ec, 0x5ee, 0x5f0, 0x5f2, 0x5f4, 0x5f6, 0x5f8, 0x5fa, 0x5fc, 0x5fe, 0x600, 0x602, 0x604, 0x606, 0x608, 0x60a, 0x60c, 0x60e, 0x610, 0x612, 0x614, 0x616, 0x618, 0x61a, 0x61c, 0x61e, 0x620, 0x622, 0x624, 0x626, 0x628, 0x62a, 0x62c, 0x62e, 0x630, 0x632, 0x634, 0x636, 0x638, 0x63a, 0x63c, 0x63e, 0x640, 0x642, 0x644, 0x646, 0x648, 0x64a, 0x64c, 0x64e, 0x650, 0x652, 0x654, 0x656, 0x658, 0x65a, 0x65c, 0x65e, 0x660, 0x662, 0x664, 0x666, 0x668, 0x66a, 0x66c, 0x66e, 0x670, 0x672, 0x674, 0x676, 0x678, 0x67a, 0x67c, 0x67e, 0x680, 0x682, 0x684, 0x686, 0x688, 0x68a, 0x68c, 0x68e, 0x690, 0x692, 0x694, 0x696, 0x698, 0x69a, 0x69c, 0x69e, 0x6a0, 0x6a2, 0x6a4, 0x6a6, 0x6a8, 0x6aa, 0x6ac, 0x6ae, 0x6b0, 0x6b2, 0x6b4, 0x6b6, 0x6b8, 0x6ba, 0x6bc, 0x6be, 0x6c0, 0x6c2, 0x6c4, 0x6c6, 0x6c8, 0x6ca, 0x6cc, 0x6ce, 0x6d0, 0x6d2, 0x6d4, 0x6d6, 0x6d8, 0x6da, 0x6dc, 0x6de, 0x6e0, 0x6e2, 0x6e4, 0x6e6, 0x6e8, 0x6ea, 0x6ec, 0x6ee, 0x6f0, 0x6f2, 0x6f4, 0x6f6, 0x6f8, 0x6fa, 0x6fc, 0x6fe, 0x700, 0x702, 0x704, 0x706, 0x708, 0x70a, 0x70c, 0x70e, 0x710, 0x712, 0x714, 0x716, 0x718, 0x71a, 0x71c, 0x71e, 0x720, 0x722, 0x724, 0x726, 0x728, 0x72a, 0x72c, 0x72e, 0x730, 0x732, 0x734, 0x736, 0x738, 0x73a, 0x73c, 0x73e, 0x740, 0x742, 0x744, 0x746, 0x748, 0x74a, 0x74c, 0x74e, 0x750, 0x752, 0x754, 0x756, 0x758, 0x75a, 0x75c, 0x75e, 0x760, 0x762, 0x764, 0x766, 0x768, 0x76a, 0x76c, 0x76e, 0x770, 0x772, 0x774, 0x776, 0x778, 0x77a, 0x77c, 0x77e, 0x780, 0x782, 0x784, 0x786, 0x788, 0x78a, 0x78c, 0x78e, 0x790, 0x792, 0x794, 0x796, 0x798, 0x79a, 0x79c, 0x79e, 0x7a0, 0x7a2, 0x7a4, 0x7a6, 0x7a8, 0x7aa, 0x7ac, 0x7ae, 0x7b0, 0x7b2, 0x7b4, 0x7b6, 0x7b8, 0x7ba, 0x7bc, 0x7be, 0x7c0, 0x7c2, 0x7c4, 0x7c6, 0x7c8, 0x7ca, 0x7cc, 0x7ce, 0x7d0, 0x7d2, 0x7d4, 0x7d6, 0x7d8, 0x7da, 0x7dc, 0x7de, 0x7e0, 0x7e2, 0x7e4, 0x7e6, 0x7e8, 0x7ea, 0x7ec, 0x7ee, 0x7f0, 0x7f2, 0x7f4, 0x7f6, 0x7f8, 0x7fa, 0x7fc, 0x7fe, 0x800, 0x802, 0x804, 0x806, 0x808, 0x80a, 0x80c, 0x80e, 0x810, 0x812, 0x814, 0x816, 0x818, 0x81a, 0x81c, 0x81e, 0x820, 0x822, 0x824, 0x826, 0x828, 0x82a, 0x82c, 0x82e, 0x830, 0x832, 0x834, 0x836, 0x838, 0x83a, 0x83c, 0x83e, 0x840, 0x842, 0x844, 0x846, 0x848, 0x84a, 0x84c, 0x84e, 0x850, 0x852, 0x854, 0x856, 0x858, 0x85a, 0x85c, 0x85e, 0x860, 0x862, 0x864, 0x866, 0x868, 0x86a, 0x86c, 0x86e, 0x870, 0x872, 0x874, 0x876, 0x878, 0x87a, 0x87c, 0x87e, 0x880, 0x882, 0x884, 0x886, 0x888, 0x88a, 0x88c, 0x88e, 0x890, 0x892, 0x894, 0x896, 0x898, 0x89a, 0x89c, 0x89e, 0x8a0, 0x8a2, 0x8a4, 0x8a6, 0x8a8, 0x8aa, 0x8ac, 0x8ae, 0x8b0, 0x8b2, 0x8b4, 0x8b6, 0x8b8, 0x8ba, 0x8bc, 0x8be, 0x8c0, 0x8c2, 0x8c4, 0x8c6, 0x8c8, 0x8ca, 0x8cc, 0x8ce, 0x8d0, 0x8d2, 0x8d4, 0x8d6, 0x8d8, 0x8da, 0x8dc, 0x8de, 0x8e0, 0x8e2, 0x8e4, 0x8e6, 0x8e8, 0x8ea, 0x8ec, 0x8ee, 0x8f0, 0x8f2, 0x8f4, 0x8f6, 0x8f8, 0x8fa, 0x8fc, 0x8fe, 0x900, 0x902, 0x904, 0x906, 0x908, 0x90a, 0x90c, 0x90e, 0x910, 0x912, 0x914, 0x916, 0x918, 0x91a, 0x91c, 0x91e, 0x920, 0x922, 0x924, 0x926, 0x928, 0x92a, 0x92c, 0x92e, 0x930, 0x932, 0x934, 0x936, 0x938, 0x93a, 0x93c, 0x93e, 0x940, 0x942, 0x944, 0x946, 0x948, 0x94a, 0x94c, 0x94e, 0x950, 0x952, 0x954, 0x956, 0x958, 0x95a, 0x95c, 0x95e, 0x960, 0x962, 0x964, 0x966, 0x968, 0x96a, 0x96c, 0x96e, 0x970, 0x972, 0x974, 0x976, 0x978, 0x97a, 0x97c, 0x97e, 0x980, 0x982, 0x984, 0x986, 0x988, 0x98a, 0x98c, 0x98e, 0x990, 0x992, 0x994, 0x996, 0x998, 0x99a, 0x99c, 0x99e, 0x9a0, 0x9a2, 0x9a4, 0x9a6, 0x9a8, 0x9aa, 0x9ac, 0x9ae, 0x9b0, 0x9b2, 0x9b4, 0x9b6, 0x9b8, 0x9ba, 0x9bc, 0x9be, 0x9c0, 0x9c2, 0x9c4, 0x9c6, 0x9c8, 0x9ca, 0x9cc, 0x9ce, 0x9d0, 0x9d2, 0x9d4, 0x9d6, 0x9d8, 0x9da, 0x9dc, 0x9de, 0x9e0, 0x9e2, 0x9e4, 0x9e6, 0x9e8, 0x9ea, 0x9ec, 0x9ee, 0x9f0, 0x9f2, 0x9f4, 0x9f6, 0x9f8, 0x9fa, 0x9fc, 0x9fe, 0xa00, 0xa02, 0xa04, 0xa06, 0xa08, 0xa0a, 0xa0c, 0xa0e, 0xa10, 0xa12, 0xa14, 0xa16, 0xa18, 0xa1a, 0xa1c, 0xa1e, 0xa20, 0xa22, 0xa24, 0xa26, 0xa28, 0xa2a, 0xa2c, 0xa2e, 0xa30, 0xa32, 0xa34, 0xa36, 0xa38, 0xa3a, 0xa3c, 0xa3e, 0xa40, 0xa42, 0xa44, 0xa46, 0xa48, 0xa4a, 0xa4c, 0xa4e, 0xa50, 0xa52, 0xa54, 0xa56, 0xa58, 0xa5a, 0xa5c, 0xa5e, 0xa60, 0xa62, 0xa64, 0xa66, 0xa68, 0xa6a, 0xa6c, 0xa6e, 0xa70, 0xa72, 0xa74, 0xa76, 0xa78, 0xa7a, 0xa7c, 0xa7e, 0xa80, 0xa82, 0xa84, 0xa86, 0xa88, 0xa8a, 0xa8c, 0xa8e, 0xa90, 0xa92, 0xa94, 0xa96, 0xa98, 0xa9a, 0xa9c, 0xa9e, 0xaa0, 0xaa2, 0xaa4, 0xaa6, 0xaa8, 0xaaa, 0xaac, 0xaae, 0xab0, 0xab2, 0xab4, 0xab6, 0xab8, 0xaba, 0xabc, 0xabe, 0xac0, 0xac2, 0xac4, 0xac6, 0xac8, 0xaca, 0xacc, 0xace, 0xad0, 0xad2, 0xad4, 0xad6, 0xad8, 0xada, 0xadc, 0xade, 0xae0, 0xae2, 0xae4, 0xae6, 0xae8, 0xaea, 0xaec, 0xaee, 0xaf0, 0xaf2, 0xaf4, 0xaf6, 0xaf8, 0xafa, 0xafc, 0xafe, 0xb00, 0xb02, 0xb04, 0xb06, 0xb08, 0xb0a, 0xb0c, 0xb0e, 0xb10, 0xb12, 0xb14, 0xb16, 0xb18, 0xb1a, 0xb1c, 0xb1e, 0xb20, 0xb22, 0xb24, 0xb26, 0xb28, 0xb2a, 0xb2c, 0xb2e, 0xb30, 0xb32, 0xb34, 0xb36, 0xb38, 0xb3a, 0xb3c, 0xb3e, 0xb40, 0xb42, 0xb44, 0xb46, 0xb48, 0xb4a, 0xb4c, 0xb4e, 0xb50, 0xb52, 0xb54, 0xb56, 0xb58, 0xb5a, 0xb5c, 0xb5e, 0xb60, 0xb62, 0xb64, 0xb66, 0xb68, 0xb6a, 0xb6c, 0xb6e, 0xb70, 0xb72, 0xb74, 0xb76, 0xb78, 0xb7a, 0xb7c, 0xb7e, 0xb80, 0xb82, 0xb84, 0xb86, 0xb88, 0xb8a, 0xb8c, 0xb8e, 0xb90, 0xb92, 0xb94, 0xb96, 0xb98, 0xb9a, 0xb9c, 0xb9e, 0xba0, 0xba2, 0xba4, 0xba6, 0xba8, 0xbaa, 0xbac, 0xbae, 0xbb0, 0xbb2, 0xbb4, 0xbb6, 0xbb8, 0xbba, 0xbbc, 0xbbe, 0xbc0, 0xbc2, 0xbc4, 0xbc6, 0xbc8, 0xbca, 0xbcc, 0xbce, 0xbd0, 0xbd2, 0xbd4, 0xbd6, 0xbd8, 0xbda, 0xbdc, 0xbde, 0xbe0, 0xbe2, 0xbe4, 0xbe6, 0xbe8, 0xbea, 0xbec, 0xbee, 0xbf0, 0xbf2, 0xbf4, 0xbf6, 0xbf8, 0xbfa, 0xbfc, 0xbfe, 0xc00, 0xc02, 0xc04, 0xc06, 0xc08, 0xc0a, 0xc0c, 0xc0e, 0xc10, 0xc12, 0xc14, 0xc16, 0xc18, 0xc1a, 0xc1c, 0xc1e, 0xc20, 0xc22, 0xc24, 0xc26, 0xc28, 0xc2a, 0xc2c, 0xc2e, 0xc30, 0xc32, 0xc34, 0xc36, 0xc38, 0xc3a, 0xc3c, 0xc3e, 0xc40, 0xc42, 0xc44, 0xc46, 0xc48, 0xc4a, 0xc4c, 0xc4e, 0xc50, 0xc52, 0xc54, 0xc56, 0xc58, 0xc5a, 0xc5c, 0xc5e, 0xc60, 0xc62, 0xc64, 0xc66, 0xc68, 0xc6a, 0xc6c, 0xc6e, 0xc70, 0xc72, 0xc74, 0xc76, 0xc78, 0xc7a, 0xc7c, 0xc7e, 0xc80, 0xc82, 0xc84, 0xc86, 0xc88, 0xc8a, 0xc8c, 0xc8e, 0xc90, 0xc92, 0xc94, 0xc96, 0xc98, 0xc9a, 0xc9c, 0xc9e, 0xca0, 0xca2, 0xca4, 0xca6, 0xca8, 0xcaa, 0xcac, 0xcae, 0xcb0, 0xcb2, 0xcb4, 0xcb6, 0xcb8, 0xcba, 0xcbc, 0xcbe, 0xcc0, 0xcc2, 0xcc4, 0xcc6, 0xcc8, 0xcca, 0xccc, 0xcce, 0xcd0, 0xcd2, 0xcd4, 0xcd6, 0xcd8, 0xcda, 0xcdc, 0xcde, 0xce0, 0xce2, 0xce4, 0xce6, 0xce8, 0xcea, 0xcec, 0xcee, 0xcf0, 0xcf2, 0xcf4, 0xcf6, 0xcf8, 0xcfa, 0xcfc, 0xcfe, 0xd00, 0xd02, 0xd04, 0xd06, 0xd08, 0xd0a, 0xd0c, 0xd0e, 0xd10, 0xd12, 0xd14, 0xd16, 0xd18, 0xd1a, 0xd1c, 0xd1e, 0xd20, 0xd22, 0xd24, 0xd26, 0xd28, 0xd2a, 0xd2c, 0xd2e, 0xd30, 0xd32, 0xd34, 0xd36, 0xd38, 0xd3a, 0xd3c, 0xd3e, 0xd40, 0xd42, 0xd44, 0xd46, 0xd48, 0xd4a, 0xd4c, 0xd4e, 0xd50, 0xd52, 0xd54, 0xd56, 0xd58, 0xd5a, 0xd5c, 0xd5e, 0xd60, 0xd62, 0xd64, 0xd66, 0xd68, 0xd6a, 0xd6c, 0xd6e, 0xd70, 0xd72, 0xd74, 0xd76, 0xd78, 0xd7a, 0xd7c, 0xd7e, 0xd80, 0xd82, 0xd84, 0xd86, 0xd88, 0xd8a, 0xd8c, 0xd8e, 0xd90, 0xd92, 0xd94, 0xd96, 0xd98, 0xd9a, 0xd9c, 0xd9e, 0xda0, 0xda2, 0xda4, 0xda6, 0xda8, 0xdaa, 0xdac, 0xdae, 0xdb0, 0xdb2, 0xdb4, 0xdb6, 0xdb8, 0xdba, 0xdbc, 0xdbe, 0xdc0, 0xdc2, 0xdc4, 0xdc6, 0xdc8, 0xdca, 0xdcc, 0xdce, 0xdd0, 0xdd2, 0xdd4, 0xdd6, 0xdd8, 0xdda, 0xddc, 0xdde, 0xde0, 0xde2, 0xde4, 0xde6, 0xde8, 0xdea, 0xdec, 0xdee, 0xdf0, 0xdf2, 0xdf4, 0xdf6, 0xdf8, 0xdfa, 0xdfc, 0xdfe, 0xe00, 0xe02, 0xe04, 0xe06, 0xe08, 0xe0a, 0xe0c, 0xe0e, 0xe10, 0xe12, 0xe14, 0xe16, 0xe18, 0xe1a, 0xe1c, 0xe1e, 0xe20, 0xe22, 0xe24, 0xe26, 0xe28, 0xe2a, 0xe2c, 0xe2e, 0xe30, 0xe32, 0xe34, 0xe36, 0xe38, 0xe3a, 0xe3c, 0xe3e, 0xe40, 0xe42, 0xe44, 0xe46, 0xe48, 0xe4a, 0xe4c, 0xe4e, 0xe50, 0xe52, 0xe54, 0xe56, 0xe58, 0xe5a, 0xe5c, 0xe5e, 0xe60, 0xe62, 0xe64, 0xe66, 0xe68, 0xe6a, 0xe6c, 0xe6e, 0xe70, 0xe72, 0xe74, 0xe76, 0xe78, 0xe7a, 0xe7c, 0xe7e, 0xe80, 0xe82, 0xe84, 0xe86, 0xe88, 0xe8a, 0xe8c, 0xe8e, 0xe90, 0xe92, 0xe94, 0xe96, 0xe98, 0xe9a, 0xe9c, 0xe9e, 0xea0, 0xea2, 0xea4, 0xea6, 0xea8, 0xeaa, 0xeac, 0xeae, 0xeb0, 0xeb2, 0xeb4, 0xeb6, 0xeb8, 0xeba, 0xebc, 0xebe, 0xec0, 0xec2, 0xec4, 0xec6, 0xec8, 0xeca, 0xecc, 0xece, 0xed0, 0xed2, 0xed4, 0xed6, 0xed8, 0xeda, 0xedc, 0xede, 0xee0, 0xee2, 0xee4, 0xee6, 0xee8, 0xeea, 0xeec, 0xeee, 0xef0, 0xef2, 0xef4, 0xef6, 0xef8, 0xefa, 0xefc, 0xefe, 0xf00, 0xf02, 0xf04, 0xf06, 0xf08, 0xf0a, 0xf0c, 0xf0e, 0xf10, 0xf12, 0xf14, 0xf16, 0xf18, 0xf1a, 0xf1c, 0xf1e, 0xf20, 0xf22, 0xf24, 0xf26, 0xf28, 0xf2a, 0xf2c, 0xf2e, 0xf30, 0xf32, 0xf34, 0xf36, 0xf38, 0xf3a, 0xf3c, 0xf3e, 0xf40, 0xf42, 0xf44, 0xf46, 0xf48, 0xf4a, 0xf4c, 0xf4e, 0xf50, 0xf52, 0xf54, 0xf56, 0xf58, 0xf5a, 0xf5c, 0xf5e, 0xf60, 0xf62, 0xf64, 0xf66, 0xf68, 0xf6a, 0xf6c, 0xf6e, 0xf70, 0xf72, 0xf74, 0xf76, 0xf78, 0xf7a, 0xf7c, 0xf7e, 0xf80, 0xf82, 0xf84, 0xf86, 0xf88, 0xf8a, 0xf8c, 0xf8e, 0xf90, 0xf92, 0xf94, 0xf96, 0xf98, 0xf9a, 0xf9c, 0xf9e, 0xfa0, 0xfa2, 0xfa4, 0xfa6, 0xfa8, 0xfaa, 0xfac, 0xfae, 0xfb0, 0xfb2, 0xfb4, 0xfb6, 0xfb8, 0xfba, 0xfbc, 0xfbe, 0xfc0, 0xfc2, 0xfc4, 0xfc6, 0xfc8, 0xfca, 0xfcc, 0xfce, 0xfd0, 0xfd2, 0xfd4, 0xfd6, 0xfd8, 0xfda, 0xfdc, 0xfde, 0xfe0, 0xfe2, 0xfe4, 0xfe6, 0xfe8, 0xfea, 0xfec, 0xfee, 0xff0, 0xff2, 0xff4, 0xff6, 0xff8, 0xffa, 0xffc, 0xffe, 0xffe, 0xffc, 0xffa, 0xff8, 0xff6, 0xff4, 0xff2, 0xff0, 0xfee, 0xfec, 0xfea, 0xfe8, 0xfe6, 0xfe4, 0xfe2, 0xfe0, 0xfde, 0xfdc, 0xfda, 0xfd8, 0xfd6, 0xfd4, 0xfd2, 0xfd0, 0xfce, 0xfcc, 0xfca, 0xfc8, 0xfc6, 0xfc4, 0xfc2, 0xfc0, 0xfbe, 0xfbc, 0xfba, 0xfb8, 0xfb6, 0xfb4, 0xfb2, 0xfb0, 0xfae, 0xfac, 0xfaa, 0xfa8, 0xfa6, 0xfa4, 0xfa2, 0xfa0, 0xf9e, 0xf9c, 0xf9a, 0xf98, 0xf96, 0xf94, 0xf92, 0xf90, 0xf8e, 0xf8c, 0xf8a, 0xf88, 0xf86, 0xf84, 0xf82, 0xf80, 0xf7e, 0xf7c, 0xf7a, 0xf78, 0xf76, 0xf74, 0xf72, 0xf70, 0xf6e, 0xf6c, 0xf6a, 0xf68, 0xf66, 0xf64, 0xf62, 0xf60, 0xf5e, 0xf5c, 0xf5a, 0xf58, 0xf56, 0xf54, 0xf52, 0xf50, 0xf4e, 0xf4c, 0xf4a, 0xf48, 0xf46, 0xf44, 0xf42, 0xf40, 0xf3e, 0xf3c, 0xf3a, 0xf38, 0xf36, 0xf34, 0xf32, 0xf30, 0xf2e, 0xf2c, 0xf2a, 0xf28, 0xf26, 0xf24, 0xf22, 0xf20, 0xf1e, 0xf1c, 0xf1a, 0xf18, 0xf16, 0xf14, 0xf12, 0xf10, 0xf0e, 0xf0c, 0xf0a, 0xf08, 0xf06, 0xf04, 0xf02, 0xf00, 0xefe, 0xefc, 0xefa, 0xef8, 0xef6, 0xef4, 0xef2, 0xef0, 0xeee, 0xeec, 0xeea, 0xee8, 0xee6, 0xee4, 0xee2, 0xee0, 0xede, 0xedc, 0xeda, 0xed8, 0xed6, 0xed4, 0xed2, 0xed0, 0xece, 0xecc, 0xeca, 0xec8, 0xec6, 0xec4, 0xec2, 0xec0, 0xebe, 0xebc, 0xeba, 0xeb8, 0xeb6, 0xeb4, 0xeb2, 0xeb0, 0xeae, 0xeac, 0xeaa, 0xea8, 0xea6, 0xea4, 0xea2, 0xea0, 0xe9e, 0xe9c, 0xe9a, 0xe98, 0xe96, 0xe94, 0xe92, 0xe90, 0xe8e, 0xe8c, 0xe8a, 0xe88, 0xe86, 0xe84, 0xe82, 0xe80, 0xe7e, 0xe7c, 0xe7a, 0xe78, 0xe76, 0xe74, 0xe72, 0xe70, 0xe6e, 0xe6c, 0xe6a, 0xe68, 0xe66, 0xe64, 0xe62, 0xe60, 0xe5e, 0xe5c, 0xe5a, 0xe58, 0xe56, 0xe54, 0xe52, 0xe50, 0xe4e, 0xe4c, 0xe4a, 0xe48, 0xe46, 0xe44, 0xe42, 0xe40, 0xe3e, 0xe3c, 0xe3a, 0xe38, 0xe36, 0xe34, 0xe32, 0xe30, 0xe2e, 0xe2c, 0xe2a, 0xe28, 0xe26, 0xe24, 0xe22, 0xe20, 0xe1e, 0xe1c, 0xe1a, 0xe18, 0xe16, 0xe14, 0xe12, 0xe10, 0xe0e, 0xe0c, 0xe0a, 0xe08, 0xe06, 0xe04, 0xe02, 0xe00, 0xdfe, 0xdfc, 0xdfa, 0xdf8, 0xdf6, 0xdf4, 0xdf2, 0xdf0, 0xdee, 0xdec, 0xdea, 0xde8, 0xde6, 0xde4, 0xde2, 0xde0, 0xdde, 0xddc, 0xdda, 0xdd8, 0xdd6, 0xdd4, 0xdd2, 0xdd0, 0xdce, 0xdcc, 0xdca, 0xdc8, 0xdc6, 0xdc4, 0xdc2, 0xdc0, 0xdbe, 0xdbc, 0xdba, 0xdb8, 0xdb6, 0xdb4, 0xdb2, 0xdb0, 0xdae, 0xdac, 0xdaa, 0xda8, 0xda6, 0xda4, 0xda2, 0xda0, 0xd9e, 0xd9c, 0xd9a, 0xd98, 0xd96, 0xd94, 0xd92, 0xd90, 0xd8e, 0xd8c, 0xd8a, 0xd88, 0xd86, 0xd84, 0xd82, 0xd80, 0xd7e, 0xd7c, 0xd7a, 0xd78, 0xd76, 0xd74, 0xd72, 0xd70, 0xd6e, 0xd6c, 0xd6a, 0xd68, 0xd66, 0xd64, 0xd62, 0xd60, 0xd5e, 0xd5c, 0xd5a, 0xd58, 0xd56, 0xd54, 0xd52, 0xd50, 0xd4e, 0xd4c, 0xd4a, 0xd48, 0xd46, 0xd44, 0xd42, 0xd40, 0xd3e, 0xd3c, 0xd3a, 0xd38, 0xd36, 0xd34, 0xd32, 0xd30, 0xd2e, 0xd2c, 0xd2a, 0xd28, 0xd26, 0xd24, 0xd22, 0xd20, 0xd1e, 0xd1c, 0xd1a, 0xd18, 0xd16, 0xd14, 0xd12, 0xd10, 0xd0e, 0xd0c, 0xd0a, 0xd08, 0xd06, 0xd04, 0xd02, 0xd00, 0xcfe, 0xcfc, 0xcfa, 0xcf8, 0xcf6, 0xcf4, 0xcf2, 0xcf0, 0xcee, 0xcec, 0xcea, 0xce8, 0xce6, 0xce4, 0xce2, 0xce0, 0xcde, 0xcdc, 0xcda, 0xcd8, 0xcd6, 0xcd4, 0xcd2, 0xcd0, 0xcce, 0xccc, 0xcca, 0xcc8, 0xcc6, 0xcc4, 0xcc2, 0xcc0, 0xcbe, 0xcbc, 0xcba, 0xcb8, 0xcb6, 0xcb4, 0xcb2, 0xcb0, 0xcae, 0xcac, 0xcaa, 0xca8, 0xca6, 0xca4, 0xca2, 0xca0, 0xc9e, 0xc9c, 0xc9a, 0xc98, 0xc96, 0xc94, 0xc92, 0xc90, 0xc8e, 0xc8c, 0xc8a, 0xc88, 0xc86, 0xc84, 0xc82, 0xc80, 0xc7e, 0xc7c, 0xc7a, 0xc78, 0xc76, 0xc74, 0xc72, 0xc70, 0xc6e, 0xc6c, 0xc6a, 0xc68, 0xc66, 0xc64, 0xc62, 0xc60, 0xc5e, 0xc5c, 0xc5a, 0xc58, 0xc56, 0xc54, 0xc52, 0xc50, 0xc4e, 0xc4c, 0xc4a, 0xc48, 0xc46, 0xc44, 0xc42, 0xc40, 0xc3e, 0xc3c, 0xc3a, 0xc38, 0xc36, 0xc34, 0xc32, 0xc30, 0xc2e, 0xc2c, 0xc2a, 0xc28, 0xc26, 0xc24, 0xc22, 0xc20, 0xc1e, 0xc1c, 0xc1a, 0xc18, 0xc16, 0xc14, 0xc12, 0xc10, 0xc0e, 0xc0c, 0xc0a, 0xc08, 0xc06, 0xc04, 0xc02, 0xc00, 0xbfe, 0xbfc, 0xbfa, 0xbf8, 0xbf6, 0xbf4, 0xbf2, 0xbf0, 0xbee, 0xbec, 0xbea, 0xbe8, 0xbe6, 0xbe4, 0xbe2, 0xbe0, 0xbde, 0xbdc, 0xbda, 0xbd8, 0xbd6, 0xbd4, 0xbd2, 0xbd0, 0xbce, 0xbcc, 0xbca, 0xbc8, 0xbc6, 0xbc4, 0xbc2, 0xbc0, 0xbbe, 0xbbc, 0xbba, 0xbb8, 0xbb6, 0xbb4, 0xbb2, 0xbb0, 0xbae, 0xbac, 0xbaa, 0xba8, 0xba6, 0xba4, 0xba2, 0xba0, 0xb9e, 0xb9c, 0xb9a, 0xb98, 0xb96, 0xb94, 0xb92, 0xb90, 0xb8e, 0xb8c, 0xb8a, 0xb88, 0xb86, 0xb84, 0xb82, 0xb80, 0xb7e, 0xb7c, 0xb7a, 0xb78, 0xb76, 0xb74, 0xb72, 0xb70, 0xb6e, 0xb6c, 0xb6a, 0xb68, 0xb66, 0xb64, 0xb62, 0xb60, 0xb5e, 0xb5c, 0xb5a, 0xb58, 0xb56, 0xb54, 0xb52, 0xb50, 0xb4e, 0xb4c, 0xb4a, 0xb48, 0xb46, 0xb44, 0xb42, 0xb40, 0xb3e, 0xb3c, 0xb3a, 0xb38, 0xb36, 0xb34, 0xb32, 0xb30, 0xb2e, 0xb2c, 0xb2a, 0xb28, 0xb26, 0xb24, 0xb22, 0xb20, 0xb1e, 0xb1c, 0xb1a, 0xb18, 0xb16, 0xb14, 0xb12, 0xb10, 0xb0e, 0xb0c, 0xb0a, 0xb08, 0xb06, 0xb04, 0xb02, 0xb00, 0xafe, 0xafc, 0xafa, 0xaf8, 0xaf6, 0xaf4, 0xaf2, 0xaf0, 0xaee, 0xaec, 0xaea, 0xae8, 0xae6, 0xae4, 0xae2, 0xae0, 0xade, 0xadc, 0xada, 0xad8, 0xad6, 0xad4, 0xad2, 0xad0, 0xace, 0xacc, 0xaca, 0xac8, 0xac6, 0xac4, 0xac2, 0xac0, 0xabe, 0xabc, 0xaba, 0xab8, 0xab6, 0xab4, 0xab2, 0xab0, 0xaae, 0xaac, 0xaaa, 0xaa8, 0xaa6, 0xaa4, 0xaa2, 0xaa0, 0xa9e, 0xa9c, 0xa9a, 0xa98, 0xa96, 0xa94, 0xa92, 0xa90, 0xa8e, 0xa8c, 0xa8a, 0xa88, 0xa86, 0xa84, 0xa82, 0xa80, 0xa7e, 0xa7c, 0xa7a, 0xa78, 0xa76, 0xa74, 0xa72, 0xa70, 0xa6e, 0xa6c, 0xa6a, 0xa68, 0xa66, 0xa64, 0xa62, 0xa60, 0xa5e, 0xa5c, 0xa5a, 0xa58, 0xa56, 0xa54, 0xa52, 0xa50, 0xa4e, 0xa4c, 0xa4a, 0xa48, 0xa46, 0xa44, 0xa42, 0xa40, 0xa3e, 0xa3c, 0xa3a, 0xa38, 0xa36, 0xa34, 0xa32, 0xa30, 0xa2e, 0xa2c, 0xa2a, 0xa28, 0xa26, 0xa24, 0xa22, 0xa20, 0xa1e, 0xa1c, 0xa1a, 0xa18, 0xa16, 0xa14, 0xa12, 0xa10, 0xa0e, 0xa0c, 0xa0a, 0xa08, 0xa06, 0xa04, 0xa02, 0xa00, 0x9fe, 0x9fc, 0x9fa, 0x9f8, 0x9f6, 0x9f4, 0x9f2, 0x9f0, 0x9ee, 0x9ec, 0x9ea, 0x9e8, 0x9e6, 0x9e4, 0x9e2, 0x9e0, 0x9de, 0x9dc, 0x9da, 0x9d8, 0x9d6, 0x9d4, 0x9d2, 0x9d0, 0x9ce, 0x9cc, 0x9ca, 0x9c8, 0x9c6, 0x9c4, 0x9c2, 0x9c0, 0x9be, 0x9bc, 0x9ba, 0x9b8, 0x9b6, 0x9b4, 0x9b2, 0x9b0, 0x9ae, 0x9ac, 0x9aa, 0x9a8, 0x9a6, 0x9a4, 0x9a2, 0x9a0, 0x99e, 0x99c, 0x99a, 0x998, 0x996, 0x994, 0x992, 0x990, 0x98e, 0x98c, 0x98a, 0x988, 0x986, 0x984, 0x982, 0x980, 0x97e, 0x97c, 0x97a, 0x978, 0x976, 0x974, 0x972, 0x970, 0x96e, 0x96c, 0x96a, 0x968, 0x966, 0x964, 0x962, 0x960, 0x95e, 0x95c, 0x95a, 0x958, 0x956, 0x954, 0x952, 0x950, 0x94e, 0x94c, 0x94a, 0x948, 0x946, 0x944, 0x942, 0x940, 0x93e, 0x93c, 0x93a, 0x938, 0x936, 0x934, 0x932, 0x930, 0x92e, 0x92c, 0x92a, 0x928, 0x926, 0x924, 0x922, 0x920, 0x91e, 0x91c, 0x91a, 0x918, 0x916, 0x914, 0x912, 0x910, 0x90e, 0x90c, 0x90a, 0x908, 0x906, 0x904, 0x902, 0x900, 0x8fe, 0x8fc, 0x8fa, 0x8f8, 0x8f6, 0x8f4, 0x8f2, 0x8f0, 0x8ee, 0x8ec, 0x8ea, 0x8e8, 0x8e6, 0x8e4, 0x8e2, 0x8e0, 0x8de, 0x8dc, 0x8da, 0x8d8, 0x8d6, 0x8d4, 0x8d2, 0x8d0, 0x8ce, 0x8cc, 0x8ca, 0x8c8, 0x8c6, 0x8c4, 0x8c2, 0x8c0, 0x8be, 0x8bc, 0x8ba, 0x8b8, 0x8b6, 0x8b4, 0x8b2, 0x8b0, 0x8ae, 0x8ac, 0x8aa, 0x8a8, 0x8a6, 0x8a4, 0x8a2, 0x8a0, 0x89e, 0x89c, 0x89a, 0x898, 0x896, 0x894, 0x892, 0x890, 0x88e, 0x88c, 0x88a, 0x888, 0x886, 0x884, 0x882, 0x880, 0x87e, 0x87c, 0x87a, 0x878, 0x876, 0x874, 0x872, 0x870, 0x86e, 0x86c, 0x86a, 0x868, 0x866, 0x864, 0x862, 0x860, 0x85e, 0x85c, 0x85a, 0x858, 0x856, 0x854, 0x852, 0x850, 0x84e, 0x84c, 0x84a, 0x848, 0x846, 0x844, 0x842, 0x840, 0x83e, 0x83c, 0x83a, 0x838, 0x836, 0x834, 0x832, 0x830, 0x82e, 0x82c, 0x82a, 0x828, 0x826, 0x824, 0x822, 0x820, 0x81e, 0x81c, 0x81a, 0x818, 0x816, 0x814, 0x812, 0x810, 0x80e, 0x80c, 0x80a, 0x808, 0x806, 0x804, 0x802, 0x800, 0x7fe, 0x7fc, 0x7fa, 0x7f8, 0x7f6, 0x7f4, 0x7f2, 0x7f0, 0x7ee, 0x7ec, 0x7ea, 0x7e8, 0x7e6, 0x7e4, 0x7e2, 0x7e0, 0x7de, 0x7dc, 0x7da, 0x7d8, 0x7d6, 0x7d4, 0x7d2, 0x7d0, 0x7ce, 0x7cc, 0x7ca, 0x7c8, 0x7c6, 0x7c4, 0x7c2, 0x7c0, 0x7be, 0x7bc, 0x7ba, 0x7b8, 0x7b6, 0x7b4, 0x7b2, 0x7b0, 0x7ae, 0x7ac, 0x7aa, 0x7a8, 0x7a6, 0x7a4, 0x7a2, 0x7a0, 0x79e, 0x79c, 0x79a, 0x798, 0x796, 0x794, 0x792, 0x790, 0x78e, 0x78c, 0x78a, 0x788, 0x786, 0x784, 0x782, 0x780, 0x77e, 0x77c, 0x77a, 0x778, 0x776, 0x774, 0x772, 0x770, 0x76e, 0x76c, 0x76a, 0x768, 0x766, 0x764, 0x762, 0x760, 0x75e, 0x75c, 0x75a, 0x758, 0x756, 0x754, 0x752, 0x750, 0x74e, 0x74c, 0x74a, 0x748, 0x746, 0x744, 0x742, 0x740, 0x73e, 0x73c, 0x73a, 0x738, 0x736, 0x734, 0x732, 0x730, 0x72e, 0x72c, 0x72a, 0x728, 0x726, 0x724, 0x722, 0x720, 0x71e, 0x71c, 0x71a, 0x718, 0x716, 0x714, 0x712, 0x710, 0x70e, 0x70c, 0x70a, 0x708, 0x706, 0x704, 0x702, 0x700, 0x6fe, 0x6fc, 0x6fa, 0x6f8, 0x6f6, 0x6f4, 0x6f2, 0x6f0, 0x6ee, 0x6ec, 0x6ea, 0x6e8, 0x6e6, 0x6e4, 0x6e2, 0x6e0, 0x6de, 0x6dc, 0x6da, 0x6d8, 0x6d6, 0x6d4, 0x6d2, 0x6d0, 0x6ce, 0x6cc, 0x6ca, 0x6c8, 0x6c6, 0x6c4, 0x6c2, 0x6c0, 0x6be, 0x6bc, 0x6ba, 0x6b8, 0x6b6, 0x6b4, 0x6b2, 0x6b0, 0x6ae, 0x6ac, 0x6aa, 0x6a8, 0x6a6, 0x6a4, 0x6a2, 0x6a0, 0x69e, 0x69c, 0x69a, 0x698, 0x696, 0x694, 0x692, 0x690, 0x68e, 0x68c, 0x68a, 0x688, 0x686, 0x684, 0x682, 0x680, 0x67e, 0x67c, 0x67a, 0x678, 0x676, 0x674, 0x672, 0x670, 0x66e, 0x66c, 0x66a, 0x668, 0x666, 0x664, 0x662, 0x660, 0x65e, 0x65c, 0x65a, 0x658, 0x656, 0x654, 0x652, 0x650, 0x64e, 0x64c, 0x64a, 0x648, 0x646, 0x644, 0x642, 0x640, 0x63e, 0x63c, 0x63a, 0x638, 0x636, 0x634, 0x632, 0x630, 0x62e, 0x62c, 0x62a, 0x628, 0x626, 0x624, 0x622, 0x620, 0x61e, 0x61c, 0x61a, 0x618, 0x616, 0x614, 0x612, 0x610, 0x60e, 0x60c, 0x60a, 0x608, 0x606, 0x604, 0x602, 0x600, 0x5fe, 0x5fc, 0x5fa, 0x5f8, 0x5f6, 0x5f4, 0x5f2, 0x5f0, 0x5ee, 0x5ec, 0x5ea, 0x5e8, 0x5e6, 0x5e4, 0x5e2, 0x5e0, 0x5de, 0x5dc, 0x5da, 0x5d8, 0x5d6, 0x5d4, 0x5d2, 0x5d0, 0x5ce, 0x5cc, 0x5ca, 0x5c8, 0x5c6, 0x5c4, 0x5c2, 0x5c0, 0x5be, 0x5bc, 0x5ba, 0x5b8, 0x5b6, 0x5b4, 0x5b2, 0x5b0, 0x5ae, 0x5ac, 0x5aa, 0x5a8, 0x5a6, 0x5a4, 0x5a2, 0x5a0, 0x59e, 0x59c, 0x59a, 0x598, 0x596, 0x594, 0x592, 0x590, 0x58e, 0x58c, 0x58a, 0x588, 0x586, 0x584, 0x582, 0x580, 0x57e, 0x57c, 0x57a, 0x578, 0x576, 0x574, 0x572, 0x570, 0x56e, 0x56c, 0x56a, 0x568, 0x566, 0x564, 0x562, 0x560, 0x55e, 0x55c, 0x55a, 0x558, 0x556, 0x554, 0x552, 0x550, 0x54e, 0x54c, 0x54a, 0x548, 0x546, 0x544, 0x542, 0x540, 0x53e, 0x53c, 0x53a, 0x538, 0x536, 0x534, 0x532, 0x530, 0x52e, 0x52c, 0x52a, 0x528, 0x526, 0x524, 0x522, 0x520, 0x51e, 0x51c, 0x51a, 0x518, 0x516, 0x514, 0x512, 0x510, 0x50e, 0x50c, 0x50a, 0x508, 0x506, 0x504, 0x502, 0x500, 0x4fe, 0x4fc, 0x4fa, 0x4f8, 0x4f6, 0x4f4, 0x4f2, 0x4f0, 0x4ee, 0x4ec, 0x4ea, 0x4e8, 0x4e6, 0x4e4, 0x4e2, 0x4e0, 0x4de, 0x4dc, 0x4da, 0x4d8, 0x4d6, 0x4d4, 0x4d2, 0x4d0, 0x4ce, 0x4cc, 0x4ca, 0x4c8, 0x4c6, 0x4c4, 0x4c2, 0x4c0, 0x4be, 0x4bc, 0x4ba, 0x4b8, 0x4b6, 0x4b4, 0x4b2, 0x4b0, 0x4ae, 0x4ac, 0x4aa, 0x4a8, 0x4a6, 0x4a4, 0x4a2, 0x4a0, 0x49e, 0x49c, 0x49a, 0x498, 0x496, 0x494, 0x492, 0x490, 0x48e, 0x48c, 0x48a, 0x488, 0x486, 0x484, 0x482, 0x480, 0x47e, 0x47c, 0x47a, 0x478, 0x476, 0x474, 0x472, 0x470, 0x46e, 0x46c, 0x46a, 0x468, 0x466, 0x464, 0x462, 0x460, 0x45e, 0x45c, 0x45a, 0x458, 0x456, 0x454, 0x452, 0x450, 0x44e, 0x44c, 0x44a, 0x448, 0x446, 0x444, 0x442, 0x440, 0x43e, 0x43c, 0x43a, 0x438, 0x436, 0x434, 0x432, 0x430, 0x42e, 0x42c, 0x42a, 0x428, 0x426, 0x424, 0x422, 0x420, 0x41e, 0x41c, 0x41a, 0x418, 0x416, 0x414, 0x412, 0x410, 0x40e, 0x40c, 0x40a, 0x408, 0x406, 0x404, 0x402, 0x400, 0x3fe, 0x3fc, 0x3fa, 0x3f8, 0x3f6, 0x3f4, 0x3f2, 0x3f0, 0x3ee, 0x3ec, 0x3ea, 0x3e8, 0x3e6, 0x3e4, 0x3e2, 0x3e0, 0x3de, 0x3dc, 0x3da, 0x3d8, 0x3d6, 0x3d4, 0x3d2, 0x3d0, 0x3ce, 0x3cc, 0x3ca, 0x3c8, 0x3c6, 0x3c4, 0x3c2, 0x3c0, 0x3be, 0x3bc, 0x3ba, 0x3b8, 0x3b6, 0x3b4, 0x3b2, 0x3b0, 0x3ae, 0x3ac, 0x3aa, 0x3a8, 0x3a6, 0x3a4, 0x3a2, 0x3a0, 0x39e, 0x39c, 0x39a, 0x398, 0x396, 0x394, 0x392, 0x390, 0x38e, 0x38c, 0x38a, 0x388, 0x386, 0x384, 0x382, 0x380, 0x37e, 0x37c, 0x37a, 0x378, 0x376, 0x374, 0x372, 0x370, 0x36e, 0x36c, 0x36a, 0x368, 0x366, 0x364, 0x362, 0x360, 0x35e, 0x35c, 0x35a, 0x358, 0x356, 0x354, 0x352, 0x350, 0x34e, 0x34c, 0x34a, 0x348, 0x346, 0x344, 0x342, 0x340, 0x33e, 0x33c, 0x33a, 0x338, 0x336, 0x334, 0x332, 0x330, 0x32e, 0x32c, 0x32a, 0x328, 0x326, 0x324, 0x322, 0x320, 0x31e, 0x31c, 0x31a, 0x318, 0x316, 0x314, 0x312, 0x310, 0x30e, 0x30c, 0x30a, 0x308, 0x306, 0x304, 0x302, 0x300, 0x2fe, 0x2fc, 0x2fa, 0x2f8, 0x2f6, 0x2f4, 0x2f2, 0x2f0, 0x2ee, 0x2ec, 0x2ea, 0x2e8, 0x2e6, 0x2e4, 0x2e2, 0x2e0, 0x2de, 0x2dc, 0x2da, 0x2d8, 0x2d6, 0x2d4, 0x2d2, 0x2d0, 0x2ce, 0x2cc, 0x2ca, 0x2c8, 0x2c6, 0x2c4, 0x2c2, 0x2c0, 0x2be, 0x2bc, 0x2ba, 0x2b8, 0x2b6, 0x2b4, 0x2b2, 0x2b0, 0x2ae, 0x2ac, 0x2aa, 0x2a8, 0x2a6, 0x2a4, 0x2a2, 0x2a0, 0x29e, 0x29c, 0x29a, 0x298, 0x296, 0x294, 0x292, 0x290, 0x28e, 0x28c, 0x28a, 0x288, 0x286, 0x284, 0x282, 0x280, 0x27e, 0x27c, 0x27a, 0x278, 0x276, 0x274, 0x272, 0x270, 0x26e, 0x26c, 0x26a, 0x268, 0x266, 0x264, 0x262, 0x260, 0x25e, 0x25c, 0x25a, 0x258, 0x256, 0x254, 0x252, 0x250, 0x24e, 0x24c, 0x24a, 0x248, 0x246, 0x244, 0x242, 0x240, 0x23e, 0x23c, 0x23a, 0x238, 0x236, 0x234, 0x232, 0x230, 0x22e, 0x22c, 0x22a, 0x228, 0x226, 0x224, 0x222, 0x220, 0x21e, 0x21c, 0x21a, 0x218, 0x216, 0x214, 0x212, 0x210, 0x20e, 0x20c, 0x20a, 0x208, 0x206, 0x204, 0x202, 0x200, 0x1fe, 0x1fc, 0x1fa, 0x1f8, 0x1f6, 0x1f4, 0x1f2, 0x1f0, 0x1ee, 0x1ec, 0x1ea, 0x1e8, 0x1e6, 0x1e4, 0x1e2, 0x1e0, 0x1de, 0x1dc, 0x1da, 0x1d8, 0x1d6, 0x1d4, 0x1d2, 0x1d0, 0x1ce, 0x1cc, 0x1ca, 0x1c8, 0x1c6, 0x1c4, 0x1c2, 0x1c0, 0x1be, 0x1bc, 0x1ba, 0x1b8, 0x1b6, 0x1b4, 0x1b2, 0x1b0, 0x1ae, 0x1ac, 0x1aa, 0x1a8, 0x1a6, 0x1a4, 0x1a2, 0x1a0, 0x19e, 0x19c, 0x19a, 0x198, 0x196, 0x194, 0x192, 0x190, 0x18e, 0x18c, 0x18a, 0x188, 0x186, 0x184, 0x182, 0x180, 0x17e, 0x17c, 0x17a, 0x178, 0x176, 0x174, 0x172, 0x170, 0x16e, 0x16c, 0x16a, 0x168, 0x166, 0x164, 0x162, 0x160, 0x15e, 0x15c, 0x15a, 0x158, 0x156, 0x154, 0x152, 0x150, 0x14e, 0x14c, 0x14a, 0x148, 0x146, 0x144, 0x142, 0x140, 0x13e, 0x13c, 0x13a, 0x138, 0x136, 0x134, 0x132, 0x130, 0x12e, 0x12c, 0x12a, 0x128, 0x126, 0x124, 0x122, 0x120, 0x11e, 0x11c, 0x11a, 0x118, 0x116, 0x114, 0x112, 0x110, 0x10e, 0x10c, 0x10a, 0x108, 0x106, 0x104, 0x102, 0x100, 0x0fe, 0x0fc, 0x0fa, 0x0f8, 0x0f6, 0x0f4, 0x0f2, 0x0f0, 0x0ee, 0x0ec, 0x0ea, 0x0e8, 0x0e6, 0x0e4, 0x0e2, 0x0e0, 0x0de, 0x0dc, 0x0da, 0x0d8, 0x0d6, 0x0d4, 0x0d2, 0x0d0, 0x0ce, 0x0cc, 0x0ca, 0x0c8, 0x0c6, 0x0c4, 0x0c2, 0x0c0, 0x0be, 0x0bc, 0x0ba, 0x0b8, 0x0b6, 0x0b4, 0x0b2, 0x0b0, 0x0ae, 0x0ac, 0x0aa, 0x0a8, 0x0a6, 0x0a4, 0x0a2, 0x0a0, 0x09e, 0x09c, 0x09a, 0x098, 0x096, 0x094, 0x092, 0x090, 0x08e, 0x08c, 0x08a, 0x088, 0x086, 0x084, 0x082, 0x080, 0x07e, 0x07c, 0x07a, 0x078, 0x076, 0x074, 0x072, 0x070, 0x06e, 0x06c, 0x06a, 0x068, 0x066, 0x064, 0x062, 0x060, 0x05e, 0x05c, 0x05a, 0x058, 0x056, 0x054, 0x052, 0x050, 0x04e, 0x04c, 0x04a, 0x048, 0x046, 0x044, 0x042, 0x040, 0x03e, 0x03c, 0x03a, 0x038, 0x036, 0x034, 0x032, 0x030, 0x02e, 0x02c, 0x02a, 0x028, 0x026, 0x024, 0x022, 0x020, 0x01e, 0x01c, 0x01a, 0x018, 0x016, 0x014, 0x012, 0x010, 0x00e, 0x00c, 0x00a, 0x008, 0x006, 0x004, 0x002, 0x000 }, + new[] { 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008, 0x009, 0x00a, 0x00b, 0x00c, 0x00d, 0x00e, 0x00f, 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, 0x018, 0x019, 0x01a, 0x01b, 0x01c, 0x01d, 0x01e, 0x01f, 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, 0x028, 0x029, 0x02a, 0x02b, 0x02c, 0x02d, 0x02e, 0x02f, 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, 0x038, 0x039, 0x03a, 0x03b, 0x03c, 0x03d, 0x03e, 0x03f, 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, 0x048, 0x049, 0x04a, 0x04b, 0x04c, 0x04d, 0x04e, 0x04f, 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, 0x058, 0x059, 0x05a, 0x05b, 0x05c, 0x05d, 0x05e, 0x05f, 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, 0x068, 0x069, 0x06a, 0x06b, 0x06c, 0x06d, 0x06e, 0x06f, 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, 0x078, 0x079, 0x07a, 0x07b, 0x07c, 0x07d, 0x07e, 0x07f, 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, 0x088, 0x089, 0x08a, 0x08b, 0x08c, 0x08d, 0x08e, 0x08f, 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097, 0x098, 0x099, 0x09a, 0x09b, 0x09c, 0x09d, 0x09e, 0x09f, 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7, 0x0a8, 0x0a9, 0x0aa, 0x0ab, 0x0ac, 0x0ad, 0x0ae, 0x0af, 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7, 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bc, 0x0bd, 0x0be, 0x0bf, 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, 0x0c8, 0x0c9, 0x0ca, 0x0cb, 0x0cc, 0x0cd, 0x0ce, 0x0cf, 0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, 0x0d8, 0x0d9, 0x0da, 0x0db, 0x0dc, 0x0dd, 0x0de, 0x0df, 0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7, 0x0e8, 0x0e9, 0x0ea, 0x0eb, 0x0ec, 0x0ed, 0x0ee, 0x0ef, 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7, 0x0f8, 0x0f9, 0x0fa, 0x0fb, 0x0fc, 0x0fd, 0x0fe, 0x0ff, 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10a, 0x10b, 0x10c, 0x10d, 0x10e, 0x10f, 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, 0x118, 0x119, 0x11a, 0x11b, 0x11c, 0x11d, 0x11e, 0x11f, 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, 0x128, 0x129, 0x12a, 0x12b, 0x12c, 0x12d, 0x12e, 0x12f, 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, 0x138, 0x139, 0x13a, 0x13b, 0x13c, 0x13d, 0x13e, 0x13f, 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, 0x148, 0x149, 0x14a, 0x14b, 0x14c, 0x14d, 0x14e, 0x14f, 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, 0x158, 0x159, 0x15a, 0x15b, 0x15c, 0x15d, 0x15e, 0x15f, 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, 0x168, 0x169, 0x16a, 0x16b, 0x16c, 0x16d, 0x16e, 0x16f, 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, 0x178, 0x179, 0x17a, 0x17b, 0x17c, 0x17d, 0x17e, 0x17f, 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, 0x188, 0x189, 0x18a, 0x18b, 0x18c, 0x18d, 0x18e, 0x18f, 0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, 0x198, 0x199, 0x19a, 0x19b, 0x19c, 0x19d, 0x19e, 0x19f, 0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4, 0x1a5, 0x1a6, 0x1a7, 0x1a8, 0x1a9, 0x1aa, 0x1ab, 0x1ac, 0x1ad, 0x1ae, 0x1af, 0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4, 0x1b5, 0x1b6, 0x1b7, 0x1b8, 0x1b9, 0x1ba, 0x1bb, 0x1bc, 0x1bd, 0x1be, 0x1bf, 0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4, 0x1c5, 0x1c6, 0x1c7, 0x1c8, 0x1c9, 0x1ca, 0x1cb, 0x1cc, 0x1cd, 0x1ce, 0x1cf, 0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4, 0x1d5, 0x1d6, 0x1d7, 0x1d8, 0x1d9, 0x1da, 0x1db, 0x1dc, 0x1dd, 0x1de, 0x1df, 0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4, 0x1e5, 0x1e6, 0x1e7, 0x1e8, 0x1e9, 0x1ea, 0x1eb, 0x1ec, 0x1ed, 0x1ee, 0x1ef, 0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7, 0x1f8, 0x1f9, 0x1fa, 0x1fb, 0x1fc, 0x1fd, 0x1fe, 0x1ff, 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, 0x208, 0x209, 0x20a, 0x20b, 0x20c, 0x20d, 0x20e, 0x20f, 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, 0x218, 0x219, 0x21a, 0x21b, 0x21c, 0x21d, 0x21e, 0x21f, 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, 0x228, 0x229, 0x22a, 0x22b, 0x22c, 0x22d, 0x22e, 0x22f, 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, 0x238, 0x239, 0x23a, 0x23b, 0x23c, 0x23d, 0x23e, 0x23f, 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, 0x248, 0x249, 0x24a, 0x24b, 0x24c, 0x24d, 0x24e, 0x24f, 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, 0x258, 0x259, 0x25a, 0x25b, 0x25c, 0x25d, 0x25e, 0x25f, 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, 0x268, 0x269, 0x26a, 0x26b, 0x26c, 0x26d, 0x26e, 0x26f, 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, 0x278, 0x279, 0x27a, 0x27b, 0x27c, 0x27d, 0x27e, 0x27f, 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287, 0x288, 0x289, 0x28a, 0x28b, 0x28c, 0x28d, 0x28e, 0x28f, 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, 0x298, 0x299, 0x29a, 0x29b, 0x29c, 0x29d, 0x29e, 0x29f, 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7, 0x2a8, 0x2a9, 0x2aa, 0x2ab, 0x2ac, 0x2ad, 0x2ae, 0x2af, 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7, 0x2b8, 0x2b9, 0x2ba, 0x2bb, 0x2bc, 0x2bd, 0x2be, 0x2bf, 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc, 0x2cd, 0x2ce, 0x2cf, 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7, 0x2d8, 0x2d9, 0x2da, 0x2db, 0x2dc, 0x2dd, 0x2de, 0x2df, 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9, 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x2f9, 0x2fa, 0x2fb, 0x2fc, 0x2fd, 0x2fe, 0x2ff, 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, 0x308, 0x309, 0x30a, 0x30b, 0x30c, 0x30d, 0x30e, 0x30f, 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, 0x318, 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, 0x328, 0x329, 0x32a, 0x32b, 0x32c, 0x32d, 0x32e, 0x32f, 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, 0x338, 0x339, 0x33a, 0x33b, 0x33c, 0x33d, 0x33e, 0x33f, 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, 0x348, 0x349, 0x34a, 0x34b, 0x34c, 0x34d, 0x34e, 0x34f, 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, 0x358, 0x359, 0x35a, 0x35b, 0x35c, 0x35d, 0x35e, 0x35f, 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, 0x368, 0x369, 0x36a, 0x36b, 0x36c, 0x36d, 0x36e, 0x36f, 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, 0x378, 0x379, 0x37a, 0x37b, 0x37c, 0x37d, 0x37e, 0x37f, 0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387, 0x388, 0x389, 0x38a, 0x38b, 0x38c, 0x38d, 0x38e, 0x38f, 0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a2, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x3ac, 0x3ad, 0x3ae, 0x3af, 0x3b0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, 0x3b8, 0x3b9, 0x3ba, 0x3bb, 0x3bc, 0x3bd, 0x3be, 0x3bf, 0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3cc, 0x3cd, 0x3ce, 0x3cf, 0x3d0, 0x3d1, 0x3d2, 0x3d3, 0x3d4, 0x3d5, 0x3d6, 0x3d7, 0x3d8, 0x3d9, 0x3da, 0x3db, 0x3dc, 0x3dd, 0x3de, 0x3df, 0x3e0, 0x3e1, 0x3e2, 0x3e3, 0x3e4, 0x3e5, 0x3e6, 0x3e7, 0x3e8, 0x3e9, 0x3ea, 0x3eb, 0x3ec, 0x3ed, 0x3ee, 0x3ef, 0x3f0, 0x3f1, 0x3f2, 0x3f3, 0x3f4, 0x3f5, 0x3f6, 0x3f7, 0x3f8, 0x3f9, 0x3fa, 0x3fb, 0x3fc, 0x3fd, 0x3fe, 0x3ff, 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0x40d, 0x40e, 0x40f, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f, 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45a, 0x45b, 0x45c, 0x45d, 0x45e, 0x45f, 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, 0x468, 0x469, 0x46a, 0x46b, 0x46c, 0x46d, 0x46e, 0x46f, 0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, 0x478, 0x479, 0x47a, 0x47b, 0x47c, 0x47d, 0x47e, 0x47f, 0x480, 0x481, 0x482, 0x483, 0x484, 0x485, 0x486, 0x487, 0x488, 0x489, 0x48a, 0x48b, 0x48c, 0x48d, 0x48e, 0x48f, 0x490, 0x491, 0x492, 0x493, 0x494, 0x495, 0x496, 0x497, 0x498, 0x499, 0x49a, 0x49b, 0x49c, 0x49d, 0x49e, 0x49f, 0x4a0, 0x4a1, 0x4a2, 0x4a3, 0x4a4, 0x4a5, 0x4a6, 0x4a7, 0x4a8, 0x4a9, 0x4aa, 0x4ab, 0x4ac, 0x4ad, 0x4ae, 0x4af, 0x4b0, 0x4b1, 0x4b2, 0x4b3, 0x4b4, 0x4b5, 0x4b6, 0x4b7, 0x4b8, 0x4b9, 0x4ba, 0x4bb, 0x4bc, 0x4bd, 0x4be, 0x4bf, 0x4c0, 0x4c1, 0x4c2, 0x4c3, 0x4c4, 0x4c5, 0x4c6, 0x4c7, 0x4c8, 0x4c9, 0x4ca, 0x4cb, 0x4cc, 0x4cd, 0x4ce, 0x4cf, 0x4d0, 0x4d1, 0x4d2, 0x4d3, 0x4d4, 0x4d5, 0x4d6, 0x4d7, 0x4d8, 0x4d9, 0x4da, 0x4db, 0x4dc, 0x4dd, 0x4de, 0x4df, 0x4e0, 0x4e1, 0x4e2, 0x4e3, 0x4e4, 0x4e5, 0x4e6, 0x4e7, 0x4e8, 0x4e9, 0x4ea, 0x4eb, 0x4ec, 0x4ed, 0x4ee, 0x4ef, 0x4f0, 0x4f1, 0x4f2, 0x4f3, 0x4f4, 0x4f5, 0x4f6, 0x4f7, 0x4f8, 0x4f9, 0x4fa, 0x4fb, 0x4fc, 0x4fd, 0x4fe, 0x4ff, 0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, 0x508, 0x509, 0x50a, 0x50b, 0x50c, 0x50d, 0x50e, 0x50f, 0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, 0x518, 0x519, 0x51a, 0x51b, 0x51c, 0x51d, 0x51e, 0x51f, 0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, 0x528, 0x529, 0x52a, 0x52b, 0x52c, 0x52d, 0x52e, 0x52f, 0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f, 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, 0x558, 0x559, 0x55a, 0x55b, 0x55c, 0x55d, 0x55e, 0x55f, 0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, 0x568, 0x569, 0x56a, 0x56b, 0x56c, 0x56d, 0x56e, 0x56f, 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, 0x578, 0x579, 0x57a, 0x57b, 0x57c, 0x57d, 0x57e, 0x57f, 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0x587, 0x588, 0x589, 0x58a, 0x58b, 0x58c, 0x58d, 0x58e, 0x58f, 0x590, 0x591, 0x592, 0x593, 0x594, 0x595, 0x596, 0x597, 0x598, 0x599, 0x59a, 0x59b, 0x59c, 0x59d, 0x59e, 0x59f, 0x5a0, 0x5a1, 0x5a2, 0x5a3, 0x5a4, 0x5a5, 0x5a6, 0x5a7, 0x5a8, 0x5a9, 0x5aa, 0x5ab, 0x5ac, 0x5ad, 0x5ae, 0x5af, 0x5b0, 0x5b1, 0x5b2, 0x5b3, 0x5b4, 0x5b5, 0x5b6, 0x5b7, 0x5b8, 0x5b9, 0x5ba, 0x5bb, 0x5bc, 0x5bd, 0x5be, 0x5bf, 0x5c0, 0x5c1, 0x5c2, 0x5c3, 0x5c4, 0x5c5, 0x5c6, 0x5c7, 0x5c8, 0x5c9, 0x5ca, 0x5cb, 0x5cc, 0x5cd, 0x5ce, 0x5cf, 0x5d0, 0x5d1, 0x5d2, 0x5d3, 0x5d4, 0x5d5, 0x5d6, 0x5d7, 0x5d8, 0x5d9, 0x5da, 0x5db, 0x5dc, 0x5dd, 0x5de, 0x5df, 0x5e0, 0x5e1, 0x5e2, 0x5e3, 0x5e4, 0x5e5, 0x5e6, 0x5e7, 0x5e8, 0x5e9, 0x5ea, 0x5eb, 0x5ec, 0x5ed, 0x5ee, 0x5ef, 0x5f0, 0x5f1, 0x5f2, 0x5f3, 0x5f4, 0x5f5, 0x5f6, 0x5f7, 0x5f8, 0x5f9, 0x5fa, 0x5fb, 0x5fc, 0x5fd, 0x5fe, 0x5ff, 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60a, 0x60b, 0x60c, 0x60d, 0x60e, 0x60f, 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, 0x618, 0x619, 0x61a, 0x61b, 0x61c, 0x61d, 0x61e, 0x61f, 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, 0x628, 0x629, 0x62a, 0x62b, 0x62c, 0x62d, 0x62e, 0x62f, 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, 0x638, 0x639, 0x63a, 0x63b, 0x63c, 0x63d, 0x63e, 0x63f, 0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, 0x648, 0x649, 0x64a, 0x64b, 0x64c, 0x64d, 0x64e, 0x64f, 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, 0x658, 0x659, 0x65a, 0x65b, 0x65c, 0x65d, 0x65e, 0x65f, 0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, 0x668, 0x669, 0x66a, 0x66b, 0x66c, 0x66d, 0x66e, 0x66f, 0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, 0x678, 0x679, 0x67a, 0x67b, 0x67c, 0x67d, 0x67e, 0x67f, 0x680, 0x681, 0x682, 0x683, 0x684, 0x685, 0x686, 0x687, 0x688, 0x689, 0x68a, 0x68b, 0x68c, 0x68d, 0x68e, 0x68f, 0x690, 0x691, 0x692, 0x693, 0x694, 0x695, 0x696, 0x697, 0x698, 0x699, 0x69a, 0x69b, 0x69c, 0x69d, 0x69e, 0x69f, 0x6a0, 0x6a1, 0x6a2, 0x6a3, 0x6a4, 0x6a5, 0x6a6, 0x6a7, 0x6a8, 0x6a9, 0x6aa, 0x6ab, 0x6ac, 0x6ad, 0x6ae, 0x6af, 0x6b0, 0x6b1, 0x6b2, 0x6b3, 0x6b4, 0x6b5, 0x6b6, 0x6b7, 0x6b8, 0x6b9, 0x6ba, 0x6bb, 0x6bc, 0x6bd, 0x6be, 0x6bf, 0x6c0, 0x6c1, 0x6c2, 0x6c3, 0x6c4, 0x6c5, 0x6c6, 0x6c7, 0x6c8, 0x6c9, 0x6ca, 0x6cb, 0x6cc, 0x6cd, 0x6ce, 0x6cf, 0x6d0, 0x6d1, 0x6d2, 0x6d3, 0x6d4, 0x6d5, 0x6d6, 0x6d7, 0x6d8, 0x6d9, 0x6da, 0x6db, 0x6dc, 0x6dd, 0x6de, 0x6df, 0x6e0, 0x6e1, 0x6e2, 0x6e3, 0x6e4, 0x6e5, 0x6e6, 0x6e7, 0x6e8, 0x6e9, 0x6ea, 0x6eb, 0x6ec, 0x6ed, 0x6ee, 0x6ef, 0x6f0, 0x6f1, 0x6f2, 0x6f3, 0x6f4, 0x6f5, 0x6f6, 0x6f7, 0x6f8, 0x6f9, 0x6fa, 0x6fb, 0x6fc, 0x6fd, 0x6fe, 0x6ff, 0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, 0x708, 0x709, 0x70a, 0x70b, 0x70c, 0x70d, 0x70e, 0x70f, 0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, 0x718, 0x719, 0x71a, 0x71b, 0x71c, 0x71d, 0x71e, 0x71f, 0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, 0x728, 0x729, 0x72a, 0x72b, 0x72c, 0x72d, 0x72e, 0x72f, 0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, 0x738, 0x739, 0x73a, 0x73b, 0x73c, 0x73d, 0x73e, 0x73f, 0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, 0x748, 0x749, 0x74a, 0x74b, 0x74c, 0x74d, 0x74e, 0x74f, 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, 0x758, 0x759, 0x75a, 0x75b, 0x75c, 0x75d, 0x75e, 0x75f, 0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, 0x768, 0x769, 0x76a, 0x76b, 0x76c, 0x76d, 0x76e, 0x76f, 0x770, 0x771, 0x772, 0x773, 0x774, 0x775, 0x776, 0x777, 0x778, 0x779, 0x77a, 0x77b, 0x77c, 0x77d, 0x77e, 0x77f, 0x780, 0x781, 0x782, 0x783, 0x784, 0x785, 0x786, 0x787, 0x788, 0x789, 0x78a, 0x78b, 0x78c, 0x78d, 0x78e, 0x78f, 0x790, 0x791, 0x792, 0x793, 0x794, 0x795, 0x796, 0x797, 0x798, 0x799, 0x79a, 0x79b, 0x79c, 0x79d, 0x79e, 0x79f, 0x7a0, 0x7a1, 0x7a2, 0x7a3, 0x7a4, 0x7a5, 0x7a6, 0x7a7, 0x7a8, 0x7a9, 0x7aa, 0x7ab, 0x7ac, 0x7ad, 0x7ae, 0x7af, 0x7b0, 0x7b1, 0x7b2, 0x7b3, 0x7b4, 0x7b5, 0x7b6, 0x7b7, 0x7b8, 0x7b9, 0x7ba, 0x7bb, 0x7bc, 0x7bd, 0x7be, 0x7bf, 0x7c0, 0x7c1, 0x7c2, 0x7c3, 0x7c4, 0x7c5, 0x7c6, 0x7c7, 0x7c8, 0x7c9, 0x7ca, 0x7cb, 0x7cc, 0x7cd, 0x7ce, 0x7cf, 0x7d0, 0x7d1, 0x7d2, 0x7d3, 0x7d4, 0x7d5, 0x7d6, 0x7d7, 0x7d8, 0x7d9, 0x7da, 0x7db, 0x7dc, 0x7dd, 0x7de, 0x7df, 0x7e0, 0x7e1, 0x7e2, 0x7e3, 0x7e4, 0x7e5, 0x7e6, 0x7e7, 0x7e8, 0x7e9, 0x7ea, 0x7eb, 0x7ec, 0x7ed, 0x7ee, 0x7ef, 0x7f0, 0x7f1, 0x7f2, 0x7f3, 0x7f4, 0x7f5, 0x7f6, 0x7f7, 0x7f8, 0x7f9, 0x7fa, 0x7fb, 0x7fc, 0x7fd, 0x7fe, 0x7ff, 0x800, 0x801, 0x802, 0x803, 0x804, 0x805, 0x806, 0x807, 0x808, 0x809, 0x80a, 0x80b, 0x80c, 0x80d, 0x80e, 0x80f, 0x810, 0x811, 0x812, 0x813, 0x814, 0x815, 0x816, 0x817, 0x818, 0x819, 0x81a, 0x81b, 0x81c, 0x81d, 0x81e, 0x81f, 0x820, 0x821, 0x822, 0x823, 0x824, 0x825, 0x826, 0x827, 0x828, 0x829, 0x82a, 0x82b, 0x82c, 0x82d, 0x82e, 0x82f, 0x830, 0x831, 0x832, 0x833, 0x834, 0x835, 0x836, 0x837, 0x838, 0x839, 0x83a, 0x83b, 0x83c, 0x83d, 0x83e, 0x83f, 0x840, 0x841, 0x842, 0x843, 0x844, 0x845, 0x846, 0x847, 0x848, 0x849, 0x84a, 0x84b, 0x84c, 0x84d, 0x84e, 0x84f, 0x850, 0x851, 0x852, 0x853, 0x854, 0x855, 0x856, 0x857, 0x858, 0x859, 0x85a, 0x85b, 0x85c, 0x85d, 0x85e, 0x85f, 0x860, 0x861, 0x862, 0x863, 0x864, 0x865, 0x866, 0x867, 0x868, 0x869, 0x86a, 0x86b, 0x86c, 0x86d, 0x86e, 0x86f, 0x870, 0x871, 0x872, 0x873, 0x874, 0x875, 0x876, 0x877, 0x878, 0x879, 0x87a, 0x87b, 0x87c, 0x87d, 0x87e, 0x87f, 0x880, 0x881, 0x882, 0x883, 0x884, 0x885, 0x886, 0x887, 0x888, 0x889, 0x88a, 0x88b, 0x88c, 0x88d, 0x88e, 0x88f, 0x890, 0x891, 0x892, 0x893, 0x894, 0x895, 0x896, 0x897, 0x898, 0x899, 0x89a, 0x89b, 0x89c, 0x89d, 0x89e, 0x89f, 0x8a0, 0x8a1, 0x8a2, 0x8a3, 0x8a4, 0x8a5, 0x8a6, 0x8a7, 0x8a8, 0x8a9, 0x8aa, 0x8ab, 0x8ac, 0x8ad, 0x8ae, 0x8af, 0x8b0, 0x8b1, 0x8b2, 0x8b3, 0x8b4, 0x8b5, 0x8b6, 0x8b7, 0x8b8, 0x8b9, 0x8ba, 0x8bb, 0x8bc, 0x8bd, 0x8be, 0x8bf, 0x8c0, 0x8c1, 0x8c2, 0x8c3, 0x8c4, 0x8c5, 0x8c6, 0x8c7, 0x8c8, 0x8c9, 0x8ca, 0x8cb, 0x8cc, 0x8cd, 0x8ce, 0x8cf, 0x8d0, 0x8d1, 0x8d2, 0x8d3, 0x8d4, 0x8d5, 0x8d6, 0x8d7, 0x8d8, 0x8d9, 0x8da, 0x8db, 0x8dc, 0x8dd, 0x8de, 0x8df, 0x8e0, 0x8e1, 0x8e2, 0x8e3, 0x8e4, 0x8e5, 0x8e6, 0x8e7, 0x8e8, 0x8e9, 0x8ea, 0x8eb, 0x8ec, 0x8ed, 0x8ee, 0x8ef, 0x8f0, 0x8f1, 0x8f2, 0x8f3, 0x8f4, 0x8f5, 0x8f6, 0x8f7, 0x8f8, 0x8f9, 0x8fa, 0x8fb, 0x8fc, 0x8fd, 0x8fe, 0x8ff, 0x900, 0x901, 0x902, 0x903, 0x904, 0x905, 0x906, 0x907, 0x908, 0x909, 0x90a, 0x90b, 0x90c, 0x90d, 0x90e, 0x90f, 0x910, 0x911, 0x912, 0x913, 0x914, 0x915, 0x916, 0x917, 0x918, 0x919, 0x91a, 0x91b, 0x91c, 0x91d, 0x91e, 0x91f, 0x920, 0x921, 0x922, 0x923, 0x924, 0x925, 0x926, 0x927, 0x928, 0x929, 0x92a, 0x92b, 0x92c, 0x92d, 0x92e, 0x92f, 0x930, 0x931, 0x932, 0x933, 0x934, 0x935, 0x936, 0x937, 0x938, 0x939, 0x93a, 0x93b, 0x93c, 0x93d, 0x93e, 0x93f, 0x940, 0x941, 0x942, 0x943, 0x944, 0x945, 0x946, 0x947, 0x948, 0x949, 0x94a, 0x94b, 0x94c, 0x94d, 0x94e, 0x94f, 0x950, 0x951, 0x952, 0x953, 0x954, 0x955, 0x956, 0x957, 0x958, 0x959, 0x95a, 0x95b, 0x95c, 0x95d, 0x95e, 0x95f, 0x960, 0x961, 0x962, 0x963, 0x964, 0x965, 0x966, 0x967, 0x968, 0x969, 0x96a, 0x96b, 0x96c, 0x96d, 0x96e, 0x96f, 0x970, 0x971, 0x972, 0x973, 0x974, 0x975, 0x976, 0x977, 0x978, 0x979, 0x97a, 0x97b, 0x97c, 0x97d, 0x97e, 0x97f, 0x980, 0x981, 0x982, 0x983, 0x984, 0x985, 0x986, 0x987, 0x988, 0x989, 0x98a, 0x98b, 0x98c, 0x98d, 0x98e, 0x98f, 0x990, 0x991, 0x992, 0x993, 0x994, 0x995, 0x996, 0x997, 0x998, 0x999, 0x99a, 0x99b, 0x99c, 0x99d, 0x99e, 0x99f, 0x9a0, 0x9a1, 0x9a2, 0x9a3, 0x9a4, 0x9a5, 0x9a6, 0x9a7, 0x9a8, 0x9a9, 0x9aa, 0x9ab, 0x9ac, 0x9ad, 0x9ae, 0x9af, 0x9b0, 0x9b1, 0x9b2, 0x9b3, 0x9b4, 0x9b5, 0x9b6, 0x9b7, 0x9b8, 0x9b9, 0x9ba, 0x9bb, 0x9bc, 0x9bd, 0x9be, 0x9bf, 0x9c0, 0x9c1, 0x9c2, 0x9c3, 0x9c4, 0x9c5, 0x9c6, 0x9c7, 0x9c8, 0x9c9, 0x9ca, 0x9cb, 0x9cc, 0x9cd, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d2, 0x9d3, 0x9d4, 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9d9, 0x9da, 0x9db, 0x9dc, 0x9dd, 0x9de, 0x9df, 0x9e0, 0x9e1, 0x9e2, 0x9e3, 0x9e4, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, 0x9ea, 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9ef, 0x9f0, 0x9f1, 0x9f2, 0x9f3, 0x9f4, 0x9f5, 0x9f6, 0x9f7, 0x9f8, 0x9f9, 0x9fa, 0x9fb, 0x9fc, 0x9fd, 0x9fe, 0x9ff, 0xa00, 0xa01, 0xa02, 0xa03, 0xa04, 0xa05, 0xa06, 0xa07, 0xa08, 0xa09, 0xa0a, 0xa0b, 0xa0c, 0xa0d, 0xa0e, 0xa0f, 0xa10, 0xa11, 0xa12, 0xa13, 0xa14, 0xa15, 0xa16, 0xa17, 0xa18, 0xa19, 0xa1a, 0xa1b, 0xa1c, 0xa1d, 0xa1e, 0xa1f, 0xa20, 0xa21, 0xa22, 0xa23, 0xa24, 0xa25, 0xa26, 0xa27, 0xa28, 0xa29, 0xa2a, 0xa2b, 0xa2c, 0xa2d, 0xa2e, 0xa2f, 0xa30, 0xa31, 0xa32, 0xa33, 0xa34, 0xa35, 0xa36, 0xa37, 0xa38, 0xa39, 0xa3a, 0xa3b, 0xa3c, 0xa3d, 0xa3e, 0xa3f, 0xa40, 0xa41, 0xa42, 0xa43, 0xa44, 0xa45, 0xa46, 0xa47, 0xa48, 0xa49, 0xa4a, 0xa4b, 0xa4c, 0xa4d, 0xa4e, 0xa4f, 0xa50, 0xa51, 0xa52, 0xa53, 0xa54, 0xa55, 0xa56, 0xa57, 0xa58, 0xa59, 0xa5a, 0xa5b, 0xa5c, 0xa5d, 0xa5e, 0xa5f, 0xa60, 0xa61, 0xa62, 0xa63, 0xa64, 0xa65, 0xa66, 0xa67, 0xa68, 0xa69, 0xa6a, 0xa6b, 0xa6c, 0xa6d, 0xa6e, 0xa6f, 0xa70, 0xa71, 0xa72, 0xa73, 0xa74, 0xa75, 0xa76, 0xa77, 0xa78, 0xa79, 0xa7a, 0xa7b, 0xa7c, 0xa7d, 0xa7e, 0xa7f, 0xa80, 0xa81, 0xa82, 0xa83, 0xa84, 0xa85, 0xa86, 0xa87, 0xa88, 0xa89, 0xa8a, 0xa8b, 0xa8c, 0xa8d, 0xa8e, 0xa8f, 0xa90, 0xa91, 0xa92, 0xa93, 0xa94, 0xa95, 0xa96, 0xa97, 0xa98, 0xa99, 0xa9a, 0xa9b, 0xa9c, 0xa9d, 0xa9e, 0xa9f, 0xaa0, 0xaa1, 0xaa2, 0xaa3, 0xaa4, 0xaa5, 0xaa6, 0xaa7, 0xaa8, 0xaa9, 0xaaa, 0xaab, 0xaac, 0xaad, 0xaae, 0xaaf, 0xab0, 0xab1, 0xab2, 0xab3, 0xab4, 0xab5, 0xab6, 0xab7, 0xab8, 0xab9, 0xaba, 0xabb, 0xabc, 0xabd, 0xabe, 0xabf, 0xac0, 0xac1, 0xac2, 0xac3, 0xac4, 0xac5, 0xac6, 0xac7, 0xac8, 0xac9, 0xaca, 0xacb, 0xacc, 0xacd, 0xace, 0xacf, 0xad0, 0xad1, 0xad2, 0xad3, 0xad4, 0xad5, 0xad6, 0xad7, 0xad8, 0xad9, 0xada, 0xadb, 0xadc, 0xadd, 0xade, 0xadf, 0xae0, 0xae1, 0xae2, 0xae3, 0xae4, 0xae5, 0xae6, 0xae7, 0xae8, 0xae9, 0xaea, 0xaeb, 0xaec, 0xaed, 0xaee, 0xaef, 0xaf0, 0xaf1, 0xaf2, 0xaf3, 0xaf4, 0xaf5, 0xaf6, 0xaf7, 0xaf8, 0xaf9, 0xafa, 0xafb, 0xafc, 0xafd, 0xafe, 0xaff, 0xb00, 0xb01, 0xb02, 0xb03, 0xb04, 0xb05, 0xb06, 0xb07, 0xb08, 0xb09, 0xb0a, 0xb0b, 0xb0c, 0xb0d, 0xb0e, 0xb0f, 0xb10, 0xb11, 0xb12, 0xb13, 0xb14, 0xb15, 0xb16, 0xb17, 0xb18, 0xb19, 0xb1a, 0xb1b, 0xb1c, 0xb1d, 0xb1e, 0xb1f, 0xb20, 0xb21, 0xb22, 0xb23, 0xb24, 0xb25, 0xb26, 0xb27, 0xb28, 0xb29, 0xb2a, 0xb2b, 0xb2c, 0xb2d, 0xb2e, 0xb2f, 0xb30, 0xb31, 0xb32, 0xb33, 0xb34, 0xb35, 0xb36, 0xb37, 0xb38, 0xb39, 0xb3a, 0xb3b, 0xb3c, 0xb3d, 0xb3e, 0xb3f, 0xb40, 0xb41, 0xb42, 0xb43, 0xb44, 0xb45, 0xb46, 0xb47, 0xb48, 0xb49, 0xb4a, 0xb4b, 0xb4c, 0xb4d, 0xb4e, 0xb4f, 0xb50, 0xb51, 0xb52, 0xb53, 0xb54, 0xb55, 0xb56, 0xb57, 0xb58, 0xb59, 0xb5a, 0xb5b, 0xb5c, 0xb5d, 0xb5e, 0xb5f, 0xb60, 0xb61, 0xb62, 0xb63, 0xb64, 0xb65, 0xb66, 0xb67, 0xb68, 0xb69, 0xb6a, 0xb6b, 0xb6c, 0xb6d, 0xb6e, 0xb6f, 0xb70, 0xb71, 0xb72, 0xb73, 0xb74, 0xb75, 0xb76, 0xb77, 0xb78, 0xb79, 0xb7a, 0xb7b, 0xb7c, 0xb7d, 0xb7e, 0xb7f, 0xb80, 0xb81, 0xb82, 0xb83, 0xb84, 0xb85, 0xb86, 0xb87, 0xb88, 0xb89, 0xb8a, 0xb8b, 0xb8c, 0xb8d, 0xb8e, 0xb8f, 0xb90, 0xb91, 0xb92, 0xb93, 0xb94, 0xb95, 0xb96, 0xb97, 0xb98, 0xb99, 0xb9a, 0xb9b, 0xb9c, 0xb9d, 0xb9e, 0xb9f, 0xba0, 0xba1, 0xba2, 0xba3, 0xba4, 0xba5, 0xba6, 0xba7, 0xba8, 0xba9, 0xbaa, 0xbab, 0xbac, 0xbad, 0xbae, 0xbaf, 0xbb0, 0xbb1, 0xbb2, 0xbb3, 0xbb4, 0xbb5, 0xbb6, 0xbb7, 0xbb8, 0xbb9, 0xbba, 0xbbb, 0xbbc, 0xbbd, 0xbbe, 0xbbf, 0xbc0, 0xbc1, 0xbc2, 0xbc3, 0xbc4, 0xbc5, 0xbc6, 0xbc7, 0xbc8, 0xbc9, 0xbca, 0xbcb, 0xbcc, 0xbcd, 0xbce, 0xbcf, 0xbd0, 0xbd1, 0xbd2, 0xbd3, 0xbd4, 0xbd5, 0xbd6, 0xbd7, 0xbd8, 0xbd9, 0xbda, 0xbdb, 0xbdc, 0xbdd, 0xbde, 0xbdf, 0xbe0, 0xbe1, 0xbe2, 0xbe3, 0xbe4, 0xbe5, 0xbe6, 0xbe7, 0xbe8, 0xbe9, 0xbea, 0xbeb, 0xbec, 0xbed, 0xbee, 0xbef, 0xbf0, 0xbf1, 0xbf2, 0xbf3, 0xbf4, 0xbf5, 0xbf6, 0xbf7, 0xbf8, 0xbf9, 0xbfa, 0xbfb, 0xbfc, 0xbfd, 0xbfe, 0xbff, 0xc00, 0xc01, 0xc02, 0xc03, 0xc04, 0xc05, 0xc06, 0xc07, 0xc08, 0xc09, 0xc0a, 0xc0b, 0xc0c, 0xc0d, 0xc0e, 0xc0f, 0xc10, 0xc11, 0xc12, 0xc13, 0xc14, 0xc15, 0xc16, 0xc17, 0xc18, 0xc19, 0xc1a, 0xc1b, 0xc1c, 0xc1d, 0xc1e, 0xc1f, 0xc20, 0xc21, 0xc22, 0xc23, 0xc24, 0xc25, 0xc26, 0xc27, 0xc28, 0xc29, 0xc2a, 0xc2b, 0xc2c, 0xc2d, 0xc2e, 0xc2f, 0xc30, 0xc31, 0xc32, 0xc33, 0xc34, 0xc35, 0xc36, 0xc37, 0xc38, 0xc39, 0xc3a, 0xc3b, 0xc3c, 0xc3d, 0xc3e, 0xc3f, 0xc40, 0xc41, 0xc42, 0xc43, 0xc44, 0xc45, 0xc46, 0xc47, 0xc48, 0xc49, 0xc4a, 0xc4b, 0xc4c, 0xc4d, 0xc4e, 0xc4f, 0xc50, 0xc51, 0xc52, 0xc53, 0xc54, 0xc55, 0xc56, 0xc57, 0xc58, 0xc59, 0xc5a, 0xc5b, 0xc5c, 0xc5d, 0xc5e, 0xc5f, 0xc60, 0xc61, 0xc62, 0xc63, 0xc64, 0xc65, 0xc66, 0xc67, 0xc68, 0xc69, 0xc6a, 0xc6b, 0xc6c, 0xc6d, 0xc6e, 0xc6f, 0xc70, 0xc71, 0xc72, 0xc73, 0xc74, 0xc75, 0xc76, 0xc77, 0xc78, 0xc79, 0xc7a, 0xc7b, 0xc7c, 0xc7d, 0xc7e, 0xc7f, 0xc80, 0xc81, 0xc82, 0xc83, 0xc84, 0xc85, 0xc86, 0xc87, 0xc88, 0xc89, 0xc8a, 0xc8b, 0xc8c, 0xc8d, 0xc8e, 0xc8f, 0xc90, 0xc91, 0xc92, 0xc93, 0xc94, 0xc95, 0xc96, 0xc97, 0xc98, 0xc99, 0xc9a, 0xc9b, 0xc9c, 0xc9d, 0xc9e, 0xc9f, 0xca0, 0xca1, 0xca2, 0xca3, 0xca4, 0xca5, 0xca6, 0xca7, 0xca8, 0xca9, 0xcaa, 0xcab, 0xcac, 0xcad, 0xcae, 0xcaf, 0xcb0, 0xcb1, 0xcb2, 0xcb3, 0xcb4, 0xcb5, 0xcb6, 0xcb7, 0xcb8, 0xcb9, 0xcba, 0xcbb, 0xcbc, 0xcbd, 0xcbe, 0xcbf, 0xcc0, 0xcc1, 0xcc2, 0xcc3, 0xcc4, 0xcc5, 0xcc6, 0xcc7, 0xcc8, 0xcc9, 0xcca, 0xccb, 0xccc, 0xccd, 0xcce, 0xccf, 0xcd0, 0xcd1, 0xcd2, 0xcd3, 0xcd4, 0xcd5, 0xcd6, 0xcd7, 0xcd8, 0xcd9, 0xcda, 0xcdb, 0xcdc, 0xcdd, 0xcde, 0xcdf, 0xce0, 0xce1, 0xce2, 0xce3, 0xce4, 0xce5, 0xce6, 0xce7, 0xce8, 0xce9, 0xcea, 0xceb, 0xcec, 0xced, 0xcee, 0xcef, 0xcf0, 0xcf1, 0xcf2, 0xcf3, 0xcf4, 0xcf5, 0xcf6, 0xcf7, 0xcf8, 0xcf9, 0xcfa, 0xcfb, 0xcfc, 0xcfd, 0xcfe, 0xcff, 0xd00, 0xd01, 0xd02, 0xd03, 0xd04, 0xd05, 0xd06, 0xd07, 0xd08, 0xd09, 0xd0a, 0xd0b, 0xd0c, 0xd0d, 0xd0e, 0xd0f, 0xd10, 0xd11, 0xd12, 0xd13, 0xd14, 0xd15, 0xd16, 0xd17, 0xd18, 0xd19, 0xd1a, 0xd1b, 0xd1c, 0xd1d, 0xd1e, 0xd1f, 0xd20, 0xd21, 0xd22, 0xd23, 0xd24, 0xd25, 0xd26, 0xd27, 0xd28, 0xd29, 0xd2a, 0xd2b, 0xd2c, 0xd2d, 0xd2e, 0xd2f, 0xd30, 0xd31, 0xd32, 0xd33, 0xd34, 0xd35, 0xd36, 0xd37, 0xd38, 0xd39, 0xd3a, 0xd3b, 0xd3c, 0xd3d, 0xd3e, 0xd3f, 0xd40, 0xd41, 0xd42, 0xd43, 0xd44, 0xd45, 0xd46, 0xd47, 0xd48, 0xd49, 0xd4a, 0xd4b, 0xd4c, 0xd4d, 0xd4e, 0xd4f, 0xd50, 0xd51, 0xd52, 0xd53, 0xd54, 0xd55, 0xd56, 0xd57, 0xd58, 0xd59, 0xd5a, 0xd5b, 0xd5c, 0xd5d, 0xd5e, 0xd5f, 0xd60, 0xd61, 0xd62, 0xd63, 0xd64, 0xd65, 0xd66, 0xd67, 0xd68, 0xd69, 0xd6a, 0xd6b, 0xd6c, 0xd6d, 0xd6e, 0xd6f, 0xd70, 0xd71, 0xd72, 0xd73, 0xd74, 0xd75, 0xd76, 0xd77, 0xd78, 0xd79, 0xd7a, 0xd7b, 0xd7c, 0xd7d, 0xd7e, 0xd7f, 0xd80, 0xd81, 0xd82, 0xd83, 0xd84, 0xd85, 0xd86, 0xd87, 0xd88, 0xd89, 0xd8a, 0xd8b, 0xd8c, 0xd8d, 0xd8e, 0xd8f, 0xd90, 0xd91, 0xd92, 0xd93, 0xd94, 0xd95, 0xd96, 0xd97, 0xd98, 0xd99, 0xd9a, 0xd9b, 0xd9c, 0xd9d, 0xd9e, 0xd9f, 0xda0, 0xda1, 0xda2, 0xda3, 0xda4, 0xda5, 0xda6, 0xda7, 0xda8, 0xda9, 0xdaa, 0xdab, 0xdac, 0xdad, 0xdae, 0xdaf, 0xdb0, 0xdb1, 0xdb2, 0xdb3, 0xdb4, 0xdb5, 0xdb6, 0xdb7, 0xdb8, 0xdb9, 0xdba, 0xdbb, 0xdbc, 0xdbd, 0xdbe, 0xdbf, 0xdc0, 0xdc1, 0xdc2, 0xdc3, 0xdc4, 0xdc5, 0xdc6, 0xdc7, 0xdc8, 0xdc9, 0xdca, 0xdcb, 0xdcc, 0xdcd, 0xdce, 0xdcf, 0xdd0, 0xdd1, 0xdd2, 0xdd3, 0xdd4, 0xdd5, 0xdd6, 0xdd7, 0xdd8, 0xdd9, 0xdda, 0xddb, 0xddc, 0xddd, 0xdde, 0xddf, 0xde0, 0xde1, 0xde2, 0xde3, 0xde4, 0xde5, 0xde6, 0xde7, 0xde8, 0xde9, 0xdea, 0xdeb, 0xdec, 0xded, 0xdee, 0xdef, 0xdf0, 0xdf1, 0xdf2, 0xdf3, 0xdf4, 0xdf5, 0xdf6, 0xdf7, 0xdf8, 0xdf9, 0xdfa, 0xdfb, 0xdfc, 0xdfd, 0xdfe, 0xdff, 0xe00, 0xe01, 0xe02, 0xe03, 0xe04, 0xe05, 0xe06, 0xe07, 0xe08, 0xe09, 0xe0a, 0xe0b, 0xe0c, 0xe0d, 0xe0e, 0xe0f, 0xe10, 0xe11, 0xe12, 0xe13, 0xe14, 0xe15, 0xe16, 0xe17, 0xe18, 0xe19, 0xe1a, 0xe1b, 0xe1c, 0xe1d, 0xe1e, 0xe1f, 0xe20, 0xe21, 0xe22, 0xe23, 0xe24, 0xe25, 0xe26, 0xe27, 0xe28, 0xe29, 0xe2a, 0xe2b, 0xe2c, 0xe2d, 0xe2e, 0xe2f, 0xe30, 0xe31, 0xe32, 0xe33, 0xe34, 0xe35, 0xe36, 0xe37, 0xe38, 0xe39, 0xe3a, 0xe3b, 0xe3c, 0xe3d, 0xe3e, 0xe3f, 0xe40, 0xe41, 0xe42, 0xe43, 0xe44, 0xe45, 0xe46, 0xe47, 0xe48, 0xe49, 0xe4a, 0xe4b, 0xe4c, 0xe4d, 0xe4e, 0xe4f, 0xe50, 0xe51, 0xe52, 0xe53, 0xe54, 0xe55, 0xe56, 0xe57, 0xe58, 0xe59, 0xe5a, 0xe5b, 0xe5c, 0xe5d, 0xe5e, 0xe5f, 0xe60, 0xe61, 0xe62, 0xe63, 0xe64, 0xe65, 0xe66, 0xe67, 0xe68, 0xe69, 0xe6a, 0xe6b, 0xe6c, 0xe6d, 0xe6e, 0xe6f, 0xe70, 0xe71, 0xe72, 0xe73, 0xe74, 0xe75, 0xe76, 0xe77, 0xe78, 0xe79, 0xe7a, 0xe7b, 0xe7c, 0xe7d, 0xe7e, 0xe7f, 0xe80, 0xe81, 0xe82, 0xe83, 0xe84, 0xe85, 0xe86, 0xe87, 0xe88, 0xe89, 0xe8a, 0xe8b, 0xe8c, 0xe8d, 0xe8e, 0xe8f, 0xe90, 0xe91, 0xe92, 0xe93, 0xe94, 0xe95, 0xe96, 0xe97, 0xe98, 0xe99, 0xe9a, 0xe9b, 0xe9c, 0xe9d, 0xe9e, 0xe9f, 0xea0, 0xea1, 0xea2, 0xea3, 0xea4, 0xea5, 0xea6, 0xea7, 0xea8, 0xea9, 0xeaa, 0xeab, 0xeac, 0xead, 0xeae, 0xeaf, 0xeb0, 0xeb1, 0xeb2, 0xeb3, 0xeb4, 0xeb5, 0xeb6, 0xeb7, 0xeb8, 0xeb9, 0xeba, 0xebb, 0xebc, 0xebd, 0xebe, 0xebf, 0xec0, 0xec1, 0xec2, 0xec3, 0xec4, 0xec5, 0xec6, 0xec7, 0xec8, 0xec9, 0xeca, 0xecb, 0xecc, 0xecd, 0xece, 0xecf, 0xed0, 0xed1, 0xed2, 0xed3, 0xed4, 0xed5, 0xed6, 0xed7, 0xed8, 0xed9, 0xeda, 0xedb, 0xedc, 0xedd, 0xede, 0xedf, 0xee0, 0xee1, 0xee2, 0xee3, 0xee4, 0xee5, 0xee6, 0xee7, 0xee8, 0xee9, 0xeea, 0xeeb, 0xeec, 0xeed, 0xeee, 0xeef, 0xef0, 0xef1, 0xef2, 0xef3, 0xef4, 0xef5, 0xef6, 0xef7, 0xef8, 0xef9, 0xefa, 0xefb, 0xefc, 0xefd, 0xefe, 0xeff, 0xf00, 0xf01, 0xf02, 0xf03, 0xf04, 0xf05, 0xf06, 0xf07, 0xf08, 0xf09, 0xf0a, 0xf0b, 0xf0c, 0xf0d, 0xf0e, 0xf0f, 0xf10, 0xf11, 0xf12, 0xf13, 0xf14, 0xf15, 0xf16, 0xf17, 0xf18, 0xf19, 0xf1a, 0xf1b, 0xf1c, 0xf1d, 0xf1e, 0xf1f, 0xf20, 0xf21, 0xf22, 0xf23, 0xf24, 0xf25, 0xf26, 0xf27, 0xf28, 0xf29, 0xf2a, 0xf2b, 0xf2c, 0xf2d, 0xf2e, 0xf2f, 0xf30, 0xf31, 0xf32, 0xf33, 0xf34, 0xf35, 0xf36, 0xf37, 0xf38, 0xf39, 0xf3a, 0xf3b, 0xf3c, 0xf3d, 0xf3e, 0xf3f, 0xf40, 0xf41, 0xf42, 0xf43, 0xf44, 0xf45, 0xf46, 0xf47, 0xf48, 0xf49, 0xf4a, 0xf4b, 0xf4c, 0xf4d, 0xf4e, 0xf4f, 0xf50, 0xf51, 0xf52, 0xf53, 0xf54, 0xf55, 0xf56, 0xf57, 0xf58, 0xf59, 0xf5a, 0xf5b, 0xf5c, 0xf5d, 0xf5e, 0xf5f, 0xf60, 0xf61, 0xf62, 0xf63, 0xf64, 0xf65, 0xf66, 0xf67, 0xf68, 0xf69, 0xf6a, 0xf6b, 0xf6c, 0xf6d, 0xf6e, 0xf6f, 0xf70, 0xf71, 0xf72, 0xf73, 0xf74, 0xf75, 0xf76, 0xf77, 0xf78, 0xf79, 0xf7a, 0xf7b, 0xf7c, 0xf7d, 0xf7e, 0xf7f, 0xf80, 0xf81, 0xf82, 0xf83, 0xf84, 0xf85, 0xf86, 0xf87, 0xf88, 0xf89, 0xf8a, 0xf8b, 0xf8c, 0xf8d, 0xf8e, 0xf8f, 0xf90, 0xf91, 0xf92, 0xf93, 0xf94, 0xf95, 0xf96, 0xf97, 0xf98, 0xf99, 0xf9a, 0xf9b, 0xf9c, 0xf9d, 0xf9e, 0xf9f, 0xfa0, 0xfa1, 0xfa2, 0xfa3, 0xfa4, 0xfa5, 0xfa6, 0xfa7, 0xfa8, 0xfa9, 0xfaa, 0xfab, 0xfac, 0xfad, 0xfae, 0xfaf, 0xfb0, 0xfb1, 0xfb2, 0xfb3, 0xfb4, 0xfb5, 0xfb6, 0xfb7, 0xfb8, 0xfb9, 0xfba, 0xfbb, 0xfbc, 0xfbd, 0xfbe, 0xfbf, 0xfc0, 0xfc1, 0xfc2, 0xfc3, 0xfc4, 0xfc5, 0xfc6, 0xfc7, 0xfc8, 0xfc9, 0xfca, 0xfcb, 0xfcc, 0xfcd, 0xfce, 0xfcf, 0xfd0, 0xfd1, 0xfd2, 0xfd3, 0xfd4, 0xfd5, 0xfd6, 0xfd7, 0xfd8, 0xfd9, 0xfda, 0xfdb, 0xfdc, 0xfdd, 0xfde, 0xfdf, 0xfe0, 0xfe1, 0xfe2, 0xfe3, 0xfe4, 0xfe5, 0xfe6, 0xfe7, 0xfe8, 0xfe9, 0xfea, 0xfeb, 0xfec, 0xfed, 0xfee, 0xfef, 0xff0, 0xff1, 0xff2, 0xff3, 0xff4, 0xff5, 0xff6, 0xff7, 0xff8, 0xff9, 0xffa, 0xffb, 0xffc, 0xffd, 0xffe, 0xfff }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x004, 0x021, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x008, 0x008, 0x018, 0x04a, 0x04c, 0x080, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x009, 0x025, 0x032, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x020, 0x020, 0x020, 0x025, 0x025, 0x032, 0x032, 0x09c, 0x09c, 0x09e, 0x0a1, 0x10e, 0x10e, 0x130, 0x145, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x022, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00d, 0x00d, 0x018, 0x019, 0x051, 0x05a, 0x08a, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00d, 0x011, 0x028, 0x03d, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x04a, 0x04a, 0x050, 0x050, 0x065, 0x065, 0x065, 0x065, 0x12d, 0x12d, 0x12d, 0x12d, 0x152, 0x158, 0x158, 0x15d, 0x220, 0x220, 0x221, 0x224, 0x270, 0x270, 0x29a, 0x2c5, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x004, 0x022, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x008, 0x010, 0x018, 0x04a, 0x04e, 0x080, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x009, 0x025, 0x038, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00a, 0x02a, 0x02a, 0x030, 0x030, 0x030, 0x030, 0x048, 0x048, 0x0a9, 0x0a9, 0x0ac, 0x0d6, 0x124, 0x12e, 0x145, 0x15a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x022, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x015, 0x018, 0x022, 0x024, 0x059, 0x05d, 0x08a, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x011, 0x011, 0x028, 0x03d, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x00a, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x0ca, 0x0ca, 0x0ca, 0x0a0, 0x0ca, 0x0ca, 0x0ca, 0x0cc, 0x270, 0x270, 0x270, 0x270, 0x270, 0x270, 0x270, 0x270, 0x27a, 0x27a, 0x27a, 0x27a, 0x2a5, 0x290, 0x2fa, 0x300, 0x440, 0x440, 0x440, 0x440, 0x442, 0x442, 0x448, 0x448, 0x4e5, 0x4e5, 0x53a, 0x53c, 0x545, 0x545, 0x59a, 0x59a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x004, 0x021, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x008, 0x008, 0x012, 0x04a, 0x04e, 0x080, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x009, 0x025, 0x038, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x020, 0x020, 0x020, 0x025, 0x025, 0x032, 0x032, 0x09c, 0x09c, 0x09e, 0x0ac, 0x10e, 0x10e, 0x130, 0x145, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x022, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00d, 0x015, 0x018, 0x019, 0x054, 0x05a, 0x08a, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00d, 0x011, 0x028, 0x03d, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x050, 0x050, 0x050, 0x050, 0x050, 0x065, 0x065, 0x065, 0x12d, 0x12d, 0x12d, 0x12d, 0x158, 0x158, 0x158, 0x15d, 0x220, 0x220, 0x224, 0x224, 0x270, 0x270, 0x29a, 0x2c5, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x004, 0x021, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x008, 0x010, 0x018, 0x04a, 0x04c, 0x080, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x009, 0x025, 0x038, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00a, 0x020, 0x020, 0x030, 0x030, 0x030, 0x030, 0x048, 0x048, 0x0a9, 0x0a9, 0x0ac, 0x0d6, 0x124, 0x124, 0x145, 0x15a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x022, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x002, 0x00a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x015, 0x015, 0x022, 0x024, 0x059, 0x05d, 0x08a, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x011, 0x011, 0x028, 0x03d, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x006, 0x00a, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x095, 0x0ca, 0x0a0, 0x0a0, 0x0a0, 0x0ca, 0x0ca, 0x0ca, 0x0cc, 0x270, 0x270, 0x270, 0x270, 0x270, 0x270, 0x270, 0x270, 0x27a, 0x27a, 0x27a, 0x27a, 0x2d0, 0x2ba, 0x2fa, 0x300, 0x440, 0x440, 0x440, 0x442, 0x442, 0x442, 0x448, 0x448, 0x4e5, 0x53a, 0x53a, 0x53c, 0x545, 0x545, 0x59a, 0x59a }, + new[] { 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x025, 0x04e, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x049, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02a, 0x089, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x040, 0x040, 0x099, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x040, 0x000, 0x000, 0x000, 0x040, 0x000, 0x040, 0x04a, 0x09c, 0x000, 0x000, 0x000, 0x04a, 0x000, 0x04a, 0x04a, 0x09d, 0x000, 0x050, 0x050, 0x0ce, 0x050, 0x12e, 0x13e, 0x39c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0de, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x06a, 0x0e4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x055, 0x06a, 0x055, 0x06a, 0x06a, 0x0f1, 0x000, 0x055, 0x055, 0x06a, 0x055, 0x075, 0x075, 0x148, 0x055, 0x075, 0x07a, 0x19e, 0x0d0, 0x1a4, 0x1d9, 0x565, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x055, 0x080, 0x080, 0x109, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x055, 0x055, 0x080, 0x055, 0x080, 0x080, 0x164, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x080, 0x000, 0x055, 0x055, 0x080, 0x055, 0x080, 0x080, 0x1c6, 0x000, 0x055, 0x055, 0x0d5, 0x055, 0x0d5, 0x0d5, 0x1f2, 0x055, 0x0e0, 0x0e0, 0x21e, 0x0e5, 0x21e, 0x224, 0x639, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x080, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x080, 0x000, 0x055, 0x055, 0x095, 0x055, 0x0ea, 0x0ea, 0x1d9, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0ea, 0x000, 0x055, 0x055, 0x0ea, 0x055, 0x0ea, 0x0ea, 0x231, 0x055, 0x055, 0x055, 0x0ea, 0x080, 0x0ea, 0x0ea, 0x232, 0x080, 0x0ea, 0x115, 0x249, 0x130, 0x2b4, 0x2b4, 0x6be, 0x000, 0x000, 0x000, 0x055, 0x055, 0x055, 0x055, 0x0ea, 0x055, 0x055, 0x080, 0x0ea, 0x080, 0x0ea, 0x0f5, 0x241, 0x055, 0x080, 0x080, 0x120, 0x0d5, 0x120, 0x120, 0x2c2, 0x0ea, 0x135, 0x135, 0x2c4, 0x135, 0x2c4, 0x379, 0x6f8, 0x055, 0x0ea, 0x0ea, 0x135, 0x0ea, 0x135, 0x135, 0x2c5, 0x0ea, 0x135, 0x190, 0x351, 0x190, 0x38c, 0x3e1, 0x774, 0x115, 0x190, 0x1f0, 0x3e2, 0x21a, 0x422, 0x498, 0x7b2, 0x248, 0x499, 0x4b1, 0x7bd, 0x4e6, 0x7d6, 0x7e4, 0x89a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x2be, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x155, 0x2c9, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x155, 0x16a, 0x38e, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x16a, 0x0aa, 0x16a, 0x16a, 0x39c, 0x0aa, 0x0aa, 0x0aa, 0x16a, 0x0aa, 0x175, 0x175, 0x448, 0x155, 0x175, 0x225, 0x449, 0x2d0, 0x449, 0x52e, 0x905, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x155, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x180, 0x180, 0x3b4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x180, 0x0aa, 0x0aa, 0x0aa, 0x180, 0x0aa, 0x180, 0x180, 0x464, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x180, 0x0aa, 0x0aa, 0x0aa, 0x180, 0x155, 0x180, 0x22a, 0x466, 0x0aa, 0x155, 0x155, 0x180, 0x155, 0x2d5, 0x2d5, 0x49d, 0x155, 0x2e0, 0x2e0, 0x574, 0x2e5, 0x574, 0x624, 0xa8e, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x180, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x180, 0x0aa, 0x155, 0x155, 0x195, 0x155, 0x240, 0x2ea, 0x4ae, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x155, 0x155, 0x195, 0x0aa, 0x155, 0x155, 0x2ea, 0x155, 0x2ea, 0x2ea, 0x586, 0x0aa, 0x155, 0x155, 0x2ea, 0x180, 0x2ea, 0x2ea, 0x588, 0x180, 0x2ea, 0x2ea, 0x634, 0x31a, 0x65e, 0x65e, 0xb14, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x155, 0x155, 0x2ea, 0x155, 0x155, 0x180, 0x2ea, 0x180, 0x2ea, 0x2f5, 0x641, 0x155, 0x180, 0x180, 0x2f5, 0x180, 0x2f5, 0x320, 0x66d, 0x195, 0x3ca, 0x3e0, 0x66e, 0x48a, 0x719, 0x779, 0xb40, 0x155, 0x195, 0x195, 0x320, 0x240, 0x3e0, 0x48a, 0x71a, 0x2ea, 0x48a, 0x490, 0x751, 0x490, 0x786, 0x8e1, 0xb72, 0x315, 0x490, 0x490, 0x838, 0x4c5, 0x8fd, 0x942, 0xbad, 0x4f0, 0x944, 0x944, 0xbbc, 0xa3c, 0xbd6, 0xbe4, 0xc45, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x100, 0x100, 0x1aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x100, 0x0aa, 0x100, 0x100, 0x1aa, 0x0aa, 0x0aa, 0x0aa, 0x100, 0x0aa, 0x100, 0x100, 0x1aa, 0x0aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x355, 0x55e, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x100, 0x0aa, 0x0aa, 0x0aa, 0x100, 0x0aa, 0x100, 0x1aa, 0x1aa, 0x0aa, 0x0aa, 0x0aa, 0x1aa, 0x0aa, 0x1aa, 0x1aa, 0x200, 0x0aa, 0x1aa, 0x1aa, 0x355, 0x1aa, 0x355, 0x355, 0x60e, 0x0aa, 0x0aa, 0x0aa, 0x1aa, 0x100, 0x1aa, 0x1aa, 0x355, 0x100, 0x1aa, 0x1aa, 0x355, 0x1aa, 0x355, 0x355, 0x666, 0x1aa, 0x1aa, 0x1aa, 0x355, 0x1aa, 0x355, 0x355, 0x71d, 0x200, 0x360, 0x360, 0x71e, 0x410, 0x71e, 0x824, 0xc64, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x1aa, 0x0aa, 0x0aa, 0x0aa, 0x1aa, 0x100, 0x1aa, 0x1aa, 0x355, 0x0aa, 0x100, 0x100, 0x1aa, 0x100, 0x1aa, 0x1aa, 0x355, 0x1aa, 0x1aa, 0x1aa, 0x36a, 0x1aa, 0x36a, 0x36a, 0x72e, 0x0aa, 0x100, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x36a, 0x1aa, 0x1aa, 0x1aa, 0x36a, 0x1aa, 0x36a, 0x36a, 0x731, 0x1aa, 0x1aa, 0x200, 0x36a, 0x200, 0x36a, 0x415, 0x732, 0x2aa, 0x4c0, 0x515, 0x834, 0x56a, 0x8b4, 0x8b4, 0xd3e, 0x100, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x200, 0x36a, 0x1aa, 0x200, 0x200, 0x415, 0x2aa, 0x415, 0x515, 0x841, 0x1aa, 0x2aa, 0x2aa, 0x4c0, 0x355, 0x520, 0x520, 0x8ad, 0x36a, 0x575, 0x58a, 0x96e, 0x58a, 0x9c4, 0xa6e, 0xd69, 0x200, 0x36a, 0x36a, 0x575, 0x36a, 0x58a, 0x58a, 0x9c5, 0x36a, 0x58a, 0x590, 0xa71, 0x590, 0xa7c, 0xa8c, 0xd9d, 0x415, 0x590, 0x63a, 0xa8d, 0x69a, 0xae2, 0xb12, 0xdad, 0x79a, 0xb6e, 0xc6e, 0xdbc, 0xc91, 0xdbc, 0xdd9, 0xdf0, 0x0aa, 0x0aa, 0x0aa, 0x1aa, 0x0aa, 0x1aa, 0x1aa, 0x1aa, 0x0aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x380, 0x0aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x200, 0x200, 0x380, 0x1aa, 0x200, 0x200, 0x42a, 0x2d5, 0x42a, 0x4d5, 0x8ae, 0x1aa, 0x1aa, 0x1aa, 0x200, 0x1aa, 0x200, 0x22a, 0x42a, 0x1aa, 0x2d5, 0x2d5, 0x42a, 0x380, 0x555, 0x5aa, 0x8b1, 0x200, 0x380, 0x380, 0x555, 0x380, 0x5aa, 0x5aa, 0x908, 0x380, 0x5aa, 0x5aa, 0xa09, 0x5aa, 0xade, 0xb09, 0xe26, 0x1aa, 0x1aa, 0x1aa, 0x2d5, 0x200, 0x380, 0x380, 0x555, 0x200, 0x380, 0x380, 0x5aa, 0x380, 0x5aa, 0x5aa, 0xa16, 0x200, 0x380, 0x380, 0x5aa, 0x380, 0x5b5, 0x5b5, 0xb18, 0x455, 0x5b5, 0x5b5, 0xb19, 0x660, 0xb19, 0xb99, 0xe51, 0x2d5, 0x42a, 0x455, 0x5b5, 0x455, 0x5b5, 0x660, 0xb1a, 0x4aa, 0x6b5, 0x70a, 0xb9c, 0x810, 0xca6, 0xcb6, 0xead, 0x5aa, 0x810, 0x810, 0xcb8, 0x8c5, 0xce2, 0xd3d, 0xebd, 0x8c5, 0xd44, 0xd44, 0xed1, 0xda6, 0xed4, 0xed9, 0xef0, 0x1aa, 0x200, 0x22a, 0x380, 0x22a, 0x380, 0x42a, 0x5c0, 0x2d5, 0x42a, 0x440, 0x5d5, 0x46a, 0x5d5, 0x5d5, 0xb56, 0x2d5, 0x46a, 0x46a, 0x5d5, 0x4c0, 0x680, 0x780, 0xbd8, 0x56a, 0x780, 0x82a, 0xcd9, 0x82a, 0xcd9, 0xd6e, 0xf06, 0x380, 0x56a, 0x56a, 0x780, 0x5c0, 0x82a, 0x82a, 0xcda, 0x5d5, 0x8d5, 0x8d5, 0xd06, 0x8da, 0xd86, 0xd8c, 0xf22, 0x5d5, 0x8da, 0x905, 0xd8d, 0x970, 0xd8d, 0xdfd, 0xf32, 0xab0, 0xe59, 0xe59, 0xf5c, 0xe9c, 0xf5c, 0xf61, 0xf70, 0x46a, 0x5d5, 0x5d5, 0x8e0, 0x5d5, 0x8e0, 0x90a, 0xdaa, 0x635, 0x96a, 0xa2a, 0xdac, 0xa6a, 0xe16, 0xe6c, 0xf7d, 0x760, 0xa6a, 0xac0, 0xe6d, 0xb6a, 0xe82, 0xe8d, 0xf88, 0xc6a, 0xeb9, 0xed9, 0xf94, 0xf11, 0xfa1, 0xfa6, 0xfb0, 0x835, 0xc70, 0xc70, 0xeca, 0xcb0, 0xee0, 0xf20, 0xfba, 0xd1a, 0xf21, 0xf36, 0xfc2, 0xf46, 0xfc4, 0xfc5, 0xfd0, 0xdb8, 0xf4a, 0xf62, 0xfd5, 0xf6a, 0xfdd, 0xfdd, 0xfe0, 0xfa2, 0xfe9, 0xfec, 0xff0, 0xfee, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xfee, 0xff0, 0xfec, 0xfe8, 0xf92, 0xfe0, 0xfdd, 0xfd8, 0xf65, 0xfd5, 0xf65, 0xf4a, 0xdb8, 0xfd0, 0xfc5, 0xfc4, 0xf46, 0xfc2, 0xf36, 0xf21, 0xd25, 0xfba, 0xef5, 0xee0, 0xc9a, 0xeca, 0xc70, 0xbc5, 0x90a, 0xfb0, 0xfa5, 0xfa1, 0xf11, 0xf94, 0xec4, 0xeb9, 0xc6a, 0xf88, 0xe8d, 0xe6d, 0xb6a, 0xe6d, 0xac0, 0xa55, 0x78a, 0xf7d, 0xe6c, 0xe16, 0xa55, 0xdac, 0xa2a, 0x90a, 0x635, 0xdaa, 0x90a, 0x8e0, 0x5d5, 0x8e0, 0x5d5, 0x5d5, 0x46a, 0xf70, 0xf60, 0xf5c, 0xe9c, 0xf5c, 0xe59, 0xe2e, 0xab0, 0xf32, 0xda2, 0xd8d, 0x970, 0xd8d, 0x905, 0x8da, 0x5d5, 0xf22, 0xd86, 0xd71, 0x8da, 0xd06, 0x8d5, 0x82a, 0x5d5, 0xcda, 0x82a, 0x780, 0x5c0, 0x780, 0x56a, 0x56a, 0x380, 0xf06, 0xd04, 0xcd9, 0x82a, 0xcd9, 0x780, 0x780, 0x56a, 0xbd8, 0x700, 0x680, 0x4c0, 0x5d5, 0x46a, 0x46a, 0x380, 0xb56, 0x5d5, 0x5d5, 0x46a, 0x5c0, 0x440, 0x440, 0x2d5, 0x5c0, 0x380, 0x380, 0x22a, 0x380, 0x22a, 0x22a, 0x1aa, 0xef0, 0xed6, 0xed4, 0xda6, 0xed1, 0xd44, 0xd44, 0x8c5, 0xebd, 0xd3d, 0xcb8, 0x8c5, 0xcb8, 0x810, 0x765, 0x5aa, 0xead, 0xcb6, 0xbfc, 0x765, 0xb71, 0x70a, 0x6b5, 0x555, 0xb1a, 0x5b5, 0x5b5, 0x455, 0x5b5, 0x42a, 0x380, 0x2d5, 0xe51, 0xb6e, 0xb19, 0x660, 0xb19, 0x5b5, 0x5b5, 0x455, 0xb18, 0x5b5, 0x5b5, 0x380, 0x5aa, 0x380, 0x380, 0x22a, 0xa16, 0x5aa, 0x5aa, 0x380, 0x5aa, 0x380, 0x380, 0x200, 0x555, 0x380, 0x380, 0x1aa, 0x2d5, 0x1aa, 0x1aa, 0x1aa, 0xe26, 0xb09, 0xade, 0x5aa, 0xa09, 0x5aa, 0x5aa, 0x380, 0x908, 0x5aa, 0x5aa, 0x380, 0x555, 0x380, 0x380, 0x1aa, 0x8b1, 0x555, 0x555, 0x380, 0x42a, 0x2d5, 0x2d5, 0x1aa, 0x380, 0x22a, 0x22a, 0x1aa, 0x200, 0x1aa, 0x1aa, 0x1aa, 0x8ae, 0x480, 0x42a, 0x2d5, 0x380, 0x22a, 0x200, 0x1aa, 0x380, 0x200, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x0aa, 0x380, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x0aa, 0x1aa, 0x1aa, 0x1aa, 0x0aa, 0x1aa, 0x0aa, 0x0aa, 0x0aa, 0xdf0, 0xdd9, 0xdbc, 0xc91, 0xdbc, 0xc19, 0xb6e, 0x79a, 0xda8, 0xafd, 0xa8d, 0x69a, 0xa8d, 0x63a, 0x590, 0x415, 0xd98, 0xa86, 0xa7c, 0x590, 0xa71, 0x590, 0x58a, 0x36a, 0x9c5, 0x58a, 0x58a, 0x36a, 0x575, 0x36a, 0x36a, 0x200, 0xd69, 0xa6e, 0x9c4, 0x58a, 0x96e, 0x575, 0x575, 0x36a, 0x858, 0x520, 0x520, 0x355, 0x520, 0x2aa, 0x2aa, 0x1aa, 0x796, 0x520, 0x415, 0x2aa, 0x36a, 0x200, 0x200, 0x1aa, 0x36a, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x100, 0xd3d, 0x8b4, 0x849, 0x51a, 0x834, 0x515, 0x415, 0x2aa, 0x732, 0x415, 0x36a, 0x200, 0x36a, 0x1aa, 0x1aa, 0x1aa, 0x731, 0x36a, 0x36a, 0x1aa, 0x36a, 0x1aa, 0x1aa, 0x1aa, 0x36a, 0x1aa, 0x1aa, 0x1aa, 0x1aa, 0x100, 0x100, 0x0aa, 0x72e, 0x36a, 0x36a, 0x1aa, 0x36a, 0x1aa, 0x1aa, 0x1aa, 0x355, 0x1aa, 0x1aa, 0x100, 0x1aa, 0x100, 0x100, 0x0aa, 0x355, 0x1aa, 0x1aa, 0x100, 0x1aa, 0x0aa, 0x0aa, 0x0aa, 0x1aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0xc64, 0x7c9, 0x71e, 0x410, 0x71e, 0x360, 0x360, 0x1aa, 0x71d, 0x355, 0x355, 0x1aa, 0x355, 0x1aa, 0x1aa, 0x1aa, 0x666, 0x355, 0x355, 0x1aa, 0x355, 0x1aa, 0x1aa, 0x100, 0x355, 0x1aa, 0x1aa, 0x100, 0x1aa, 0x0aa, 0x0aa, 0x0aa, 0x60e, 0x355, 0x355, 0x1aa, 0x2aa, 0x1aa, 0x1aa, 0x0aa, 0x255, 0x1aa, 0x1aa, 0x0aa, 0x1aa, 0x0aa, 0x0aa, 0x0aa, 0x1aa, 0x1aa, 0x100, 0x0aa, 0x100, 0x0aa, 0x0aa, 0x0aa, 0x100, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x55e, 0x2aa, 0x255, 0x1aa, 0x1aa, 0x1aa, 0x100, 0x0aa, 0x1aa, 0x100, 0x100, 0x0aa, 0x100, 0x0aa, 0x0aa, 0x0aa, 0x1aa, 0x100, 0x100, 0x0aa, 0x100, 0x0aa, 0x0aa, 0x000, 0x100, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x1aa, 0x100, 0x100, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xc45, 0xbe4, 0xbd5, 0x966, 0xbbc, 0x944, 0x944, 0x4f0, 0xbad, 0x942, 0x8e2, 0x4c5, 0x838, 0x490, 0x490, 0x315, 0xb72, 0x836, 0x786, 0x490, 0x751, 0x490, 0x48a, 0x2ea, 0x71a, 0x48a, 0x335, 0x240, 0x320, 0x195, 0x195, 0x155, 0xb40, 0x744, 0x719, 0x48a, 0x66e, 0x3e0, 0x320, 0x195, 0x66d, 0x320, 0x320, 0x180, 0x2f5, 0x180, 0x180, 0x155, 0x596, 0x2f5, 0x2ea, 0x180, 0x2ea, 0x180, 0x155, 0x155, 0x2ea, 0x155, 0x155, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0xb12, 0x65e, 0x65e, 0x31a, 0x634, 0x2ea, 0x2ea, 0x180, 0x588, 0x2ea, 0x2ea, 0x180, 0x2ea, 0x155, 0x155, 0x0aa, 0x586, 0x2ea, 0x2ea, 0x155, 0x2ea, 0x155, 0x155, 0x0aa, 0x240, 0x155, 0x155, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x484, 0x2ea, 0x240, 0x155, 0x195, 0x155, 0x155, 0x0aa, 0x180, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x180, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0xa8e, 0x579, 0x574, 0x2e5, 0x574, 0x2e0, 0x2e0, 0x155, 0x49d, 0x2d5, 0x22a, 0x155, 0x22a, 0x155, 0x155, 0x0aa, 0x466, 0x22a, 0x180, 0x155, 0x180, 0x0aa, 0x0aa, 0x0aa, 0x180, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x464, 0x180, 0x180, 0x0aa, 0x180, 0x0aa, 0x0aa, 0x0aa, 0x180, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x3b4, 0x180, 0x180, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x155, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x904, 0x50e, 0x449, 0x2d0, 0x449, 0x225, 0x175, 0x155, 0x448, 0x175, 0x175, 0x0aa, 0x16a, 0x0aa, 0x0aa, 0x0aa, 0x39c, 0x16a, 0x16a, 0x0aa, 0x16a, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x38e, 0x16a, 0x155, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2c9, 0x155, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2be, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0aa, 0x0aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x89a, 0x7e4, 0x7d6, 0x4e6, 0x7bc, 0x499, 0x499, 0x248, 0x788, 0x442, 0x3f8, 0x21a, 0x3e2, 0x190, 0x190, 0x120, 0x71e, 0x3e1, 0x386, 0x190, 0x2fc, 0x190, 0x135, 0x0ea, 0x2c5, 0x135, 0x135, 0x0ea, 0x135, 0x0ea, 0x0ea, 0x055, 0x6f8, 0x36e, 0x2c4, 0x135, 0x2c4, 0x135, 0x135, 0x0ea, 0x2c2, 0x120, 0x120, 0x080, 0x0f5, 0x080, 0x080, 0x055, 0x241, 0x0f5, 0x0ea, 0x080, 0x0ea, 0x080, 0x080, 0x055, 0x0ea, 0x055, 0x055, 0x055, 0x055, 0x055, 0x000, 0x000, 0x6be, 0x2b4, 0x2b4, 0x11a, 0x249, 0x0ea, 0x0ea, 0x080, 0x232, 0x0ea, 0x0ea, 0x080, 0x0ea, 0x055, 0x055, 0x055, 0x231, 0x0ea, 0x0ea, 0x055, 0x0ea, 0x055, 0x055, 0x000, 0x095, 0x055, 0x055, 0x000, 0x055, 0x000, 0x000, 0x000, 0x1d9, 0x0ea, 0x095, 0x055, 0x095, 0x055, 0x055, 0x000, 0x095, 0x055, 0x055, 0x000, 0x055, 0x000, 0x000, 0x000, 0x080, 0x055, 0x055, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x639, 0x224, 0x21e, 0x0e5, 0x21e, 0x0e0, 0x0e0, 0x055, 0x1c8, 0x0e0, 0x0d5, 0x055, 0x080, 0x055, 0x055, 0x000, 0x1bc, 0x080, 0x080, 0x055, 0x080, 0x055, 0x055, 0x000, 0x080, 0x055, 0x055, 0x000, 0x055, 0x000, 0x000, 0x000, 0x164, 0x080, 0x080, 0x055, 0x080, 0x055, 0x055, 0x000, 0x080, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x109, 0x080, 0x080, 0x055, 0x080, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x564, 0x1b9, 0x19e, 0x0d0, 0x19e, 0x07a, 0x075, 0x055, 0x148, 0x075, 0x075, 0x055, 0x06a, 0x055, 0x055, 0x000, 0x0f1, 0x06a, 0x06a, 0x055, 0x06a, 0x055, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0e4, 0x06a, 0x055, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0de, 0x055, 0x055, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0be, 0x055, 0x055, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x39c, 0x13e, 0x124, 0x050, 0x0de, 0x050, 0x050, 0x000, 0x09d, 0x04a, 0x04a, 0x000, 0x04a, 0x000, 0x000, 0x000, 0x09c, 0x04a, 0x040, 0x000, 0x040, 0x000, 0x000, 0x000, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x099, 0x040, 0x040, 0x000, 0x02a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x05e, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x049, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x04e, 0x025, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000 }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x009, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x009, 0x000, 0x000, 0x000, 0x009, 0x000, 0x009, 0x009, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x001, 0x000, 0x001, 0x001, 0x051, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x050, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x050, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x058, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x05c, 0x000, 0x010, 0x010, 0x064, 0x028, 0x070, 0x070, 0x1da, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x04a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x050, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x04e, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x050, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x052, 0x000, 0x000, 0x000, 0x052, 0x005, 0x07d, 0x07d, 0x2ba, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x08a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x08d, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x08d, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x090, 0x000, 0x02a, 0x02a, 0x090, 0x02a, 0x092, 0x092, 0x32a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x098, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02a, 0x02a, 0x098, 0x000, 0x000, 0x000, 0x02a, 0x000, 0x02a, 0x02a, 0x099, 0x000, 0x040, 0x040, 0x099, 0x040, 0x099, 0x099, 0x361, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02a, 0x000, 0x000, 0x000, 0x040, 0x000, 0x040, 0x040, 0x09a, 0x000, 0x000, 0x000, 0x040, 0x000, 0x040, 0x040, 0x0a1, 0x000, 0x04a, 0x04a, 0x0a1, 0x04a, 0x0a1, 0x0a1, 0x37e, 0x000, 0x000, 0x000, 0x04a, 0x000, 0x04a, 0x04a, 0x0a2, 0x000, 0x04a, 0x04a, 0x0b8, 0x050, 0x0b8, 0x122, 0x38d, 0x000, 0x050, 0x050, 0x12e, 0x050, 0x12e, 0x12e, 0x39c, 0x068, 0x146, 0x146, 0x39c, 0x14a, 0x39c, 0x39c, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0c5, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0cd, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0ce, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0cd, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0d0, 0x000, 0x055, 0x055, 0x0d2, 0x055, 0x0d2, 0x0d2, 0x48a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0e0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0dd, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0dd, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0de, 0x000, 0x055, 0x055, 0x0de, 0x055, 0x0e5, 0x0e5, 0x4fd, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0e2, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0ed, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0ee, 0x000, 0x055, 0x055, 0x0ee, 0x055, 0x0ee, 0x144, 0x536, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0f0, 0x000, 0x000, 0x000, 0x055, 0x000, 0x06a, 0x055, 0x146, 0x000, 0x06a, 0x06a, 0x146, 0x075, 0x19c, 0x19c, 0x554, 0x000, 0x000, 0x000, 0x075, 0x055, 0x075, 0x075, 0x1a2, 0x055, 0x075, 0x075, 0x1a2, 0x075, 0x1a2, 0x1a2, 0x562, 0x055, 0x07a, 0x07a, 0x1a4, 0x0d0, 0x1ce, 0x1ce, 0x571, 0x0d0, 0x1d9, 0x1e4, 0x571, 0x1f1, 0x571, 0x571, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x106, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x108, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x108, 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x080, 0x15e, 0x000, 0x080, 0x080, 0x15e, 0x080, 0x1b4, 0x1b4, 0x5e6, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x080, 0x1b6, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x080, 0x1b8, 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x080, 0x1b9, 0x055, 0x080, 0x080, 0x1b9, 0x080, 0x1b9, 0x1b9, 0x621, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x000, 0x080, 0x055, 0x080, 0x080, 0x1ba, 0x000, 0x055, 0x055, 0x080, 0x055, 0x080, 0x080, 0x1c6, 0x055, 0x080, 0x080, 0x1c6, 0x080, 0x1c6, 0x21c, 0x63e, 0x000, 0x055, 0x055, 0x080, 0x055, 0x080, 0x080, 0x21d, 0x055, 0x0d5, 0x0d5, 0x21d, 0x0e0, 0x21d, 0x21d, 0x64d, 0x055, 0x0e0, 0x0e0, 0x224, 0x0e5, 0x224, 0x224, 0x65c, 0x0e5, 0x224, 0x224, 0x65c, 0x22e, 0x65c, 0x65c, 0x6f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x000, 0x080, 0x055, 0x080, 0x080, 0x201, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x080, 0x000, 0x055, 0x055, 0x080, 0x055, 0x080, 0x080, 0x202, 0x000, 0x055, 0x055, 0x080, 0x055, 0x080, 0x080, 0x22e, 0x055, 0x0ea, 0x0ea, 0x22e, 0x0ea, 0x22e, 0x22e, 0x696, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0ea, 0x000, 0x055, 0x055, 0x0ea, 0x055, 0x0ea, 0x0ea, 0x230, 0x000, 0x055, 0x055, 0x0ea, 0x055, 0x0ea, 0x0ea, 0x231, 0x055, 0x0ea, 0x0ea, 0x231, 0x0ea, 0x231, 0x231, 0x6b4, 0x000, 0x055, 0x055, 0x0ea, 0x055, 0x0ea, 0x0ea, 0x232, 0x080, 0x0ea, 0x0ea, 0x232, 0x0ea, 0x25d, 0x25d, 0x6c2, 0x080, 0x0ea, 0x0ea, 0x25e, 0x0ea, 0x264, 0x2b9, 0x6d1, 0x130, 0x2b9, 0x2b9, 0x6d1, 0x2b9, 0x6d1, 0x6d1, 0x770, 0x000, 0x000, 0x000, 0x055, 0x000, 0x055, 0x055, 0x0ea, 0x000, 0x055, 0x055, 0x0ea, 0x055, 0x0ea, 0x0ea, 0x26a, 0x055, 0x055, 0x055, 0x0ea, 0x080, 0x0ea, 0x0ea, 0x26c, 0x080, 0x0f5, 0x0f5, 0x26c, 0x0f5, 0x26c, 0x26c, 0x6ee, 0x055, 0x080, 0x080, 0x0f5, 0x080, 0x0f5, 0x0f5, 0x2c2, 0x080, 0x0f5, 0x0f5, 0x2c2, 0x135, 0x2c2, 0x2c2, 0x6fa, 0x0d5, 0x135, 0x135, 0x2c4, 0x135, 0x2c4, 0x2c4, 0x709, 0x135, 0x2f9, 0x2f9, 0x70c, 0x304, 0x70c, 0x761, 0x7b0, 0x055, 0x0d5, 0x0d5, 0x135, 0x0d5, 0x135, 0x135, 0x2d0, 0x0ea, 0x135, 0x135, 0x2d0, 0x135, 0x2d5, 0x300, 0x770, 0x0ea, 0x13a, 0x13a, 0x30c, 0x190, 0x30c, 0x38c, 0x77c, 0x190, 0x361, 0x3e1, 0x7a6, 0x3e6, 0x7a6, 0x7a9, 0x7d0, 0x0f5, 0x1e5, 0x1e5, 0x3e2, 0x1e5, 0x40d, 0x428, 0x7b8, 0x21a, 0x42d, 0x482, 0x7b8, 0x498, 0x7b8, 0x7cd, 0x7e0, 0x248, 0x4b1, 0x4b1, 0x7dc, 0x4e9, 0x7dc, 0x7dc, 0x7f0, 0x5ad, 0x7e6, 0x7e6, 0x7f0, 0x7ec, 0x7f0, 0x7f0, 0x945, 0x000, 0x000, 0x000, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x000, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x155, 0x155, 0x200, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x155, 0x155, 0x200, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x155, 0x155, 0x200, 0x0aa, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x204, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x155, 0x155, 0x200, 0x0aa, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x201, 0x0aa, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x202, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x209, 0x155, 0x200, 0x200, 0x209, 0x200, 0x209, 0x209, 0x21c, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x0aa, 0x155, 0x155, 0x155, 0x0aa, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x0aa, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x201, 0x0aa, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x200, 0x200, 0x201, 0x200, 0x201, 0x201, 0x22c, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x200, 0x200, 0x200, 0x200, 0x20a, 0x20a, 0x234, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x20a, 0x155, 0x200, 0x200, 0x20a, 0x200, 0x210, 0x210, 0x238, 0x200, 0x200, 0x200, 0x210, 0x200, 0x210, 0x210, 0x23c, 0x200, 0x212, 0x212, 0x23c, 0x214, 0x23c, 0x23c, 0x255, 0x0aa, 0x0aa, 0x0aa, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x201, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x24c, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x155, 0x155, 0x200, 0x200, 0x200, 0x200, 0x215, 0x200, 0x200, 0x200, 0x215, 0x200, 0x215, 0x215, 0x254, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x215, 0x200, 0x200, 0x200, 0x215, 0x200, 0x215, 0x215, 0x258, 0x200, 0x200, 0x200, 0x21a, 0x200, 0x21a, 0x21a, 0x25c, 0x200, 0x21a, 0x21a, 0x25c, 0x21d, 0x25c, 0x25c, 0x266, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x215, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x215, 0x200, 0x200, 0x200, 0x220, 0x200, 0x220, 0x220, 0x264, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x220, 0x200, 0x200, 0x200, 0x220, 0x200, 0x220, 0x220, 0x268, 0x200, 0x200, 0x200, 0x220, 0x200, 0x220, 0x220, 0x26c, 0x200, 0x220, 0x220, 0x26c, 0x220, 0x26c, 0x26c, 0x270, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x220, 0x200, 0x200, 0x200, 0x220, 0x200, 0x220, 0x220, 0x270, 0x200, 0x200, 0x200, 0x225, 0x200, 0x225, 0x225, 0x272, 0x200, 0x225, 0x225, 0x272, 0x23a, 0x272, 0x272, 0x275, 0x200, 0x200, 0x200, 0x23a, 0x200, 0x23a, 0x23a, 0x278, 0x200, 0x23a, 0x23a, 0x278, 0x23a, 0x278, 0x278, 0x278, 0x215, 0x23d, 0x23d, 0x27a, 0x23d, 0x27a, 0x27a, 0x27c, 0x249, 0x27c, 0x27c, 0x27c, 0x27c, 0x285, 0x285, 0x3da, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x200, 0x200, 0x200, 0x22c, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x22a, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x22a, 0x22a, 0x28c, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x22a, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x22a, 0x22a, 0x28e, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x22a, 0x22a, 0x298, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x22a, 0x22a, 0x29c, 0x200, 0x230, 0x230, 0x29c, 0x230, 0x29c, 0x29c, 0x2a5, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x200, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x22a, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x22a, 0x22a, 0x299, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x22a, 0x22a, 0x2a2, 0x200, 0x200, 0x200, 0x235, 0x200, 0x235, 0x235, 0x2a5, 0x22a, 0x235, 0x235, 0x2a5, 0x235, 0x2a8, 0x2aa, 0x2b0, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x235, 0x200, 0x22a, 0x200, 0x235, 0x22a, 0x235, 0x235, 0x2aa, 0x200, 0x22a, 0x22a, 0x235, 0x22a, 0x235, 0x235, 0x2ac, 0x22a, 0x23a, 0x23a, 0x2ac, 0x265, 0x2b2, 0x2b2, 0x2b4, 0x200, 0x22a, 0x22a, 0x265, 0x22a, 0x265, 0x265, 0x2b2, 0x22a, 0x265, 0x265, 0x2b2, 0x265, 0x2b2, 0x2b2, 0x2b8, 0x22a, 0x265, 0x265, 0x2b9, 0x268, 0x2ba, 0x2ba, 0x2bc, 0x268, 0x2ba, 0x2ba, 0x2bc, 0x2bc, 0x2bc, 0x2bc, 0x4ba, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x240, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x240, 0x200, 0x22a, 0x22a, 0x240, 0x22a, 0x240, 0x240, 0x2c4, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x22a, 0x22a, 0x240, 0x200, 0x22a, 0x22a, 0x240, 0x22a, 0x240, 0x240, 0x2c2, 0x200, 0x22a, 0x22a, 0x26a, 0x22a, 0x26a, 0x26a, 0x2c5, 0x22a, 0x26a, 0x26a, 0x2c5, 0x280, 0x2c5, 0x2c5, 0x2cd, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x22a, 0x22a, 0x26a, 0x200, 0x22a, 0x22a, 0x26a, 0x22a, 0x26a, 0x26a, 0x2ca, 0x200, 0x22a, 0x22a, 0x280, 0x22a, 0x280, 0x280, 0x2cc, 0x22a, 0x280, 0x280, 0x2cc, 0x285, 0x2cc, 0x2cc, 0x2d4, 0x22a, 0x22a, 0x22a, 0x285, 0x240, 0x285, 0x285, 0x2d2, 0x240, 0x285, 0x285, 0x2d2, 0x285, 0x2d2, 0x2d2, 0x2d8, 0x240, 0x285, 0x285, 0x2d6, 0x285, 0x2d9, 0x2d9, 0x2dc, 0x2b2, 0x2da, 0x2da, 0x2dc, 0x2da, 0x2dc, 0x2dc, 0x580, 0x200, 0x200, 0x200, 0x22a, 0x200, 0x22a, 0x22a, 0x28a, 0x200, 0x22a, 0x22a, 0x28a, 0x240, 0x28a, 0x28a, 0x2e0, 0x22a, 0x240, 0x240, 0x28a, 0x240, 0x28a, 0x28a, 0x2e1, 0x240, 0x28a, 0x28a, 0x2e1, 0x28a, 0x2e1, 0x2e1, 0x2e4, 0x22a, 0x240, 0x240, 0x28a, 0x240, 0x28a, 0x28a, 0x2e2, 0x26a, 0x28a, 0x28a, 0x2e2, 0x2b5, 0x2e2, 0x2e2, 0x2e8, 0x28a, 0x2b5, 0x2b5, 0x2e4, 0x2c0, 0x2e4, 0x2e4, 0x2ec, 0x2c2, 0x2e9, 0x2e9, 0x2ec, 0x2ea, 0x2ec, 0x2ec, 0x5b6, 0x22a, 0x26a, 0x26a, 0x2ba, 0x280, 0x2ba, 0x2ba, 0x2f0, 0x28a, 0x2c5, 0x2c5, 0x2f0, 0x2c5, 0x2f0, 0x2f0, 0x2f0, 0x28a, 0x2c5, 0x2c5, 0x2f1, 0x2c5, 0x2f1, 0x2f1, 0x2f4, 0x2da, 0x2f1, 0x2f1, 0x2f4, 0x2f2, 0x2f4, 0x2f4, 0x5d4, 0x28a, 0x2dd, 0x2dd, 0x2f8, 0x2dd, 0x2f8, 0x2f8, 0x2f8, 0x2dd, 0x2f8, 0x2f8, 0x30d, 0x2f8, 0x30d, 0x338, 0x638, 0x2ed, 0x2fa, 0x2fa, 0x33c, 0x2fa, 0x33c, 0x33c, 0x646, 0x2fc, 0x34c, 0x34c, 0x646, 0x34c, 0x646, 0x646, 0x6f0, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x200, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x255, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x255, 0x155, 0x200, 0x200, 0x255, 0x200, 0x255, 0x255, 0x2ac, 0x155, 0x155, 0x155, 0x200, 0x155, 0x200, 0x200, 0x255, 0x200, 0x200, 0x200, 0x255, 0x200, 0x255, 0x255, 0x2aa, 0x200, 0x200, 0x200, 0x255, 0x200, 0x255, 0x255, 0x2aa, 0x255, 0x255, 0x255, 0x2aa, 0x255, 0x2aa, 0x2aa, 0x30c, 0x155, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x255, 0x200, 0x200, 0x200, 0x255, 0x200, 0x255, 0x255, 0x2aa, 0x200, 0x255, 0x255, 0x255, 0x255, 0x255, 0x255, 0x2aa, 0x255, 0x255, 0x255, 0x2aa, 0x255, 0x2aa, 0x2aa, 0x314, 0x200, 0x255, 0x255, 0x255, 0x255, 0x255, 0x255, 0x2aa, 0x255, 0x255, 0x255, 0x2aa, 0x255, 0x2aa, 0x2aa, 0x318, 0x255, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x31c, 0x2aa, 0x2aa, 0x2aa, 0x31c, 0x2b0, 0x31c, 0x31c, 0x320, 0x155, 0x200, 0x200, 0x255, 0x200, 0x255, 0x255, 0x255, 0x200, 0x255, 0x255, 0x255, 0x255, 0x255, 0x255, 0x2aa, 0x200, 0x255, 0x255, 0x255, 0x255, 0x255, 0x255, 0x2aa, 0x255, 0x255, 0x255, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x324, 0x200, 0x255, 0x255, 0x2aa, 0x255, 0x2aa, 0x2aa, 0x2aa, 0x255, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x322, 0x255, 0x2aa, 0x2aa, 0x2b5, 0x2aa, 0x30a, 0x30a, 0x325, 0x2aa, 0x30a, 0x30a, 0x325, 0x30a, 0x329, 0x329, 0x32d, 0x255, 0x255, 0x255, 0x2aa, 0x255, 0x2aa, 0x2aa, 0x30a, 0x255, 0x2aa, 0x2aa, 0x30a, 0x2aa, 0x30a, 0x30a, 0x32a, 0x255, 0x2aa, 0x2aa, 0x30a, 0x2aa, 0x30a, 0x30a, 0x331, 0x2aa, 0x310, 0x310, 0x32c, 0x310, 0x331, 0x331, 0x334, 0x2aa, 0x2aa, 0x2aa, 0x310, 0x2aa, 0x310, 0x310, 0x332, 0x2aa, 0x310, 0x310, 0x332, 0x310, 0x335, 0x335, 0x338, 0x2aa, 0x310, 0x310, 0x339, 0x310, 0x339, 0x339, 0x33c, 0x312, 0x33a, 0x33a, 0x33c, 0x33c, 0x33c, 0x33c, 0x68a, 0x200, 0x200, 0x200, 0x255, 0x200, 0x255, 0x255, 0x2aa, 0x200, 0x255, 0x255, 0x2aa, 0x255, 0x2aa, 0x2aa, 0x315, 0x255, 0x255, 0x255, 0x2aa, 0x255, 0x2aa, 0x2aa, 0x315, 0x255, 0x2aa, 0x2aa, 0x315, 0x2aa, 0x315, 0x315, 0x344, 0x255, 0x255, 0x255, 0x2aa, 0x255, 0x2aa, 0x2aa, 0x315, 0x255, 0x2aa, 0x2aa, 0x315, 0x2aa, 0x315, 0x315, 0x342, 0x2aa, 0x2aa, 0x2aa, 0x315, 0x2aa, 0x315, 0x315, 0x345, 0x2aa, 0x315, 0x315, 0x345, 0x32a, 0x345, 0x345, 0x34d, 0x255, 0x255, 0x255, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x315, 0x2aa, 0x2aa, 0x2aa, 0x315, 0x2aa, 0x315, 0x315, 0x34a, 0x2aa, 0x2aa, 0x2aa, 0x32a, 0x2aa, 0x32a, 0x32a, 0x34c, 0x2aa, 0x32a, 0x32a, 0x34c, 0x330, 0x34c, 0x34c, 0x354, 0x2aa, 0x2aa, 0x2aa, 0x330, 0x2c0, 0x330, 0x330, 0x352, 0x2c0, 0x330, 0x330, 0x352, 0x330, 0x352, 0x352, 0x358, 0x2c0, 0x330, 0x330, 0x354, 0x330, 0x359, 0x359, 0x35c, 0x332, 0x35a, 0x35a, 0x35c, 0x35c, 0x35c, 0x35c, 0x6fd, 0x255, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x2aa, 0x335, 0x2aa, 0x2aa, 0x2aa, 0x335, 0x2aa, 0x335, 0x335, 0x360, 0x2aa, 0x2c0, 0x2c0, 0x335, 0x2c0, 0x335, 0x335, 0x361, 0x2c0, 0x335, 0x335, 0x361, 0x335, 0x361, 0x361, 0x364, 0x2aa, 0x2c0, 0x2c0, 0x335, 0x2c0, 0x335, 0x335, 0x362, 0x2c0, 0x335, 0x335, 0x362, 0x335, 0x362, 0x362, 0x368, 0x32a, 0x335, 0x335, 0x364, 0x335, 0x364, 0x364, 0x36c, 0x342, 0x369, 0x369, 0x36c, 0x36a, 0x36c, 0x3c1, 0x736, 0x2aa, 0x315, 0x315, 0x33a, 0x32a, 0x33a, 0x33a, 0x370, 0x335, 0x33a, 0x33a, 0x370, 0x345, 0x370, 0x370, 0x370, 0x335, 0x345, 0x345, 0x371, 0x345, 0x371, 0x371, 0x3c9, 0x35a, 0x371, 0x371, 0x3c9, 0x372, 0x3c9, 0x3c9, 0x754, 0x335, 0x35a, 0x35a, 0x378, 0x35d, 0x378, 0x378, 0x3cd, 0x35d, 0x378, 0x378, 0x3cd, 0x378, 0x3cd, 0x3cd, 0x762, 0x36d, 0x37a, 0x37a, 0x3d1, 0x37c, 0x3e6, 0x3e6, 0x771, 0x37c, 0x3e6, 0x3f1, 0x771, 0x3f6, 0x771, 0x771, 0x870, 0x200, 0x255, 0x255, 0x255, 0x255, 0x255, 0x255, 0x2d5, 0x255, 0x2aa, 0x2aa, 0x2d5, 0x2aa, 0x2d5, 0x2d5, 0x355, 0x255, 0x2aa, 0x2aa, 0x2d5, 0x2aa, 0x2d5, 0x2d5, 0x355, 0x2aa, 0x2d5, 0x2d5, 0x355, 0x2d5, 0x355, 0x355, 0x384, 0x255, 0x2aa, 0x2aa, 0x2d5, 0x2aa, 0x2d5, 0x2d5, 0x355, 0x2aa, 0x2d5, 0x2d5, 0x355, 0x2d5, 0x355, 0x355, 0x382, 0x2d5, 0x2d5, 0x2d5, 0x355, 0x2d5, 0x355, 0x355, 0x385, 0x2d5, 0x355, 0x355, 0x385, 0x355, 0x385, 0x385, 0x38c, 0x2aa, 0x2aa, 0x2aa, 0x2d5, 0x2d5, 0x2d5, 0x2d5, 0x355, 0x2d5, 0x2d5, 0x2d5, 0x355, 0x2d5, 0x355, 0x355, 0x38a, 0x2d5, 0x2d5, 0x2d5, 0x355, 0x2d5, 0x355, 0x355, 0x38c, 0x300, 0x355, 0x355, 0x38c, 0x380, 0x38c, 0x38c, 0x394, 0x2d5, 0x300, 0x300, 0x380, 0x355, 0x380, 0x380, 0x392, 0x355, 0x385, 0x385, 0x392, 0x385, 0x392, 0x392, 0x398, 0x355, 0x385, 0x385, 0x394, 0x385, 0x396, 0x396, 0x3f1, 0x388, 0x39a, 0x39a, 0x3f1, 0x39a, 0x3f1, 0x3f1, 0x7e6, 0x2aa, 0x2d5, 0x2d5, 0x2d5, 0x2d5, 0x2d5, 0x2d5, 0x38a, 0x2d5, 0x300, 0x300, 0x38a, 0x355, 0x38a, 0x38a, 0x3a0, 0x2d5, 0x355, 0x355, 0x38a, 0x355, 0x38a, 0x38a, 0x3a1, 0x355, 0x38a, 0x38a, 0x3a1, 0x38a, 0x3a1, 0x3a1, 0x3f9, 0x2d5, 0x355, 0x355, 0x38a, 0x355, 0x38a, 0x38a, 0x3a2, 0x355, 0x38a, 0x38a, 0x3a2, 0x38a, 0x3a2, 0x3a2, 0x3fd, 0x355, 0x38a, 0x38a, 0x3a4, 0x38a, 0x3a4, 0x3a4, 0x401, 0x395, 0x3a6, 0x3a6, 0x401, 0x3aa, 0x401, 0x401, 0x821, 0x300, 0x355, 0x355, 0x390, 0x355, 0x390, 0x390, 0x3b0, 0x360, 0x390, 0x390, 0x3b0, 0x39a, 0x3b0, 0x3b0, 0x405, 0x360, 0x39a, 0x39a, 0x3b1, 0x39a, 0x3b1, 0x3b1, 0x409, 0x39a, 0x3b1, 0x3b1, 0x409, 0x3b1, 0x409, 0x409, 0x83e, 0x38a, 0x39a, 0x39a, 0x3b5, 0x39a, 0x3b8, 0x3b8, 0x438, 0x39d, 0x3b8, 0x3b8, 0x438, 0x3b8, 0x438, 0x438, 0x84d, 0x3ad, 0x3ba, 0x3ba, 0x43c, 0x3ba, 0x43c, 0x43c, 0x85c, 0x3bc, 0x43c, 0x43c, 0x85c, 0x43c, 0x85c, 0x85c, 0x91a, 0x2d5, 0x2d5, 0x2d5, 0x36a, 0x2d5, 0x36a, 0x36a, 0x3aa, 0x2d5, 0x36a, 0x36a, 0x3aa, 0x36a, 0x3aa, 0x3aa, 0x3c0, 0x300, 0x380, 0x36a, 0x3aa, 0x380, 0x3aa, 0x3aa, 0x3c1, 0x380, 0x3aa, 0x3aa, 0x3c1, 0x3aa, 0x3c1, 0x3c1, 0x419, 0x315, 0x380, 0x380, 0x3aa, 0x380, 0x3aa, 0x3aa, 0x3c2, 0x380, 0x3aa, 0x3aa, 0x3c2, 0x3aa, 0x3c2, 0x3c2, 0x41d, 0x3aa, 0x3c0, 0x3c0, 0x3c4, 0x3c0, 0x3c4, 0x3c4, 0x44c, 0x3c0, 0x3c6, 0x3c9, 0x44c, 0x3ca, 0x44c, 0x44c, 0x896, 0x36a, 0x380, 0x380, 0x3c5, 0x3aa, 0x3c5, 0x3c5, 0x3d0, 0x3aa, 0x3c5, 0x3c5, 0x3d0, 0x3c5, 0x3d0, 0x3d0, 0x450, 0x3aa, 0x3c5, 0x3c5, 0x3d1, 0x3c5, 0x3d1, 0x3d1, 0x454, 0x3c5, 0x3d1, 0x3d1, 0x454, 0x3d1, 0x454, 0x454, 0x8b4, 0x3aa, 0x3c5, 0x3c5, 0x3d8, 0x3c5, 0x3d8, 0x3d8, 0x458, 0x3c8, 0x3d8, 0x3d8, 0x458, 0x3d8, 0x46d, 0x46d, 0x8c2, 0x3cd, 0x3da, 0x3da, 0x471, 0x3da, 0x471, 0x471, 0x8d1, 0x3dc, 0x4c6, 0x4c6, 0x8d1, 0x4c6, 0x8d1, 0x8d1, 0x990, 0x380, 0x3b5, 0x3b5, 0x3d5, 0x3b5, 0x3d5, 0x3d5, 0x3e0, 0x3b5, 0x3d5, 0x3d5, 0x3e0, 0x3d5, 0x3e0, 0x3e0, 0x475, 0x3b5, 0x3d5, 0x3d5, 0x3e1, 0x3d5, 0x3e1, 0x3e1, 0x479, 0x3d5, 0x3e1, 0x3e1, 0x479, 0x3e1, 0x479, 0x479, 0x8ee, 0x3c0, 0x3e0, 0x3e0, 0x3e5, 0x3e0, 0x3e8, 0x3e8, 0x4d2, 0x3e2, 0x3e8, 0x3e8, 0x4d2, 0x3e8, 0x4d2, 0x4d2, 0x8fa, 0x3e2, 0x3ea, 0x3ea, 0x4d6, 0x3ea, 0x4d6, 0x4d6, 0x909, 0x3ec, 0x4d6, 0x50c, 0x90c, 0x50c, 0x90c, 0x961, 0x9ba, 0x3da, 0x3ea, 0x3ea, 0x3f0, 0x3ea, 0x3f0, 0x3f0, 0x4da, 0x3ea, 0x3f0, 0x3f0, 0x4da, 0x3f0, 0x505, 0x505, 0x970, 0x3ea, 0x3f1, 0x3f1, 0x514, 0x448, 0x514, 0x594, 0x97c, 0x449, 0x569, 0x5e9, 0x9a6, 0x5e9, 0x9a6, 0x9a9, 0x9d8, 0x3f2, 0x44d, 0x44d, 0x5ed, 0x44d, 0x618, 0x62d, 0x9b8, 0x478, 0x632, 0x69d, 0x9b8, 0x69d, 0x9b8, 0x9cd, 0x9e2, 0x47c, 0x6b6, 0x6b6, 0x9dc, 0x6ec, 0x9dc, 0x9dc, 0x9f0, 0x7ae, 0x9e6, 0x9e6, 0x9f0, 0x9ec, 0x9f0, 0x9f0, 0xa9a }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x014, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x025, 0x015, 0x028, 0x074, 0x196, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x014, 0x05c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x014, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x089, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x0c4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02a, 0x000, 0x095, 0x095, 0x135, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x095, 0x000, 0x000, 0x000, 0x095, 0x095, 0x095, 0x0e0, 0x1c5, 0x02a, 0x095, 0x095, 0x0e0, 0x0a0, 0x0e0, 0x13a, 0x28d, 0x0e5, 0x145, 0x148, 0x2d9, 0x239, 0x3cc, 0x632, 0x89a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x014, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x025, 0x015, 0x028, 0x074, 0x196, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x014, 0x05c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x014, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x089, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x0c4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02a, 0x000, 0x095, 0x095, 0x135, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x095, 0x000, 0x000, 0x000, 0x095, 0x095, 0x095, 0x0e0, 0x1c5, 0x02a, 0x095, 0x095, 0x0e0, 0x0a0, 0x0e0, 0x13a, 0x28d, 0x0e5, 0x145, 0x148, 0x2d9, 0x239, 0x3cc, 0x632, 0x89a } + }; + + public static Sid Create(int newSampleRate, int clockFrqNum, int clockFrqDen) + { + return new Sid(WaveTable, newSampleRate, clockFrqNum, clockFrqDen); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R3.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R3.cs new file mode 100644 index 0000000000..3fa29f939a --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R3.cs @@ -0,0 +1,23 @@ +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // SID Wavetables courtesy of Kevtris + public static class Chip6581R3 + { + private static readonly int[][] WaveTable = + { + new[] { 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff }, + new[] { 0x000, 0x002, 0x004, 0x006, 0x008, 0x00a, 0x00c, 0x00e, 0x010, 0x012, 0x014, 0x016, 0x018, 0x01a, 0x01c, 0x01e, 0x020, 0x022, 0x024, 0x026, 0x028, 0x02a, 0x02c, 0x02e, 0x030, 0x032, 0x034, 0x036, 0x038, 0x03a, 0x03c, 0x03e, 0x040, 0x042, 0x044, 0x046, 0x048, 0x04a, 0x04c, 0x04e, 0x050, 0x052, 0x054, 0x056, 0x058, 0x05a, 0x05c, 0x05e, 0x060, 0x062, 0x064, 0x066, 0x068, 0x06a, 0x06c, 0x06e, 0x070, 0x072, 0x074, 0x076, 0x078, 0x07a, 0x07c, 0x07e, 0x080, 0x082, 0x084, 0x086, 0x088, 0x08a, 0x08c, 0x08e, 0x090, 0x092, 0x094, 0x096, 0x098, 0x09a, 0x09c, 0x09e, 0x0a0, 0x0a2, 0x0a4, 0x0a6, 0x0a8, 0x0aa, 0x0ac, 0x0ae, 0x0b0, 0x0b2, 0x0b4, 0x0b6, 0x0b8, 0x0ba, 0x0bc, 0x0be, 0x0c0, 0x0c2, 0x0c4, 0x0c6, 0x0c8, 0x0ca, 0x0cc, 0x0ce, 0x0d0, 0x0d2, 0x0d4, 0x0d6, 0x0d8, 0x0da, 0x0dc, 0x0de, 0x0e0, 0x0e2, 0x0e4, 0x0e6, 0x0e8, 0x0ea, 0x0ec, 0x0ee, 0x0f0, 0x0f2, 0x0f4, 0x0f6, 0x0f8, 0x0fa, 0x0fc, 0x0fe, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12c, 0x12e, 0x130, 0x132, 0x134, 0x136, 0x138, 0x13a, 0x13c, 0x13e, 0x140, 0x142, 0x144, 0x146, 0x148, 0x14a, 0x14c, 0x14e, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15a, 0x15c, 0x15e, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x176, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x182, 0x184, 0x186, 0x188, 0x18a, 0x18c, 0x18e, 0x190, 0x192, 0x194, 0x196, 0x198, 0x19a, 0x19c, 0x19e, 0x1a0, 0x1a2, 0x1a4, 0x1a6, 0x1a8, 0x1aa, 0x1ac, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b6, 0x1b8, 0x1ba, 0x1bc, 0x1be, 0x1c0, 0x1c2, 0x1c4, 0x1c6, 0x1c8, 0x1ca, 0x1cc, 0x1ce, 0x1d0, 0x1d2, 0x1d4, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1de, 0x1e0, 0x1e2, 0x1e4, 0x1e6, 0x1e8, 0x1ea, 0x1ec, 0x1ee, 0x1f0, 0x1f2, 0x1f4, 0x1f6, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21c, 0x21e, 0x220, 0x222, 0x224, 0x226, 0x228, 0x22a, 0x22c, 0x22e, 0x230, 0x232, 0x234, 0x236, 0x238, 0x23a, 0x23c, 0x23e, 0x240, 0x242, 0x244, 0x246, 0x248, 0x24a, 0x24c, 0x24e, 0x250, 0x252, 0x254, 0x256, 0x258, 0x25a, 0x25c, 0x25e, 0x260, 0x262, 0x264, 0x266, 0x268, 0x26a, 0x26c, 0x26e, 0x270, 0x272, 0x274, 0x276, 0x278, 0x27a, 0x27c, 0x27e, 0x280, 0x282, 0x284, 0x286, 0x288, 0x28a, 0x28c, 0x28e, 0x290, 0x292, 0x294, 0x296, 0x298, 0x29a, 0x29c, 0x29e, 0x2a0, 0x2a2, 0x2a4, 0x2a6, 0x2a8, 0x2aa, 0x2ac, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2bc, 0x2be, 0x2c0, 0x2c2, 0x2c4, 0x2c6, 0x2c8, 0x2ca, 0x2cc, 0x2ce, 0x2d0, 0x2d2, 0x2d4, 0x2d6, 0x2d8, 0x2da, 0x2dc, 0x2de, 0x2e0, 0x2e2, 0x2e4, 0x2e6, 0x2e8, 0x2ea, 0x2ec, 0x2ee, 0x2f0, 0x2f2, 0x2f4, 0x2f6, 0x2f8, 0x2fa, 0x2fc, 0x2fe, 0x300, 0x302, 0x304, 0x306, 0x308, 0x30a, 0x30c, 0x30e, 0x310, 0x312, 0x314, 0x316, 0x318, 0x31a, 0x31c, 0x31e, 0x320, 0x322, 0x324, 0x326, 0x328, 0x32a, 0x32c, 0x32e, 0x330, 0x332, 0x334, 0x336, 0x338, 0x33a, 0x33c, 0x33e, 0x340, 0x342, 0x344, 0x346, 0x348, 0x34a, 0x34c, 0x34e, 0x350, 0x352, 0x354, 0x356, 0x358, 0x35a, 0x35c, 0x35e, 0x360, 0x362, 0x364, 0x366, 0x368, 0x36a, 0x36c, 0x36e, 0x370, 0x372, 0x374, 0x376, 0x378, 0x37a, 0x37c, 0x37e, 0x380, 0x382, 0x384, 0x386, 0x388, 0x38a, 0x38c, 0x38e, 0x390, 0x392, 0x394, 0x396, 0x398, 0x39a, 0x39c, 0x39e, 0x3a0, 0x3a2, 0x3a4, 0x3a6, 0x3a8, 0x3aa, 0x3ac, 0x3ae, 0x3b0, 0x3b2, 0x3b4, 0x3b6, 0x3b8, 0x3ba, 0x3bc, 0x3be, 0x3c0, 0x3c2, 0x3c4, 0x3c6, 0x3c8, 0x3ca, 0x3cc, 0x3ce, 0x3d0, 0x3d2, 0x3d4, 0x3d6, 0x3d8, 0x3da, 0x3dc, 0x3de, 0x3e0, 0x3e2, 0x3e4, 0x3e6, 0x3e8, 0x3ea, 0x3ec, 0x3ee, 0x3f0, 0x3f2, 0x3f4, 0x3f6, 0x3f8, 0x3fa, 0x3fc, 0x3fe, 0x400, 0x402, 0x404, 0x406, 0x408, 0x40a, 0x40c, 0x40e, 0x410, 0x412, 0x414, 0x416, 0x418, 0x41a, 0x41c, 0x41e, 0x420, 0x422, 0x424, 0x426, 0x428, 0x42a, 0x42c, 0x42e, 0x430, 0x432, 0x434, 0x436, 0x438, 0x43a, 0x43c, 0x43e, 0x440, 0x442, 0x444, 0x446, 0x448, 0x44a, 0x44c, 0x44e, 0x450, 0x452, 0x454, 0x456, 0x458, 0x45a, 0x45c, 0x45e, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46a, 0x46c, 0x46e, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47a, 0x47c, 0x47e, 0x480, 0x482, 0x484, 0x486, 0x488, 0x48a, 0x48c, 0x48e, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49a, 0x49c, 0x49e, 0x4a0, 0x4a2, 0x4a4, 0x4a6, 0x4a8, 0x4aa, 0x4ac, 0x4ae, 0x4b0, 0x4b2, 0x4b4, 0x4b6, 0x4b8, 0x4ba, 0x4bc, 0x4be, 0x4c0, 0x4c2, 0x4c4, 0x4c6, 0x4c8, 0x4ca, 0x4cc, 0x4ce, 0x4d0, 0x4d2, 0x4d4, 0x4d6, 0x4d8, 0x4da, 0x4dc, 0x4de, 0x4e0, 0x4e2, 0x4e4, 0x4e6, 0x4e8, 0x4ea, 0x4ec, 0x4ee, 0x4f0, 0x4f2, 0x4f4, 0x4f6, 0x4f8, 0x4fa, 0x4fc, 0x4fe, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50a, 0x50c, 0x50e, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51a, 0x51c, 0x51e, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52a, 0x52c, 0x52e, 0x530, 0x532, 0x534, 0x536, 0x538, 0x53a, 0x53c, 0x53e, 0x540, 0x542, 0x544, 0x546, 0x548, 0x54a, 0x54c, 0x54e, 0x550, 0x552, 0x554, 0x556, 0x558, 0x55a, 0x55c, 0x55e, 0x560, 0x562, 0x564, 0x566, 0x568, 0x56a, 0x56c, 0x56e, 0x570, 0x572, 0x574, 0x576, 0x578, 0x57a, 0x57c, 0x57e, 0x580, 0x582, 0x584, 0x586, 0x588, 0x58a, 0x58c, 0x58e, 0x590, 0x592, 0x594, 0x596, 0x598, 0x59a, 0x59c, 0x59e, 0x5a0, 0x5a2, 0x5a4, 0x5a6, 0x5a8, 0x5aa, 0x5ac, 0x5ae, 0x5b0, 0x5b2, 0x5b4, 0x5b6, 0x5b8, 0x5ba, 0x5bc, 0x5be, 0x5c0, 0x5c2, 0x5c4, 0x5c6, 0x5c8, 0x5ca, 0x5cc, 0x5ce, 0x5d0, 0x5d2, 0x5d4, 0x5d6, 0x5d8, 0x5da, 0x5dc, 0x5de, 0x5e0, 0x5e2, 0x5e4, 0x5e6, 0x5e8, 0x5ea, 0x5ec, 0x5ee, 0x5f0, 0x5f2, 0x5f4, 0x5f6, 0x5f8, 0x5fa, 0x5fc, 0x5fe, 0x600, 0x602, 0x604, 0x606, 0x608, 0x60a, 0x60c, 0x60e, 0x610, 0x612, 0x614, 0x616, 0x618, 0x61a, 0x61c, 0x61e, 0x620, 0x622, 0x624, 0x626, 0x628, 0x62a, 0x62c, 0x62e, 0x630, 0x632, 0x634, 0x636, 0x638, 0x63a, 0x63c, 0x63e, 0x640, 0x642, 0x644, 0x646, 0x648, 0x64a, 0x64c, 0x64e, 0x650, 0x652, 0x654, 0x656, 0x658, 0x65a, 0x65c, 0x65e, 0x660, 0x662, 0x664, 0x666, 0x668, 0x66a, 0x66c, 0x66e, 0x670, 0x672, 0x674, 0x676, 0x678, 0x67a, 0x67c, 0x67e, 0x680, 0x682, 0x684, 0x686, 0x688, 0x68a, 0x68c, 0x68e, 0x690, 0x692, 0x694, 0x696, 0x698, 0x69a, 0x69c, 0x69e, 0x6a0, 0x6a2, 0x6a4, 0x6a6, 0x6a8, 0x6aa, 0x6ac, 0x6ae, 0x6b0, 0x6b2, 0x6b4, 0x6b6, 0x6b8, 0x6ba, 0x6bc, 0x6be, 0x6c0, 0x6c2, 0x6c4, 0x6c6, 0x6c8, 0x6ca, 0x6cc, 0x6ce, 0x6d0, 0x6d2, 0x6d4, 0x6d6, 0x6d8, 0x6da, 0x6dc, 0x6de, 0x6e0, 0x6e2, 0x6e4, 0x6e6, 0x6e8, 0x6ea, 0x6ec, 0x6ee, 0x6f0, 0x6f2, 0x6f4, 0x6f6, 0x6f8, 0x6fa, 0x6fc, 0x6fe, 0x700, 0x702, 0x704, 0x706, 0x708, 0x70a, 0x70c, 0x70e, 0x710, 0x712, 0x714, 0x716, 0x718, 0x71a, 0x71c, 0x71e, 0x720, 0x722, 0x724, 0x726, 0x728, 0x72a, 0x72c, 0x72e, 0x730, 0x732, 0x734, 0x736, 0x738, 0x73a, 0x73c, 0x73e, 0x740, 0x742, 0x744, 0x746, 0x748, 0x74a, 0x74c, 0x74e, 0x750, 0x752, 0x754, 0x756, 0x758, 0x75a, 0x75c, 0x75e, 0x760, 0x762, 0x764, 0x766, 0x768, 0x76a, 0x76c, 0x76e, 0x770, 0x772, 0x774, 0x776, 0x778, 0x77a, 0x77c, 0x77e, 0x780, 0x782, 0x784, 0x786, 0x788, 0x78a, 0x78c, 0x78e, 0x790, 0x792, 0x794, 0x796, 0x798, 0x79a, 0x79c, 0x79e, 0x7a0, 0x7a2, 0x7a4, 0x7a6, 0x7a8, 0x7aa, 0x7ac, 0x7ae, 0x7b0, 0x7b2, 0x7b4, 0x7b6, 0x7b8, 0x7ba, 0x7bc, 0x7be, 0x7c0, 0x7c2, 0x7c4, 0x7c6, 0x7c8, 0x7ca, 0x7cc, 0x7ce, 0x7d0, 0x7d2, 0x7d4, 0x7d6, 0x7d8, 0x7da, 0x7dc, 0x7de, 0x7e0, 0x7e2, 0x7e4, 0x7e6, 0x7e8, 0x7ea, 0x7ec, 0x7ee, 0x7f0, 0x7f2, 0x7f4, 0x7f6, 0x7f8, 0x7fa, 0x7fc, 0x7fe, 0x800, 0x802, 0x804, 0x806, 0x808, 0x80a, 0x80c, 0x80e, 0x810, 0x812, 0x814, 0x816, 0x818, 0x81a, 0x81c, 0x81e, 0x820, 0x822, 0x824, 0x826, 0x828, 0x82a, 0x82c, 0x82e, 0x830, 0x832, 0x834, 0x836, 0x838, 0x83a, 0x83c, 0x83e, 0x840, 0x842, 0x844, 0x846, 0x848, 0x84a, 0x84c, 0x84e, 0x850, 0x852, 0x854, 0x856, 0x858, 0x85a, 0x85c, 0x85e, 0x860, 0x862, 0x864, 0x866, 0x868, 0x86a, 0x86c, 0x86e, 0x870, 0x872, 0x874, 0x876, 0x878, 0x87a, 0x87c, 0x87e, 0x880, 0x882, 0x884, 0x886, 0x888, 0x88a, 0x88c, 0x88e, 0x890, 0x892, 0x894, 0x896, 0x898, 0x89a, 0x89c, 0x89e, 0x8a0, 0x8a2, 0x8a4, 0x8a6, 0x8a8, 0x8aa, 0x8ac, 0x8ae, 0x8b0, 0x8b2, 0x8b4, 0x8b6, 0x8b8, 0x8ba, 0x8bc, 0x8be, 0x8c0, 0x8c2, 0x8c4, 0x8c6, 0x8c8, 0x8ca, 0x8cc, 0x8ce, 0x8d0, 0x8d2, 0x8d4, 0x8d6, 0x8d8, 0x8da, 0x8dc, 0x8de, 0x8e0, 0x8e2, 0x8e4, 0x8e6, 0x8e8, 0x8ea, 0x8ec, 0x8ee, 0x8f0, 0x8f2, 0x8f4, 0x8f6, 0x8f8, 0x8fa, 0x8fc, 0x8fe, 0x900, 0x902, 0x904, 0x906, 0x908, 0x90a, 0x90c, 0x90e, 0x910, 0x912, 0x914, 0x916, 0x918, 0x91a, 0x91c, 0x91e, 0x920, 0x922, 0x924, 0x926, 0x928, 0x92a, 0x92c, 0x92e, 0x930, 0x932, 0x934, 0x936, 0x938, 0x93a, 0x93c, 0x93e, 0x940, 0x942, 0x944, 0x946, 0x948, 0x94a, 0x94c, 0x94e, 0x950, 0x952, 0x954, 0x956, 0x958, 0x95a, 0x95c, 0x95e, 0x960, 0x962, 0x964, 0x966, 0x968, 0x96a, 0x96c, 0x96e, 0x970, 0x972, 0x974, 0x976, 0x978, 0x97a, 0x97c, 0x97e, 0x980, 0x982, 0x984, 0x986, 0x988, 0x98a, 0x98c, 0x98e, 0x990, 0x992, 0x994, 0x996, 0x998, 0x99a, 0x99c, 0x99e, 0x9a0, 0x9a2, 0x9a4, 0x9a6, 0x9a8, 0x9aa, 0x9ac, 0x9ae, 0x9b0, 0x9b2, 0x9b4, 0x9b6, 0x9b8, 0x9ba, 0x9bc, 0x9be, 0x9c0, 0x9c2, 0x9c4, 0x9c6, 0x9c8, 0x9ca, 0x9cc, 0x9ce, 0x9d0, 0x9d2, 0x9d4, 0x9d6, 0x9d8, 0x9da, 0x9dc, 0x9de, 0x9e0, 0x9e2, 0x9e4, 0x9e6, 0x9e8, 0x9ea, 0x9ec, 0x9ee, 0x9f0, 0x9f2, 0x9f4, 0x9f6, 0x9f8, 0x9fa, 0x9fc, 0x9fe, 0xa00, 0xa02, 0xa04, 0xa06, 0xa08, 0xa0a, 0xa0c, 0xa0e, 0xa10, 0xa12, 0xa14, 0xa16, 0xa18, 0xa1a, 0xa1c, 0xa1e, 0xa20, 0xa22, 0xa24, 0xa26, 0xa28, 0xa2a, 0xa2c, 0xa2e, 0xa30, 0xa32, 0xa34, 0xa36, 0xa38, 0xa3a, 0xa3c, 0xa3e, 0xa40, 0xa42, 0xa44, 0xa46, 0xa48, 0xa4a, 0xa4c, 0xa4e, 0xa50, 0xa52, 0xa54, 0xa56, 0xa58, 0xa5a, 0xa5c, 0xa5e, 0xa60, 0xa62, 0xa64, 0xa66, 0xa68, 0xa6a, 0xa6c, 0xa6e, 0xa70, 0xa72, 0xa74, 0xa76, 0xa78, 0xa7a, 0xa7c, 0xa7e, 0xa80, 0xa82, 0xa84, 0xa86, 0xa88, 0xa8a, 0xa8c, 0xa8e, 0xa90, 0xa92, 0xa94, 0xa96, 0xa98, 0xa9a, 0xa9c, 0xa9e, 0xaa0, 0xaa2, 0xaa4, 0xaa6, 0xaa8, 0xaaa, 0xaac, 0xaae, 0xab0, 0xab2, 0xab4, 0xab6, 0xab8, 0xaba, 0xabc, 0xabe, 0xac0, 0xac2, 0xac4, 0xac6, 0xac8, 0xaca, 0xacc, 0xace, 0xad0, 0xad2, 0xad4, 0xad6, 0xad8, 0xada, 0xadc, 0xade, 0xae0, 0xae2, 0xae4, 0xae6, 0xae8, 0xaea, 0xaec, 0xaee, 0xaf0, 0xaf2, 0xaf4, 0xaf6, 0xaf8, 0xafa, 0xafc, 0xafe, 0xb00, 0xb02, 0xb04, 0xb06, 0xb08, 0xb0a, 0xb0c, 0xb0e, 0xb10, 0xb12, 0xb14, 0xb16, 0xb18, 0xb1a, 0xb1c, 0xb1e, 0xb20, 0xb22, 0xb24, 0xb26, 0xb28, 0xb2a, 0xb2c, 0xb2e, 0xb30, 0xb32, 0xb34, 0xb36, 0xb38, 0xb3a, 0xb3c, 0xb3e, 0xb40, 0xb42, 0xb44, 0xb46, 0xb48, 0xb4a, 0xb4c, 0xb4e, 0xb50, 0xb52, 0xb54, 0xb56, 0xb58, 0xb5a, 0xb5c, 0xb5e, 0xb60, 0xb62, 0xb64, 0xb66, 0xb68, 0xb6a, 0xb6c, 0xb6e, 0xb70, 0xb72, 0xb74, 0xb76, 0xb78, 0xb7a, 0xb7c, 0xb7e, 0xb80, 0xb82, 0xb84, 0xb86, 0xb88, 0xb8a, 0xb8c, 0xb8e, 0xb90, 0xb92, 0xb94, 0xb96, 0xb98, 0xb9a, 0xb9c, 0xb9e, 0xba0, 0xba2, 0xba4, 0xba6, 0xba8, 0xbaa, 0xbac, 0xbae, 0xbb0, 0xbb2, 0xbb4, 0xbb6, 0xbb8, 0xbba, 0xbbc, 0xbbe, 0xbc0, 0xbc2, 0xbc4, 0xbc6, 0xbc8, 0xbca, 0xbcc, 0xbce, 0xbd0, 0xbd2, 0xbd4, 0xbd6, 0xbd8, 0xbda, 0xbdc, 0xbde, 0xbe0, 0xbe2, 0xbe4, 0xbe6, 0xbe8, 0xbea, 0xbec, 0xbee, 0xbf0, 0xbf2, 0xbf4, 0xbf6, 0xbf8, 0xbfa, 0xbfc, 0xbfe, 0xc00, 0xc02, 0xc04, 0xc06, 0xc08, 0xc0a, 0xc0c, 0xc0e, 0xc10, 0xc12, 0xc14, 0xc16, 0xc18, 0xc1a, 0xc1c, 0xc1e, 0xc20, 0xc22, 0xc24, 0xc26, 0xc28, 0xc2a, 0xc2c, 0xc2e, 0xc30, 0xc32, 0xc34, 0xc36, 0xc38, 0xc3a, 0xc3c, 0xc3e, 0xc40, 0xc42, 0xc44, 0xc46, 0xc48, 0xc4a, 0xc4c, 0xc4e, 0xc50, 0xc52, 0xc54, 0xc56, 0xc58, 0xc5a, 0xc5c, 0xc5e, 0xc60, 0xc62, 0xc64, 0xc66, 0xc68, 0xc6a, 0xc6c, 0xc6e, 0xc70, 0xc72, 0xc74, 0xc76, 0xc78, 0xc7a, 0xc7c, 0xc7e, 0xc80, 0xc82, 0xc84, 0xc86, 0xc88, 0xc8a, 0xc8c, 0xc8e, 0xc90, 0xc92, 0xc94, 0xc96, 0xc98, 0xc9a, 0xc9c, 0xc9e, 0xca0, 0xca2, 0xca4, 0xca6, 0xca8, 0xcaa, 0xcac, 0xcae, 0xcb0, 0xcb2, 0xcb4, 0xcb6, 0xcb8, 0xcba, 0xcbc, 0xcbe, 0xcc0, 0xcc2, 0xcc4, 0xcc6, 0xcc8, 0xcca, 0xccc, 0xcce, 0xcd0, 0xcd2, 0xcd4, 0xcd6, 0xcd8, 0xcda, 0xcdc, 0xcde, 0xce0, 0xce2, 0xce4, 0xce6, 0xce8, 0xcea, 0xcec, 0xcee, 0xcf0, 0xcf2, 0xcf4, 0xcf6, 0xcf8, 0xcfa, 0xcfc, 0xcfe, 0xd00, 0xd02, 0xd04, 0xd06, 0xd08, 0xd0a, 0xd0c, 0xd0e, 0xd10, 0xd12, 0xd14, 0xd16, 0xd18, 0xd1a, 0xd1c, 0xd1e, 0xd20, 0xd22, 0xd24, 0xd26, 0xd28, 0xd2a, 0xd2c, 0xd2e, 0xd30, 0xd32, 0xd34, 0xd36, 0xd38, 0xd3a, 0xd3c, 0xd3e, 0xd40, 0xd42, 0xd44, 0xd46, 0xd48, 0xd4a, 0xd4c, 0xd4e, 0xd50, 0xd52, 0xd54, 0xd56, 0xd58, 0xd5a, 0xd5c, 0xd5e, 0xd60, 0xd62, 0xd64, 0xd66, 0xd68, 0xd6a, 0xd6c, 0xd6e, 0xd70, 0xd72, 0xd74, 0xd76, 0xd78, 0xd7a, 0xd7c, 0xd7e, 0xd80, 0xd82, 0xd84, 0xd86, 0xd88, 0xd8a, 0xd8c, 0xd8e, 0xd90, 0xd92, 0xd94, 0xd96, 0xd98, 0xd9a, 0xd9c, 0xd9e, 0xda0, 0xda2, 0xda4, 0xda6, 0xda8, 0xdaa, 0xdac, 0xdae, 0xdb0, 0xdb2, 0xdb4, 0xdb6, 0xdb8, 0xdba, 0xdbc, 0xdbe, 0xdc0, 0xdc2, 0xdc4, 0xdc6, 0xdc8, 0xdca, 0xdcc, 0xdce, 0xdd0, 0xdd2, 0xdd4, 0xdd6, 0xdd8, 0xdda, 0xddc, 0xdde, 0xde0, 0xde2, 0xde4, 0xde6, 0xde8, 0xdea, 0xdec, 0xdee, 0xdf0, 0xdf2, 0xdf4, 0xdf6, 0xdf8, 0xdfa, 0xdfc, 0xdfe, 0xe00, 0xe02, 0xe04, 0xe06, 0xe08, 0xe0a, 0xe0c, 0xe0e, 0xe10, 0xe12, 0xe14, 0xe16, 0xe18, 0xe1a, 0xe1c, 0xe1e, 0xe20, 0xe22, 0xe24, 0xe26, 0xe28, 0xe2a, 0xe2c, 0xe2e, 0xe30, 0xe32, 0xe34, 0xe36, 0xe38, 0xe3a, 0xe3c, 0xe3e, 0xe40, 0xe42, 0xe44, 0xe46, 0xe48, 0xe4a, 0xe4c, 0xe4e, 0xe50, 0xe52, 0xe54, 0xe56, 0xe58, 0xe5a, 0xe5c, 0xe5e, 0xe60, 0xe62, 0xe64, 0xe66, 0xe68, 0xe6a, 0xe6c, 0xe6e, 0xe70, 0xe72, 0xe74, 0xe76, 0xe78, 0xe7a, 0xe7c, 0xe7e, 0xe80, 0xe82, 0xe84, 0xe86, 0xe88, 0xe8a, 0xe8c, 0xe8e, 0xe90, 0xe92, 0xe94, 0xe96, 0xe98, 0xe9a, 0xe9c, 0xe9e, 0xea0, 0xea2, 0xea4, 0xea6, 0xea8, 0xeaa, 0xeac, 0xeae, 0xeb0, 0xeb2, 0xeb4, 0xeb6, 0xeb8, 0xeba, 0xebc, 0xebe, 0xec0, 0xec2, 0xec4, 0xec6, 0xec8, 0xeca, 0xecc, 0xece, 0xed0, 0xed2, 0xed4, 0xed6, 0xed8, 0xeda, 0xedc, 0xede, 0xee0, 0xee2, 0xee4, 0xee6, 0xee8, 0xeea, 0xeec, 0xeee, 0xef0, 0xef2, 0xef4, 0xef6, 0xef8, 0xefa, 0xefc, 0xefe, 0xf00, 0xf02, 0xf04, 0xf06, 0xf08, 0xf0a, 0xf0c, 0xf0e, 0xf10, 0xf12, 0xf14, 0xf16, 0xf18, 0xf1a, 0xf1c, 0xf1e, 0xf20, 0xf22, 0xf24, 0xf26, 0xf28, 0xf2a, 0xf2c, 0xf2e, 0xf30, 0xf32, 0xf34, 0xf36, 0xf38, 0xf3a, 0xf3c, 0xf3e, 0xf40, 0xf42, 0xf44, 0xf46, 0xf48, 0xf4a, 0xf4c, 0xf4e, 0xf50, 0xf52, 0xf54, 0xf56, 0xf58, 0xf5a, 0xf5c, 0xf5e, 0xf60, 0xf62, 0xf64, 0xf66, 0xf68, 0xf6a, 0xf6c, 0xf6e, 0xf70, 0xf72, 0xf74, 0xf76, 0xf78, 0xf7a, 0xf7c, 0xf7e, 0xf80, 0xf82, 0xf84, 0xf86, 0xf88, 0xf8a, 0xf8c, 0xf8e, 0xf90, 0xf92, 0xf94, 0xf96, 0xf98, 0xf9a, 0xf9c, 0xf9e, 0xfa0, 0xfa2, 0xfa4, 0xfa6, 0xfa8, 0xfaa, 0xfac, 0xfae, 0xfb0, 0xfb2, 0xfb4, 0xfb6, 0xfb8, 0xfba, 0xfbc, 0xfbe, 0xfc0, 0xfc2, 0xfc4, 0xfc6, 0xfc8, 0xfca, 0xfcc, 0xfce, 0xfd0, 0xfd2, 0xfd4, 0xfd6, 0xfd8, 0xfda, 0xfdc, 0xfde, 0xfe0, 0xfe2, 0xfe4, 0xfe6, 0xfe8, 0xfea, 0xfec, 0xfee, 0xff0, 0xff2, 0xff4, 0xff6, 0xff8, 0xffa, 0xffc, 0xffe, 0xffe, 0xffc, 0xffa, 0xff8, 0xff6, 0xff4, 0xff2, 0xff0, 0xfee, 0xfec, 0xfea, 0xfe8, 0xfe6, 0xfe4, 0xfe2, 0xfe0, 0xfde, 0xfdc, 0xfda, 0xfd8, 0xfd6, 0xfd4, 0xfd2, 0xfd0, 0xfce, 0xfcc, 0xfca, 0xfc8, 0xfc6, 0xfc4, 0xfc2, 0xfc0, 0xfbe, 0xfbc, 0xfba, 0xfb8, 0xfb6, 0xfb4, 0xfb2, 0xfb0, 0xfae, 0xfac, 0xfaa, 0xfa8, 0xfa6, 0xfa4, 0xfa2, 0xfa0, 0xf9e, 0xf9c, 0xf9a, 0xf98, 0xf96, 0xf94, 0xf92, 0xf90, 0xf8e, 0xf8c, 0xf8a, 0xf88, 0xf86, 0xf84, 0xf82, 0xf80, 0xf7e, 0xf7c, 0xf7a, 0xf78, 0xf76, 0xf74, 0xf72, 0xf70, 0xf6e, 0xf6c, 0xf6a, 0xf68, 0xf66, 0xf64, 0xf62, 0xf60, 0xf5e, 0xf5c, 0xf5a, 0xf58, 0xf56, 0xf54, 0xf52, 0xf50, 0xf4e, 0xf4c, 0xf4a, 0xf48, 0xf46, 0xf44, 0xf42, 0xf40, 0xf3e, 0xf3c, 0xf3a, 0xf38, 0xf36, 0xf34, 0xf32, 0xf30, 0xf2e, 0xf2c, 0xf2a, 0xf28, 0xf26, 0xf24, 0xf22, 0xf20, 0xf1e, 0xf1c, 0xf1a, 0xf18, 0xf16, 0xf14, 0xf12, 0xf10, 0xf0e, 0xf0c, 0xf0a, 0xf08, 0xf06, 0xf04, 0xf02, 0xf00, 0xefe, 0xefc, 0xefa, 0xef8, 0xef6, 0xef4, 0xef2, 0xef0, 0xeee, 0xeec, 0xeea, 0xee8, 0xee6, 0xee4, 0xee2, 0xee0, 0xede, 0xedc, 0xeda, 0xed8, 0xed6, 0xed4, 0xed2, 0xed0, 0xece, 0xecc, 0xeca, 0xec8, 0xec6, 0xec4, 0xec2, 0xec0, 0xebe, 0xebc, 0xeba, 0xeb8, 0xeb6, 0xeb4, 0xeb2, 0xeb0, 0xeae, 0xeac, 0xeaa, 0xea8, 0xea6, 0xea4, 0xea2, 0xea0, 0xe9e, 0xe9c, 0xe9a, 0xe98, 0xe96, 0xe94, 0xe92, 0xe90, 0xe8e, 0xe8c, 0xe8a, 0xe88, 0xe86, 0xe84, 0xe82, 0xe80, 0xe7e, 0xe7c, 0xe7a, 0xe78, 0xe76, 0xe74, 0xe72, 0xe70, 0xe6e, 0xe6c, 0xe6a, 0xe68, 0xe66, 0xe64, 0xe62, 0xe60, 0xe5e, 0xe5c, 0xe5a, 0xe58, 0xe56, 0xe54, 0xe52, 0xe50, 0xe4e, 0xe4c, 0xe4a, 0xe48, 0xe46, 0xe44, 0xe42, 0xe40, 0xe3e, 0xe3c, 0xe3a, 0xe38, 0xe36, 0xe34, 0xe32, 0xe30, 0xe2e, 0xe2c, 0xe2a, 0xe28, 0xe26, 0xe24, 0xe22, 0xe20, 0xe1e, 0xe1c, 0xe1a, 0xe18, 0xe16, 0xe14, 0xe12, 0xe10, 0xe0e, 0xe0c, 0xe0a, 0xe08, 0xe06, 0xe04, 0xe02, 0xe00, 0xdfe, 0xdfc, 0xdfa, 0xdf8, 0xdf6, 0xdf4, 0xdf2, 0xdf0, 0xdee, 0xdec, 0xdea, 0xde8, 0xde6, 0xde4, 0xde2, 0xde0, 0xdde, 0xddc, 0xdda, 0xdd8, 0xdd6, 0xdd4, 0xdd2, 0xdd0, 0xdce, 0xdcc, 0xdca, 0xdc8, 0xdc6, 0xdc4, 0xdc2, 0xdc0, 0xdbe, 0xdbc, 0xdba, 0xdb8, 0xdb6, 0xdb4, 0xdb2, 0xdb0, 0xdae, 0xdac, 0xdaa, 0xda8, 0xda6, 0xda4, 0xda2, 0xda0, 0xd9e, 0xd9c, 0xd9a, 0xd98, 0xd96, 0xd94, 0xd92, 0xd90, 0xd8e, 0xd8c, 0xd8a, 0xd88, 0xd86, 0xd84, 0xd82, 0xd80, 0xd7e, 0xd7c, 0xd7a, 0xd78, 0xd76, 0xd74, 0xd72, 0xd70, 0xd6e, 0xd6c, 0xd6a, 0xd68, 0xd66, 0xd64, 0xd62, 0xd60, 0xd5e, 0xd5c, 0xd5a, 0xd58, 0xd56, 0xd54, 0xd52, 0xd50, 0xd4e, 0xd4c, 0xd4a, 0xd48, 0xd46, 0xd44, 0xd42, 0xd40, 0xd3e, 0xd3c, 0xd3a, 0xd38, 0xd36, 0xd34, 0xd32, 0xd30, 0xd2e, 0xd2c, 0xd2a, 0xd28, 0xd26, 0xd24, 0xd22, 0xd20, 0xd1e, 0xd1c, 0xd1a, 0xd18, 0xd16, 0xd14, 0xd12, 0xd10, 0xd0e, 0xd0c, 0xd0a, 0xd08, 0xd06, 0xd04, 0xd02, 0xd00, 0xcfe, 0xcfc, 0xcfa, 0xcf8, 0xcf6, 0xcf4, 0xcf2, 0xcf0, 0xcee, 0xcec, 0xcea, 0xce8, 0xce6, 0xce4, 0xce2, 0xce0, 0xcde, 0xcdc, 0xcda, 0xcd8, 0xcd6, 0xcd4, 0xcd2, 0xcd0, 0xcce, 0xccc, 0xcca, 0xcc8, 0xcc6, 0xcc4, 0xcc2, 0xcc0, 0xcbe, 0xcbc, 0xcba, 0xcb8, 0xcb6, 0xcb4, 0xcb2, 0xcb0, 0xcae, 0xcac, 0xcaa, 0xca8, 0xca6, 0xca4, 0xca2, 0xca0, 0xc9e, 0xc9c, 0xc9a, 0xc98, 0xc96, 0xc94, 0xc92, 0xc90, 0xc8e, 0xc8c, 0xc8a, 0xc88, 0xc86, 0xc84, 0xc82, 0xc80, 0xc7e, 0xc7c, 0xc7a, 0xc78, 0xc76, 0xc74, 0xc72, 0xc70, 0xc6e, 0xc6c, 0xc6a, 0xc68, 0xc66, 0xc64, 0xc62, 0xc60, 0xc5e, 0xc5c, 0xc5a, 0xc58, 0xc56, 0xc54, 0xc52, 0xc50, 0xc4e, 0xc4c, 0xc4a, 0xc48, 0xc46, 0xc44, 0xc42, 0xc40, 0xc3e, 0xc3c, 0xc3a, 0xc38, 0xc36, 0xc34, 0xc32, 0xc30, 0xc2e, 0xc2c, 0xc2a, 0xc28, 0xc26, 0xc24, 0xc22, 0xc20, 0xc1e, 0xc1c, 0xc1a, 0xc18, 0xc16, 0xc14, 0xc12, 0xc10, 0xc0e, 0xc0c, 0xc0a, 0xc08, 0xc06, 0xc04, 0xc02, 0xc00, 0xbfe, 0xbfc, 0xbfa, 0xbf8, 0xbf6, 0xbf4, 0xbf2, 0xbf0, 0xbee, 0xbec, 0xbea, 0xbe8, 0xbe6, 0xbe4, 0xbe2, 0xbe0, 0xbde, 0xbdc, 0xbda, 0xbd8, 0xbd6, 0xbd4, 0xbd2, 0xbd0, 0xbce, 0xbcc, 0xbca, 0xbc8, 0xbc6, 0xbc4, 0xbc2, 0xbc0, 0xbbe, 0xbbc, 0xbba, 0xbb8, 0xbb6, 0xbb4, 0xbb2, 0xbb0, 0xbae, 0xbac, 0xbaa, 0xba8, 0xba6, 0xba4, 0xba2, 0xba0, 0xb9e, 0xb9c, 0xb9a, 0xb98, 0xb96, 0xb94, 0xb92, 0xb90, 0xb8e, 0xb8c, 0xb8a, 0xb88, 0xb86, 0xb84, 0xb82, 0xb80, 0xb7e, 0xb7c, 0xb7a, 0xb78, 0xb76, 0xb74, 0xb72, 0xb70, 0xb6e, 0xb6c, 0xb6a, 0xb68, 0xb66, 0xb64, 0xb62, 0xb60, 0xb5e, 0xb5c, 0xb5a, 0xb58, 0xb56, 0xb54, 0xb52, 0xb50, 0xb4e, 0xb4c, 0xb4a, 0xb48, 0xb46, 0xb44, 0xb42, 0xb40, 0xb3e, 0xb3c, 0xb3a, 0xb38, 0xb36, 0xb34, 0xb32, 0xb30, 0xb2e, 0xb2c, 0xb2a, 0xb28, 0xb26, 0xb24, 0xb22, 0xb20, 0xb1e, 0xb1c, 0xb1a, 0xb18, 0xb16, 0xb14, 0xb12, 0xb10, 0xb0e, 0xb0c, 0xb0a, 0xb08, 0xb06, 0xb04, 0xb02, 0xb00, 0xafe, 0xafc, 0xafa, 0xaf8, 0xaf6, 0xaf4, 0xaf2, 0xaf0, 0xaee, 0xaec, 0xaea, 0xae8, 0xae6, 0xae4, 0xae2, 0xae0, 0xade, 0xadc, 0xada, 0xad8, 0xad6, 0xad4, 0xad2, 0xad0, 0xace, 0xacc, 0xaca, 0xac8, 0xac6, 0xac4, 0xac2, 0xac0, 0xabe, 0xabc, 0xaba, 0xab8, 0xab6, 0xab4, 0xab2, 0xab0, 0xaae, 0xaac, 0xaaa, 0xaa8, 0xaa6, 0xaa4, 0xaa2, 0xaa0, 0xa9e, 0xa9c, 0xa9a, 0xa98, 0xa96, 0xa94, 0xa92, 0xa90, 0xa8e, 0xa8c, 0xa8a, 0xa88, 0xa86, 0xa84, 0xa82, 0xa80, 0xa7e, 0xa7c, 0xa7a, 0xa78, 0xa76, 0xa74, 0xa72, 0xa70, 0xa6e, 0xa6c, 0xa6a, 0xa68, 0xa66, 0xa64, 0xa62, 0xa60, 0xa5e, 0xa5c, 0xa5a, 0xa58, 0xa56, 0xa54, 0xa52, 0xa50, 0xa4e, 0xa4c, 0xa4a, 0xa48, 0xa46, 0xa44, 0xa42, 0xa40, 0xa3e, 0xa3c, 0xa3a, 0xa38, 0xa36, 0xa34, 0xa32, 0xa30, 0xa2e, 0xa2c, 0xa2a, 0xa28, 0xa26, 0xa24, 0xa22, 0xa20, 0xa1e, 0xa1c, 0xa1a, 0xa18, 0xa16, 0xa14, 0xa12, 0xa10, 0xa0e, 0xa0c, 0xa0a, 0xa08, 0xa06, 0xa04, 0xa02, 0xa00, 0x9fe, 0x9fc, 0x9fa, 0x9f8, 0x9f6, 0x9f4, 0x9f2, 0x9f0, 0x9ee, 0x9ec, 0x9ea, 0x9e8, 0x9e6, 0x9e4, 0x9e2, 0x9e0, 0x9de, 0x9dc, 0x9da, 0x9d8, 0x9d6, 0x9d4, 0x9d2, 0x9d0, 0x9ce, 0x9cc, 0x9ca, 0x9c8, 0x9c6, 0x9c4, 0x9c2, 0x9c0, 0x9be, 0x9bc, 0x9ba, 0x9b8, 0x9b6, 0x9b4, 0x9b2, 0x9b0, 0x9ae, 0x9ac, 0x9aa, 0x9a8, 0x9a6, 0x9a4, 0x9a2, 0x9a0, 0x99e, 0x99c, 0x99a, 0x998, 0x996, 0x994, 0x992, 0x990, 0x98e, 0x98c, 0x98a, 0x988, 0x986, 0x984, 0x982, 0x980, 0x97e, 0x97c, 0x97a, 0x978, 0x976, 0x974, 0x972, 0x970, 0x96e, 0x96c, 0x96a, 0x968, 0x966, 0x964, 0x962, 0x960, 0x95e, 0x95c, 0x95a, 0x958, 0x956, 0x954, 0x952, 0x950, 0x94e, 0x94c, 0x94a, 0x948, 0x946, 0x944, 0x942, 0x940, 0x93e, 0x93c, 0x93a, 0x938, 0x936, 0x934, 0x932, 0x930, 0x92e, 0x92c, 0x92a, 0x928, 0x926, 0x924, 0x922, 0x920, 0x91e, 0x91c, 0x91a, 0x918, 0x916, 0x914, 0x912, 0x910, 0x90e, 0x90c, 0x90a, 0x908, 0x906, 0x904, 0x902, 0x900, 0x8fe, 0x8fc, 0x8fa, 0x8f8, 0x8f6, 0x8f4, 0x8f2, 0x8f0, 0x8ee, 0x8ec, 0x8ea, 0x8e8, 0x8e6, 0x8e4, 0x8e2, 0x8e0, 0x8de, 0x8dc, 0x8da, 0x8d8, 0x8d6, 0x8d4, 0x8d2, 0x8d0, 0x8ce, 0x8cc, 0x8ca, 0x8c8, 0x8c6, 0x8c4, 0x8c2, 0x8c0, 0x8be, 0x8bc, 0x8ba, 0x8b8, 0x8b6, 0x8b4, 0x8b2, 0x8b0, 0x8ae, 0x8ac, 0x8aa, 0x8a8, 0x8a6, 0x8a4, 0x8a2, 0x8a0, 0x89e, 0x89c, 0x89a, 0x898, 0x896, 0x894, 0x892, 0x890, 0x88e, 0x88c, 0x88a, 0x888, 0x886, 0x884, 0x882, 0x880, 0x87e, 0x87c, 0x87a, 0x878, 0x876, 0x874, 0x872, 0x870, 0x86e, 0x86c, 0x86a, 0x868, 0x866, 0x864, 0x862, 0x860, 0x85e, 0x85c, 0x85a, 0x858, 0x856, 0x854, 0x852, 0x850, 0x84e, 0x84c, 0x84a, 0x848, 0x846, 0x844, 0x842, 0x840, 0x83e, 0x83c, 0x83a, 0x838, 0x836, 0x834, 0x832, 0x830, 0x82e, 0x82c, 0x82a, 0x828, 0x826, 0x824, 0x822, 0x820, 0x81e, 0x81c, 0x81a, 0x818, 0x816, 0x814, 0x812, 0x810, 0x80e, 0x80c, 0x80a, 0x808, 0x806, 0x804, 0x802, 0x800, 0x7fe, 0x7fc, 0x7fa, 0x7f8, 0x7f6, 0x7f4, 0x7f2, 0x7f0, 0x7ee, 0x7ec, 0x7ea, 0x7e8, 0x7e6, 0x7e4, 0x7e2, 0x7e0, 0x7de, 0x7dc, 0x7da, 0x7d8, 0x7d6, 0x7d4, 0x7d2, 0x7d0, 0x7ce, 0x7cc, 0x7ca, 0x7c8, 0x7c6, 0x7c4, 0x7c2, 0x7c0, 0x7be, 0x7bc, 0x7ba, 0x7b8, 0x7b6, 0x7b4, 0x7b2, 0x7b0, 0x7ae, 0x7ac, 0x7aa, 0x7a8, 0x7a6, 0x7a4, 0x7a2, 0x7a0, 0x79e, 0x79c, 0x79a, 0x798, 0x796, 0x794, 0x792, 0x790, 0x78e, 0x78c, 0x78a, 0x788, 0x786, 0x784, 0x782, 0x780, 0x77e, 0x77c, 0x77a, 0x778, 0x776, 0x774, 0x772, 0x770, 0x76e, 0x76c, 0x76a, 0x768, 0x766, 0x764, 0x762, 0x760, 0x75e, 0x75c, 0x75a, 0x758, 0x756, 0x754, 0x752, 0x750, 0x74e, 0x74c, 0x74a, 0x748, 0x746, 0x744, 0x742, 0x740, 0x73e, 0x73c, 0x73a, 0x738, 0x736, 0x734, 0x732, 0x730, 0x72e, 0x72c, 0x72a, 0x728, 0x726, 0x724, 0x722, 0x720, 0x71e, 0x71c, 0x71a, 0x718, 0x716, 0x714, 0x712, 0x710, 0x70e, 0x70c, 0x70a, 0x708, 0x706, 0x704, 0x702, 0x700, 0x6fe, 0x6fc, 0x6fa, 0x6f8, 0x6f6, 0x6f4, 0x6f2, 0x6f0, 0x6ee, 0x6ec, 0x6ea, 0x6e8, 0x6e6, 0x6e4, 0x6e2, 0x6e0, 0x6de, 0x6dc, 0x6da, 0x6d8, 0x6d6, 0x6d4, 0x6d2, 0x6d0, 0x6ce, 0x6cc, 0x6ca, 0x6c8, 0x6c6, 0x6c4, 0x6c2, 0x6c0, 0x6be, 0x6bc, 0x6ba, 0x6b8, 0x6b6, 0x6b4, 0x6b2, 0x6b0, 0x6ae, 0x6ac, 0x6aa, 0x6a8, 0x6a6, 0x6a4, 0x6a2, 0x6a0, 0x69e, 0x69c, 0x69a, 0x698, 0x696, 0x694, 0x692, 0x690, 0x68e, 0x68c, 0x68a, 0x688, 0x686, 0x684, 0x682, 0x680, 0x67e, 0x67c, 0x67a, 0x678, 0x676, 0x674, 0x672, 0x670, 0x66e, 0x66c, 0x66a, 0x668, 0x666, 0x664, 0x662, 0x660, 0x65e, 0x65c, 0x65a, 0x658, 0x656, 0x654, 0x652, 0x650, 0x64e, 0x64c, 0x64a, 0x648, 0x646, 0x644, 0x642, 0x640, 0x63e, 0x63c, 0x63a, 0x638, 0x636, 0x634, 0x632, 0x630, 0x62e, 0x62c, 0x62a, 0x628, 0x626, 0x624, 0x622, 0x620, 0x61e, 0x61c, 0x61a, 0x618, 0x616, 0x614, 0x612, 0x610, 0x60e, 0x60c, 0x60a, 0x608, 0x606, 0x604, 0x602, 0x600, 0x5fe, 0x5fc, 0x5fa, 0x5f8, 0x5f6, 0x5f4, 0x5f2, 0x5f0, 0x5ee, 0x5ec, 0x5ea, 0x5e8, 0x5e6, 0x5e4, 0x5e2, 0x5e0, 0x5de, 0x5dc, 0x5da, 0x5d8, 0x5d6, 0x5d4, 0x5d2, 0x5d0, 0x5ce, 0x5cc, 0x5ca, 0x5c8, 0x5c6, 0x5c4, 0x5c2, 0x5c0, 0x5be, 0x5bc, 0x5ba, 0x5b8, 0x5b6, 0x5b4, 0x5b2, 0x5b0, 0x5ae, 0x5ac, 0x5aa, 0x5a8, 0x5a6, 0x5a4, 0x5a2, 0x5a0, 0x59e, 0x59c, 0x59a, 0x598, 0x596, 0x594, 0x592, 0x590, 0x58e, 0x58c, 0x58a, 0x588, 0x586, 0x584, 0x582, 0x580, 0x57e, 0x57c, 0x57a, 0x578, 0x576, 0x574, 0x572, 0x570, 0x56e, 0x56c, 0x56a, 0x568, 0x566, 0x564, 0x562, 0x560, 0x55e, 0x55c, 0x55a, 0x558, 0x556, 0x554, 0x552, 0x550, 0x54e, 0x54c, 0x54a, 0x548, 0x546, 0x544, 0x542, 0x540, 0x53e, 0x53c, 0x53a, 0x538, 0x536, 0x534, 0x532, 0x530, 0x52e, 0x52c, 0x52a, 0x528, 0x526, 0x524, 0x522, 0x520, 0x51e, 0x51c, 0x51a, 0x518, 0x516, 0x514, 0x512, 0x510, 0x50e, 0x50c, 0x50a, 0x508, 0x506, 0x504, 0x502, 0x500, 0x4fe, 0x4fc, 0x4fa, 0x4f8, 0x4f6, 0x4f4, 0x4f2, 0x4f0, 0x4ee, 0x4ec, 0x4ea, 0x4e8, 0x4e6, 0x4e4, 0x4e2, 0x4e0, 0x4de, 0x4dc, 0x4da, 0x4d8, 0x4d6, 0x4d4, 0x4d2, 0x4d0, 0x4ce, 0x4cc, 0x4ca, 0x4c8, 0x4c6, 0x4c4, 0x4c2, 0x4c0, 0x4be, 0x4bc, 0x4ba, 0x4b8, 0x4b6, 0x4b4, 0x4b2, 0x4b0, 0x4ae, 0x4ac, 0x4aa, 0x4a8, 0x4a6, 0x4a4, 0x4a2, 0x4a0, 0x49e, 0x49c, 0x49a, 0x498, 0x496, 0x494, 0x492, 0x490, 0x48e, 0x48c, 0x48a, 0x488, 0x486, 0x484, 0x482, 0x480, 0x47e, 0x47c, 0x47a, 0x478, 0x476, 0x474, 0x472, 0x470, 0x46e, 0x46c, 0x46a, 0x468, 0x466, 0x464, 0x462, 0x460, 0x45e, 0x45c, 0x45a, 0x458, 0x456, 0x454, 0x452, 0x450, 0x44e, 0x44c, 0x44a, 0x448, 0x446, 0x444, 0x442, 0x440, 0x43e, 0x43c, 0x43a, 0x438, 0x436, 0x434, 0x432, 0x430, 0x42e, 0x42c, 0x42a, 0x428, 0x426, 0x424, 0x422, 0x420, 0x41e, 0x41c, 0x41a, 0x418, 0x416, 0x414, 0x412, 0x410, 0x40e, 0x40c, 0x40a, 0x408, 0x406, 0x404, 0x402, 0x400, 0x3fe, 0x3fc, 0x3fa, 0x3f8, 0x3f6, 0x3f4, 0x3f2, 0x3f0, 0x3ee, 0x3ec, 0x3ea, 0x3e8, 0x3e6, 0x3e4, 0x3e2, 0x3e0, 0x3de, 0x3dc, 0x3da, 0x3d8, 0x3d6, 0x3d4, 0x3d2, 0x3d0, 0x3ce, 0x3cc, 0x3ca, 0x3c8, 0x3c6, 0x3c4, 0x3c2, 0x3c0, 0x3be, 0x3bc, 0x3ba, 0x3b8, 0x3b6, 0x3b4, 0x3b2, 0x3b0, 0x3ae, 0x3ac, 0x3aa, 0x3a8, 0x3a6, 0x3a4, 0x3a2, 0x3a0, 0x39e, 0x39c, 0x39a, 0x398, 0x396, 0x394, 0x392, 0x390, 0x38e, 0x38c, 0x38a, 0x388, 0x386, 0x384, 0x382, 0x380, 0x37e, 0x37c, 0x37a, 0x378, 0x376, 0x374, 0x372, 0x370, 0x36e, 0x36c, 0x36a, 0x368, 0x366, 0x364, 0x362, 0x360, 0x35e, 0x35c, 0x35a, 0x358, 0x356, 0x354, 0x352, 0x350, 0x34e, 0x34c, 0x34a, 0x348, 0x346, 0x344, 0x342, 0x340, 0x33e, 0x33c, 0x33a, 0x338, 0x336, 0x334, 0x332, 0x330, 0x32e, 0x32c, 0x32a, 0x328, 0x326, 0x324, 0x322, 0x320, 0x31e, 0x31c, 0x31a, 0x318, 0x316, 0x314, 0x312, 0x310, 0x30e, 0x30c, 0x30a, 0x308, 0x306, 0x304, 0x302, 0x300, 0x2fe, 0x2fc, 0x2fa, 0x2f8, 0x2f6, 0x2f4, 0x2f2, 0x2f0, 0x2ee, 0x2ec, 0x2ea, 0x2e8, 0x2e6, 0x2e4, 0x2e2, 0x2e0, 0x2de, 0x2dc, 0x2da, 0x2d8, 0x2d6, 0x2d4, 0x2d2, 0x2d0, 0x2ce, 0x2cc, 0x2ca, 0x2c8, 0x2c6, 0x2c4, 0x2c2, 0x2c0, 0x2be, 0x2bc, 0x2ba, 0x2b8, 0x2b6, 0x2b4, 0x2b2, 0x2b0, 0x2ae, 0x2ac, 0x2aa, 0x2a8, 0x2a6, 0x2a4, 0x2a2, 0x2a0, 0x29e, 0x29c, 0x29a, 0x298, 0x296, 0x294, 0x292, 0x290, 0x28e, 0x28c, 0x28a, 0x288, 0x286, 0x284, 0x282, 0x280, 0x27e, 0x27c, 0x27a, 0x278, 0x276, 0x274, 0x272, 0x270, 0x26e, 0x26c, 0x26a, 0x268, 0x266, 0x264, 0x262, 0x260, 0x25e, 0x25c, 0x25a, 0x258, 0x256, 0x254, 0x252, 0x250, 0x24e, 0x24c, 0x24a, 0x248, 0x246, 0x244, 0x242, 0x240, 0x23e, 0x23c, 0x23a, 0x238, 0x236, 0x234, 0x232, 0x230, 0x22e, 0x22c, 0x22a, 0x228, 0x226, 0x224, 0x222, 0x220, 0x21e, 0x21c, 0x21a, 0x218, 0x216, 0x214, 0x212, 0x210, 0x20e, 0x20c, 0x20a, 0x208, 0x206, 0x204, 0x202, 0x200, 0x1fe, 0x1fc, 0x1fa, 0x1f8, 0x1f6, 0x1f4, 0x1f2, 0x1f0, 0x1ee, 0x1ec, 0x1ea, 0x1e8, 0x1e6, 0x1e4, 0x1e2, 0x1e0, 0x1de, 0x1dc, 0x1da, 0x1d8, 0x1d6, 0x1d4, 0x1d2, 0x1d0, 0x1ce, 0x1cc, 0x1ca, 0x1c8, 0x1c6, 0x1c4, 0x1c2, 0x1c0, 0x1be, 0x1bc, 0x1ba, 0x1b8, 0x1b6, 0x1b4, 0x1b2, 0x1b0, 0x1ae, 0x1ac, 0x1aa, 0x1a8, 0x1a6, 0x1a4, 0x1a2, 0x1a0, 0x19e, 0x19c, 0x19a, 0x198, 0x196, 0x194, 0x192, 0x190, 0x18e, 0x18c, 0x18a, 0x188, 0x186, 0x184, 0x182, 0x180, 0x17e, 0x17c, 0x17a, 0x178, 0x176, 0x174, 0x172, 0x170, 0x16e, 0x16c, 0x16a, 0x168, 0x166, 0x164, 0x162, 0x160, 0x15e, 0x15c, 0x15a, 0x158, 0x156, 0x154, 0x152, 0x150, 0x14e, 0x14c, 0x14a, 0x148, 0x146, 0x144, 0x142, 0x140, 0x13e, 0x13c, 0x13a, 0x138, 0x136, 0x134, 0x132, 0x130, 0x12e, 0x12c, 0x12a, 0x128, 0x126, 0x124, 0x122, 0x120, 0x11e, 0x11c, 0x11a, 0x118, 0x116, 0x114, 0x112, 0x110, 0x10e, 0x10c, 0x10a, 0x108, 0x106, 0x104, 0x102, 0x100, 0x0fe, 0x0fc, 0x0fa, 0x0f8, 0x0f6, 0x0f4, 0x0f2, 0x0f0, 0x0ee, 0x0ec, 0x0ea, 0x0e8, 0x0e6, 0x0e4, 0x0e2, 0x0e0, 0x0de, 0x0dc, 0x0da, 0x0d8, 0x0d6, 0x0d4, 0x0d2, 0x0d0, 0x0ce, 0x0cc, 0x0ca, 0x0c8, 0x0c6, 0x0c4, 0x0c2, 0x0c0, 0x0be, 0x0bc, 0x0ba, 0x0b8, 0x0b6, 0x0b4, 0x0b2, 0x0b0, 0x0ae, 0x0ac, 0x0aa, 0x0a8, 0x0a6, 0x0a4, 0x0a2, 0x0a0, 0x09e, 0x09c, 0x09a, 0x098, 0x096, 0x094, 0x092, 0x090, 0x08e, 0x08c, 0x08a, 0x088, 0x086, 0x084, 0x082, 0x080, 0x07e, 0x07c, 0x07a, 0x078, 0x076, 0x074, 0x072, 0x070, 0x06e, 0x06c, 0x06a, 0x068, 0x066, 0x064, 0x062, 0x060, 0x05e, 0x05c, 0x05a, 0x058, 0x056, 0x054, 0x052, 0x050, 0x04e, 0x04c, 0x04a, 0x048, 0x046, 0x044, 0x042, 0x040, 0x03e, 0x03c, 0x03a, 0x038, 0x036, 0x034, 0x032, 0x030, 0x02e, 0x02c, 0x02a, 0x028, 0x026, 0x024, 0x022, 0x020, 0x01e, 0x01c, 0x01a, 0x018, 0x016, 0x014, 0x012, 0x010, 0x00e, 0x00c, 0x00a, 0x008, 0x006, 0x004, 0x002, 0x000 }, + new[] { 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008, 0x009, 0x00a, 0x00b, 0x00c, 0x00d, 0x00e, 0x00f, 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, 0x018, 0x019, 0x01a, 0x01b, 0x01c, 0x01d, 0x01e, 0x01f, 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, 0x028, 0x029, 0x02a, 0x02b, 0x02c, 0x02d, 0x02e, 0x02f, 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, 0x038, 0x039, 0x03a, 0x03b, 0x03c, 0x03d, 0x03e, 0x03f, 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, 0x048, 0x049, 0x04a, 0x04b, 0x04c, 0x04d, 0x04e, 0x04f, 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, 0x058, 0x059, 0x05a, 0x05b, 0x05c, 0x05d, 0x05e, 0x05f, 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, 0x068, 0x069, 0x06a, 0x06b, 0x06c, 0x06d, 0x06e, 0x06f, 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, 0x078, 0x079, 0x07a, 0x07b, 0x07c, 0x07d, 0x07e, 0x07f, 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, 0x088, 0x089, 0x08a, 0x08b, 0x08c, 0x08d, 0x08e, 0x08f, 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097, 0x098, 0x099, 0x09a, 0x09b, 0x09c, 0x09d, 0x09e, 0x09f, 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7, 0x0a8, 0x0a9, 0x0aa, 0x0ab, 0x0ac, 0x0ad, 0x0ae, 0x0af, 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7, 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bc, 0x0bd, 0x0be, 0x0bf, 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, 0x0c8, 0x0c9, 0x0ca, 0x0cb, 0x0cc, 0x0cd, 0x0ce, 0x0cf, 0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, 0x0d8, 0x0d9, 0x0da, 0x0db, 0x0dc, 0x0dd, 0x0de, 0x0df, 0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7, 0x0e8, 0x0e9, 0x0ea, 0x0eb, 0x0ec, 0x0ed, 0x0ee, 0x0ef, 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7, 0x0f8, 0x0f9, 0x0fa, 0x0fb, 0x0fc, 0x0fd, 0x0fe, 0x0ff, 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10a, 0x10b, 0x10c, 0x10d, 0x10e, 0x10f, 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, 0x118, 0x119, 0x11a, 0x11b, 0x11c, 0x11d, 0x11e, 0x11f, 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, 0x128, 0x129, 0x12a, 0x12b, 0x12c, 0x12d, 0x12e, 0x12f, 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, 0x138, 0x139, 0x13a, 0x13b, 0x13c, 0x13d, 0x13e, 0x13f, 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, 0x148, 0x149, 0x14a, 0x14b, 0x14c, 0x14d, 0x14e, 0x14f, 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, 0x158, 0x159, 0x15a, 0x15b, 0x15c, 0x15d, 0x15e, 0x15f, 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, 0x168, 0x169, 0x16a, 0x16b, 0x16c, 0x16d, 0x16e, 0x16f, 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, 0x178, 0x179, 0x17a, 0x17b, 0x17c, 0x17d, 0x17e, 0x17f, 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, 0x188, 0x189, 0x18a, 0x18b, 0x18c, 0x18d, 0x18e, 0x18f, 0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, 0x198, 0x199, 0x19a, 0x19b, 0x19c, 0x19d, 0x19e, 0x19f, 0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4, 0x1a5, 0x1a6, 0x1a7, 0x1a8, 0x1a9, 0x1aa, 0x1ab, 0x1ac, 0x1ad, 0x1ae, 0x1af, 0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4, 0x1b5, 0x1b6, 0x1b7, 0x1b8, 0x1b9, 0x1ba, 0x1bb, 0x1bc, 0x1bd, 0x1be, 0x1bf, 0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4, 0x1c5, 0x1c6, 0x1c7, 0x1c8, 0x1c9, 0x1ca, 0x1cb, 0x1cc, 0x1cd, 0x1ce, 0x1cf, 0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4, 0x1d5, 0x1d6, 0x1d7, 0x1d8, 0x1d9, 0x1da, 0x1db, 0x1dc, 0x1dd, 0x1de, 0x1df, 0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4, 0x1e5, 0x1e6, 0x1e7, 0x1e8, 0x1e9, 0x1ea, 0x1eb, 0x1ec, 0x1ed, 0x1ee, 0x1ef, 0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7, 0x1f8, 0x1f9, 0x1fa, 0x1fb, 0x1fc, 0x1fd, 0x1fe, 0x1ff, 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, 0x208, 0x209, 0x20a, 0x20b, 0x20c, 0x20d, 0x20e, 0x20f, 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, 0x218, 0x219, 0x21a, 0x21b, 0x21c, 0x21d, 0x21e, 0x21f, 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, 0x228, 0x229, 0x22a, 0x22b, 0x22c, 0x22d, 0x22e, 0x22f, 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, 0x238, 0x239, 0x23a, 0x23b, 0x23c, 0x23d, 0x23e, 0x23f, 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, 0x248, 0x249, 0x24a, 0x24b, 0x24c, 0x24d, 0x24e, 0x24f, 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, 0x258, 0x259, 0x25a, 0x25b, 0x25c, 0x25d, 0x25e, 0x25f, 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, 0x268, 0x269, 0x26a, 0x26b, 0x26c, 0x26d, 0x26e, 0x26f, 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, 0x278, 0x279, 0x27a, 0x27b, 0x27c, 0x27d, 0x27e, 0x27f, 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287, 0x288, 0x289, 0x28a, 0x28b, 0x28c, 0x28d, 0x28e, 0x28f, 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, 0x298, 0x299, 0x29a, 0x29b, 0x29c, 0x29d, 0x29e, 0x29f, 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7, 0x2a8, 0x2a9, 0x2aa, 0x2ab, 0x2ac, 0x2ad, 0x2ae, 0x2af, 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7, 0x2b8, 0x2b9, 0x2ba, 0x2bb, 0x2bc, 0x2bd, 0x2be, 0x2bf, 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc, 0x2cd, 0x2ce, 0x2cf, 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7, 0x2d8, 0x2d9, 0x2da, 0x2db, 0x2dc, 0x2dd, 0x2de, 0x2df, 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9, 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x2f9, 0x2fa, 0x2fb, 0x2fc, 0x2fd, 0x2fe, 0x2ff, 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, 0x308, 0x309, 0x30a, 0x30b, 0x30c, 0x30d, 0x30e, 0x30f, 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, 0x318, 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, 0x328, 0x329, 0x32a, 0x32b, 0x32c, 0x32d, 0x32e, 0x32f, 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, 0x338, 0x339, 0x33a, 0x33b, 0x33c, 0x33d, 0x33e, 0x33f, 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, 0x348, 0x349, 0x34a, 0x34b, 0x34c, 0x34d, 0x34e, 0x34f, 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, 0x358, 0x359, 0x35a, 0x35b, 0x35c, 0x35d, 0x35e, 0x35f, 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, 0x368, 0x369, 0x36a, 0x36b, 0x36c, 0x36d, 0x36e, 0x36f, 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, 0x378, 0x379, 0x37a, 0x37b, 0x37c, 0x37d, 0x37e, 0x37f, 0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387, 0x388, 0x389, 0x38a, 0x38b, 0x38c, 0x38d, 0x38e, 0x38f, 0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a2, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x3ac, 0x3ad, 0x3ae, 0x3af, 0x3b0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, 0x3b8, 0x3b9, 0x3ba, 0x3bb, 0x3bc, 0x3bd, 0x3be, 0x3bf, 0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3cc, 0x3cd, 0x3ce, 0x3cf, 0x3d0, 0x3d1, 0x3d2, 0x3d3, 0x3d4, 0x3d5, 0x3d6, 0x3d7, 0x3d8, 0x3d9, 0x3da, 0x3db, 0x3dc, 0x3dd, 0x3de, 0x3df, 0x3e0, 0x3e1, 0x3e2, 0x3e3, 0x3e4, 0x3e5, 0x3e6, 0x3e7, 0x3e8, 0x3e9, 0x3ea, 0x3eb, 0x3ec, 0x3ed, 0x3ee, 0x3ef, 0x3f0, 0x3f1, 0x3f2, 0x3f3, 0x3f4, 0x3f5, 0x3f6, 0x3f7, 0x3f8, 0x3f9, 0x3fa, 0x3fb, 0x3fc, 0x3fd, 0x3fe, 0x3ff, 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0x40d, 0x40e, 0x40f, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f, 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45a, 0x45b, 0x45c, 0x45d, 0x45e, 0x45f, 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, 0x468, 0x469, 0x46a, 0x46b, 0x46c, 0x46d, 0x46e, 0x46f, 0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, 0x478, 0x479, 0x47a, 0x47b, 0x47c, 0x47d, 0x47e, 0x47f, 0x480, 0x481, 0x482, 0x483, 0x484, 0x485, 0x486, 0x487, 0x488, 0x489, 0x48a, 0x48b, 0x48c, 0x48d, 0x48e, 0x48f, 0x490, 0x491, 0x492, 0x493, 0x494, 0x495, 0x496, 0x497, 0x498, 0x499, 0x49a, 0x49b, 0x49c, 0x49d, 0x49e, 0x49f, 0x4a0, 0x4a1, 0x4a2, 0x4a3, 0x4a4, 0x4a5, 0x4a6, 0x4a7, 0x4a8, 0x4a9, 0x4aa, 0x4ab, 0x4ac, 0x4ad, 0x4ae, 0x4af, 0x4b0, 0x4b1, 0x4b2, 0x4b3, 0x4b4, 0x4b5, 0x4b6, 0x4b7, 0x4b8, 0x4b9, 0x4ba, 0x4bb, 0x4bc, 0x4bd, 0x4be, 0x4bf, 0x4c0, 0x4c1, 0x4c2, 0x4c3, 0x4c4, 0x4c5, 0x4c6, 0x4c7, 0x4c8, 0x4c9, 0x4ca, 0x4cb, 0x4cc, 0x4cd, 0x4ce, 0x4cf, 0x4d0, 0x4d1, 0x4d2, 0x4d3, 0x4d4, 0x4d5, 0x4d6, 0x4d7, 0x4d8, 0x4d9, 0x4da, 0x4db, 0x4dc, 0x4dd, 0x4de, 0x4df, 0x4e0, 0x4e1, 0x4e2, 0x4e3, 0x4e4, 0x4e5, 0x4e6, 0x4e7, 0x4e8, 0x4e9, 0x4ea, 0x4eb, 0x4ec, 0x4ed, 0x4ee, 0x4ef, 0x4f0, 0x4f1, 0x4f2, 0x4f3, 0x4f4, 0x4f5, 0x4f6, 0x4f7, 0x4f8, 0x4f9, 0x4fa, 0x4fb, 0x4fc, 0x4fd, 0x4fe, 0x4ff, 0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, 0x508, 0x509, 0x50a, 0x50b, 0x50c, 0x50d, 0x50e, 0x50f, 0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, 0x518, 0x519, 0x51a, 0x51b, 0x51c, 0x51d, 0x51e, 0x51f, 0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, 0x528, 0x529, 0x52a, 0x52b, 0x52c, 0x52d, 0x52e, 0x52f, 0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f, 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, 0x558, 0x559, 0x55a, 0x55b, 0x55c, 0x55d, 0x55e, 0x55f, 0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, 0x568, 0x569, 0x56a, 0x56b, 0x56c, 0x56d, 0x56e, 0x56f, 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, 0x578, 0x579, 0x57a, 0x57b, 0x57c, 0x57d, 0x57e, 0x57f, 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0x587, 0x588, 0x589, 0x58a, 0x58b, 0x58c, 0x58d, 0x58e, 0x58f, 0x590, 0x591, 0x592, 0x593, 0x594, 0x595, 0x596, 0x597, 0x598, 0x599, 0x59a, 0x59b, 0x59c, 0x59d, 0x59e, 0x59f, 0x5a0, 0x5a1, 0x5a2, 0x5a3, 0x5a4, 0x5a5, 0x5a6, 0x5a7, 0x5a8, 0x5a9, 0x5aa, 0x5ab, 0x5ac, 0x5ad, 0x5ae, 0x5af, 0x5b0, 0x5b1, 0x5b2, 0x5b3, 0x5b4, 0x5b5, 0x5b6, 0x5b7, 0x5b8, 0x5b9, 0x5ba, 0x5bb, 0x5bc, 0x5bd, 0x5be, 0x5bf, 0x5c0, 0x5c1, 0x5c2, 0x5c3, 0x5c4, 0x5c5, 0x5c6, 0x5c7, 0x5c8, 0x5c9, 0x5ca, 0x5cb, 0x5cc, 0x5cd, 0x5ce, 0x5cf, 0x5d0, 0x5d1, 0x5d2, 0x5d3, 0x5d4, 0x5d5, 0x5d6, 0x5d7, 0x5d8, 0x5d9, 0x5da, 0x5db, 0x5dc, 0x5dd, 0x5de, 0x5df, 0x5e0, 0x5e1, 0x5e2, 0x5e3, 0x5e4, 0x5e5, 0x5e6, 0x5e7, 0x5e8, 0x5e9, 0x5ea, 0x5eb, 0x5ec, 0x5ed, 0x5ee, 0x5ef, 0x5f0, 0x5f1, 0x5f2, 0x5f3, 0x5f4, 0x5f5, 0x5f6, 0x5f7, 0x5f8, 0x5f9, 0x5fa, 0x5fb, 0x5fc, 0x5fd, 0x5fe, 0x5ff, 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60a, 0x60b, 0x60c, 0x60d, 0x60e, 0x60f, 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, 0x618, 0x619, 0x61a, 0x61b, 0x61c, 0x61d, 0x61e, 0x61f, 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, 0x628, 0x629, 0x62a, 0x62b, 0x62c, 0x62d, 0x62e, 0x62f, 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, 0x638, 0x639, 0x63a, 0x63b, 0x63c, 0x63d, 0x63e, 0x63f, 0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, 0x648, 0x649, 0x64a, 0x64b, 0x64c, 0x64d, 0x64e, 0x64f, 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, 0x658, 0x659, 0x65a, 0x65b, 0x65c, 0x65d, 0x65e, 0x65f, 0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, 0x668, 0x669, 0x66a, 0x66b, 0x66c, 0x66d, 0x66e, 0x66f, 0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, 0x678, 0x679, 0x67a, 0x67b, 0x67c, 0x67d, 0x67e, 0x67f, 0x680, 0x681, 0x682, 0x683, 0x684, 0x685, 0x686, 0x687, 0x688, 0x689, 0x68a, 0x68b, 0x68c, 0x68d, 0x68e, 0x68f, 0x690, 0x691, 0x692, 0x693, 0x694, 0x695, 0x696, 0x697, 0x698, 0x699, 0x69a, 0x69b, 0x69c, 0x69d, 0x69e, 0x69f, 0x6a0, 0x6a1, 0x6a2, 0x6a3, 0x6a4, 0x6a5, 0x6a6, 0x6a7, 0x6a8, 0x6a9, 0x6aa, 0x6ab, 0x6ac, 0x6ad, 0x6ae, 0x6af, 0x6b0, 0x6b1, 0x6b2, 0x6b3, 0x6b4, 0x6b5, 0x6b6, 0x6b7, 0x6b8, 0x6b9, 0x6ba, 0x6bb, 0x6bc, 0x6bd, 0x6be, 0x6bf, 0x6c0, 0x6c1, 0x6c2, 0x6c3, 0x6c4, 0x6c5, 0x6c6, 0x6c7, 0x6c8, 0x6c9, 0x6ca, 0x6cb, 0x6cc, 0x6cd, 0x6ce, 0x6cf, 0x6d0, 0x6d1, 0x6d2, 0x6d3, 0x6d4, 0x6d5, 0x6d6, 0x6d7, 0x6d8, 0x6d9, 0x6da, 0x6db, 0x6dc, 0x6dd, 0x6de, 0x6df, 0x6e0, 0x6e1, 0x6e2, 0x6e3, 0x6e4, 0x6e5, 0x6e6, 0x6e7, 0x6e8, 0x6e9, 0x6ea, 0x6eb, 0x6ec, 0x6ed, 0x6ee, 0x6ef, 0x6f0, 0x6f1, 0x6f2, 0x6f3, 0x6f4, 0x6f5, 0x6f6, 0x6f7, 0x6f8, 0x6f9, 0x6fa, 0x6fb, 0x6fc, 0x6fd, 0x6fe, 0x6ff, 0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, 0x708, 0x709, 0x70a, 0x70b, 0x70c, 0x70d, 0x70e, 0x70f, 0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, 0x718, 0x719, 0x71a, 0x71b, 0x71c, 0x71d, 0x71e, 0x71f, 0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, 0x728, 0x729, 0x72a, 0x72b, 0x72c, 0x72d, 0x72e, 0x72f, 0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, 0x738, 0x739, 0x73a, 0x73b, 0x73c, 0x73d, 0x73e, 0x73f, 0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, 0x748, 0x749, 0x74a, 0x74b, 0x74c, 0x74d, 0x74e, 0x74f, 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, 0x758, 0x759, 0x75a, 0x75b, 0x75c, 0x75d, 0x75e, 0x75f, 0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, 0x768, 0x769, 0x76a, 0x76b, 0x76c, 0x76d, 0x76e, 0x76f, 0x770, 0x771, 0x772, 0x773, 0x774, 0x775, 0x776, 0x777, 0x778, 0x779, 0x77a, 0x77b, 0x77c, 0x77d, 0x77e, 0x77f, 0x780, 0x781, 0x782, 0x783, 0x784, 0x785, 0x786, 0x787, 0x788, 0x789, 0x78a, 0x78b, 0x78c, 0x78d, 0x78e, 0x78f, 0x790, 0x791, 0x792, 0x793, 0x794, 0x795, 0x796, 0x797, 0x798, 0x799, 0x79a, 0x79b, 0x79c, 0x79d, 0x79e, 0x79f, 0x7a0, 0x7a1, 0x7a2, 0x7a3, 0x7a4, 0x7a5, 0x7a6, 0x7a7, 0x7a8, 0x7a9, 0x7aa, 0x7ab, 0x7ac, 0x7ad, 0x7ae, 0x7af, 0x7b0, 0x7b1, 0x7b2, 0x7b3, 0x7b4, 0x7b5, 0x7b6, 0x7b7, 0x7b8, 0x7b9, 0x7ba, 0x7bb, 0x7bc, 0x7bd, 0x7be, 0x7bf, 0x7c0, 0x7c1, 0x7c2, 0x7c3, 0x7c4, 0x7c5, 0x7c6, 0x7c7, 0x7c8, 0x7c9, 0x7ca, 0x7cb, 0x7cc, 0x7cd, 0x7ce, 0x7cf, 0x7d0, 0x7d1, 0x7d2, 0x7d3, 0x7d4, 0x7d5, 0x7d6, 0x7d7, 0x7d8, 0x7d9, 0x7da, 0x7db, 0x7dc, 0x7dd, 0x7de, 0x7df, 0x7e0, 0x7e1, 0x7e2, 0x7e3, 0x7e4, 0x7e5, 0x7e6, 0x7e7, 0x7e8, 0x7e9, 0x7ea, 0x7eb, 0x7ec, 0x7ed, 0x7ee, 0x7ef, 0x7f0, 0x7f1, 0x7f2, 0x7f3, 0x7f4, 0x7f5, 0x7f6, 0x7f7, 0x7f8, 0x7f9, 0x7fa, 0x7fb, 0x7fc, 0x7fd, 0x7fe, 0x7ff, 0x800, 0x801, 0x802, 0x803, 0x804, 0x805, 0x806, 0x807, 0x808, 0x809, 0x80a, 0x80b, 0x80c, 0x80d, 0x80e, 0x80f, 0x810, 0x811, 0x812, 0x813, 0x814, 0x815, 0x816, 0x817, 0x818, 0x819, 0x81a, 0x81b, 0x81c, 0x81d, 0x81e, 0x81f, 0x820, 0x821, 0x822, 0x823, 0x824, 0x825, 0x826, 0x827, 0x828, 0x829, 0x82a, 0x82b, 0x82c, 0x82d, 0x82e, 0x82f, 0x830, 0x831, 0x832, 0x833, 0x834, 0x835, 0x836, 0x837, 0x838, 0x839, 0x83a, 0x83b, 0x83c, 0x83d, 0x83e, 0x83f, 0x840, 0x841, 0x842, 0x843, 0x844, 0x845, 0x846, 0x847, 0x848, 0x849, 0x84a, 0x84b, 0x84c, 0x84d, 0x84e, 0x84f, 0x850, 0x851, 0x852, 0x853, 0x854, 0x855, 0x856, 0x857, 0x858, 0x859, 0x85a, 0x85b, 0x85c, 0x85d, 0x85e, 0x85f, 0x860, 0x861, 0x862, 0x863, 0x864, 0x865, 0x866, 0x867, 0x868, 0x869, 0x86a, 0x86b, 0x86c, 0x86d, 0x86e, 0x86f, 0x870, 0x871, 0x872, 0x873, 0x874, 0x875, 0x876, 0x877, 0x878, 0x879, 0x87a, 0x87b, 0x87c, 0x87d, 0x87e, 0x87f, 0x880, 0x881, 0x882, 0x883, 0x884, 0x885, 0x886, 0x887, 0x888, 0x889, 0x88a, 0x88b, 0x88c, 0x88d, 0x88e, 0x88f, 0x890, 0x891, 0x892, 0x893, 0x894, 0x895, 0x896, 0x897, 0x898, 0x899, 0x89a, 0x89b, 0x89c, 0x89d, 0x89e, 0x89f, 0x8a0, 0x8a1, 0x8a2, 0x8a3, 0x8a4, 0x8a5, 0x8a6, 0x8a7, 0x8a8, 0x8a9, 0x8aa, 0x8ab, 0x8ac, 0x8ad, 0x8ae, 0x8af, 0x8b0, 0x8b1, 0x8b2, 0x8b3, 0x8b4, 0x8b5, 0x8b6, 0x8b7, 0x8b8, 0x8b9, 0x8ba, 0x8bb, 0x8bc, 0x8bd, 0x8be, 0x8bf, 0x8c0, 0x8c1, 0x8c2, 0x8c3, 0x8c4, 0x8c5, 0x8c6, 0x8c7, 0x8c8, 0x8c9, 0x8ca, 0x8cb, 0x8cc, 0x8cd, 0x8ce, 0x8cf, 0x8d0, 0x8d1, 0x8d2, 0x8d3, 0x8d4, 0x8d5, 0x8d6, 0x8d7, 0x8d8, 0x8d9, 0x8da, 0x8db, 0x8dc, 0x8dd, 0x8de, 0x8df, 0x8e0, 0x8e1, 0x8e2, 0x8e3, 0x8e4, 0x8e5, 0x8e6, 0x8e7, 0x8e8, 0x8e9, 0x8ea, 0x8eb, 0x8ec, 0x8ed, 0x8ee, 0x8ef, 0x8f0, 0x8f1, 0x8f2, 0x8f3, 0x8f4, 0x8f5, 0x8f6, 0x8f7, 0x8f8, 0x8f9, 0x8fa, 0x8fb, 0x8fc, 0x8fd, 0x8fe, 0x8ff, 0x900, 0x901, 0x902, 0x903, 0x904, 0x905, 0x906, 0x907, 0x908, 0x909, 0x90a, 0x90b, 0x90c, 0x90d, 0x90e, 0x90f, 0x910, 0x911, 0x912, 0x913, 0x914, 0x915, 0x916, 0x917, 0x918, 0x919, 0x91a, 0x91b, 0x91c, 0x91d, 0x91e, 0x91f, 0x920, 0x921, 0x922, 0x923, 0x924, 0x925, 0x926, 0x927, 0x928, 0x929, 0x92a, 0x92b, 0x92c, 0x92d, 0x92e, 0x92f, 0x930, 0x931, 0x932, 0x933, 0x934, 0x935, 0x936, 0x937, 0x938, 0x939, 0x93a, 0x93b, 0x93c, 0x93d, 0x93e, 0x93f, 0x940, 0x941, 0x942, 0x943, 0x944, 0x945, 0x946, 0x947, 0x948, 0x949, 0x94a, 0x94b, 0x94c, 0x94d, 0x94e, 0x94f, 0x950, 0x951, 0x952, 0x953, 0x954, 0x955, 0x956, 0x957, 0x958, 0x959, 0x95a, 0x95b, 0x95c, 0x95d, 0x95e, 0x95f, 0x960, 0x961, 0x962, 0x963, 0x964, 0x965, 0x966, 0x967, 0x968, 0x969, 0x96a, 0x96b, 0x96c, 0x96d, 0x96e, 0x96f, 0x970, 0x971, 0x972, 0x973, 0x974, 0x975, 0x976, 0x977, 0x978, 0x979, 0x97a, 0x97b, 0x97c, 0x97d, 0x97e, 0x97f, 0x980, 0x981, 0x982, 0x983, 0x984, 0x985, 0x986, 0x987, 0x988, 0x989, 0x98a, 0x98b, 0x98c, 0x98d, 0x98e, 0x98f, 0x990, 0x991, 0x992, 0x993, 0x994, 0x995, 0x996, 0x997, 0x998, 0x999, 0x99a, 0x99b, 0x99c, 0x99d, 0x99e, 0x99f, 0x9a0, 0x9a1, 0x9a2, 0x9a3, 0x9a4, 0x9a5, 0x9a6, 0x9a7, 0x9a8, 0x9a9, 0x9aa, 0x9ab, 0x9ac, 0x9ad, 0x9ae, 0x9af, 0x9b0, 0x9b1, 0x9b2, 0x9b3, 0x9b4, 0x9b5, 0x9b6, 0x9b7, 0x9b8, 0x9b9, 0x9ba, 0x9bb, 0x9bc, 0x9bd, 0x9be, 0x9bf, 0x9c0, 0x9c1, 0x9c2, 0x9c3, 0x9c4, 0x9c5, 0x9c6, 0x9c7, 0x9c8, 0x9c9, 0x9ca, 0x9cb, 0x9cc, 0x9cd, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d2, 0x9d3, 0x9d4, 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9d9, 0x9da, 0x9db, 0x9dc, 0x9dd, 0x9de, 0x9df, 0x9e0, 0x9e1, 0x9e2, 0x9e3, 0x9e4, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, 0x9ea, 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9ef, 0x9f0, 0x9f1, 0x9f2, 0x9f3, 0x9f4, 0x9f5, 0x9f6, 0x9f7, 0x9f8, 0x9f9, 0x9fa, 0x9fb, 0x9fc, 0x9fd, 0x9fe, 0x9ff, 0xa00, 0xa01, 0xa02, 0xa03, 0xa04, 0xa05, 0xa06, 0xa07, 0xa08, 0xa09, 0xa0a, 0xa0b, 0xa0c, 0xa0d, 0xa0e, 0xa0f, 0xa10, 0xa11, 0xa12, 0xa13, 0xa14, 0xa15, 0xa16, 0xa17, 0xa18, 0xa19, 0xa1a, 0xa1b, 0xa1c, 0xa1d, 0xa1e, 0xa1f, 0xa20, 0xa21, 0xa22, 0xa23, 0xa24, 0xa25, 0xa26, 0xa27, 0xa28, 0xa29, 0xa2a, 0xa2b, 0xa2c, 0xa2d, 0xa2e, 0xa2f, 0xa30, 0xa31, 0xa32, 0xa33, 0xa34, 0xa35, 0xa36, 0xa37, 0xa38, 0xa39, 0xa3a, 0xa3b, 0xa3c, 0xa3d, 0xa3e, 0xa3f, 0xa40, 0xa41, 0xa42, 0xa43, 0xa44, 0xa45, 0xa46, 0xa47, 0xa48, 0xa49, 0xa4a, 0xa4b, 0xa4c, 0xa4d, 0xa4e, 0xa4f, 0xa50, 0xa51, 0xa52, 0xa53, 0xa54, 0xa55, 0xa56, 0xa57, 0xa58, 0xa59, 0xa5a, 0xa5b, 0xa5c, 0xa5d, 0xa5e, 0xa5f, 0xa60, 0xa61, 0xa62, 0xa63, 0xa64, 0xa65, 0xa66, 0xa67, 0xa68, 0xa69, 0xa6a, 0xa6b, 0xa6c, 0xa6d, 0xa6e, 0xa6f, 0xa70, 0xa71, 0xa72, 0xa73, 0xa74, 0xa75, 0xa76, 0xa77, 0xa78, 0xa79, 0xa7a, 0xa7b, 0xa7c, 0xa7d, 0xa7e, 0xa7f, 0xa80, 0xa81, 0xa82, 0xa83, 0xa84, 0xa85, 0xa86, 0xa87, 0xa88, 0xa89, 0xa8a, 0xa8b, 0xa8c, 0xa8d, 0xa8e, 0xa8f, 0xa90, 0xa91, 0xa92, 0xa93, 0xa94, 0xa95, 0xa96, 0xa97, 0xa98, 0xa99, 0xa9a, 0xa9b, 0xa9c, 0xa9d, 0xa9e, 0xa9f, 0xaa0, 0xaa1, 0xaa2, 0xaa3, 0xaa4, 0xaa5, 0xaa6, 0xaa7, 0xaa8, 0xaa9, 0xaaa, 0xaab, 0xaac, 0xaad, 0xaae, 0xaaf, 0xab0, 0xab1, 0xab2, 0xab3, 0xab4, 0xab5, 0xab6, 0xab7, 0xab8, 0xab9, 0xaba, 0xabb, 0xabc, 0xabd, 0xabe, 0xabf, 0xac0, 0xac1, 0xac2, 0xac3, 0xac4, 0xac5, 0xac6, 0xac7, 0xac8, 0xac9, 0xaca, 0xacb, 0xacc, 0xacd, 0xace, 0xacf, 0xad0, 0xad1, 0xad2, 0xad3, 0xad4, 0xad5, 0xad6, 0xad7, 0xad8, 0xad9, 0xada, 0xadb, 0xadc, 0xadd, 0xade, 0xadf, 0xae0, 0xae1, 0xae2, 0xae3, 0xae4, 0xae5, 0xae6, 0xae7, 0xae8, 0xae9, 0xaea, 0xaeb, 0xaec, 0xaed, 0xaee, 0xaef, 0xaf0, 0xaf1, 0xaf2, 0xaf3, 0xaf4, 0xaf5, 0xaf6, 0xaf7, 0xaf8, 0xaf9, 0xafa, 0xafb, 0xafc, 0xafd, 0xafe, 0xaff, 0xb00, 0xb01, 0xb02, 0xb03, 0xb04, 0xb05, 0xb06, 0xb07, 0xb08, 0xb09, 0xb0a, 0xb0b, 0xb0c, 0xb0d, 0xb0e, 0xb0f, 0xb10, 0xb11, 0xb12, 0xb13, 0xb14, 0xb15, 0xb16, 0xb17, 0xb18, 0xb19, 0xb1a, 0xb1b, 0xb1c, 0xb1d, 0xb1e, 0xb1f, 0xb20, 0xb21, 0xb22, 0xb23, 0xb24, 0xb25, 0xb26, 0xb27, 0xb28, 0xb29, 0xb2a, 0xb2b, 0xb2c, 0xb2d, 0xb2e, 0xb2f, 0xb30, 0xb31, 0xb32, 0xb33, 0xb34, 0xb35, 0xb36, 0xb37, 0xb38, 0xb39, 0xb3a, 0xb3b, 0xb3c, 0xb3d, 0xb3e, 0xb3f, 0xb40, 0xb41, 0xb42, 0xb43, 0xb44, 0xb45, 0xb46, 0xb47, 0xb48, 0xb49, 0xb4a, 0xb4b, 0xb4c, 0xb4d, 0xb4e, 0xb4f, 0xb50, 0xb51, 0xb52, 0xb53, 0xb54, 0xb55, 0xb56, 0xb57, 0xb58, 0xb59, 0xb5a, 0xb5b, 0xb5c, 0xb5d, 0xb5e, 0xb5f, 0xb60, 0xb61, 0xb62, 0xb63, 0xb64, 0xb65, 0xb66, 0xb67, 0xb68, 0xb69, 0xb6a, 0xb6b, 0xb6c, 0xb6d, 0xb6e, 0xb6f, 0xb70, 0xb71, 0xb72, 0xb73, 0xb74, 0xb75, 0xb76, 0xb77, 0xb78, 0xb79, 0xb7a, 0xb7b, 0xb7c, 0xb7d, 0xb7e, 0xb7f, 0xb80, 0xb81, 0xb82, 0xb83, 0xb84, 0xb85, 0xb86, 0xb87, 0xb88, 0xb89, 0xb8a, 0xb8b, 0xb8c, 0xb8d, 0xb8e, 0xb8f, 0xb90, 0xb91, 0xb92, 0xb93, 0xb94, 0xb95, 0xb96, 0xb97, 0xb98, 0xb99, 0xb9a, 0xb9b, 0xb9c, 0xb9d, 0xb9e, 0xb9f, 0xba0, 0xba1, 0xba2, 0xba3, 0xba4, 0xba5, 0xba6, 0xba7, 0xba8, 0xba9, 0xbaa, 0xbab, 0xbac, 0xbad, 0xbae, 0xbaf, 0xbb0, 0xbb1, 0xbb2, 0xbb3, 0xbb4, 0xbb5, 0xbb6, 0xbb7, 0xbb8, 0xbb9, 0xbba, 0xbbb, 0xbbc, 0xbbd, 0xbbe, 0xbbf, 0xbc0, 0xbc1, 0xbc2, 0xbc3, 0xbc4, 0xbc5, 0xbc6, 0xbc7, 0xbc8, 0xbc9, 0xbca, 0xbcb, 0xbcc, 0xbcd, 0xbce, 0xbcf, 0xbd0, 0xbd1, 0xbd2, 0xbd3, 0xbd4, 0xbd5, 0xbd6, 0xbd7, 0xbd8, 0xbd9, 0xbda, 0xbdb, 0xbdc, 0xbdd, 0xbde, 0xbdf, 0xbe0, 0xbe1, 0xbe2, 0xbe3, 0xbe4, 0xbe5, 0xbe6, 0xbe7, 0xbe8, 0xbe9, 0xbea, 0xbeb, 0xbec, 0xbed, 0xbee, 0xbef, 0xbf0, 0xbf1, 0xbf2, 0xbf3, 0xbf4, 0xbf5, 0xbf6, 0xbf7, 0xbf8, 0xbf9, 0xbfa, 0xbfb, 0xbfc, 0xbfd, 0xbfe, 0xbff, 0xc00, 0xc01, 0xc02, 0xc03, 0xc04, 0xc05, 0xc06, 0xc07, 0xc08, 0xc09, 0xc0a, 0xc0b, 0xc0c, 0xc0d, 0xc0e, 0xc0f, 0xc10, 0xc11, 0xc12, 0xc13, 0xc14, 0xc15, 0xc16, 0xc17, 0xc18, 0xc19, 0xc1a, 0xc1b, 0xc1c, 0xc1d, 0xc1e, 0xc1f, 0xc20, 0xc21, 0xc22, 0xc23, 0xc24, 0xc25, 0xc26, 0xc27, 0xc28, 0xc29, 0xc2a, 0xc2b, 0xc2c, 0xc2d, 0xc2e, 0xc2f, 0xc30, 0xc31, 0xc32, 0xc33, 0xc34, 0xc35, 0xc36, 0xc37, 0xc38, 0xc39, 0xc3a, 0xc3b, 0xc3c, 0xc3d, 0xc3e, 0xc3f, 0xc40, 0xc41, 0xc42, 0xc43, 0xc44, 0xc45, 0xc46, 0xc47, 0xc48, 0xc49, 0xc4a, 0xc4b, 0xc4c, 0xc4d, 0xc4e, 0xc4f, 0xc50, 0xc51, 0xc52, 0xc53, 0xc54, 0xc55, 0xc56, 0xc57, 0xc58, 0xc59, 0xc5a, 0xc5b, 0xc5c, 0xc5d, 0xc5e, 0xc5f, 0xc60, 0xc61, 0xc62, 0xc63, 0xc64, 0xc65, 0xc66, 0xc67, 0xc68, 0xc69, 0xc6a, 0xc6b, 0xc6c, 0xc6d, 0xc6e, 0xc6f, 0xc70, 0xc71, 0xc72, 0xc73, 0xc74, 0xc75, 0xc76, 0xc77, 0xc78, 0xc79, 0xc7a, 0xc7b, 0xc7c, 0xc7d, 0xc7e, 0xc7f, 0xc80, 0xc81, 0xc82, 0xc83, 0xc84, 0xc85, 0xc86, 0xc87, 0xc88, 0xc89, 0xc8a, 0xc8b, 0xc8c, 0xc8d, 0xc8e, 0xc8f, 0xc90, 0xc91, 0xc92, 0xc93, 0xc94, 0xc95, 0xc96, 0xc97, 0xc98, 0xc99, 0xc9a, 0xc9b, 0xc9c, 0xc9d, 0xc9e, 0xc9f, 0xca0, 0xca1, 0xca2, 0xca3, 0xca4, 0xca5, 0xca6, 0xca7, 0xca8, 0xca9, 0xcaa, 0xcab, 0xcac, 0xcad, 0xcae, 0xcaf, 0xcb0, 0xcb1, 0xcb2, 0xcb3, 0xcb4, 0xcb5, 0xcb6, 0xcb7, 0xcb8, 0xcb9, 0xcba, 0xcbb, 0xcbc, 0xcbd, 0xcbe, 0xcbf, 0xcc0, 0xcc1, 0xcc2, 0xcc3, 0xcc4, 0xcc5, 0xcc6, 0xcc7, 0xcc8, 0xcc9, 0xcca, 0xccb, 0xccc, 0xccd, 0xcce, 0xccf, 0xcd0, 0xcd1, 0xcd2, 0xcd3, 0xcd4, 0xcd5, 0xcd6, 0xcd7, 0xcd8, 0xcd9, 0xcda, 0xcdb, 0xcdc, 0xcdd, 0xcde, 0xcdf, 0xce0, 0xce1, 0xce2, 0xce3, 0xce4, 0xce5, 0xce6, 0xce7, 0xce8, 0xce9, 0xcea, 0xceb, 0xcec, 0xced, 0xcee, 0xcef, 0xcf0, 0xcf1, 0xcf2, 0xcf3, 0xcf4, 0xcf5, 0xcf6, 0xcf7, 0xcf8, 0xcf9, 0xcfa, 0xcfb, 0xcfc, 0xcfd, 0xcfe, 0xcff, 0xd00, 0xd01, 0xd02, 0xd03, 0xd04, 0xd05, 0xd06, 0xd07, 0xd08, 0xd09, 0xd0a, 0xd0b, 0xd0c, 0xd0d, 0xd0e, 0xd0f, 0xd10, 0xd11, 0xd12, 0xd13, 0xd14, 0xd15, 0xd16, 0xd17, 0xd18, 0xd19, 0xd1a, 0xd1b, 0xd1c, 0xd1d, 0xd1e, 0xd1f, 0xd20, 0xd21, 0xd22, 0xd23, 0xd24, 0xd25, 0xd26, 0xd27, 0xd28, 0xd29, 0xd2a, 0xd2b, 0xd2c, 0xd2d, 0xd2e, 0xd2f, 0xd30, 0xd31, 0xd32, 0xd33, 0xd34, 0xd35, 0xd36, 0xd37, 0xd38, 0xd39, 0xd3a, 0xd3b, 0xd3c, 0xd3d, 0xd3e, 0xd3f, 0xd40, 0xd41, 0xd42, 0xd43, 0xd44, 0xd45, 0xd46, 0xd47, 0xd48, 0xd49, 0xd4a, 0xd4b, 0xd4c, 0xd4d, 0xd4e, 0xd4f, 0xd50, 0xd51, 0xd52, 0xd53, 0xd54, 0xd55, 0xd56, 0xd57, 0xd58, 0xd59, 0xd5a, 0xd5b, 0xd5c, 0xd5d, 0xd5e, 0xd5f, 0xd60, 0xd61, 0xd62, 0xd63, 0xd64, 0xd65, 0xd66, 0xd67, 0xd68, 0xd69, 0xd6a, 0xd6b, 0xd6c, 0xd6d, 0xd6e, 0xd6f, 0xd70, 0xd71, 0xd72, 0xd73, 0xd74, 0xd75, 0xd76, 0xd77, 0xd78, 0xd79, 0xd7a, 0xd7b, 0xd7c, 0xd7d, 0xd7e, 0xd7f, 0xd80, 0xd81, 0xd82, 0xd83, 0xd84, 0xd85, 0xd86, 0xd87, 0xd88, 0xd89, 0xd8a, 0xd8b, 0xd8c, 0xd8d, 0xd8e, 0xd8f, 0xd90, 0xd91, 0xd92, 0xd93, 0xd94, 0xd95, 0xd96, 0xd97, 0xd98, 0xd99, 0xd9a, 0xd9b, 0xd9c, 0xd9d, 0xd9e, 0xd9f, 0xda0, 0xda1, 0xda2, 0xda3, 0xda4, 0xda5, 0xda6, 0xda7, 0xda8, 0xda9, 0xdaa, 0xdab, 0xdac, 0xdad, 0xdae, 0xdaf, 0xdb0, 0xdb1, 0xdb2, 0xdb3, 0xdb4, 0xdb5, 0xdb6, 0xdb7, 0xdb8, 0xdb9, 0xdba, 0xdbb, 0xdbc, 0xdbd, 0xdbe, 0xdbf, 0xdc0, 0xdc1, 0xdc2, 0xdc3, 0xdc4, 0xdc5, 0xdc6, 0xdc7, 0xdc8, 0xdc9, 0xdca, 0xdcb, 0xdcc, 0xdcd, 0xdce, 0xdcf, 0xdd0, 0xdd1, 0xdd2, 0xdd3, 0xdd4, 0xdd5, 0xdd6, 0xdd7, 0xdd8, 0xdd9, 0xdda, 0xddb, 0xddc, 0xddd, 0xdde, 0xddf, 0xde0, 0xde1, 0xde2, 0xde3, 0xde4, 0xde5, 0xde6, 0xde7, 0xde8, 0xde9, 0xdea, 0xdeb, 0xdec, 0xded, 0xdee, 0xdef, 0xdf0, 0xdf1, 0xdf2, 0xdf3, 0xdf4, 0xdf5, 0xdf6, 0xdf7, 0xdf8, 0xdf9, 0xdfa, 0xdfb, 0xdfc, 0xdfd, 0xdfe, 0xdff, 0xe00, 0xe01, 0xe02, 0xe03, 0xe04, 0xe05, 0xe06, 0xe07, 0xe08, 0xe09, 0xe0a, 0xe0b, 0xe0c, 0xe0d, 0xe0e, 0xe0f, 0xe10, 0xe11, 0xe12, 0xe13, 0xe14, 0xe15, 0xe16, 0xe17, 0xe18, 0xe19, 0xe1a, 0xe1b, 0xe1c, 0xe1d, 0xe1e, 0xe1f, 0xe20, 0xe21, 0xe22, 0xe23, 0xe24, 0xe25, 0xe26, 0xe27, 0xe28, 0xe29, 0xe2a, 0xe2b, 0xe2c, 0xe2d, 0xe2e, 0xe2f, 0xe30, 0xe31, 0xe32, 0xe33, 0xe34, 0xe35, 0xe36, 0xe37, 0xe38, 0xe39, 0xe3a, 0xe3b, 0xe3c, 0xe3d, 0xe3e, 0xe3f, 0xe40, 0xe41, 0xe42, 0xe43, 0xe44, 0xe45, 0xe46, 0xe47, 0xe48, 0xe49, 0xe4a, 0xe4b, 0xe4c, 0xe4d, 0xe4e, 0xe4f, 0xe50, 0xe51, 0xe52, 0xe53, 0xe54, 0xe55, 0xe56, 0xe57, 0xe58, 0xe59, 0xe5a, 0xe5b, 0xe5c, 0xe5d, 0xe5e, 0xe5f, 0xe60, 0xe61, 0xe62, 0xe63, 0xe64, 0xe65, 0xe66, 0xe67, 0xe68, 0xe69, 0xe6a, 0xe6b, 0xe6c, 0xe6d, 0xe6e, 0xe6f, 0xe70, 0xe71, 0xe72, 0xe73, 0xe74, 0xe75, 0xe76, 0xe77, 0xe78, 0xe79, 0xe7a, 0xe7b, 0xe7c, 0xe7d, 0xe7e, 0xe7f, 0xe80, 0xe81, 0xe82, 0xe83, 0xe84, 0xe85, 0xe86, 0xe87, 0xe88, 0xe89, 0xe8a, 0xe8b, 0xe8c, 0xe8d, 0xe8e, 0xe8f, 0xe90, 0xe91, 0xe92, 0xe93, 0xe94, 0xe95, 0xe96, 0xe97, 0xe98, 0xe99, 0xe9a, 0xe9b, 0xe9c, 0xe9d, 0xe9e, 0xe9f, 0xea0, 0xea1, 0xea2, 0xea3, 0xea4, 0xea5, 0xea6, 0xea7, 0xea8, 0xea9, 0xeaa, 0xeab, 0xeac, 0xead, 0xeae, 0xeaf, 0xeb0, 0xeb1, 0xeb2, 0xeb3, 0xeb4, 0xeb5, 0xeb6, 0xeb7, 0xeb8, 0xeb9, 0xeba, 0xebb, 0xebc, 0xebd, 0xebe, 0xebf, 0xec0, 0xec1, 0xec2, 0xec3, 0xec4, 0xec5, 0xec6, 0xec7, 0xec8, 0xec9, 0xeca, 0xecb, 0xecc, 0xecd, 0xece, 0xecf, 0xed0, 0xed1, 0xed2, 0xed3, 0xed4, 0xed5, 0xed6, 0xed7, 0xed8, 0xed9, 0xeda, 0xedb, 0xedc, 0xedd, 0xede, 0xedf, 0xee0, 0xee1, 0xee2, 0xee3, 0xee4, 0xee5, 0xee6, 0xee7, 0xee8, 0xee9, 0xeea, 0xeeb, 0xeec, 0xeed, 0xeee, 0xeef, 0xef0, 0xef1, 0xef2, 0xef3, 0xef4, 0xef5, 0xef6, 0xef7, 0xef8, 0xef9, 0xefa, 0xefb, 0xefc, 0xefd, 0xefe, 0xeff, 0xf00, 0xf01, 0xf02, 0xf03, 0xf04, 0xf05, 0xf06, 0xf07, 0xf08, 0xf09, 0xf0a, 0xf0b, 0xf0c, 0xf0d, 0xf0e, 0xf0f, 0xf10, 0xf11, 0xf12, 0xf13, 0xf14, 0xf15, 0xf16, 0xf17, 0xf18, 0xf19, 0xf1a, 0xf1b, 0xf1c, 0xf1d, 0xf1e, 0xf1f, 0xf20, 0xf21, 0xf22, 0xf23, 0xf24, 0xf25, 0xf26, 0xf27, 0xf28, 0xf29, 0xf2a, 0xf2b, 0xf2c, 0xf2d, 0xf2e, 0xf2f, 0xf30, 0xf31, 0xf32, 0xf33, 0xf34, 0xf35, 0xf36, 0xf37, 0xf38, 0xf39, 0xf3a, 0xf3b, 0xf3c, 0xf3d, 0xf3e, 0xf3f, 0xf40, 0xf41, 0xf42, 0xf43, 0xf44, 0xf45, 0xf46, 0xf47, 0xf48, 0xf49, 0xf4a, 0xf4b, 0xf4c, 0xf4d, 0xf4e, 0xf4f, 0xf50, 0xf51, 0xf52, 0xf53, 0xf54, 0xf55, 0xf56, 0xf57, 0xf58, 0xf59, 0xf5a, 0xf5b, 0xf5c, 0xf5d, 0xf5e, 0xf5f, 0xf60, 0xf61, 0xf62, 0xf63, 0xf64, 0xf65, 0xf66, 0xf67, 0xf68, 0xf69, 0xf6a, 0xf6b, 0xf6c, 0xf6d, 0xf6e, 0xf6f, 0xf70, 0xf71, 0xf72, 0xf73, 0xf74, 0xf75, 0xf76, 0xf77, 0xf78, 0xf79, 0xf7a, 0xf7b, 0xf7c, 0xf7d, 0xf7e, 0xf7f, 0xf80, 0xf81, 0xf82, 0xf83, 0xf84, 0xf85, 0xf86, 0xf87, 0xf88, 0xf89, 0xf8a, 0xf8b, 0xf8c, 0xf8d, 0xf8e, 0xf8f, 0xf90, 0xf91, 0xf92, 0xf93, 0xf94, 0xf95, 0xf96, 0xf97, 0xf98, 0xf99, 0xf9a, 0xf9b, 0xf9c, 0xf9d, 0xf9e, 0xf9f, 0xfa0, 0xfa1, 0xfa2, 0xfa3, 0xfa4, 0xfa5, 0xfa6, 0xfa7, 0xfa8, 0xfa9, 0xfaa, 0xfab, 0xfac, 0xfad, 0xfae, 0xfaf, 0xfb0, 0xfb1, 0xfb2, 0xfb3, 0xfb4, 0xfb5, 0xfb6, 0xfb7, 0xfb8, 0xfb9, 0xfba, 0xfbb, 0xfbc, 0xfbd, 0xfbe, 0xfbf, 0xfc0, 0xfc1, 0xfc2, 0xfc3, 0xfc4, 0xfc5, 0xfc6, 0xfc7, 0xfc8, 0xfc9, 0xfca, 0xfcb, 0xfcc, 0xfcd, 0xfce, 0xfcf, 0xfd0, 0xfd1, 0xfd2, 0xfd3, 0xfd4, 0xfd5, 0xfd6, 0xfd7, 0xfd8, 0xfd9, 0xfda, 0xfdb, 0xfdc, 0xfdd, 0xfde, 0xfdf, 0xfe0, 0xfe1, 0xfe2, 0xfe3, 0xfe4, 0xfe5, 0xfe6, 0xfe7, 0xfe8, 0xfe9, 0xfea, 0xfeb, 0xfec, 0xfed, 0xfee, 0xfef, 0xff0, 0xff1, 0xff2, 0xff3, 0xff4, 0xff5, 0xff6, 0xff7, 0xff8, 0xff9, 0xffa, 0xffb, 0xffc, 0xffd, 0xffe, 0xfff }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x070, 0x070, 0x070, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x005, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x015, 0x015, 0x040, 0x040, 0x0e0, 0x0e0, 0x0e0, 0x0e0, 0x0f0, 0x0f0, 0x0f0, 0x145, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x015, 0x000, 0x020, 0x020, 0x070, 0x070, 0x070, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x030, 0x045, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x005, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x080, 0x02a, 0x080, 0x080, 0x080, 0x080, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1e0, 0x1e0, 0x1e5, 0x1e5, 0x29a, 0x29a, 0x3f0, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x020, 0x070, 0x070, 0x070, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x005, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x040, 0x000, 0x015, 0x040, 0x040, 0x040, 0x040, 0x040, 0x0e0, 0x0e0, 0x0e0, 0x0e0, 0x145, 0x145, 0x1f0, 0x1f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x020, 0x020, 0x020, 0x070, 0x070, 0x09a, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x030, 0x045, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x005, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x100, 0x055, 0x055, 0x100, 0x100, 0x100, 0x100, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x3c0, 0x3c0, 0x3c0, 0x3c0, 0x3ca, 0x3ca, 0x3ca, 0x3ca, 0x540, 0x540, 0x545, 0x545, 0x69a, 0x69a, 0x69a, 0x69a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00a, 0x020, 0x070, 0x070, 0x070, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x005, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x015, 0x015, 0x040, 0x040, 0x0e0, 0x0e0, 0x0e0, 0x0e0, 0x0f0, 0x0f0, 0x0f0, 0x19a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x015, 0x015, 0x020, 0x020, 0x070, 0x070, 0x070, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x030, 0x045, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x005, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1c0, 0x1e0, 0x1e0, 0x1e5, 0x1e5, 0x29a, 0x29a, 0x3f0, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x020, 0x070, 0x070, 0x070, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x005, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x0e0, 0x0e0, 0x0e0, 0x0e0, 0x145, 0x145, 0x1f0, 0x1f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x020, 0x020, 0x020, 0x070, 0x070, 0x09a, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x030, 0x045, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x005, 0x010, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x100, 0x055, 0x055, 0x100, 0x100, 0x100, 0x100, 0x100, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x380, 0x3c0, 0x3c0, 0x3c0, 0x3c0, 0x3ca, 0x3ca, 0x3ca, 0x3ca, 0x540, 0x540, 0x545, 0x545, 0x69a, 0x69a, 0x69a, 0x69a }, + new[] { 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x12a, 0x000, 0x140, 0x140, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x155, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x155, 0x000, 0x000, 0x000, 0x1aa, 0x000, 0x1aa, 0x340, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x155, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x155, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x355, 0x000, 0x355, 0x4aa, 0x6f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x355, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x3aa, 0x000, 0x000, 0x000, 0x500, 0x000, 0x5aa, 0x655, 0x770, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x3aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x5aa, 0x000, 0x000, 0x000, 0x5aa, 0x000, 0x6aa, 0x6d5, 0x7b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x655, 0x000, 0x000, 0x000, 0x6d5, 0x000, 0x72a, 0x740, 0x7d0, 0x000, 0x000, 0x000, 0x72a, 0x000, 0x76a, 0x76a, 0x7e0, 0x155, 0x76a, 0x795, 0x7f0, 0x7b5, 0x7f0, 0x7f0, 0x7f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x855, 0x000, 0x855, 0x895, 0x9f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x8aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x8aa, 0x000, 0x000, 0x000, 0x8aa, 0x2aa, 0x8aa, 0x8aa, 0xaf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x8aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x8aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x900, 0x000, 0x2aa, 0x2aa, 0x900, 0x2aa, 0x9aa, 0x9aa, 0xb70, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0x900, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x2aa, 0x2aa, 0x9aa, 0x000, 0x2aa, 0x555, 0x9aa, 0x555, 0xaaa, 0xad5, 0xbb0, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x555, 0x555, 0xa55, 0x000, 0x555, 0x555, 0xad5, 0x555, 0xb2a, 0xb40, 0xbd0, 0x000, 0x555, 0x800, 0xb2a, 0x800, 0xb40, 0xb6a, 0xbe0, 0x800, 0xb6a, 0xb95, 0xbf0, 0xbaa, 0xbf0, 0xbf0, 0xbf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xaaa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xc00, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xc00, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0x2aa, 0xc00, 0x000, 0x2aa, 0x2aa, 0xc00, 0x555, 0xc00, 0xc00, 0xcf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0xc00, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x2aa, 0x2aa, 0xc00, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x2aa, 0x2aa, 0xc55, 0x000, 0x555, 0x555, 0xc55, 0x555, 0xc55, 0xc55, 0xd70, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x2aa, 0x555, 0xc55, 0x000, 0x000, 0x000, 0x555, 0x000, 0x555, 0x555, 0xc55, 0x000, 0x555, 0x555, 0xc55, 0x955, 0xc55, 0xcd5, 0xdb0, 0x000, 0x000, 0x000, 0x555, 0x000, 0x555, 0x800, 0xc55, 0x2aa, 0x955, 0x955, 0xcaa, 0x955, 0xcd5, 0xd2a, 0xdd0, 0x2aa, 0x955, 0x955, 0xd2a, 0xaaa, 0xd2a, 0xd6a, 0xde0, 0xaaa, 0xd6a, 0xd95, 0xdf0, 0xdaa, 0xdf0, 0xdf0, 0xdf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x2aa, 0x555, 0xcaa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x555, 0x555, 0xd55, 0x000, 0x000, 0x000, 0x555, 0x000, 0x555, 0x555, 0xe00, 0x000, 0x555, 0x955, 0xe00, 0x955, 0xe00, 0xe00, 0xe70, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x555, 0x000, 0x000, 0x000, 0x555, 0x000, 0x555, 0x555, 0xe00, 0x000, 0x000, 0x000, 0x555, 0x2aa, 0x955, 0x955, 0xe00, 0x2aa, 0x955, 0x955, 0xe00, 0x955, 0xe00, 0xe2a, 0xeb0, 0x000, 0x2aa, 0x2aa, 0x955, 0x2aa, 0x955, 0x955, 0xe00, 0x2aa, 0x955, 0xaaa, 0xe00, 0xaaa, 0xe2a, 0xe2a, 0xed0, 0x2aa, 0xaaa, 0xaaa, 0xe2a, 0xb55, 0xe2a, 0xe6a, 0xee0, 0xcaa, 0xe6a, 0xe6a, 0xef0, 0xeaa, 0xef0, 0xef0, 0xef0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0x2aa, 0x955, 0x000, 0x2aa, 0x2aa, 0x955, 0x2aa, 0x955, 0x955, 0xe55, 0x000, 0x2aa, 0x2aa, 0x955, 0x2aa, 0x955, 0xaaa, 0xeaa, 0x2aa, 0xaaa, 0xaaa, 0xf00, 0xaaa, 0xf00, 0xf00, 0xf30, 0x000, 0x2aa, 0x2aa, 0xaaa, 0x2aa, 0xaaa, 0xaaa, 0xf00, 0x2aa, 0xaaa, 0xaaa, 0xf00, 0xcaa, 0xf00, 0xf00, 0xf50, 0x400, 0xcaa, 0xcaa, 0xf00, 0xcaa, 0xf00, 0xf15, 0xf60, 0xd55, 0xf15, 0xf15, 0xf70, 0xf2a, 0xf70, 0xf70, 0xf70, 0x2aa, 0x2aa, 0x400, 0xb55, 0x400, 0xcaa, 0xcaa, 0xf2a, 0x400, 0xcaa, 0xcaa, 0xf2a, 0xcaa, 0xf55, 0xf55, 0xf90, 0x6aa, 0xcaa, 0xd55, 0xf55, 0xd55, 0xf80, 0xf80, 0xfa0, 0xe55, 0xf80, 0xf80, 0xfb0, 0xf80, 0xfb0, 0xfb0, 0xfb0, 0x955, 0xdaa, 0xe55, 0xf95, 0xe55, 0xf95, 0xf95, 0xfc0, 0xeaa, 0xfaa, 0xfaa, 0xfd0, 0xfc0, 0xfd0, 0xfd0, 0xfd0, 0xeaa, 0xfc0, 0xfc0, 0xfe0, 0xfca, 0xfe0, 0xfe0, 0xfe0, 0xfd5, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xfd5, 0xfe0, 0xfe0, 0xfe0, 0xfca, 0xfe0, 0xfc0, 0xfc0, 0xeaa, 0xfd0, 0xfd0, 0xfd0, 0xfc0, 0xfd0, 0xfaa, 0xfaa, 0xeaa, 0xfc0, 0xf95, 0xf95, 0xe55, 0xf95, 0xdaa, 0xdaa, 0x955, 0xfb0, 0xfb0, 0xfb0, 0xf80, 0xfb0, 0xf80, 0xf80, 0xe55, 0xfa0, 0xf80, 0xf55, 0xd55, 0xf55, 0xd55, 0xcaa, 0x6aa, 0xf90, 0xf55, 0xf55, 0xcaa, 0xf2a, 0xcaa, 0xcaa, 0x6aa, 0xf2a, 0xcaa, 0xcaa, 0x400, 0xaaa, 0x400, 0x2aa, 0x2aa, 0xf70, 0xf70, 0xf70, 0xf15, 0xf70, 0xf15, 0xf15, 0xd55, 0xf60, 0xf15, 0xf00, 0xcaa, 0xf00, 0xcaa, 0xcaa, 0x400, 0xf50, 0xf00, 0xf00, 0xcaa, 0xf00, 0xaaa, 0xaaa, 0x2aa, 0xf00, 0xaaa, 0xaaa, 0x2aa, 0xaaa, 0x2aa, 0x2aa, 0x000, 0xf30, 0xf00, 0xf00, 0xaaa, 0xf00, 0xaaa, 0xaaa, 0x2aa, 0xeaa, 0x955, 0x955, 0x2aa, 0x955, 0x2aa, 0x2aa, 0x000, 0xe55, 0x955, 0x955, 0x2aa, 0x955, 0x2aa, 0x2aa, 0x000, 0x955, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xef0, 0xef0, 0xef0, 0xeaa, 0xef0, 0xe6a, 0xe6a, 0xcaa, 0xee0, 0xe40, 0xe2a, 0xaaa, 0xe2a, 0xaaa, 0xaaa, 0x2aa, 0xed0, 0xe2a, 0xe2a, 0xaaa, 0xe00, 0xaaa, 0x955, 0x2aa, 0xe00, 0x955, 0x955, 0x2aa, 0x955, 0x2aa, 0x2aa, 0x000, 0xeb0, 0xe00, 0xe00, 0x955, 0xe00, 0x955, 0x955, 0x2aa, 0xe00, 0x955, 0x555, 0x2aa, 0x555, 0x000, 0x000, 0x000, 0xe00, 0x555, 0x555, 0x000, 0x555, 0x000, 0x000, 0x000, 0x555, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xe70, 0xe00, 0xe00, 0x955, 0xe00, 0x555, 0x555, 0x000, 0xe00, 0x555, 0x555, 0x000, 0x555, 0x000, 0x000, 0x000, 0xd55, 0x555, 0x555, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xcaa, 0x555, 0x2aa, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xdf0, 0xdf0, 0xdf0, 0xdaa, 0xdf0, 0xd6a, 0xd6a, 0xaaa, 0xde0, 0xd40, 0xd40, 0xaaa, 0xd2a, 0x955, 0x955, 0x2aa, 0xdd0, 0xd2a, 0xcd5, 0x955, 0xcd5, 0x955, 0x800, 0x2aa, 0xc55, 0x555, 0x555, 0x000, 0x555, 0x000, 0x000, 0x000, 0xdb0, 0xc80, 0xc55, 0x800, 0xc55, 0x555, 0x555, 0x000, 0xc55, 0x555, 0x555, 0x000, 0x555, 0x000, 0x000, 0x000, 0xc55, 0x555, 0x2aa, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xd70, 0xc55, 0xc55, 0x555, 0xc55, 0x555, 0x555, 0x000, 0xc55, 0x2aa, 0x2aa, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0xc00, 0x2aa, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xc00, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xcf0, 0xc00, 0xc00, 0x555, 0xc00, 0x2aa, 0x2aa, 0x000, 0xc00, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xc00, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xc00, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xaaa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xbf0, 0xbf0, 0xbf0, 0xbaa, 0xbf0, 0xb6a, 0xb6a, 0x800, 0xbe0, 0xb6a, 0xb40, 0x800, 0xb2a, 0x800, 0x555, 0x000, 0xbd0, 0xb2a, 0xad5, 0x555, 0xad5, 0x555, 0x555, 0x000, 0xa55, 0x555, 0x555, 0x000, 0x2aa, 0x000, 0x000, 0x000, 0xbb0, 0xad5, 0xa55, 0x555, 0x9aa, 0x555, 0x555, 0x000, 0x9aa, 0x2aa, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x900, 0x2aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xb70, 0x9aa, 0x9aa, 0x2aa, 0x900, 0x2aa, 0x000, 0x000, 0x900, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x8aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x8aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xaf0, 0x8aa, 0x8aa, 0x000, 0x8aa, 0x000, 0x000, 0x000, 0x8aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x8aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x9f0, 0x895, 0x855, 0x000, 0x855, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x7f0, 0x7f0, 0x7f0, 0x7b5, 0x7f0, 0x795, 0x76a, 0x155, 0x7e0, 0x76a, 0x740, 0x000, 0x72a, 0x000, 0x000, 0x000, 0x7d0, 0x740, 0x6d5, 0x000, 0x6d5, 0x000, 0x000, 0x000, 0x680, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x7b0, 0x6d5, 0x655, 0x000, 0x5aa, 0x000, 0x000, 0x000, 0x5aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x3aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x770, 0x5aa, 0x5aa, 0x000, 0x500, 0x000, 0x000, 0x000, 0x3aa, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x355, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x6f0, 0x355, 0x355, 0x000, 0x355, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x155, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x155, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x5f0, 0x1ea, 0x1aa, 0x000, 0x1aa, 0x000, 0x000, 0x000, 0x155, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x155, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x155, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x3f0, 0x140, 0x140, 0x000, 0x12a, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000 }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0a0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0a5, 0x000, 0x000, 0x000, 0x0a5, 0x000, 0x0a5, 0x0a5, 0x1f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0ea, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f5, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0fa, 0x000, 0x000, 0x000, 0x0fa, 0x000, 0x0fa, 0x0fa, 0x2f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x110, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x11a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x120, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x125, 0x000, 0x000, 0x000, 0x125, 0x000, 0x125, 0x125, 0x370, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x130, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x135, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x13a, 0x000, 0x000, 0x000, 0x13a, 0x000, 0x13a, 0x13a, 0x3b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x140, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x140, 0x000, 0x000, 0x000, 0x140, 0x000, 0x140, 0x140, 0x3d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x14a, 0x000, 0x000, 0x000, 0x14a, 0x000, 0x14a, 0x14a, 0x3e0, 0x000, 0x000, 0x000, 0x14a, 0x000, 0x14a, 0x14a, 0x3f0, 0x000, 0x150, 0x150, 0x3f0, 0x1a5, 0x3f0, 0x3f0, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x185, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x190, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x19a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1a0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1a5, 0x000, 0x000, 0x000, 0x1a5, 0x000, 0x1a5, 0x1a5, 0x4f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ba, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1c5, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ca, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1d0, 0x000, 0x000, 0x000, 0x1d0, 0x000, 0x1d0, 0x1d0, 0x570, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1d5, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1e5, 0x000, 0x000, 0x000, 0x1e0, 0x000, 0x1e5, 0x1e5, 0x5b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x1ea, 0x1ea, 0x5d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x1f5, 0x1f5, 0x5e0, 0x000, 0x000, 0x000, 0x1f5, 0x000, 0x1f5, 0x1f5, 0x5f0, 0x000, 0x4a0, 0x4a0, 0x5f0, 0x4a5, 0x5f0, 0x5f0, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x210, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x205, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x220, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x225, 0x000, 0x000, 0x000, 0x225, 0x000, 0x225, 0x225, 0x670, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x205, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x6b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x22a, 0x000, 0x22a, 0x22a, 0x6d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x240, 0x000, 0x000, 0x000, 0x240, 0x000, 0x395, 0x4ea, 0x6e0, 0x000, 0x000, 0x000, 0x4ea, 0x000, 0x4f5, 0x4f5, 0x6f0, 0x000, 0x4f5, 0x5a0, 0x6f0, 0x64a, 0x6f0, 0x6f0, 0x6f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x255, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x255, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x255, 0x000, 0x000, 0x000, 0x255, 0x000, 0x500, 0x500, 0x730, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x500, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x500, 0x000, 0x000, 0x000, 0x500, 0x000, 0x500, 0x500, 0x750, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x515, 0x000, 0x000, 0x000, 0x515, 0x000, 0x515, 0x5c0, 0x760, 0x000, 0x000, 0x000, 0x66a, 0x000, 0x66a, 0x66a, 0x770, 0x000, 0x675, 0x675, 0x770, 0x6ca, 0x770, 0x770, 0x770, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x52a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x680, 0x000, 0x000, 0x000, 0x680, 0x000, 0x680, 0x680, 0x790, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x680, 0x000, 0x000, 0x000, 0x680, 0x000, 0x680, 0x680, 0x7a0, 0x000, 0x000, 0x000, 0x680, 0x000, 0x72a, 0x72a, 0x7b0, 0x000, 0x72a, 0x72a, 0x7b0, 0x735, 0x7b0, 0x7b0, 0x7b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x740, 0x000, 0x000, 0x000, 0x740, 0x000, 0x740, 0x740, 0x7c0, 0x000, 0x000, 0x000, 0x740, 0x000, 0x740, 0x740, 0x7d0, 0x000, 0x740, 0x740, 0x7d0, 0x76a, 0x7d0, 0x7d0, 0x7d0, 0x000, 0x000, 0x000, 0x740, 0x000, 0x76a, 0x795, 0x7e0, 0x000, 0x7a0, 0x7a0, 0x7e0, 0x7a0, 0x7e0, 0x7e0, 0x7e0, 0x155, 0x7a0, 0x7a0, 0x7f0, 0x7ca, 0x7f0, 0x7f0, 0x7f0, 0x7ca, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x09a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0a0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0a5, 0x000, 0x000, 0x000, 0x0a5, 0x000, 0x0a5, 0x0a5, 0x1f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x045, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0ea, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f5, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0fa, 0x000, 0x000, 0x000, 0x0fa, 0x000, 0x0fa, 0x0fa, 0x2f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x110, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x11a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x120, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x125, 0x000, 0x000, 0x000, 0x125, 0x000, 0x125, 0x125, 0x370, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x130, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x135, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x13a, 0x000, 0x000, 0x000, 0x13a, 0x000, 0x13a, 0x13a, 0x3b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x140, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x140, 0x000, 0x000, 0x000, 0x140, 0x000, 0x140, 0x140, 0x3d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x14a, 0x000, 0x000, 0x000, 0x14a, 0x000, 0x14a, 0x14a, 0x3e0, 0x000, 0x000, 0x000, 0x14a, 0x000, 0x14a, 0x14a, 0x3f0, 0x000, 0x150, 0x150, 0x3f0, 0x250, 0x3f0, 0x3f0, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x185, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x190, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x19a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1a0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1a5, 0x000, 0x000, 0x000, 0x1a5, 0x000, 0x1a5, 0x1a5, 0x4f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ba, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1c5, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ca, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1d0, 0x000, 0x000, 0x000, 0x1d0, 0x000, 0x1d0, 0x1d0, 0x570, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1da, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1d5, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1e5, 0x000, 0x000, 0x000, 0x1e5, 0x000, 0x1e5, 0x1e5, 0x5b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x1ea, 0x1ea, 0x5d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x000, 0x000, 0x1ea, 0x000, 0x1f5, 0x1f5, 0x5e0, 0x000, 0x000, 0x000, 0x1f5, 0x000, 0x1f5, 0x1f5, 0x5f0, 0x000, 0x4a0, 0x4a0, 0x5f0, 0x4a5, 0x5f0, 0x5f0, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x210, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x205, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x220, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x225, 0x000, 0x000, 0x000, 0x225, 0x000, 0x225, 0x225, 0x670, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x205, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x22a, 0x6b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x22a, 0x000, 0x22a, 0x22a, 0x6d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x240, 0x000, 0x000, 0x000, 0x240, 0x000, 0x395, 0x4ea, 0x6e0, 0x000, 0x000, 0x000, 0x4ea, 0x000, 0x4f5, 0x4f5, 0x6f0, 0x000, 0x4f5, 0x5a0, 0x6f0, 0x64a, 0x6f0, 0x6f0, 0x6f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x25a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x255, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x255, 0x000, 0x000, 0x000, 0x255, 0x000, 0x500, 0x500, 0x730, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x500, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x500, 0x000, 0x000, 0x000, 0x500, 0x000, 0x500, 0x500, 0x750, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x500, 0x000, 0x000, 0x000, 0x500, 0x000, 0x515, 0x515, 0x760, 0x000, 0x000, 0x000, 0x66a, 0x000, 0x66a, 0x66a, 0x770, 0x000, 0x675, 0x675, 0x770, 0x6ca, 0x770, 0x770, 0x770, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x52a, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x680, 0x000, 0x000, 0x000, 0x680, 0x000, 0x680, 0x680, 0x790, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x680, 0x000, 0x000, 0x000, 0x680, 0x000, 0x680, 0x680, 0x7a0, 0x000, 0x000, 0x000, 0x680, 0x000, 0x72a, 0x72a, 0x7b0, 0x000, 0x72a, 0x72a, 0x7b0, 0x735, 0x7b0, 0x7b0, 0x7b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x740, 0x000, 0x000, 0x000, 0x740, 0x000, 0x740, 0x740, 0x7c0, 0x000, 0x000, 0x000, 0x740, 0x000, 0x740, 0x740, 0x7d0, 0x000, 0x740, 0x740, 0x7d0, 0x76a, 0x7d0, 0x7d0, 0x7d0, 0x000, 0x000, 0x000, 0x740, 0x000, 0x740, 0x795, 0x7e0, 0x000, 0x7a0, 0x7a0, 0x7e0, 0x7a0, 0x7e0, 0x7e0, 0x7e0, 0x155, 0x7a0, 0x7b5, 0x7f0, 0x7ca, 0x7f0, 0x7f0, 0x7f0, 0x7d0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0 }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x345, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x050, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x280, 0x000, 0x000, 0x000, 0x4ea, 0x22a, 0x7ca, 0x7f0, 0x7f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x345, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x050, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x32a, 0x000, 0x000, 0x000, 0x4ea, 0x22a, 0x7d0, 0x7f0, 0x7f0 } + }; + + public static Sid Create(int newSampleRate, int clockFrqNum, int clockFrqDen) + { + return new Sid(WaveTable, newSampleRate, clockFrqNum, clockFrqDen); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R4AR.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R4AR.cs new file mode 100644 index 0000000000..71ace35ff0 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip6581R4AR.cs @@ -0,0 +1,23 @@ +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // SID Wavetables courtesy of Kevtris + public static class Chip6581R4AR + { + private static readonly int[][] WaveTable = + { + new[] { 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff }, + new[] { 0x000, 0x002, 0x004, 0x006, 0x008, 0x00a, 0x00c, 0x00e, 0x010, 0x012, 0x014, 0x016, 0x018, 0x01a, 0x01c, 0x01e, 0x020, 0x022, 0x024, 0x026, 0x028, 0x02a, 0x02c, 0x02e, 0x030, 0x032, 0x034, 0x036, 0x038, 0x03a, 0x03c, 0x03e, 0x040, 0x042, 0x044, 0x046, 0x048, 0x04a, 0x04c, 0x04e, 0x050, 0x052, 0x054, 0x056, 0x058, 0x05a, 0x05c, 0x05e, 0x060, 0x062, 0x064, 0x066, 0x068, 0x06a, 0x06c, 0x06e, 0x070, 0x072, 0x074, 0x076, 0x078, 0x07a, 0x07c, 0x07e, 0x080, 0x082, 0x084, 0x086, 0x088, 0x08a, 0x08c, 0x08e, 0x090, 0x092, 0x094, 0x096, 0x098, 0x09a, 0x09c, 0x09e, 0x0a0, 0x0a2, 0x0a4, 0x0a6, 0x0a8, 0x0aa, 0x0ac, 0x0ae, 0x0b0, 0x0b2, 0x0b4, 0x0b6, 0x0b8, 0x0ba, 0x0bc, 0x0be, 0x0c0, 0x0c2, 0x0c4, 0x0c6, 0x0c8, 0x0ca, 0x0cc, 0x0ce, 0x0d0, 0x0d2, 0x0d4, 0x0d6, 0x0d8, 0x0da, 0x0dc, 0x0de, 0x0e0, 0x0e2, 0x0e4, 0x0e6, 0x0e8, 0x0ea, 0x0ec, 0x0ee, 0x0f0, 0x0f2, 0x0f4, 0x0f6, 0x0f8, 0x0fa, 0x0fc, 0x0fe, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12c, 0x12e, 0x130, 0x132, 0x134, 0x136, 0x138, 0x13a, 0x13c, 0x13e, 0x140, 0x142, 0x144, 0x146, 0x148, 0x14a, 0x14c, 0x14e, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15a, 0x15c, 0x15e, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x176, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x182, 0x184, 0x186, 0x188, 0x18a, 0x18c, 0x18e, 0x190, 0x192, 0x194, 0x196, 0x198, 0x19a, 0x19c, 0x19e, 0x1a0, 0x1a2, 0x1a4, 0x1a6, 0x1a8, 0x1aa, 0x1ac, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b6, 0x1b8, 0x1ba, 0x1bc, 0x1be, 0x1c0, 0x1c2, 0x1c4, 0x1c6, 0x1c8, 0x1ca, 0x1cc, 0x1ce, 0x1d0, 0x1d2, 0x1d4, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1de, 0x1e0, 0x1e2, 0x1e4, 0x1e6, 0x1e8, 0x1ea, 0x1ec, 0x1ee, 0x1f0, 0x1f2, 0x1f4, 0x1f6, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21c, 0x21e, 0x220, 0x222, 0x224, 0x226, 0x228, 0x22a, 0x22c, 0x22e, 0x230, 0x232, 0x234, 0x236, 0x238, 0x23a, 0x23c, 0x23e, 0x240, 0x242, 0x244, 0x246, 0x248, 0x24a, 0x24c, 0x24e, 0x250, 0x252, 0x254, 0x256, 0x258, 0x25a, 0x25c, 0x25e, 0x260, 0x262, 0x264, 0x266, 0x268, 0x26a, 0x26c, 0x26e, 0x270, 0x272, 0x274, 0x276, 0x278, 0x27a, 0x27c, 0x27e, 0x280, 0x282, 0x284, 0x286, 0x288, 0x28a, 0x28c, 0x28e, 0x290, 0x292, 0x294, 0x296, 0x298, 0x29a, 0x29c, 0x29e, 0x2a0, 0x2a2, 0x2a4, 0x2a6, 0x2a8, 0x2aa, 0x2ac, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2bc, 0x2be, 0x2c0, 0x2c2, 0x2c4, 0x2c6, 0x2c8, 0x2ca, 0x2cc, 0x2ce, 0x2d0, 0x2d2, 0x2d4, 0x2d6, 0x2d8, 0x2da, 0x2dc, 0x2de, 0x2e0, 0x2e2, 0x2e4, 0x2e6, 0x2e8, 0x2ea, 0x2ec, 0x2ee, 0x2f0, 0x2f2, 0x2f4, 0x2f6, 0x2f8, 0x2fa, 0x2fc, 0x2fe, 0x300, 0x302, 0x304, 0x306, 0x308, 0x30a, 0x30c, 0x30e, 0x310, 0x312, 0x314, 0x316, 0x318, 0x31a, 0x31c, 0x31e, 0x320, 0x322, 0x324, 0x326, 0x328, 0x32a, 0x32c, 0x32e, 0x330, 0x332, 0x334, 0x336, 0x338, 0x33a, 0x33c, 0x33e, 0x340, 0x342, 0x344, 0x346, 0x348, 0x34a, 0x34c, 0x34e, 0x350, 0x352, 0x354, 0x356, 0x358, 0x35a, 0x35c, 0x35e, 0x360, 0x362, 0x364, 0x366, 0x368, 0x36a, 0x36c, 0x36e, 0x370, 0x372, 0x374, 0x376, 0x378, 0x37a, 0x37c, 0x37e, 0x380, 0x382, 0x384, 0x386, 0x388, 0x38a, 0x38c, 0x38e, 0x390, 0x392, 0x394, 0x396, 0x398, 0x39a, 0x39c, 0x39e, 0x3a0, 0x3a2, 0x3a4, 0x3a6, 0x3a8, 0x3aa, 0x3ac, 0x3ae, 0x3b0, 0x3b2, 0x3b4, 0x3b6, 0x3b8, 0x3ba, 0x3bc, 0x3be, 0x3c0, 0x3c2, 0x3c4, 0x3c6, 0x3c8, 0x3ca, 0x3cc, 0x3ce, 0x3d0, 0x3d2, 0x3d4, 0x3d6, 0x3d8, 0x3da, 0x3dc, 0x3de, 0x3e0, 0x3e2, 0x3e4, 0x3e6, 0x3e8, 0x3ea, 0x3ec, 0x3ee, 0x3f0, 0x3f2, 0x3f4, 0x3f6, 0x3f8, 0x3fa, 0x3fc, 0x3fe, 0x400, 0x402, 0x404, 0x406, 0x408, 0x40a, 0x40c, 0x40e, 0x410, 0x412, 0x414, 0x416, 0x418, 0x41a, 0x41c, 0x41e, 0x420, 0x422, 0x424, 0x426, 0x428, 0x42a, 0x42c, 0x42e, 0x430, 0x432, 0x434, 0x436, 0x438, 0x43a, 0x43c, 0x43e, 0x440, 0x442, 0x444, 0x446, 0x448, 0x44a, 0x44c, 0x44e, 0x450, 0x452, 0x454, 0x456, 0x458, 0x45a, 0x45c, 0x45e, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46a, 0x46c, 0x46e, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47a, 0x47c, 0x47e, 0x480, 0x482, 0x484, 0x486, 0x488, 0x48a, 0x48c, 0x48e, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49a, 0x49c, 0x49e, 0x4a0, 0x4a2, 0x4a4, 0x4a6, 0x4a8, 0x4aa, 0x4ac, 0x4ae, 0x4b0, 0x4b2, 0x4b4, 0x4b6, 0x4b8, 0x4ba, 0x4bc, 0x4be, 0x4c0, 0x4c2, 0x4c4, 0x4c6, 0x4c8, 0x4ca, 0x4cc, 0x4ce, 0x4d0, 0x4d2, 0x4d4, 0x4d6, 0x4d8, 0x4da, 0x4dc, 0x4de, 0x4e0, 0x4e2, 0x4e4, 0x4e6, 0x4e8, 0x4ea, 0x4ec, 0x4ee, 0x4f0, 0x4f2, 0x4f4, 0x4f6, 0x4f8, 0x4fa, 0x4fc, 0x4fe, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50a, 0x50c, 0x50e, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51a, 0x51c, 0x51e, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52a, 0x52c, 0x52e, 0x530, 0x532, 0x534, 0x536, 0x538, 0x53a, 0x53c, 0x53e, 0x540, 0x542, 0x544, 0x546, 0x548, 0x54a, 0x54c, 0x54e, 0x550, 0x552, 0x554, 0x556, 0x558, 0x55a, 0x55c, 0x55e, 0x560, 0x562, 0x564, 0x566, 0x568, 0x56a, 0x56c, 0x56e, 0x570, 0x572, 0x574, 0x576, 0x578, 0x57a, 0x57c, 0x57e, 0x580, 0x582, 0x584, 0x586, 0x588, 0x58a, 0x58c, 0x58e, 0x590, 0x592, 0x594, 0x596, 0x598, 0x59a, 0x59c, 0x59e, 0x5a0, 0x5a2, 0x5a4, 0x5a6, 0x5a8, 0x5aa, 0x5ac, 0x5ae, 0x5b0, 0x5b2, 0x5b4, 0x5b6, 0x5b8, 0x5ba, 0x5bc, 0x5be, 0x5c0, 0x5c2, 0x5c4, 0x5c6, 0x5c8, 0x5ca, 0x5cc, 0x5ce, 0x5d0, 0x5d2, 0x5d4, 0x5d6, 0x5d8, 0x5da, 0x5dc, 0x5de, 0x5e0, 0x5e2, 0x5e4, 0x5e6, 0x5e8, 0x5ea, 0x5ec, 0x5ee, 0x5f0, 0x5f2, 0x5f4, 0x5f6, 0x5f8, 0x5fa, 0x5fc, 0x5fe, 0x600, 0x602, 0x604, 0x606, 0x608, 0x60a, 0x60c, 0x60e, 0x610, 0x612, 0x614, 0x616, 0x618, 0x61a, 0x61c, 0x61e, 0x620, 0x622, 0x624, 0x626, 0x628, 0x62a, 0x62c, 0x62e, 0x630, 0x632, 0x634, 0x636, 0x638, 0x63a, 0x63c, 0x63e, 0x640, 0x642, 0x644, 0x646, 0x648, 0x64a, 0x64c, 0x64e, 0x650, 0x652, 0x654, 0x656, 0x658, 0x65a, 0x65c, 0x65e, 0x660, 0x662, 0x664, 0x666, 0x668, 0x66a, 0x66c, 0x66e, 0x670, 0x672, 0x674, 0x676, 0x678, 0x67a, 0x67c, 0x67e, 0x680, 0x682, 0x684, 0x686, 0x688, 0x68a, 0x68c, 0x68e, 0x690, 0x692, 0x694, 0x696, 0x698, 0x69a, 0x69c, 0x69e, 0x6a0, 0x6a2, 0x6a4, 0x6a6, 0x6a8, 0x6aa, 0x6ac, 0x6ae, 0x6b0, 0x6b2, 0x6b4, 0x6b6, 0x6b8, 0x6ba, 0x6bc, 0x6be, 0x6c0, 0x6c2, 0x6c4, 0x6c6, 0x6c8, 0x6ca, 0x6cc, 0x6ce, 0x6d0, 0x6d2, 0x6d4, 0x6d6, 0x6d8, 0x6da, 0x6dc, 0x6de, 0x6e0, 0x6e2, 0x6e4, 0x6e6, 0x6e8, 0x6ea, 0x6ec, 0x6ee, 0x6f0, 0x6f2, 0x6f4, 0x6f6, 0x6f8, 0x6fa, 0x6fc, 0x6fe, 0x700, 0x702, 0x704, 0x706, 0x708, 0x70a, 0x70c, 0x70e, 0x710, 0x712, 0x714, 0x716, 0x718, 0x71a, 0x71c, 0x71e, 0x720, 0x722, 0x724, 0x726, 0x728, 0x72a, 0x72c, 0x72e, 0x730, 0x732, 0x734, 0x736, 0x738, 0x73a, 0x73c, 0x73e, 0x740, 0x742, 0x744, 0x746, 0x748, 0x74a, 0x74c, 0x74e, 0x750, 0x752, 0x754, 0x756, 0x758, 0x75a, 0x75c, 0x75e, 0x760, 0x762, 0x764, 0x766, 0x768, 0x76a, 0x76c, 0x76e, 0x770, 0x772, 0x774, 0x776, 0x778, 0x77a, 0x77c, 0x77e, 0x780, 0x782, 0x784, 0x786, 0x788, 0x78a, 0x78c, 0x78e, 0x790, 0x792, 0x794, 0x796, 0x798, 0x79a, 0x79c, 0x79e, 0x7a0, 0x7a2, 0x7a4, 0x7a6, 0x7a8, 0x7aa, 0x7ac, 0x7ae, 0x7b0, 0x7b2, 0x7b4, 0x7b6, 0x7b8, 0x7ba, 0x7bc, 0x7be, 0x7c0, 0x7c2, 0x7c4, 0x7c6, 0x7c8, 0x7ca, 0x7cc, 0x7ce, 0x7d0, 0x7d2, 0x7d4, 0x7d6, 0x7d8, 0x7da, 0x7dc, 0x7de, 0x7e0, 0x7e2, 0x7e4, 0x7e6, 0x7e8, 0x7ea, 0x7ec, 0x7ee, 0x7f0, 0x7f2, 0x7f4, 0x7f6, 0x7f8, 0x7fa, 0x7fc, 0x7fe, 0x800, 0x802, 0x804, 0x806, 0x808, 0x80a, 0x80c, 0x80e, 0x810, 0x812, 0x814, 0x816, 0x818, 0x81a, 0x81c, 0x81e, 0x820, 0x822, 0x824, 0x826, 0x828, 0x82a, 0x82c, 0x82e, 0x830, 0x832, 0x834, 0x836, 0x838, 0x83a, 0x83c, 0x83e, 0x840, 0x842, 0x844, 0x846, 0x848, 0x84a, 0x84c, 0x84e, 0x850, 0x852, 0x854, 0x856, 0x858, 0x85a, 0x85c, 0x85e, 0x860, 0x862, 0x864, 0x866, 0x868, 0x86a, 0x86c, 0x86e, 0x870, 0x872, 0x874, 0x876, 0x878, 0x87a, 0x87c, 0x87e, 0x880, 0x882, 0x884, 0x886, 0x888, 0x88a, 0x88c, 0x88e, 0x890, 0x892, 0x894, 0x896, 0x898, 0x89a, 0x89c, 0x89e, 0x8a0, 0x8a2, 0x8a4, 0x8a6, 0x8a8, 0x8aa, 0x8ac, 0x8ae, 0x8b0, 0x8b2, 0x8b4, 0x8b6, 0x8b8, 0x8ba, 0x8bc, 0x8be, 0x8c0, 0x8c2, 0x8c4, 0x8c6, 0x8c8, 0x8ca, 0x8cc, 0x8ce, 0x8d0, 0x8d2, 0x8d4, 0x8d6, 0x8d8, 0x8da, 0x8dc, 0x8de, 0x8e0, 0x8e2, 0x8e4, 0x8e6, 0x8e8, 0x8ea, 0x8ec, 0x8ee, 0x8f0, 0x8f2, 0x8f4, 0x8f6, 0x8f8, 0x8fa, 0x8fc, 0x8fe, 0x900, 0x902, 0x904, 0x906, 0x908, 0x90a, 0x90c, 0x90e, 0x910, 0x912, 0x914, 0x916, 0x918, 0x91a, 0x91c, 0x91e, 0x920, 0x922, 0x924, 0x926, 0x928, 0x92a, 0x92c, 0x92e, 0x930, 0x932, 0x934, 0x936, 0x938, 0x93a, 0x93c, 0x93e, 0x940, 0x942, 0x944, 0x946, 0x948, 0x94a, 0x94c, 0x94e, 0x950, 0x952, 0x954, 0x956, 0x958, 0x95a, 0x95c, 0x95e, 0x960, 0x962, 0x964, 0x966, 0x968, 0x96a, 0x96c, 0x96e, 0x970, 0x972, 0x974, 0x976, 0x978, 0x97a, 0x97c, 0x97e, 0x980, 0x982, 0x984, 0x986, 0x988, 0x98a, 0x98c, 0x98e, 0x990, 0x992, 0x994, 0x996, 0x998, 0x99a, 0x99c, 0x99e, 0x9a0, 0x9a2, 0x9a4, 0x9a6, 0x9a8, 0x9aa, 0x9ac, 0x9ae, 0x9b0, 0x9b2, 0x9b4, 0x9b6, 0x9b8, 0x9ba, 0x9bc, 0x9be, 0x9c0, 0x9c2, 0x9c4, 0x9c6, 0x9c8, 0x9ca, 0x9cc, 0x9ce, 0x9d0, 0x9d2, 0x9d4, 0x9d6, 0x9d8, 0x9da, 0x9dc, 0x9de, 0x9e0, 0x9e2, 0x9e4, 0x9e6, 0x9e8, 0x9ea, 0x9ec, 0x9ee, 0x9f0, 0x9f2, 0x9f4, 0x9f6, 0x9f8, 0x9fa, 0x9fc, 0x9fe, 0xa00, 0xa02, 0xa04, 0xa06, 0xa08, 0xa0a, 0xa0c, 0xa0e, 0xa10, 0xa12, 0xa14, 0xa16, 0xa18, 0xa1a, 0xa1c, 0xa1e, 0xa20, 0xa22, 0xa24, 0xa26, 0xa28, 0xa2a, 0xa2c, 0xa2e, 0xa30, 0xa32, 0xa34, 0xa36, 0xa38, 0xa3a, 0xa3c, 0xa3e, 0xa40, 0xa42, 0xa44, 0xa46, 0xa48, 0xa4a, 0xa4c, 0xa4e, 0xa50, 0xa52, 0xa54, 0xa56, 0xa58, 0xa5a, 0xa5c, 0xa5e, 0xa60, 0xa62, 0xa64, 0xa66, 0xa68, 0xa6a, 0xa6c, 0xa6e, 0xa70, 0xa72, 0xa74, 0xa76, 0xa78, 0xa7a, 0xa7c, 0xa7e, 0xa80, 0xa82, 0xa84, 0xa86, 0xa88, 0xa8a, 0xa8c, 0xa8e, 0xa90, 0xa92, 0xa94, 0xa96, 0xa98, 0xa9a, 0xa9c, 0xa9e, 0xaa0, 0xaa2, 0xaa4, 0xaa6, 0xaa8, 0xaaa, 0xaac, 0xaae, 0xab0, 0xab2, 0xab4, 0xab6, 0xab8, 0xaba, 0xabc, 0xabe, 0xac0, 0xac2, 0xac4, 0xac6, 0xac8, 0xaca, 0xacc, 0xace, 0xad0, 0xad2, 0xad4, 0xad6, 0xad8, 0xada, 0xadc, 0xade, 0xae0, 0xae2, 0xae4, 0xae6, 0xae8, 0xaea, 0xaec, 0xaee, 0xaf0, 0xaf2, 0xaf4, 0xaf6, 0xaf8, 0xafa, 0xafc, 0xafe, 0xb00, 0xb02, 0xb04, 0xb06, 0xb08, 0xb0a, 0xb0c, 0xb0e, 0xb10, 0xb12, 0xb14, 0xb16, 0xb18, 0xb1a, 0xb1c, 0xb1e, 0xb20, 0xb22, 0xb24, 0xb26, 0xb28, 0xb2a, 0xb2c, 0xb2e, 0xb30, 0xb32, 0xb34, 0xb36, 0xb38, 0xb3a, 0xb3c, 0xb3e, 0xb40, 0xb42, 0xb44, 0xb46, 0xb48, 0xb4a, 0xb4c, 0xb4e, 0xb50, 0xb52, 0xb54, 0xb56, 0xb58, 0xb5a, 0xb5c, 0xb5e, 0xb60, 0xb62, 0xb64, 0xb66, 0xb68, 0xb6a, 0xb6c, 0xb6e, 0xb70, 0xb72, 0xb74, 0xb76, 0xb78, 0xb7a, 0xb7c, 0xb7e, 0xb80, 0xb82, 0xb84, 0xb86, 0xb88, 0xb8a, 0xb8c, 0xb8e, 0xb90, 0xb92, 0xb94, 0xb96, 0xb98, 0xb9a, 0xb9c, 0xb9e, 0xba0, 0xba2, 0xba4, 0xba6, 0xba8, 0xbaa, 0xbac, 0xbae, 0xbb0, 0xbb2, 0xbb4, 0xbb6, 0xbb8, 0xbba, 0xbbc, 0xbbe, 0xbc0, 0xbc2, 0xbc4, 0xbc6, 0xbc8, 0xbca, 0xbcc, 0xbce, 0xbd0, 0xbd2, 0xbd4, 0xbd6, 0xbd8, 0xbda, 0xbdc, 0xbde, 0xbe0, 0xbe2, 0xbe4, 0xbe6, 0xbe8, 0xbea, 0xbec, 0xbee, 0xbf0, 0xbf2, 0xbf4, 0xbf6, 0xbf8, 0xbfa, 0xbfc, 0xbfe, 0xc00, 0xc02, 0xc04, 0xc06, 0xc08, 0xc0a, 0xc0c, 0xc0e, 0xc10, 0xc12, 0xc14, 0xc16, 0xc18, 0xc1a, 0xc1c, 0xc1e, 0xc20, 0xc22, 0xc24, 0xc26, 0xc28, 0xc2a, 0xc2c, 0xc2e, 0xc30, 0xc32, 0xc34, 0xc36, 0xc38, 0xc3a, 0xc3c, 0xc3e, 0xc40, 0xc42, 0xc44, 0xc46, 0xc48, 0xc4a, 0xc4c, 0xc4e, 0xc50, 0xc52, 0xc54, 0xc56, 0xc58, 0xc5a, 0xc5c, 0xc5e, 0xc60, 0xc62, 0xc64, 0xc66, 0xc68, 0xc6a, 0xc6c, 0xc6e, 0xc70, 0xc72, 0xc74, 0xc76, 0xc78, 0xc7a, 0xc7c, 0xc7e, 0xc80, 0xc82, 0xc84, 0xc86, 0xc88, 0xc8a, 0xc8c, 0xc8e, 0xc90, 0xc92, 0xc94, 0xc96, 0xc98, 0xc9a, 0xc9c, 0xc9e, 0xca0, 0xca2, 0xca4, 0xca6, 0xca8, 0xcaa, 0xcac, 0xcae, 0xcb0, 0xcb2, 0xcb4, 0xcb6, 0xcb8, 0xcba, 0xcbc, 0xcbe, 0xcc0, 0xcc2, 0xcc4, 0xcc6, 0xcc8, 0xcca, 0xccc, 0xcce, 0xcd0, 0xcd2, 0xcd4, 0xcd6, 0xcd8, 0xcda, 0xcdc, 0xcde, 0xce0, 0xce2, 0xce4, 0xce6, 0xce8, 0xcea, 0xcec, 0xcee, 0xcf0, 0xcf2, 0xcf4, 0xcf6, 0xcf8, 0xcfa, 0xcfc, 0xcfe, 0xd00, 0xd02, 0xd04, 0xd06, 0xd08, 0xd0a, 0xd0c, 0xd0e, 0xd10, 0xd12, 0xd14, 0xd16, 0xd18, 0xd1a, 0xd1c, 0xd1e, 0xd20, 0xd22, 0xd24, 0xd26, 0xd28, 0xd2a, 0xd2c, 0xd2e, 0xd30, 0xd32, 0xd34, 0xd36, 0xd38, 0xd3a, 0xd3c, 0xd3e, 0xd40, 0xd42, 0xd44, 0xd46, 0xd48, 0xd4a, 0xd4c, 0xd4e, 0xd50, 0xd52, 0xd54, 0xd56, 0xd58, 0xd5a, 0xd5c, 0xd5e, 0xd60, 0xd62, 0xd64, 0xd66, 0xd68, 0xd6a, 0xd6c, 0xd6e, 0xd70, 0xd72, 0xd74, 0xd76, 0xd78, 0xd7a, 0xd7c, 0xd7e, 0xd80, 0xd82, 0xd84, 0xd86, 0xd88, 0xd8a, 0xd8c, 0xd8e, 0xd90, 0xd92, 0xd94, 0xd96, 0xd98, 0xd9a, 0xd9c, 0xd9e, 0xda0, 0xda2, 0xda4, 0xda6, 0xda8, 0xdaa, 0xdac, 0xdae, 0xdb0, 0xdb2, 0xdb4, 0xdb6, 0xdb8, 0xdba, 0xdbc, 0xdbe, 0xdc0, 0xdc2, 0xdc4, 0xdc6, 0xdc8, 0xdca, 0xdcc, 0xdce, 0xdd0, 0xdd2, 0xdd4, 0xdd6, 0xdd8, 0xdda, 0xddc, 0xdde, 0xde0, 0xde2, 0xde4, 0xde6, 0xde8, 0xdea, 0xdec, 0xdee, 0xdf0, 0xdf2, 0xdf4, 0xdf6, 0xdf8, 0xdfa, 0xdfc, 0xdfe, 0xe00, 0xe02, 0xe04, 0xe06, 0xe08, 0xe0a, 0xe0c, 0xe0e, 0xe10, 0xe12, 0xe14, 0xe16, 0xe18, 0xe1a, 0xe1c, 0xe1e, 0xe20, 0xe22, 0xe24, 0xe26, 0xe28, 0xe2a, 0xe2c, 0xe2e, 0xe30, 0xe32, 0xe34, 0xe36, 0xe38, 0xe3a, 0xe3c, 0xe3e, 0xe40, 0xe42, 0xe44, 0xe46, 0xe48, 0xe4a, 0xe4c, 0xe4e, 0xe50, 0xe52, 0xe54, 0xe56, 0xe58, 0xe5a, 0xe5c, 0xe5e, 0xe60, 0xe62, 0xe64, 0xe66, 0xe68, 0xe6a, 0xe6c, 0xe6e, 0xe70, 0xe72, 0xe74, 0xe76, 0xe78, 0xe7a, 0xe7c, 0xe7e, 0xe80, 0xe82, 0xe84, 0xe86, 0xe88, 0xe8a, 0xe8c, 0xe8e, 0xe90, 0xe92, 0xe94, 0xe96, 0xe98, 0xe9a, 0xe9c, 0xe9e, 0xea0, 0xea2, 0xea4, 0xea6, 0xea8, 0xeaa, 0xeac, 0xeae, 0xeb0, 0xeb2, 0xeb4, 0xeb6, 0xeb8, 0xeba, 0xebc, 0xebe, 0xec0, 0xec2, 0xec4, 0xec6, 0xec8, 0xeca, 0xecc, 0xece, 0xed0, 0xed2, 0xed4, 0xed6, 0xed8, 0xeda, 0xedc, 0xede, 0xee0, 0xee2, 0xee4, 0xee6, 0xee8, 0xeea, 0xeec, 0xeee, 0xef0, 0xef2, 0xef4, 0xef6, 0xef8, 0xefa, 0xefc, 0xefe, 0xf00, 0xf02, 0xf04, 0xf06, 0xf08, 0xf0a, 0xf0c, 0xf0e, 0xf10, 0xf12, 0xf14, 0xf16, 0xf18, 0xf1a, 0xf1c, 0xf1e, 0xf20, 0xf22, 0xf24, 0xf26, 0xf28, 0xf2a, 0xf2c, 0xf2e, 0xf30, 0xf32, 0xf34, 0xf36, 0xf38, 0xf3a, 0xf3c, 0xf3e, 0xf40, 0xf42, 0xf44, 0xf46, 0xf48, 0xf4a, 0xf4c, 0xf4e, 0xf50, 0xf52, 0xf54, 0xf56, 0xf58, 0xf5a, 0xf5c, 0xf5e, 0xf60, 0xf62, 0xf64, 0xf66, 0xf68, 0xf6a, 0xf6c, 0xf6e, 0xf70, 0xf72, 0xf74, 0xf76, 0xf78, 0xf7a, 0xf7c, 0xf7e, 0xf80, 0xf82, 0xf84, 0xf86, 0xf88, 0xf8a, 0xf8c, 0xf8e, 0xf90, 0xf92, 0xf94, 0xf96, 0xf98, 0xf9a, 0xf9c, 0xf9e, 0xfa0, 0xfa2, 0xfa4, 0xfa6, 0xfa8, 0xfaa, 0xfac, 0xfae, 0xfb0, 0xfb2, 0xfb4, 0xfb6, 0xfb8, 0xfba, 0xfbc, 0xfbe, 0xfc0, 0xfc2, 0xfc4, 0xfc6, 0xfc8, 0xfca, 0xfcc, 0xfce, 0xfd0, 0xfd2, 0xfd4, 0xfd6, 0xfd8, 0xfda, 0xfdc, 0xfde, 0xfe0, 0xfe2, 0xfe4, 0xfe6, 0xfe8, 0xfea, 0xfec, 0xfee, 0xff0, 0xff2, 0xff4, 0xff6, 0xff8, 0xffa, 0xffc, 0xffe, 0xffe, 0xffc, 0xffa, 0xff8, 0xff6, 0xff4, 0xff2, 0xff0, 0xfee, 0xfec, 0xfea, 0xfe8, 0xfe6, 0xfe4, 0xfe2, 0xfe0, 0xfde, 0xfdc, 0xfda, 0xfd8, 0xfd6, 0xfd4, 0xfd2, 0xfd0, 0xfce, 0xfcc, 0xfca, 0xfc8, 0xfc6, 0xfc4, 0xfc2, 0xfc0, 0xfbe, 0xfbc, 0xfba, 0xfb8, 0xfb6, 0xfb4, 0xfb2, 0xfb0, 0xfae, 0xfac, 0xfaa, 0xfa8, 0xfa6, 0xfa4, 0xfa2, 0xfa0, 0xf9e, 0xf9c, 0xf9a, 0xf98, 0xf96, 0xf94, 0xf92, 0xf90, 0xf8e, 0xf8c, 0xf8a, 0xf88, 0xf86, 0xf84, 0xf82, 0xf80, 0xf7e, 0xf7c, 0xf7a, 0xf78, 0xf76, 0xf74, 0xf72, 0xf70, 0xf6e, 0xf6c, 0xf6a, 0xf68, 0xf66, 0xf64, 0xf62, 0xf60, 0xf5e, 0xf5c, 0xf5a, 0xf58, 0xf56, 0xf54, 0xf52, 0xf50, 0xf4e, 0xf4c, 0xf4a, 0xf48, 0xf46, 0xf44, 0xf42, 0xf40, 0xf3e, 0xf3c, 0xf3a, 0xf38, 0xf36, 0xf34, 0xf32, 0xf30, 0xf2e, 0xf2c, 0xf2a, 0xf28, 0xf26, 0xf24, 0xf22, 0xf20, 0xf1e, 0xf1c, 0xf1a, 0xf18, 0xf16, 0xf14, 0xf12, 0xf10, 0xf0e, 0xf0c, 0xf0a, 0xf08, 0xf06, 0xf04, 0xf02, 0xf00, 0xefe, 0xefc, 0xefa, 0xef8, 0xef6, 0xef4, 0xef2, 0xef0, 0xeee, 0xeec, 0xeea, 0xee8, 0xee6, 0xee4, 0xee2, 0xee0, 0xede, 0xedc, 0xeda, 0xed8, 0xed6, 0xed4, 0xed2, 0xed0, 0xece, 0xecc, 0xeca, 0xec8, 0xec6, 0xec4, 0xec2, 0xec0, 0xebe, 0xebc, 0xeba, 0xeb8, 0xeb6, 0xeb4, 0xeb2, 0xeb0, 0xeae, 0xeac, 0xeaa, 0xea8, 0xea6, 0xea4, 0xea2, 0xea0, 0xe9e, 0xe9c, 0xe9a, 0xe98, 0xe96, 0xe94, 0xe92, 0xe90, 0xe8e, 0xe8c, 0xe8a, 0xe88, 0xe86, 0xe84, 0xe82, 0xe80, 0xe7e, 0xe7c, 0xe7a, 0xe78, 0xe76, 0xe74, 0xe72, 0xe70, 0xe6e, 0xe6c, 0xe6a, 0xe68, 0xe66, 0xe64, 0xe62, 0xe60, 0xe5e, 0xe5c, 0xe5a, 0xe58, 0xe56, 0xe54, 0xe52, 0xe50, 0xe4e, 0xe4c, 0xe4a, 0xe48, 0xe46, 0xe44, 0xe42, 0xe40, 0xe3e, 0xe3c, 0xe3a, 0xe38, 0xe36, 0xe34, 0xe32, 0xe30, 0xe2e, 0xe2c, 0xe2a, 0xe28, 0xe26, 0xe24, 0xe22, 0xe20, 0xe1e, 0xe1c, 0xe1a, 0xe18, 0xe16, 0xe14, 0xe12, 0xe10, 0xe0e, 0xe0c, 0xe0a, 0xe08, 0xe06, 0xe04, 0xe02, 0xe00, 0xdfe, 0xdfc, 0xdfa, 0xdf8, 0xdf6, 0xdf4, 0xdf2, 0xdf0, 0xdee, 0xdec, 0xdea, 0xde8, 0xde6, 0xde4, 0xde2, 0xde0, 0xdde, 0xddc, 0xdda, 0xdd8, 0xdd6, 0xdd4, 0xdd2, 0xdd0, 0xdce, 0xdcc, 0xdca, 0xdc8, 0xdc6, 0xdc4, 0xdc2, 0xdc0, 0xdbe, 0xdbc, 0xdba, 0xdb8, 0xdb6, 0xdb4, 0xdb2, 0xdb0, 0xdae, 0xdac, 0xdaa, 0xda8, 0xda6, 0xda4, 0xda2, 0xda0, 0xd9e, 0xd9c, 0xd9a, 0xd98, 0xd96, 0xd94, 0xd92, 0xd90, 0xd8e, 0xd8c, 0xd8a, 0xd88, 0xd86, 0xd84, 0xd82, 0xd80, 0xd7e, 0xd7c, 0xd7a, 0xd78, 0xd76, 0xd74, 0xd72, 0xd70, 0xd6e, 0xd6c, 0xd6a, 0xd68, 0xd66, 0xd64, 0xd62, 0xd60, 0xd5e, 0xd5c, 0xd5a, 0xd58, 0xd56, 0xd54, 0xd52, 0xd50, 0xd4e, 0xd4c, 0xd4a, 0xd48, 0xd46, 0xd44, 0xd42, 0xd40, 0xd3e, 0xd3c, 0xd3a, 0xd38, 0xd36, 0xd34, 0xd32, 0xd30, 0xd2e, 0xd2c, 0xd2a, 0xd28, 0xd26, 0xd24, 0xd22, 0xd20, 0xd1e, 0xd1c, 0xd1a, 0xd18, 0xd16, 0xd14, 0xd12, 0xd10, 0xd0e, 0xd0c, 0xd0a, 0xd08, 0xd06, 0xd04, 0xd02, 0xd00, 0xcfe, 0xcfc, 0xcfa, 0xcf8, 0xcf6, 0xcf4, 0xcf2, 0xcf0, 0xcee, 0xcec, 0xcea, 0xce8, 0xce6, 0xce4, 0xce2, 0xce0, 0xcde, 0xcdc, 0xcda, 0xcd8, 0xcd6, 0xcd4, 0xcd2, 0xcd0, 0xcce, 0xccc, 0xcca, 0xcc8, 0xcc6, 0xcc4, 0xcc2, 0xcc0, 0xcbe, 0xcbc, 0xcba, 0xcb8, 0xcb6, 0xcb4, 0xcb2, 0xcb0, 0xcae, 0xcac, 0xcaa, 0xca8, 0xca6, 0xca4, 0xca2, 0xca0, 0xc9e, 0xc9c, 0xc9a, 0xc98, 0xc96, 0xc94, 0xc92, 0xc90, 0xc8e, 0xc8c, 0xc8a, 0xc88, 0xc86, 0xc84, 0xc82, 0xc80, 0xc7e, 0xc7c, 0xc7a, 0xc78, 0xc76, 0xc74, 0xc72, 0xc70, 0xc6e, 0xc6c, 0xc6a, 0xc68, 0xc66, 0xc64, 0xc62, 0xc60, 0xc5e, 0xc5c, 0xc5a, 0xc58, 0xc56, 0xc54, 0xc52, 0xc50, 0xc4e, 0xc4c, 0xc4a, 0xc48, 0xc46, 0xc44, 0xc42, 0xc40, 0xc3e, 0xc3c, 0xc3a, 0xc38, 0xc36, 0xc34, 0xc32, 0xc30, 0xc2e, 0xc2c, 0xc2a, 0xc28, 0xc26, 0xc24, 0xc22, 0xc20, 0xc1e, 0xc1c, 0xc1a, 0xc18, 0xc16, 0xc14, 0xc12, 0xc10, 0xc0e, 0xc0c, 0xc0a, 0xc08, 0xc06, 0xc04, 0xc02, 0xc00, 0xbfe, 0xbfc, 0xbfa, 0xbf8, 0xbf6, 0xbf4, 0xbf2, 0xbf0, 0xbee, 0xbec, 0xbea, 0xbe8, 0xbe6, 0xbe4, 0xbe2, 0xbe0, 0xbde, 0xbdc, 0xbda, 0xbd8, 0xbd6, 0xbd4, 0xbd2, 0xbd0, 0xbce, 0xbcc, 0xbca, 0xbc8, 0xbc6, 0xbc4, 0xbc2, 0xbc0, 0xbbe, 0xbbc, 0xbba, 0xbb8, 0xbb6, 0xbb4, 0xbb2, 0xbb0, 0xbae, 0xbac, 0xbaa, 0xba8, 0xba6, 0xba4, 0xba2, 0xba0, 0xb9e, 0xb9c, 0xb9a, 0xb98, 0xb96, 0xb94, 0xb92, 0xb90, 0xb8e, 0xb8c, 0xb8a, 0xb88, 0xb86, 0xb84, 0xb82, 0xb80, 0xb7e, 0xb7c, 0xb7a, 0xb78, 0xb76, 0xb74, 0xb72, 0xb70, 0xb6e, 0xb6c, 0xb6a, 0xb68, 0xb66, 0xb64, 0xb62, 0xb60, 0xb5e, 0xb5c, 0xb5a, 0xb58, 0xb56, 0xb54, 0xb52, 0xb50, 0xb4e, 0xb4c, 0xb4a, 0xb48, 0xb46, 0xb44, 0xb42, 0xb40, 0xb3e, 0xb3c, 0xb3a, 0xb38, 0xb36, 0xb34, 0xb32, 0xb30, 0xb2e, 0xb2c, 0xb2a, 0xb28, 0xb26, 0xb24, 0xb22, 0xb20, 0xb1e, 0xb1c, 0xb1a, 0xb18, 0xb16, 0xb14, 0xb12, 0xb10, 0xb0e, 0xb0c, 0xb0a, 0xb08, 0xb06, 0xb04, 0xb02, 0xb00, 0xafe, 0xafc, 0xafa, 0xaf8, 0xaf6, 0xaf4, 0xaf2, 0xaf0, 0xaee, 0xaec, 0xaea, 0xae8, 0xae6, 0xae4, 0xae2, 0xae0, 0xade, 0xadc, 0xada, 0xad8, 0xad6, 0xad4, 0xad2, 0xad0, 0xace, 0xacc, 0xaca, 0xac8, 0xac6, 0xac4, 0xac2, 0xac0, 0xabe, 0xabc, 0xaba, 0xab8, 0xab6, 0xab4, 0xab2, 0xab0, 0xaae, 0xaac, 0xaaa, 0xaa8, 0xaa6, 0xaa4, 0xaa2, 0xaa0, 0xa9e, 0xa9c, 0xa9a, 0xa98, 0xa96, 0xa94, 0xa92, 0xa90, 0xa8e, 0xa8c, 0xa8a, 0xa88, 0xa86, 0xa84, 0xa82, 0xa80, 0xa7e, 0xa7c, 0xa7a, 0xa78, 0xa76, 0xa74, 0xa72, 0xa70, 0xa6e, 0xa6c, 0xa6a, 0xa68, 0xa66, 0xa64, 0xa62, 0xa60, 0xa5e, 0xa5c, 0xa5a, 0xa58, 0xa56, 0xa54, 0xa52, 0xa50, 0xa4e, 0xa4c, 0xa4a, 0xa48, 0xa46, 0xa44, 0xa42, 0xa40, 0xa3e, 0xa3c, 0xa3a, 0xa38, 0xa36, 0xa34, 0xa32, 0xa30, 0xa2e, 0xa2c, 0xa2a, 0xa28, 0xa26, 0xa24, 0xa22, 0xa20, 0xa1e, 0xa1c, 0xa1a, 0xa18, 0xa16, 0xa14, 0xa12, 0xa10, 0xa0e, 0xa0c, 0xa0a, 0xa08, 0xa06, 0xa04, 0xa02, 0xa00, 0x9fe, 0x9fc, 0x9fa, 0x9f8, 0x9f6, 0x9f4, 0x9f2, 0x9f0, 0x9ee, 0x9ec, 0x9ea, 0x9e8, 0x9e6, 0x9e4, 0x9e2, 0x9e0, 0x9de, 0x9dc, 0x9da, 0x9d8, 0x9d6, 0x9d4, 0x9d2, 0x9d0, 0x9ce, 0x9cc, 0x9ca, 0x9c8, 0x9c6, 0x9c4, 0x9c2, 0x9c0, 0x9be, 0x9bc, 0x9ba, 0x9b8, 0x9b6, 0x9b4, 0x9b2, 0x9b0, 0x9ae, 0x9ac, 0x9aa, 0x9a8, 0x9a6, 0x9a4, 0x9a2, 0x9a0, 0x99e, 0x99c, 0x99a, 0x998, 0x996, 0x994, 0x992, 0x990, 0x98e, 0x98c, 0x98a, 0x988, 0x986, 0x984, 0x982, 0x980, 0x97e, 0x97c, 0x97a, 0x978, 0x976, 0x974, 0x972, 0x970, 0x96e, 0x96c, 0x96a, 0x968, 0x966, 0x964, 0x962, 0x960, 0x95e, 0x95c, 0x95a, 0x958, 0x956, 0x954, 0x952, 0x950, 0x94e, 0x94c, 0x94a, 0x948, 0x946, 0x944, 0x942, 0x940, 0x93e, 0x93c, 0x93a, 0x938, 0x936, 0x934, 0x932, 0x930, 0x92e, 0x92c, 0x92a, 0x928, 0x926, 0x924, 0x922, 0x920, 0x91e, 0x91c, 0x91a, 0x918, 0x916, 0x914, 0x912, 0x910, 0x90e, 0x90c, 0x90a, 0x908, 0x906, 0x904, 0x902, 0x900, 0x8fe, 0x8fc, 0x8fa, 0x8f8, 0x8f6, 0x8f4, 0x8f2, 0x8f0, 0x8ee, 0x8ec, 0x8ea, 0x8e8, 0x8e6, 0x8e4, 0x8e2, 0x8e0, 0x8de, 0x8dc, 0x8da, 0x8d8, 0x8d6, 0x8d4, 0x8d2, 0x8d0, 0x8ce, 0x8cc, 0x8ca, 0x8c8, 0x8c6, 0x8c4, 0x8c2, 0x8c0, 0x8be, 0x8bc, 0x8ba, 0x8b8, 0x8b6, 0x8b4, 0x8b2, 0x8b0, 0x8ae, 0x8ac, 0x8aa, 0x8a8, 0x8a6, 0x8a4, 0x8a2, 0x8a0, 0x89e, 0x89c, 0x89a, 0x898, 0x896, 0x894, 0x892, 0x890, 0x88e, 0x88c, 0x88a, 0x888, 0x886, 0x884, 0x882, 0x880, 0x87e, 0x87c, 0x87a, 0x878, 0x876, 0x874, 0x872, 0x870, 0x86e, 0x86c, 0x86a, 0x868, 0x866, 0x864, 0x862, 0x860, 0x85e, 0x85c, 0x85a, 0x858, 0x856, 0x854, 0x852, 0x850, 0x84e, 0x84c, 0x84a, 0x848, 0x846, 0x844, 0x842, 0x840, 0x83e, 0x83c, 0x83a, 0x838, 0x836, 0x834, 0x832, 0x830, 0x82e, 0x82c, 0x82a, 0x828, 0x826, 0x824, 0x822, 0x820, 0x81e, 0x81c, 0x81a, 0x818, 0x816, 0x814, 0x812, 0x810, 0x80e, 0x80c, 0x80a, 0x808, 0x806, 0x804, 0x802, 0x800, 0x7fe, 0x7fc, 0x7fa, 0x7f8, 0x7f6, 0x7f4, 0x7f2, 0x7f0, 0x7ee, 0x7ec, 0x7ea, 0x7e8, 0x7e6, 0x7e4, 0x7e2, 0x7e0, 0x7de, 0x7dc, 0x7da, 0x7d8, 0x7d6, 0x7d4, 0x7d2, 0x7d0, 0x7ce, 0x7cc, 0x7ca, 0x7c8, 0x7c6, 0x7c4, 0x7c2, 0x7c0, 0x7be, 0x7bc, 0x7ba, 0x7b8, 0x7b6, 0x7b4, 0x7b2, 0x7b0, 0x7ae, 0x7ac, 0x7aa, 0x7a8, 0x7a6, 0x7a4, 0x7a2, 0x7a0, 0x79e, 0x79c, 0x79a, 0x798, 0x796, 0x794, 0x792, 0x790, 0x78e, 0x78c, 0x78a, 0x788, 0x786, 0x784, 0x782, 0x780, 0x77e, 0x77c, 0x77a, 0x778, 0x776, 0x774, 0x772, 0x770, 0x76e, 0x76c, 0x76a, 0x768, 0x766, 0x764, 0x762, 0x760, 0x75e, 0x75c, 0x75a, 0x758, 0x756, 0x754, 0x752, 0x750, 0x74e, 0x74c, 0x74a, 0x748, 0x746, 0x744, 0x742, 0x740, 0x73e, 0x73c, 0x73a, 0x738, 0x736, 0x734, 0x732, 0x730, 0x72e, 0x72c, 0x72a, 0x728, 0x726, 0x724, 0x722, 0x720, 0x71e, 0x71c, 0x71a, 0x718, 0x716, 0x714, 0x712, 0x710, 0x70e, 0x70c, 0x70a, 0x708, 0x706, 0x704, 0x702, 0x700, 0x6fe, 0x6fc, 0x6fa, 0x6f8, 0x6f6, 0x6f4, 0x6f2, 0x6f0, 0x6ee, 0x6ec, 0x6ea, 0x6e8, 0x6e6, 0x6e4, 0x6e2, 0x6e0, 0x6de, 0x6dc, 0x6da, 0x6d8, 0x6d6, 0x6d4, 0x6d2, 0x6d0, 0x6ce, 0x6cc, 0x6ca, 0x6c8, 0x6c6, 0x6c4, 0x6c2, 0x6c0, 0x6be, 0x6bc, 0x6ba, 0x6b8, 0x6b6, 0x6b4, 0x6b2, 0x6b0, 0x6ae, 0x6ac, 0x6aa, 0x6a8, 0x6a6, 0x6a4, 0x6a2, 0x6a0, 0x69e, 0x69c, 0x69a, 0x698, 0x696, 0x694, 0x692, 0x690, 0x68e, 0x68c, 0x68a, 0x688, 0x686, 0x684, 0x682, 0x680, 0x67e, 0x67c, 0x67a, 0x678, 0x676, 0x674, 0x672, 0x670, 0x66e, 0x66c, 0x66a, 0x668, 0x666, 0x664, 0x662, 0x660, 0x65e, 0x65c, 0x65a, 0x658, 0x656, 0x654, 0x652, 0x650, 0x64e, 0x64c, 0x64a, 0x648, 0x646, 0x644, 0x642, 0x640, 0x63e, 0x63c, 0x63a, 0x638, 0x636, 0x634, 0x632, 0x630, 0x62e, 0x62c, 0x62a, 0x628, 0x626, 0x624, 0x622, 0x620, 0x61e, 0x61c, 0x61a, 0x618, 0x616, 0x614, 0x612, 0x610, 0x60e, 0x60c, 0x60a, 0x608, 0x606, 0x604, 0x602, 0x600, 0x5fe, 0x5fc, 0x5fa, 0x5f8, 0x5f6, 0x5f4, 0x5f2, 0x5f0, 0x5ee, 0x5ec, 0x5ea, 0x5e8, 0x5e6, 0x5e4, 0x5e2, 0x5e0, 0x5de, 0x5dc, 0x5da, 0x5d8, 0x5d6, 0x5d4, 0x5d2, 0x5d0, 0x5ce, 0x5cc, 0x5ca, 0x5c8, 0x5c6, 0x5c4, 0x5c2, 0x5c0, 0x5be, 0x5bc, 0x5ba, 0x5b8, 0x5b6, 0x5b4, 0x5b2, 0x5b0, 0x5ae, 0x5ac, 0x5aa, 0x5a8, 0x5a6, 0x5a4, 0x5a2, 0x5a0, 0x59e, 0x59c, 0x59a, 0x598, 0x596, 0x594, 0x592, 0x590, 0x58e, 0x58c, 0x58a, 0x588, 0x586, 0x584, 0x582, 0x580, 0x57e, 0x57c, 0x57a, 0x578, 0x576, 0x574, 0x572, 0x570, 0x56e, 0x56c, 0x56a, 0x568, 0x566, 0x564, 0x562, 0x560, 0x55e, 0x55c, 0x55a, 0x558, 0x556, 0x554, 0x552, 0x550, 0x54e, 0x54c, 0x54a, 0x548, 0x546, 0x544, 0x542, 0x540, 0x53e, 0x53c, 0x53a, 0x538, 0x536, 0x534, 0x532, 0x530, 0x52e, 0x52c, 0x52a, 0x528, 0x526, 0x524, 0x522, 0x520, 0x51e, 0x51c, 0x51a, 0x518, 0x516, 0x514, 0x512, 0x510, 0x50e, 0x50c, 0x50a, 0x508, 0x506, 0x504, 0x502, 0x500, 0x4fe, 0x4fc, 0x4fa, 0x4f8, 0x4f6, 0x4f4, 0x4f2, 0x4f0, 0x4ee, 0x4ec, 0x4ea, 0x4e8, 0x4e6, 0x4e4, 0x4e2, 0x4e0, 0x4de, 0x4dc, 0x4da, 0x4d8, 0x4d6, 0x4d4, 0x4d2, 0x4d0, 0x4ce, 0x4cc, 0x4ca, 0x4c8, 0x4c6, 0x4c4, 0x4c2, 0x4c0, 0x4be, 0x4bc, 0x4ba, 0x4b8, 0x4b6, 0x4b4, 0x4b2, 0x4b0, 0x4ae, 0x4ac, 0x4aa, 0x4a8, 0x4a6, 0x4a4, 0x4a2, 0x4a0, 0x49e, 0x49c, 0x49a, 0x498, 0x496, 0x494, 0x492, 0x490, 0x48e, 0x48c, 0x48a, 0x488, 0x486, 0x484, 0x482, 0x480, 0x47e, 0x47c, 0x47a, 0x478, 0x476, 0x474, 0x472, 0x470, 0x46e, 0x46c, 0x46a, 0x468, 0x466, 0x464, 0x462, 0x460, 0x45e, 0x45c, 0x45a, 0x458, 0x456, 0x454, 0x452, 0x450, 0x44e, 0x44c, 0x44a, 0x448, 0x446, 0x444, 0x442, 0x440, 0x43e, 0x43c, 0x43a, 0x438, 0x436, 0x434, 0x432, 0x430, 0x42e, 0x42c, 0x42a, 0x428, 0x426, 0x424, 0x422, 0x420, 0x41e, 0x41c, 0x41a, 0x418, 0x416, 0x414, 0x412, 0x410, 0x40e, 0x40c, 0x40a, 0x408, 0x406, 0x404, 0x402, 0x400, 0x3fe, 0x3fc, 0x3fa, 0x3f8, 0x3f6, 0x3f4, 0x3f2, 0x3f0, 0x3ee, 0x3ec, 0x3ea, 0x3e8, 0x3e6, 0x3e4, 0x3e2, 0x3e0, 0x3de, 0x3dc, 0x3da, 0x3d8, 0x3d6, 0x3d4, 0x3d2, 0x3d0, 0x3ce, 0x3cc, 0x3ca, 0x3c8, 0x3c6, 0x3c4, 0x3c2, 0x3c0, 0x3be, 0x3bc, 0x3ba, 0x3b8, 0x3b6, 0x3b4, 0x3b2, 0x3b0, 0x3ae, 0x3ac, 0x3aa, 0x3a8, 0x3a6, 0x3a4, 0x3a2, 0x3a0, 0x39e, 0x39c, 0x39a, 0x398, 0x396, 0x394, 0x392, 0x390, 0x38e, 0x38c, 0x38a, 0x388, 0x386, 0x384, 0x382, 0x380, 0x37e, 0x37c, 0x37a, 0x378, 0x376, 0x374, 0x372, 0x370, 0x36e, 0x36c, 0x36a, 0x368, 0x366, 0x364, 0x362, 0x360, 0x35e, 0x35c, 0x35a, 0x358, 0x356, 0x354, 0x352, 0x350, 0x34e, 0x34c, 0x34a, 0x348, 0x346, 0x344, 0x342, 0x340, 0x33e, 0x33c, 0x33a, 0x338, 0x336, 0x334, 0x332, 0x330, 0x32e, 0x32c, 0x32a, 0x328, 0x326, 0x324, 0x322, 0x320, 0x31e, 0x31c, 0x31a, 0x318, 0x316, 0x314, 0x312, 0x310, 0x30e, 0x30c, 0x30a, 0x308, 0x306, 0x304, 0x302, 0x300, 0x2fe, 0x2fc, 0x2fa, 0x2f8, 0x2f6, 0x2f4, 0x2f2, 0x2f0, 0x2ee, 0x2ec, 0x2ea, 0x2e8, 0x2e6, 0x2e4, 0x2e2, 0x2e0, 0x2de, 0x2dc, 0x2da, 0x2d8, 0x2d6, 0x2d4, 0x2d2, 0x2d0, 0x2ce, 0x2cc, 0x2ca, 0x2c8, 0x2c6, 0x2c4, 0x2c2, 0x2c0, 0x2be, 0x2bc, 0x2ba, 0x2b8, 0x2b6, 0x2b4, 0x2b2, 0x2b0, 0x2ae, 0x2ac, 0x2aa, 0x2a8, 0x2a6, 0x2a4, 0x2a2, 0x2a0, 0x29e, 0x29c, 0x29a, 0x298, 0x296, 0x294, 0x292, 0x290, 0x28e, 0x28c, 0x28a, 0x288, 0x286, 0x284, 0x282, 0x280, 0x27e, 0x27c, 0x27a, 0x278, 0x276, 0x274, 0x272, 0x270, 0x26e, 0x26c, 0x26a, 0x268, 0x266, 0x264, 0x262, 0x260, 0x25e, 0x25c, 0x25a, 0x258, 0x256, 0x254, 0x252, 0x250, 0x24e, 0x24c, 0x24a, 0x248, 0x246, 0x244, 0x242, 0x240, 0x23e, 0x23c, 0x23a, 0x238, 0x236, 0x234, 0x232, 0x230, 0x22e, 0x22c, 0x22a, 0x228, 0x226, 0x224, 0x222, 0x220, 0x21e, 0x21c, 0x21a, 0x218, 0x216, 0x214, 0x212, 0x210, 0x20e, 0x20c, 0x20a, 0x208, 0x206, 0x204, 0x202, 0x200, 0x1fe, 0x1fc, 0x1fa, 0x1f8, 0x1f6, 0x1f4, 0x1f2, 0x1f0, 0x1ee, 0x1ec, 0x1ea, 0x1e8, 0x1e6, 0x1e4, 0x1e2, 0x1e0, 0x1de, 0x1dc, 0x1da, 0x1d8, 0x1d6, 0x1d4, 0x1d2, 0x1d0, 0x1ce, 0x1cc, 0x1ca, 0x1c8, 0x1c6, 0x1c4, 0x1c2, 0x1c0, 0x1be, 0x1bc, 0x1ba, 0x1b8, 0x1b6, 0x1b4, 0x1b2, 0x1b0, 0x1ae, 0x1ac, 0x1aa, 0x1a8, 0x1a6, 0x1a4, 0x1a2, 0x1a0, 0x19e, 0x19c, 0x19a, 0x198, 0x196, 0x194, 0x192, 0x190, 0x18e, 0x18c, 0x18a, 0x188, 0x186, 0x184, 0x182, 0x180, 0x17e, 0x17c, 0x17a, 0x178, 0x176, 0x174, 0x172, 0x170, 0x16e, 0x16c, 0x16a, 0x168, 0x166, 0x164, 0x162, 0x160, 0x15e, 0x15c, 0x15a, 0x158, 0x156, 0x154, 0x152, 0x150, 0x14e, 0x14c, 0x14a, 0x148, 0x146, 0x144, 0x142, 0x140, 0x13e, 0x13c, 0x13a, 0x138, 0x136, 0x134, 0x132, 0x130, 0x12e, 0x12c, 0x12a, 0x128, 0x126, 0x124, 0x122, 0x120, 0x11e, 0x11c, 0x11a, 0x118, 0x116, 0x114, 0x112, 0x110, 0x10e, 0x10c, 0x10a, 0x108, 0x106, 0x104, 0x102, 0x100, 0x0fe, 0x0fc, 0x0fa, 0x0f8, 0x0f6, 0x0f4, 0x0f2, 0x0f0, 0x0ee, 0x0ec, 0x0ea, 0x0e8, 0x0e6, 0x0e4, 0x0e2, 0x0e0, 0x0de, 0x0dc, 0x0da, 0x0d8, 0x0d6, 0x0d4, 0x0d2, 0x0d0, 0x0ce, 0x0cc, 0x0ca, 0x0c8, 0x0c6, 0x0c4, 0x0c2, 0x0c0, 0x0be, 0x0bc, 0x0ba, 0x0b8, 0x0b6, 0x0b4, 0x0b2, 0x0b0, 0x0ae, 0x0ac, 0x0aa, 0x0a8, 0x0a6, 0x0a4, 0x0a2, 0x0a0, 0x09e, 0x09c, 0x09a, 0x098, 0x096, 0x094, 0x092, 0x090, 0x08e, 0x08c, 0x08a, 0x088, 0x086, 0x084, 0x082, 0x080, 0x07e, 0x07c, 0x07a, 0x078, 0x076, 0x074, 0x072, 0x070, 0x06e, 0x06c, 0x06a, 0x068, 0x066, 0x064, 0x062, 0x060, 0x05e, 0x05c, 0x05a, 0x058, 0x056, 0x054, 0x052, 0x050, 0x04e, 0x04c, 0x04a, 0x048, 0x046, 0x044, 0x042, 0x040, 0x03e, 0x03c, 0x03a, 0x038, 0x036, 0x034, 0x032, 0x030, 0x02e, 0x02c, 0x02a, 0x028, 0x026, 0x024, 0x022, 0x020, 0x01e, 0x01c, 0x01a, 0x018, 0x016, 0x014, 0x012, 0x010, 0x00e, 0x00c, 0x00a, 0x008, 0x006, 0x004, 0x002, 0x000 }, + new[] { 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008, 0x009, 0x00a, 0x00b, 0x00c, 0x00d, 0x00e, 0x00f, 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, 0x018, 0x019, 0x01a, 0x01b, 0x01c, 0x01d, 0x01e, 0x01f, 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, 0x028, 0x029, 0x02a, 0x02b, 0x02c, 0x02d, 0x02e, 0x02f, 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, 0x038, 0x039, 0x03a, 0x03b, 0x03c, 0x03d, 0x03e, 0x03f, 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, 0x048, 0x049, 0x04a, 0x04b, 0x04c, 0x04d, 0x04e, 0x04f, 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, 0x058, 0x059, 0x05a, 0x05b, 0x05c, 0x05d, 0x05e, 0x05f, 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, 0x068, 0x069, 0x06a, 0x06b, 0x06c, 0x06d, 0x06e, 0x06f, 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, 0x078, 0x079, 0x07a, 0x07b, 0x07c, 0x07d, 0x07e, 0x07f, 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, 0x088, 0x089, 0x08a, 0x08b, 0x08c, 0x08d, 0x08e, 0x08f, 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097, 0x098, 0x099, 0x09a, 0x09b, 0x09c, 0x09d, 0x09e, 0x09f, 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7, 0x0a8, 0x0a9, 0x0aa, 0x0ab, 0x0ac, 0x0ad, 0x0ae, 0x0af, 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7, 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bc, 0x0bd, 0x0be, 0x0bf, 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, 0x0c8, 0x0c9, 0x0ca, 0x0cb, 0x0cc, 0x0cd, 0x0ce, 0x0cf, 0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, 0x0d8, 0x0d9, 0x0da, 0x0db, 0x0dc, 0x0dd, 0x0de, 0x0df, 0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7, 0x0e8, 0x0e9, 0x0ea, 0x0eb, 0x0ec, 0x0ed, 0x0ee, 0x0ef, 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7, 0x0f8, 0x0f9, 0x0fa, 0x0fb, 0x0fc, 0x0fd, 0x0fe, 0x0ff, 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10a, 0x10b, 0x10c, 0x10d, 0x10e, 0x10f, 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, 0x118, 0x119, 0x11a, 0x11b, 0x11c, 0x11d, 0x11e, 0x11f, 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, 0x128, 0x129, 0x12a, 0x12b, 0x12c, 0x12d, 0x12e, 0x12f, 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, 0x138, 0x139, 0x13a, 0x13b, 0x13c, 0x13d, 0x13e, 0x13f, 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, 0x148, 0x149, 0x14a, 0x14b, 0x14c, 0x14d, 0x14e, 0x14f, 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, 0x158, 0x159, 0x15a, 0x15b, 0x15c, 0x15d, 0x15e, 0x15f, 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, 0x168, 0x169, 0x16a, 0x16b, 0x16c, 0x16d, 0x16e, 0x16f, 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, 0x178, 0x179, 0x17a, 0x17b, 0x17c, 0x17d, 0x17e, 0x17f, 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, 0x188, 0x189, 0x18a, 0x18b, 0x18c, 0x18d, 0x18e, 0x18f, 0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, 0x198, 0x199, 0x19a, 0x19b, 0x19c, 0x19d, 0x19e, 0x19f, 0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4, 0x1a5, 0x1a6, 0x1a7, 0x1a8, 0x1a9, 0x1aa, 0x1ab, 0x1ac, 0x1ad, 0x1ae, 0x1af, 0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4, 0x1b5, 0x1b6, 0x1b7, 0x1b8, 0x1b9, 0x1ba, 0x1bb, 0x1bc, 0x1bd, 0x1be, 0x1bf, 0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4, 0x1c5, 0x1c6, 0x1c7, 0x1c8, 0x1c9, 0x1ca, 0x1cb, 0x1cc, 0x1cd, 0x1ce, 0x1cf, 0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4, 0x1d5, 0x1d6, 0x1d7, 0x1d8, 0x1d9, 0x1da, 0x1db, 0x1dc, 0x1dd, 0x1de, 0x1df, 0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4, 0x1e5, 0x1e6, 0x1e7, 0x1e8, 0x1e9, 0x1ea, 0x1eb, 0x1ec, 0x1ed, 0x1ee, 0x1ef, 0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7, 0x1f8, 0x1f9, 0x1fa, 0x1fb, 0x1fc, 0x1fd, 0x1fe, 0x1ff, 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, 0x208, 0x209, 0x20a, 0x20b, 0x20c, 0x20d, 0x20e, 0x20f, 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, 0x218, 0x219, 0x21a, 0x21b, 0x21c, 0x21d, 0x21e, 0x21f, 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, 0x228, 0x229, 0x22a, 0x22b, 0x22c, 0x22d, 0x22e, 0x22f, 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, 0x238, 0x239, 0x23a, 0x23b, 0x23c, 0x23d, 0x23e, 0x23f, 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, 0x248, 0x249, 0x24a, 0x24b, 0x24c, 0x24d, 0x24e, 0x24f, 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, 0x258, 0x259, 0x25a, 0x25b, 0x25c, 0x25d, 0x25e, 0x25f, 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, 0x268, 0x269, 0x26a, 0x26b, 0x26c, 0x26d, 0x26e, 0x26f, 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, 0x278, 0x279, 0x27a, 0x27b, 0x27c, 0x27d, 0x27e, 0x27f, 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287, 0x288, 0x289, 0x28a, 0x28b, 0x28c, 0x28d, 0x28e, 0x28f, 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, 0x298, 0x299, 0x29a, 0x29b, 0x29c, 0x29d, 0x29e, 0x29f, 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7, 0x2a8, 0x2a9, 0x2aa, 0x2ab, 0x2ac, 0x2ad, 0x2ae, 0x2af, 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7, 0x2b8, 0x2b9, 0x2ba, 0x2bb, 0x2bc, 0x2bd, 0x2be, 0x2bf, 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc, 0x2cd, 0x2ce, 0x2cf, 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7, 0x2d8, 0x2d9, 0x2da, 0x2db, 0x2dc, 0x2dd, 0x2de, 0x2df, 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9, 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x2f9, 0x2fa, 0x2fb, 0x2fc, 0x2fd, 0x2fe, 0x2ff, 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, 0x308, 0x309, 0x30a, 0x30b, 0x30c, 0x30d, 0x30e, 0x30f, 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, 0x318, 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, 0x328, 0x329, 0x32a, 0x32b, 0x32c, 0x32d, 0x32e, 0x32f, 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, 0x338, 0x339, 0x33a, 0x33b, 0x33c, 0x33d, 0x33e, 0x33f, 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, 0x348, 0x349, 0x34a, 0x34b, 0x34c, 0x34d, 0x34e, 0x34f, 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, 0x358, 0x359, 0x35a, 0x35b, 0x35c, 0x35d, 0x35e, 0x35f, 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, 0x368, 0x369, 0x36a, 0x36b, 0x36c, 0x36d, 0x36e, 0x36f, 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, 0x378, 0x379, 0x37a, 0x37b, 0x37c, 0x37d, 0x37e, 0x37f, 0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387, 0x388, 0x389, 0x38a, 0x38b, 0x38c, 0x38d, 0x38e, 0x38f, 0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a2, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x3ac, 0x3ad, 0x3ae, 0x3af, 0x3b0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, 0x3b8, 0x3b9, 0x3ba, 0x3bb, 0x3bc, 0x3bd, 0x3be, 0x3bf, 0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3cc, 0x3cd, 0x3ce, 0x3cf, 0x3d0, 0x3d1, 0x3d2, 0x3d3, 0x3d4, 0x3d5, 0x3d6, 0x3d7, 0x3d8, 0x3d9, 0x3da, 0x3db, 0x3dc, 0x3dd, 0x3de, 0x3df, 0x3e0, 0x3e1, 0x3e2, 0x3e3, 0x3e4, 0x3e5, 0x3e6, 0x3e7, 0x3e8, 0x3e9, 0x3ea, 0x3eb, 0x3ec, 0x3ed, 0x3ee, 0x3ef, 0x3f0, 0x3f1, 0x3f2, 0x3f3, 0x3f4, 0x3f5, 0x3f6, 0x3f7, 0x3f8, 0x3f9, 0x3fa, 0x3fb, 0x3fc, 0x3fd, 0x3fe, 0x3ff, 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0x40d, 0x40e, 0x40f, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f, 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45a, 0x45b, 0x45c, 0x45d, 0x45e, 0x45f, 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, 0x468, 0x469, 0x46a, 0x46b, 0x46c, 0x46d, 0x46e, 0x46f, 0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, 0x478, 0x479, 0x47a, 0x47b, 0x47c, 0x47d, 0x47e, 0x47f, 0x480, 0x481, 0x482, 0x483, 0x484, 0x485, 0x486, 0x487, 0x488, 0x489, 0x48a, 0x48b, 0x48c, 0x48d, 0x48e, 0x48f, 0x490, 0x491, 0x492, 0x493, 0x494, 0x495, 0x496, 0x497, 0x498, 0x499, 0x49a, 0x49b, 0x49c, 0x49d, 0x49e, 0x49f, 0x4a0, 0x4a1, 0x4a2, 0x4a3, 0x4a4, 0x4a5, 0x4a6, 0x4a7, 0x4a8, 0x4a9, 0x4aa, 0x4ab, 0x4ac, 0x4ad, 0x4ae, 0x4af, 0x4b0, 0x4b1, 0x4b2, 0x4b3, 0x4b4, 0x4b5, 0x4b6, 0x4b7, 0x4b8, 0x4b9, 0x4ba, 0x4bb, 0x4bc, 0x4bd, 0x4be, 0x4bf, 0x4c0, 0x4c1, 0x4c2, 0x4c3, 0x4c4, 0x4c5, 0x4c6, 0x4c7, 0x4c8, 0x4c9, 0x4ca, 0x4cb, 0x4cc, 0x4cd, 0x4ce, 0x4cf, 0x4d0, 0x4d1, 0x4d2, 0x4d3, 0x4d4, 0x4d5, 0x4d6, 0x4d7, 0x4d8, 0x4d9, 0x4da, 0x4db, 0x4dc, 0x4dd, 0x4de, 0x4df, 0x4e0, 0x4e1, 0x4e2, 0x4e3, 0x4e4, 0x4e5, 0x4e6, 0x4e7, 0x4e8, 0x4e9, 0x4ea, 0x4eb, 0x4ec, 0x4ed, 0x4ee, 0x4ef, 0x4f0, 0x4f1, 0x4f2, 0x4f3, 0x4f4, 0x4f5, 0x4f6, 0x4f7, 0x4f8, 0x4f9, 0x4fa, 0x4fb, 0x4fc, 0x4fd, 0x4fe, 0x4ff, 0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, 0x508, 0x509, 0x50a, 0x50b, 0x50c, 0x50d, 0x50e, 0x50f, 0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, 0x518, 0x519, 0x51a, 0x51b, 0x51c, 0x51d, 0x51e, 0x51f, 0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, 0x528, 0x529, 0x52a, 0x52b, 0x52c, 0x52d, 0x52e, 0x52f, 0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f, 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, 0x558, 0x559, 0x55a, 0x55b, 0x55c, 0x55d, 0x55e, 0x55f, 0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, 0x568, 0x569, 0x56a, 0x56b, 0x56c, 0x56d, 0x56e, 0x56f, 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, 0x578, 0x579, 0x57a, 0x57b, 0x57c, 0x57d, 0x57e, 0x57f, 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0x587, 0x588, 0x589, 0x58a, 0x58b, 0x58c, 0x58d, 0x58e, 0x58f, 0x590, 0x591, 0x592, 0x593, 0x594, 0x595, 0x596, 0x597, 0x598, 0x599, 0x59a, 0x59b, 0x59c, 0x59d, 0x59e, 0x59f, 0x5a0, 0x5a1, 0x5a2, 0x5a3, 0x5a4, 0x5a5, 0x5a6, 0x5a7, 0x5a8, 0x5a9, 0x5aa, 0x5ab, 0x5ac, 0x5ad, 0x5ae, 0x5af, 0x5b0, 0x5b1, 0x5b2, 0x5b3, 0x5b4, 0x5b5, 0x5b6, 0x5b7, 0x5b8, 0x5b9, 0x5ba, 0x5bb, 0x5bc, 0x5bd, 0x5be, 0x5bf, 0x5c0, 0x5c1, 0x5c2, 0x5c3, 0x5c4, 0x5c5, 0x5c6, 0x5c7, 0x5c8, 0x5c9, 0x5ca, 0x5cb, 0x5cc, 0x5cd, 0x5ce, 0x5cf, 0x5d0, 0x5d1, 0x5d2, 0x5d3, 0x5d4, 0x5d5, 0x5d6, 0x5d7, 0x5d8, 0x5d9, 0x5da, 0x5db, 0x5dc, 0x5dd, 0x5de, 0x5df, 0x5e0, 0x5e1, 0x5e2, 0x5e3, 0x5e4, 0x5e5, 0x5e6, 0x5e7, 0x5e8, 0x5e9, 0x5ea, 0x5eb, 0x5ec, 0x5ed, 0x5ee, 0x5ef, 0x5f0, 0x5f1, 0x5f2, 0x5f3, 0x5f4, 0x5f5, 0x5f6, 0x5f7, 0x5f8, 0x5f9, 0x5fa, 0x5fb, 0x5fc, 0x5fd, 0x5fe, 0x5ff, 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60a, 0x60b, 0x60c, 0x60d, 0x60e, 0x60f, 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, 0x618, 0x619, 0x61a, 0x61b, 0x61c, 0x61d, 0x61e, 0x61f, 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, 0x628, 0x629, 0x62a, 0x62b, 0x62c, 0x62d, 0x62e, 0x62f, 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, 0x638, 0x639, 0x63a, 0x63b, 0x63c, 0x63d, 0x63e, 0x63f, 0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, 0x648, 0x649, 0x64a, 0x64b, 0x64c, 0x64d, 0x64e, 0x64f, 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, 0x658, 0x659, 0x65a, 0x65b, 0x65c, 0x65d, 0x65e, 0x65f, 0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, 0x668, 0x669, 0x66a, 0x66b, 0x66c, 0x66d, 0x66e, 0x66f, 0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, 0x678, 0x679, 0x67a, 0x67b, 0x67c, 0x67d, 0x67e, 0x67f, 0x680, 0x681, 0x682, 0x683, 0x684, 0x685, 0x686, 0x687, 0x688, 0x689, 0x68a, 0x68b, 0x68c, 0x68d, 0x68e, 0x68f, 0x690, 0x691, 0x692, 0x693, 0x694, 0x695, 0x696, 0x697, 0x698, 0x699, 0x69a, 0x69b, 0x69c, 0x69d, 0x69e, 0x69f, 0x6a0, 0x6a1, 0x6a2, 0x6a3, 0x6a4, 0x6a5, 0x6a6, 0x6a7, 0x6a8, 0x6a9, 0x6aa, 0x6ab, 0x6ac, 0x6ad, 0x6ae, 0x6af, 0x6b0, 0x6b1, 0x6b2, 0x6b3, 0x6b4, 0x6b5, 0x6b6, 0x6b7, 0x6b8, 0x6b9, 0x6ba, 0x6bb, 0x6bc, 0x6bd, 0x6be, 0x6bf, 0x6c0, 0x6c1, 0x6c2, 0x6c3, 0x6c4, 0x6c5, 0x6c6, 0x6c7, 0x6c8, 0x6c9, 0x6ca, 0x6cb, 0x6cc, 0x6cd, 0x6ce, 0x6cf, 0x6d0, 0x6d1, 0x6d2, 0x6d3, 0x6d4, 0x6d5, 0x6d6, 0x6d7, 0x6d8, 0x6d9, 0x6da, 0x6db, 0x6dc, 0x6dd, 0x6de, 0x6df, 0x6e0, 0x6e1, 0x6e2, 0x6e3, 0x6e4, 0x6e5, 0x6e6, 0x6e7, 0x6e8, 0x6e9, 0x6ea, 0x6eb, 0x6ec, 0x6ed, 0x6ee, 0x6ef, 0x6f0, 0x6f1, 0x6f2, 0x6f3, 0x6f4, 0x6f5, 0x6f6, 0x6f7, 0x6f8, 0x6f9, 0x6fa, 0x6fb, 0x6fc, 0x6fd, 0x6fe, 0x6ff, 0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, 0x708, 0x709, 0x70a, 0x70b, 0x70c, 0x70d, 0x70e, 0x70f, 0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, 0x718, 0x719, 0x71a, 0x71b, 0x71c, 0x71d, 0x71e, 0x71f, 0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, 0x728, 0x729, 0x72a, 0x72b, 0x72c, 0x72d, 0x72e, 0x72f, 0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, 0x738, 0x739, 0x73a, 0x73b, 0x73c, 0x73d, 0x73e, 0x73f, 0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, 0x748, 0x749, 0x74a, 0x74b, 0x74c, 0x74d, 0x74e, 0x74f, 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, 0x758, 0x759, 0x75a, 0x75b, 0x75c, 0x75d, 0x75e, 0x75f, 0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, 0x768, 0x769, 0x76a, 0x76b, 0x76c, 0x76d, 0x76e, 0x76f, 0x770, 0x771, 0x772, 0x773, 0x774, 0x775, 0x776, 0x777, 0x778, 0x779, 0x77a, 0x77b, 0x77c, 0x77d, 0x77e, 0x77f, 0x780, 0x781, 0x782, 0x783, 0x784, 0x785, 0x786, 0x787, 0x788, 0x789, 0x78a, 0x78b, 0x78c, 0x78d, 0x78e, 0x78f, 0x790, 0x791, 0x792, 0x793, 0x794, 0x795, 0x796, 0x797, 0x798, 0x799, 0x79a, 0x79b, 0x79c, 0x79d, 0x79e, 0x79f, 0x7a0, 0x7a1, 0x7a2, 0x7a3, 0x7a4, 0x7a5, 0x7a6, 0x7a7, 0x7a8, 0x7a9, 0x7aa, 0x7ab, 0x7ac, 0x7ad, 0x7ae, 0x7af, 0x7b0, 0x7b1, 0x7b2, 0x7b3, 0x7b4, 0x7b5, 0x7b6, 0x7b7, 0x7b8, 0x7b9, 0x7ba, 0x7bb, 0x7bc, 0x7bd, 0x7be, 0x7bf, 0x7c0, 0x7c1, 0x7c2, 0x7c3, 0x7c4, 0x7c5, 0x7c6, 0x7c7, 0x7c8, 0x7c9, 0x7ca, 0x7cb, 0x7cc, 0x7cd, 0x7ce, 0x7cf, 0x7d0, 0x7d1, 0x7d2, 0x7d3, 0x7d4, 0x7d5, 0x7d6, 0x7d7, 0x7d8, 0x7d9, 0x7da, 0x7db, 0x7dc, 0x7dd, 0x7de, 0x7df, 0x7e0, 0x7e1, 0x7e2, 0x7e3, 0x7e4, 0x7e5, 0x7e6, 0x7e7, 0x7e8, 0x7e9, 0x7ea, 0x7eb, 0x7ec, 0x7ed, 0x7ee, 0x7ef, 0x7f0, 0x7f1, 0x7f2, 0x7f3, 0x7f4, 0x7f5, 0x7f6, 0x7f7, 0x7f8, 0x7f9, 0x7fa, 0x7fb, 0x7fc, 0x7fd, 0x7fe, 0x7ff, 0x800, 0x801, 0x802, 0x803, 0x804, 0x805, 0x806, 0x807, 0x808, 0x809, 0x80a, 0x80b, 0x80c, 0x80d, 0x80e, 0x80f, 0x810, 0x811, 0x812, 0x813, 0x814, 0x815, 0x816, 0x817, 0x818, 0x819, 0x81a, 0x81b, 0x81c, 0x81d, 0x81e, 0x81f, 0x820, 0x821, 0x822, 0x823, 0x824, 0x825, 0x826, 0x827, 0x828, 0x829, 0x82a, 0x82b, 0x82c, 0x82d, 0x82e, 0x82f, 0x830, 0x831, 0x832, 0x833, 0x834, 0x835, 0x836, 0x837, 0x838, 0x839, 0x83a, 0x83b, 0x83c, 0x83d, 0x83e, 0x83f, 0x840, 0x841, 0x842, 0x843, 0x844, 0x845, 0x846, 0x847, 0x848, 0x849, 0x84a, 0x84b, 0x84c, 0x84d, 0x84e, 0x84f, 0x850, 0x851, 0x852, 0x853, 0x854, 0x855, 0x856, 0x857, 0x858, 0x859, 0x85a, 0x85b, 0x85c, 0x85d, 0x85e, 0x85f, 0x860, 0x861, 0x862, 0x863, 0x864, 0x865, 0x866, 0x867, 0x868, 0x869, 0x86a, 0x86b, 0x86c, 0x86d, 0x86e, 0x86f, 0x870, 0x871, 0x872, 0x873, 0x874, 0x875, 0x876, 0x877, 0x878, 0x879, 0x87a, 0x87b, 0x87c, 0x87d, 0x87e, 0x87f, 0x880, 0x881, 0x882, 0x883, 0x884, 0x885, 0x886, 0x887, 0x888, 0x889, 0x88a, 0x88b, 0x88c, 0x88d, 0x88e, 0x88f, 0x890, 0x891, 0x892, 0x893, 0x894, 0x895, 0x896, 0x897, 0x898, 0x899, 0x89a, 0x89b, 0x89c, 0x89d, 0x89e, 0x89f, 0x8a0, 0x8a1, 0x8a2, 0x8a3, 0x8a4, 0x8a5, 0x8a6, 0x8a7, 0x8a8, 0x8a9, 0x8aa, 0x8ab, 0x8ac, 0x8ad, 0x8ae, 0x8af, 0x8b0, 0x8b1, 0x8b2, 0x8b3, 0x8b4, 0x8b5, 0x8b6, 0x8b7, 0x8b8, 0x8b9, 0x8ba, 0x8bb, 0x8bc, 0x8bd, 0x8be, 0x8bf, 0x8c0, 0x8c1, 0x8c2, 0x8c3, 0x8c4, 0x8c5, 0x8c6, 0x8c7, 0x8c8, 0x8c9, 0x8ca, 0x8cb, 0x8cc, 0x8cd, 0x8ce, 0x8cf, 0x8d0, 0x8d1, 0x8d2, 0x8d3, 0x8d4, 0x8d5, 0x8d6, 0x8d7, 0x8d8, 0x8d9, 0x8da, 0x8db, 0x8dc, 0x8dd, 0x8de, 0x8df, 0x8e0, 0x8e1, 0x8e2, 0x8e3, 0x8e4, 0x8e5, 0x8e6, 0x8e7, 0x8e8, 0x8e9, 0x8ea, 0x8eb, 0x8ec, 0x8ed, 0x8ee, 0x8ef, 0x8f0, 0x8f1, 0x8f2, 0x8f3, 0x8f4, 0x8f5, 0x8f6, 0x8f7, 0x8f8, 0x8f9, 0x8fa, 0x8fb, 0x8fc, 0x8fd, 0x8fe, 0x8ff, 0x900, 0x901, 0x902, 0x903, 0x904, 0x905, 0x906, 0x907, 0x908, 0x909, 0x90a, 0x90b, 0x90c, 0x90d, 0x90e, 0x90f, 0x910, 0x911, 0x912, 0x913, 0x914, 0x915, 0x916, 0x917, 0x918, 0x919, 0x91a, 0x91b, 0x91c, 0x91d, 0x91e, 0x91f, 0x920, 0x921, 0x922, 0x923, 0x924, 0x925, 0x926, 0x927, 0x928, 0x929, 0x92a, 0x92b, 0x92c, 0x92d, 0x92e, 0x92f, 0x930, 0x931, 0x932, 0x933, 0x934, 0x935, 0x936, 0x937, 0x938, 0x939, 0x93a, 0x93b, 0x93c, 0x93d, 0x93e, 0x93f, 0x940, 0x941, 0x942, 0x943, 0x944, 0x945, 0x946, 0x947, 0x948, 0x949, 0x94a, 0x94b, 0x94c, 0x94d, 0x94e, 0x94f, 0x950, 0x951, 0x952, 0x953, 0x954, 0x955, 0x956, 0x957, 0x958, 0x959, 0x95a, 0x95b, 0x95c, 0x95d, 0x95e, 0x95f, 0x960, 0x961, 0x962, 0x963, 0x964, 0x965, 0x966, 0x967, 0x968, 0x969, 0x96a, 0x96b, 0x96c, 0x96d, 0x96e, 0x96f, 0x970, 0x971, 0x972, 0x973, 0x974, 0x975, 0x976, 0x977, 0x978, 0x979, 0x97a, 0x97b, 0x97c, 0x97d, 0x97e, 0x97f, 0x980, 0x981, 0x982, 0x983, 0x984, 0x985, 0x986, 0x987, 0x988, 0x989, 0x98a, 0x98b, 0x98c, 0x98d, 0x98e, 0x98f, 0x990, 0x991, 0x992, 0x993, 0x994, 0x995, 0x996, 0x997, 0x998, 0x999, 0x99a, 0x99b, 0x99c, 0x99d, 0x99e, 0x99f, 0x9a0, 0x9a1, 0x9a2, 0x9a3, 0x9a4, 0x9a5, 0x9a6, 0x9a7, 0x9a8, 0x9a9, 0x9aa, 0x9ab, 0x9ac, 0x9ad, 0x9ae, 0x9af, 0x9b0, 0x9b1, 0x9b2, 0x9b3, 0x9b4, 0x9b5, 0x9b6, 0x9b7, 0x9b8, 0x9b9, 0x9ba, 0x9bb, 0x9bc, 0x9bd, 0x9be, 0x9bf, 0x9c0, 0x9c1, 0x9c2, 0x9c3, 0x9c4, 0x9c5, 0x9c6, 0x9c7, 0x9c8, 0x9c9, 0x9ca, 0x9cb, 0x9cc, 0x9cd, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d2, 0x9d3, 0x9d4, 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9d9, 0x9da, 0x9db, 0x9dc, 0x9dd, 0x9de, 0x9df, 0x9e0, 0x9e1, 0x9e2, 0x9e3, 0x9e4, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, 0x9ea, 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9ef, 0x9f0, 0x9f1, 0x9f2, 0x9f3, 0x9f4, 0x9f5, 0x9f6, 0x9f7, 0x9f8, 0x9f9, 0x9fa, 0x9fb, 0x9fc, 0x9fd, 0x9fe, 0x9ff, 0xa00, 0xa01, 0xa02, 0xa03, 0xa04, 0xa05, 0xa06, 0xa07, 0xa08, 0xa09, 0xa0a, 0xa0b, 0xa0c, 0xa0d, 0xa0e, 0xa0f, 0xa10, 0xa11, 0xa12, 0xa13, 0xa14, 0xa15, 0xa16, 0xa17, 0xa18, 0xa19, 0xa1a, 0xa1b, 0xa1c, 0xa1d, 0xa1e, 0xa1f, 0xa20, 0xa21, 0xa22, 0xa23, 0xa24, 0xa25, 0xa26, 0xa27, 0xa28, 0xa29, 0xa2a, 0xa2b, 0xa2c, 0xa2d, 0xa2e, 0xa2f, 0xa30, 0xa31, 0xa32, 0xa33, 0xa34, 0xa35, 0xa36, 0xa37, 0xa38, 0xa39, 0xa3a, 0xa3b, 0xa3c, 0xa3d, 0xa3e, 0xa3f, 0xa40, 0xa41, 0xa42, 0xa43, 0xa44, 0xa45, 0xa46, 0xa47, 0xa48, 0xa49, 0xa4a, 0xa4b, 0xa4c, 0xa4d, 0xa4e, 0xa4f, 0xa50, 0xa51, 0xa52, 0xa53, 0xa54, 0xa55, 0xa56, 0xa57, 0xa58, 0xa59, 0xa5a, 0xa5b, 0xa5c, 0xa5d, 0xa5e, 0xa5f, 0xa60, 0xa61, 0xa62, 0xa63, 0xa64, 0xa65, 0xa66, 0xa67, 0xa68, 0xa69, 0xa6a, 0xa6b, 0xa6c, 0xa6d, 0xa6e, 0xa6f, 0xa70, 0xa71, 0xa72, 0xa73, 0xa74, 0xa75, 0xa76, 0xa77, 0xa78, 0xa79, 0xa7a, 0xa7b, 0xa7c, 0xa7d, 0xa7e, 0xa7f, 0xa80, 0xa81, 0xa82, 0xa83, 0xa84, 0xa85, 0xa86, 0xa87, 0xa88, 0xa89, 0xa8a, 0xa8b, 0xa8c, 0xa8d, 0xa8e, 0xa8f, 0xa90, 0xa91, 0xa92, 0xa93, 0xa94, 0xa95, 0xa96, 0xa97, 0xa98, 0xa99, 0xa9a, 0xa9b, 0xa9c, 0xa9d, 0xa9e, 0xa9f, 0xaa0, 0xaa1, 0xaa2, 0xaa3, 0xaa4, 0xaa5, 0xaa6, 0xaa7, 0xaa8, 0xaa9, 0xaaa, 0xaab, 0xaac, 0xaad, 0xaae, 0xaaf, 0xab0, 0xab1, 0xab2, 0xab3, 0xab4, 0xab5, 0xab6, 0xab7, 0xab8, 0xab9, 0xaba, 0xabb, 0xabc, 0xabd, 0xabe, 0xabf, 0xac0, 0xac1, 0xac2, 0xac3, 0xac4, 0xac5, 0xac6, 0xac7, 0xac8, 0xac9, 0xaca, 0xacb, 0xacc, 0xacd, 0xace, 0xacf, 0xad0, 0xad1, 0xad2, 0xad3, 0xad4, 0xad5, 0xad6, 0xad7, 0xad8, 0xad9, 0xada, 0xadb, 0xadc, 0xadd, 0xade, 0xadf, 0xae0, 0xae1, 0xae2, 0xae3, 0xae4, 0xae5, 0xae6, 0xae7, 0xae8, 0xae9, 0xaea, 0xaeb, 0xaec, 0xaed, 0xaee, 0xaef, 0xaf0, 0xaf1, 0xaf2, 0xaf3, 0xaf4, 0xaf5, 0xaf6, 0xaf7, 0xaf8, 0xaf9, 0xafa, 0xafb, 0xafc, 0xafd, 0xafe, 0xaff, 0xb00, 0xb01, 0xb02, 0xb03, 0xb04, 0xb05, 0xb06, 0xb07, 0xb08, 0xb09, 0xb0a, 0xb0b, 0xb0c, 0xb0d, 0xb0e, 0xb0f, 0xb10, 0xb11, 0xb12, 0xb13, 0xb14, 0xb15, 0xb16, 0xb17, 0xb18, 0xb19, 0xb1a, 0xb1b, 0xb1c, 0xb1d, 0xb1e, 0xb1f, 0xb20, 0xb21, 0xb22, 0xb23, 0xb24, 0xb25, 0xb26, 0xb27, 0xb28, 0xb29, 0xb2a, 0xb2b, 0xb2c, 0xb2d, 0xb2e, 0xb2f, 0xb30, 0xb31, 0xb32, 0xb33, 0xb34, 0xb35, 0xb36, 0xb37, 0xb38, 0xb39, 0xb3a, 0xb3b, 0xb3c, 0xb3d, 0xb3e, 0xb3f, 0xb40, 0xb41, 0xb42, 0xb43, 0xb44, 0xb45, 0xb46, 0xb47, 0xb48, 0xb49, 0xb4a, 0xb4b, 0xb4c, 0xb4d, 0xb4e, 0xb4f, 0xb50, 0xb51, 0xb52, 0xb53, 0xb54, 0xb55, 0xb56, 0xb57, 0xb58, 0xb59, 0xb5a, 0xb5b, 0xb5c, 0xb5d, 0xb5e, 0xb5f, 0xb60, 0xb61, 0xb62, 0xb63, 0xb64, 0xb65, 0xb66, 0xb67, 0xb68, 0xb69, 0xb6a, 0xb6b, 0xb6c, 0xb6d, 0xb6e, 0xb6f, 0xb70, 0xb71, 0xb72, 0xb73, 0xb74, 0xb75, 0xb76, 0xb77, 0xb78, 0xb79, 0xb7a, 0xb7b, 0xb7c, 0xb7d, 0xb7e, 0xb7f, 0xb80, 0xb81, 0xb82, 0xb83, 0xb84, 0xb85, 0xb86, 0xb87, 0xb88, 0xb89, 0xb8a, 0xb8b, 0xb8c, 0xb8d, 0xb8e, 0xb8f, 0xb90, 0xb91, 0xb92, 0xb93, 0xb94, 0xb95, 0xb96, 0xb97, 0xb98, 0xb99, 0xb9a, 0xb9b, 0xb9c, 0xb9d, 0xb9e, 0xb9f, 0xba0, 0xba1, 0xba2, 0xba3, 0xba4, 0xba5, 0xba6, 0xba7, 0xba8, 0xba9, 0xbaa, 0xbab, 0xbac, 0xbad, 0xbae, 0xbaf, 0xbb0, 0xbb1, 0xbb2, 0xbb3, 0xbb4, 0xbb5, 0xbb6, 0xbb7, 0xbb8, 0xbb9, 0xbba, 0xbbb, 0xbbc, 0xbbd, 0xbbe, 0xbbf, 0xbc0, 0xbc1, 0xbc2, 0xbc3, 0xbc4, 0xbc5, 0xbc6, 0xbc7, 0xbc8, 0xbc9, 0xbca, 0xbcb, 0xbcc, 0xbcd, 0xbce, 0xbcf, 0xbd0, 0xbd1, 0xbd2, 0xbd3, 0xbd4, 0xbd5, 0xbd6, 0xbd7, 0xbd8, 0xbd9, 0xbda, 0xbdb, 0xbdc, 0xbdd, 0xbde, 0xbdf, 0xbe0, 0xbe1, 0xbe2, 0xbe3, 0xbe4, 0xbe5, 0xbe6, 0xbe7, 0xbe8, 0xbe9, 0xbea, 0xbeb, 0xbec, 0xbed, 0xbee, 0xbef, 0xbf0, 0xbf1, 0xbf2, 0xbf3, 0xbf4, 0xbf5, 0xbf6, 0xbf7, 0xbf8, 0xbf9, 0xbfa, 0xbfb, 0xbfc, 0xbfd, 0xbfe, 0xbff, 0xc00, 0xc01, 0xc02, 0xc03, 0xc04, 0xc05, 0xc06, 0xc07, 0xc08, 0xc09, 0xc0a, 0xc0b, 0xc0c, 0xc0d, 0xc0e, 0xc0f, 0xc10, 0xc11, 0xc12, 0xc13, 0xc14, 0xc15, 0xc16, 0xc17, 0xc18, 0xc19, 0xc1a, 0xc1b, 0xc1c, 0xc1d, 0xc1e, 0xc1f, 0xc20, 0xc21, 0xc22, 0xc23, 0xc24, 0xc25, 0xc26, 0xc27, 0xc28, 0xc29, 0xc2a, 0xc2b, 0xc2c, 0xc2d, 0xc2e, 0xc2f, 0xc30, 0xc31, 0xc32, 0xc33, 0xc34, 0xc35, 0xc36, 0xc37, 0xc38, 0xc39, 0xc3a, 0xc3b, 0xc3c, 0xc3d, 0xc3e, 0xc3f, 0xc40, 0xc41, 0xc42, 0xc43, 0xc44, 0xc45, 0xc46, 0xc47, 0xc48, 0xc49, 0xc4a, 0xc4b, 0xc4c, 0xc4d, 0xc4e, 0xc4f, 0xc50, 0xc51, 0xc52, 0xc53, 0xc54, 0xc55, 0xc56, 0xc57, 0xc58, 0xc59, 0xc5a, 0xc5b, 0xc5c, 0xc5d, 0xc5e, 0xc5f, 0xc60, 0xc61, 0xc62, 0xc63, 0xc64, 0xc65, 0xc66, 0xc67, 0xc68, 0xc69, 0xc6a, 0xc6b, 0xc6c, 0xc6d, 0xc6e, 0xc6f, 0xc70, 0xc71, 0xc72, 0xc73, 0xc74, 0xc75, 0xc76, 0xc77, 0xc78, 0xc79, 0xc7a, 0xc7b, 0xc7c, 0xc7d, 0xc7e, 0xc7f, 0xc80, 0xc81, 0xc82, 0xc83, 0xc84, 0xc85, 0xc86, 0xc87, 0xc88, 0xc89, 0xc8a, 0xc8b, 0xc8c, 0xc8d, 0xc8e, 0xc8f, 0xc90, 0xc91, 0xc92, 0xc93, 0xc94, 0xc95, 0xc96, 0xc97, 0xc98, 0xc99, 0xc9a, 0xc9b, 0xc9c, 0xc9d, 0xc9e, 0xc9f, 0xca0, 0xca1, 0xca2, 0xca3, 0xca4, 0xca5, 0xca6, 0xca7, 0xca8, 0xca9, 0xcaa, 0xcab, 0xcac, 0xcad, 0xcae, 0xcaf, 0xcb0, 0xcb1, 0xcb2, 0xcb3, 0xcb4, 0xcb5, 0xcb6, 0xcb7, 0xcb8, 0xcb9, 0xcba, 0xcbb, 0xcbc, 0xcbd, 0xcbe, 0xcbf, 0xcc0, 0xcc1, 0xcc2, 0xcc3, 0xcc4, 0xcc5, 0xcc6, 0xcc7, 0xcc8, 0xcc9, 0xcca, 0xccb, 0xccc, 0xccd, 0xcce, 0xccf, 0xcd0, 0xcd1, 0xcd2, 0xcd3, 0xcd4, 0xcd5, 0xcd6, 0xcd7, 0xcd8, 0xcd9, 0xcda, 0xcdb, 0xcdc, 0xcdd, 0xcde, 0xcdf, 0xce0, 0xce1, 0xce2, 0xce3, 0xce4, 0xce5, 0xce6, 0xce7, 0xce8, 0xce9, 0xcea, 0xceb, 0xcec, 0xced, 0xcee, 0xcef, 0xcf0, 0xcf1, 0xcf2, 0xcf3, 0xcf4, 0xcf5, 0xcf6, 0xcf7, 0xcf8, 0xcf9, 0xcfa, 0xcfb, 0xcfc, 0xcfd, 0xcfe, 0xcff, 0xd00, 0xd01, 0xd02, 0xd03, 0xd04, 0xd05, 0xd06, 0xd07, 0xd08, 0xd09, 0xd0a, 0xd0b, 0xd0c, 0xd0d, 0xd0e, 0xd0f, 0xd10, 0xd11, 0xd12, 0xd13, 0xd14, 0xd15, 0xd16, 0xd17, 0xd18, 0xd19, 0xd1a, 0xd1b, 0xd1c, 0xd1d, 0xd1e, 0xd1f, 0xd20, 0xd21, 0xd22, 0xd23, 0xd24, 0xd25, 0xd26, 0xd27, 0xd28, 0xd29, 0xd2a, 0xd2b, 0xd2c, 0xd2d, 0xd2e, 0xd2f, 0xd30, 0xd31, 0xd32, 0xd33, 0xd34, 0xd35, 0xd36, 0xd37, 0xd38, 0xd39, 0xd3a, 0xd3b, 0xd3c, 0xd3d, 0xd3e, 0xd3f, 0xd40, 0xd41, 0xd42, 0xd43, 0xd44, 0xd45, 0xd46, 0xd47, 0xd48, 0xd49, 0xd4a, 0xd4b, 0xd4c, 0xd4d, 0xd4e, 0xd4f, 0xd50, 0xd51, 0xd52, 0xd53, 0xd54, 0xd55, 0xd56, 0xd57, 0xd58, 0xd59, 0xd5a, 0xd5b, 0xd5c, 0xd5d, 0xd5e, 0xd5f, 0xd60, 0xd61, 0xd62, 0xd63, 0xd64, 0xd65, 0xd66, 0xd67, 0xd68, 0xd69, 0xd6a, 0xd6b, 0xd6c, 0xd6d, 0xd6e, 0xd6f, 0xd70, 0xd71, 0xd72, 0xd73, 0xd74, 0xd75, 0xd76, 0xd77, 0xd78, 0xd79, 0xd7a, 0xd7b, 0xd7c, 0xd7d, 0xd7e, 0xd7f, 0xd80, 0xd81, 0xd82, 0xd83, 0xd84, 0xd85, 0xd86, 0xd87, 0xd88, 0xd89, 0xd8a, 0xd8b, 0xd8c, 0xd8d, 0xd8e, 0xd8f, 0xd90, 0xd91, 0xd92, 0xd93, 0xd94, 0xd95, 0xd96, 0xd97, 0xd98, 0xd99, 0xd9a, 0xd9b, 0xd9c, 0xd9d, 0xd9e, 0xd9f, 0xda0, 0xda1, 0xda2, 0xda3, 0xda4, 0xda5, 0xda6, 0xda7, 0xda8, 0xda9, 0xdaa, 0xdab, 0xdac, 0xdad, 0xdae, 0xdaf, 0xdb0, 0xdb1, 0xdb2, 0xdb3, 0xdb4, 0xdb5, 0xdb6, 0xdb7, 0xdb8, 0xdb9, 0xdba, 0xdbb, 0xdbc, 0xdbd, 0xdbe, 0xdbf, 0xdc0, 0xdc1, 0xdc2, 0xdc3, 0xdc4, 0xdc5, 0xdc6, 0xdc7, 0xdc8, 0xdc9, 0xdca, 0xdcb, 0xdcc, 0xdcd, 0xdce, 0xdcf, 0xdd0, 0xdd1, 0xdd2, 0xdd3, 0xdd4, 0xdd5, 0xdd6, 0xdd7, 0xdd8, 0xdd9, 0xdda, 0xddb, 0xddc, 0xddd, 0xdde, 0xddf, 0xde0, 0xde1, 0xde2, 0xde3, 0xde4, 0xde5, 0xde6, 0xde7, 0xde8, 0xde9, 0xdea, 0xdeb, 0xdec, 0xded, 0xdee, 0xdef, 0xdf0, 0xdf1, 0xdf2, 0xdf3, 0xdf4, 0xdf5, 0xdf6, 0xdf7, 0xdf8, 0xdf9, 0xdfa, 0xdfb, 0xdfc, 0xdfd, 0xdfe, 0xdff, 0xe00, 0xe01, 0xe02, 0xe03, 0xe04, 0xe05, 0xe06, 0xe07, 0xe08, 0xe09, 0xe0a, 0xe0b, 0xe0c, 0xe0d, 0xe0e, 0xe0f, 0xe10, 0xe11, 0xe12, 0xe13, 0xe14, 0xe15, 0xe16, 0xe17, 0xe18, 0xe19, 0xe1a, 0xe1b, 0xe1c, 0xe1d, 0xe1e, 0xe1f, 0xe20, 0xe21, 0xe22, 0xe23, 0xe24, 0xe25, 0xe26, 0xe27, 0xe28, 0xe29, 0xe2a, 0xe2b, 0xe2c, 0xe2d, 0xe2e, 0xe2f, 0xe30, 0xe31, 0xe32, 0xe33, 0xe34, 0xe35, 0xe36, 0xe37, 0xe38, 0xe39, 0xe3a, 0xe3b, 0xe3c, 0xe3d, 0xe3e, 0xe3f, 0xe40, 0xe41, 0xe42, 0xe43, 0xe44, 0xe45, 0xe46, 0xe47, 0xe48, 0xe49, 0xe4a, 0xe4b, 0xe4c, 0xe4d, 0xe4e, 0xe4f, 0xe50, 0xe51, 0xe52, 0xe53, 0xe54, 0xe55, 0xe56, 0xe57, 0xe58, 0xe59, 0xe5a, 0xe5b, 0xe5c, 0xe5d, 0xe5e, 0xe5f, 0xe60, 0xe61, 0xe62, 0xe63, 0xe64, 0xe65, 0xe66, 0xe67, 0xe68, 0xe69, 0xe6a, 0xe6b, 0xe6c, 0xe6d, 0xe6e, 0xe6f, 0xe70, 0xe71, 0xe72, 0xe73, 0xe74, 0xe75, 0xe76, 0xe77, 0xe78, 0xe79, 0xe7a, 0xe7b, 0xe7c, 0xe7d, 0xe7e, 0xe7f, 0xe80, 0xe81, 0xe82, 0xe83, 0xe84, 0xe85, 0xe86, 0xe87, 0xe88, 0xe89, 0xe8a, 0xe8b, 0xe8c, 0xe8d, 0xe8e, 0xe8f, 0xe90, 0xe91, 0xe92, 0xe93, 0xe94, 0xe95, 0xe96, 0xe97, 0xe98, 0xe99, 0xe9a, 0xe9b, 0xe9c, 0xe9d, 0xe9e, 0xe9f, 0xea0, 0xea1, 0xea2, 0xea3, 0xea4, 0xea5, 0xea6, 0xea7, 0xea8, 0xea9, 0xeaa, 0xeab, 0xeac, 0xead, 0xeae, 0xeaf, 0xeb0, 0xeb1, 0xeb2, 0xeb3, 0xeb4, 0xeb5, 0xeb6, 0xeb7, 0xeb8, 0xeb9, 0xeba, 0xebb, 0xebc, 0xebd, 0xebe, 0xebf, 0xec0, 0xec1, 0xec2, 0xec3, 0xec4, 0xec5, 0xec6, 0xec7, 0xec8, 0xec9, 0xeca, 0xecb, 0xecc, 0xecd, 0xece, 0xecf, 0xed0, 0xed1, 0xed2, 0xed3, 0xed4, 0xed5, 0xed6, 0xed7, 0xed8, 0xed9, 0xeda, 0xedb, 0xedc, 0xedd, 0xede, 0xedf, 0xee0, 0xee1, 0xee2, 0xee3, 0xee4, 0xee5, 0xee6, 0xee7, 0xee8, 0xee9, 0xeea, 0xeeb, 0xeec, 0xeed, 0xeee, 0xeef, 0xef0, 0xef1, 0xef2, 0xef3, 0xef4, 0xef5, 0xef6, 0xef7, 0xef8, 0xef9, 0xefa, 0xefb, 0xefc, 0xefd, 0xefe, 0xeff, 0xf00, 0xf01, 0xf02, 0xf03, 0xf04, 0xf05, 0xf06, 0xf07, 0xf08, 0xf09, 0xf0a, 0xf0b, 0xf0c, 0xf0d, 0xf0e, 0xf0f, 0xf10, 0xf11, 0xf12, 0xf13, 0xf14, 0xf15, 0xf16, 0xf17, 0xf18, 0xf19, 0xf1a, 0xf1b, 0xf1c, 0xf1d, 0xf1e, 0xf1f, 0xf20, 0xf21, 0xf22, 0xf23, 0xf24, 0xf25, 0xf26, 0xf27, 0xf28, 0xf29, 0xf2a, 0xf2b, 0xf2c, 0xf2d, 0xf2e, 0xf2f, 0xf30, 0xf31, 0xf32, 0xf33, 0xf34, 0xf35, 0xf36, 0xf37, 0xf38, 0xf39, 0xf3a, 0xf3b, 0xf3c, 0xf3d, 0xf3e, 0xf3f, 0xf40, 0xf41, 0xf42, 0xf43, 0xf44, 0xf45, 0xf46, 0xf47, 0xf48, 0xf49, 0xf4a, 0xf4b, 0xf4c, 0xf4d, 0xf4e, 0xf4f, 0xf50, 0xf51, 0xf52, 0xf53, 0xf54, 0xf55, 0xf56, 0xf57, 0xf58, 0xf59, 0xf5a, 0xf5b, 0xf5c, 0xf5d, 0xf5e, 0xf5f, 0xf60, 0xf61, 0xf62, 0xf63, 0xf64, 0xf65, 0xf66, 0xf67, 0xf68, 0xf69, 0xf6a, 0xf6b, 0xf6c, 0xf6d, 0xf6e, 0xf6f, 0xf70, 0xf71, 0xf72, 0xf73, 0xf74, 0xf75, 0xf76, 0xf77, 0xf78, 0xf79, 0xf7a, 0xf7b, 0xf7c, 0xf7d, 0xf7e, 0xf7f, 0xf80, 0xf81, 0xf82, 0xf83, 0xf84, 0xf85, 0xf86, 0xf87, 0xf88, 0xf89, 0xf8a, 0xf8b, 0xf8c, 0xf8d, 0xf8e, 0xf8f, 0xf90, 0xf91, 0xf92, 0xf93, 0xf94, 0xf95, 0xf96, 0xf97, 0xf98, 0xf99, 0xf9a, 0xf9b, 0xf9c, 0xf9d, 0xf9e, 0xf9f, 0xfa0, 0xfa1, 0xfa2, 0xfa3, 0xfa4, 0xfa5, 0xfa6, 0xfa7, 0xfa8, 0xfa9, 0xfaa, 0xfab, 0xfac, 0xfad, 0xfae, 0xfaf, 0xfb0, 0xfb1, 0xfb2, 0xfb3, 0xfb4, 0xfb5, 0xfb6, 0xfb7, 0xfb8, 0xfb9, 0xfba, 0xfbb, 0xfbc, 0xfbd, 0xfbe, 0xfbf, 0xfc0, 0xfc1, 0xfc2, 0xfc3, 0xfc4, 0xfc5, 0xfc6, 0xfc7, 0xfc8, 0xfc9, 0xfca, 0xfcb, 0xfcc, 0xfcd, 0xfce, 0xfcf, 0xfd0, 0xfd1, 0xfd2, 0xfd3, 0xfd4, 0xfd5, 0xfd6, 0xfd7, 0xfd8, 0xfd9, 0xfda, 0xfdb, 0xfdc, 0xfdd, 0xfde, 0xfdf, 0xfe0, 0xfe1, 0xfe2, 0xfe3, 0xfe4, 0xfe5, 0xfe6, 0xfe7, 0xfe8, 0xfe9, 0xfea, 0xfeb, 0xfec, 0xfed, 0xfee, 0xfef, 0xff0, 0xff1, 0xff2, 0xff3, 0xff4, 0xff5, 0xff6, 0xff7, 0xff8, 0xff9, 0xffa, 0xffb, 0xffc, 0xffd, 0xffe, 0xfff }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x024, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x018, 0x018, 0x018, 0x054, 0x05c, 0x090, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x028, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x0b8, 0x0b8, 0x0b8, 0x0bc, 0x130, 0x130, 0x130, 0x170, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x024, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x018, 0x018, 0x018, 0x05c, 0x05c, 0x090, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x028, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x150, 0x150, 0x150, 0x170, 0x170, 0x170, 0x178, 0x178, 0x264, 0x264, 0x264, 0x264, 0x2f0, 0x2f0, 0x2f0, 0x2f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x024, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x018, 0x018, 0x018, 0x054, 0x05c, 0x090, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x028, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x0b8, 0x0b8, 0x0b8, 0x0bc, 0x130, 0x130, 0x170, 0x170, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x028, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x018, 0x018, 0x018, 0x05c, 0x05c, 0x090, 0x0b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x038, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x014, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2e0, 0x2f0, 0x2f0, 0x4c8, 0x4c8, 0x4c8, 0x4c8, 0x4c8, 0x4c8, 0x4c8, 0x4d0, 0x5e4, 0x5e4, 0x5e8, 0x5ec, 0x5f0, 0x5f0, 0x5f0, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x024, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x018, 0x018, 0x018, 0x054, 0x05c, 0x090, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x028, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x0b8, 0x0b8, 0x0b8, 0x0bc, 0x130, 0x130, 0x130, 0x170, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x024, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x018, 0x018, 0x018, 0x05c, 0x05c, 0x090, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x028, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x150, 0x150, 0x170, 0x170, 0x170, 0x170, 0x178, 0x178, 0x264, 0x264, 0x264, 0x264, 0x2f0, 0x2f0, 0x2f0, 0x2f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x024, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x018, 0x018, 0x018, 0x054, 0x05c, 0x090, 0x090, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x028, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x0b8, 0x0b8, 0x0b8, 0x0bc, 0x130, 0x130, 0x170, 0x170, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x028, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x018, 0x018, 0x018, 0x05c, 0x05c, 0x090, 0x0b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00c, 0x00c, 0x038, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x00c, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2a0, 0x2e0, 0x2a0, 0x2a0, 0x2e0, 0x2e0, 0x2e0, 0x2f0, 0x2f0, 0x4c8, 0x4c8, 0x4c8, 0x4c8, 0x4c8, 0x4c8, 0x4c8, 0x4d0, 0x5e4, 0x5e4, 0x5e8, 0x5ec, 0x5f0, 0x5f0, 0x5f0, 0x5f0 }, + new[] { 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0bc, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0cc, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0e0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0e0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x178, 0x000, 0x1bc, 0x1dc, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x13c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x10c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x160, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x170, 0x000, 0x000, 0x000, 0x278, 0x000, 0x278, 0x2bc, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x180, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x280, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x280, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x320, 0x000, 0x100, 0x100, 0x330, 0x100, 0x338, 0x33c, 0x6f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x100, 0x340, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x100, 0x340, 0x000, 0x100, 0x180, 0x340, 0x180, 0x490, 0x618, 0x770, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x180, 0x360, 0x000, 0x000, 0x000, 0x100, 0x000, 0x180, 0x180, 0x4a0, 0x000, 0x180, 0x180, 0x620, 0x180, 0x620, 0x628, 0x7a4, 0x000, 0x000, 0x000, 0x180, 0x000, 0x180, 0x180, 0x620, 0x100, 0x180, 0x280, 0x630, 0x340, 0x6d0, 0x710, 0x7cc, 0x100, 0x2c0, 0x340, 0x710, 0x340, 0x718, 0x718, 0x7e0, 0x460, 0x748, 0x788, 0x7f0, 0x79c, 0x7f0, 0x7f0, 0x7f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x60c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x600, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x200, 0x600, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x860, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x860, 0x000, 0x200, 0x200, 0x870, 0x200, 0x878, 0x8bc, 0x9f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x880, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x880, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x880, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x920, 0x200, 0x400, 0x400, 0x920, 0x600, 0x938, 0x938, 0xaf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x940, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x200, 0x200, 0x400, 0x940, 0x000, 0x200, 0x200, 0x400, 0x200, 0x400, 0x600, 0x940, 0x200, 0x600, 0x880, 0x940, 0x880, 0x990, 0x998, 0xb70, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x400, 0x000, 0x200, 0x200, 0x400, 0x200, 0x600, 0x800, 0x960, 0x000, 0x200, 0x200, 0x600, 0x200, 0x880, 0x880, 0x960, 0x200, 0x880, 0x880, 0x9a0, 0x880, 0xa20, 0xa28, 0xba4, 0x000, 0x200, 0x200, 0x880, 0x200, 0x880, 0x880, 0xa20, 0x400, 0x880, 0x880, 0xa30, 0x880, 0xa50, 0xad0, 0xbcc, 0x800, 0x8c0, 0x940, 0xad0, 0x940, 0xb18, 0xb18, 0xbd8, 0x960, 0xb28, 0xb88, 0xbec, 0xb9c, 0xbf0, 0xbf0, 0xbf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0xa00, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x500, 0xa00, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x200, 0x300, 0x200, 0x500, 0x700, 0xa00, 0x000, 0x200, 0x200, 0x700, 0x200, 0x900, 0x900, 0xb20, 0x200, 0x900, 0x900, 0xb20, 0x900, 0xc30, 0xc38, 0xcf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x300, 0x000, 0x200, 0x200, 0x500, 0x200, 0x700, 0x900, 0xb40, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x700, 0x000, 0x200, 0x200, 0x900, 0x200, 0x900, 0x900, 0xb40, 0x000, 0x200, 0x200, 0x900, 0x200, 0x900, 0x900, 0xc40, 0x200, 0x900, 0x900, 0xc40, 0xa00, 0xc40, 0xc98, 0xd70, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x900, 0x000, 0x200, 0x200, 0x900, 0x200, 0x900, 0x900, 0xc60, 0x200, 0x200, 0x200, 0x900, 0x700, 0x900, 0xa00, 0xc60, 0x900, 0xa00, 0xa00, 0xca0, 0xa00, 0xca0, 0xca0, 0xda4, 0x200, 0x700, 0x900, 0xa00, 0x900, 0xa00, 0xa00, 0xca0, 0x900, 0xa00, 0xa00, 0xca0, 0xc00, 0xcb0, 0xcd0, 0xdcc, 0x900, 0xc00, 0xc40, 0xcd0, 0xc40, 0xd10, 0xd18, 0xdd8, 0xc60, 0xd18, 0xd48, 0xdec, 0xd9c, 0xdf0, 0xdf0, 0xdf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x900, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x900, 0x000, 0x200, 0x200, 0x900, 0x200, 0x900, 0x900, 0xd00, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x900, 0x200, 0x200, 0x200, 0x900, 0x700, 0x900, 0xa80, 0xd00, 0x200, 0x500, 0x700, 0xa80, 0x900, 0xa80, 0xa80, 0xd00, 0x900, 0xa80, 0xa80, 0xd80, 0xb80, 0xd80, 0xe18, 0xe70, 0x000, 0x200, 0x200, 0x200, 0x200, 0x700, 0x700, 0xa80, 0x200, 0x700, 0x900, 0xa80, 0x900, 0xa80, 0xa80, 0xda0, 0x200, 0x900, 0x900, 0xa80, 0x900, 0xa80, 0xa80, 0xda0, 0x900, 0xb80, 0xc80, 0xe20, 0xd00, 0xe20, 0xe20, 0xea4, 0x400, 0x900, 0x900, 0xb80, 0x900, 0xc80, 0xd00, 0xe20, 0xa80, 0xd00, 0xd00, 0xe20, 0xd00, 0xe30, 0xe50, 0xecc, 0xa80, 0xd00, 0xd00, 0xe30, 0xd00, 0xe50, 0xe58, 0xed8, 0xe20, 0xe58, 0xe88, 0xeec, 0xe9c, 0xef0, 0xef0, 0xef0, 0x000, 0x200, 0x200, 0x900, 0x400, 0x900, 0x900, 0xa80, 0x400, 0x900, 0x900, 0xb80, 0x900, 0xc80, 0xd00, 0xe80, 0x900, 0x900, 0x900, 0xc80, 0xa80, 0xd00, 0xd00, 0xe80, 0xa80, 0xd00, 0xd00, 0xe80, 0xd40, 0xe80, 0xec0, 0xf24, 0x900, 0xa80, 0xa80, 0xd00, 0xb80, 0xd00, 0xd40, 0xe80, 0xb80, 0xd40, 0xd40, 0xec0, 0xe40, 0xed0, 0xed0, 0xf4c, 0xc80, 0xe40, 0xe40, 0xed0, 0xe40, 0xf10, 0xf18, 0xf58, 0xe80, 0xf18, 0xf28, 0xf6c, 0xf3c, 0xf70, 0xf70, 0xf70, 0x900, 0xb80, 0xb80, 0xd40, 0xc80, 0xe40, 0xe40, 0xf00, 0xd00, 0xe40, 0xe40, 0xf40, 0xe80, 0xf40, 0xf40, 0xf8c, 0xd00, 0xea0, 0xea0, 0xf40, 0xea0, 0xf60, 0xf68, 0xf98, 0xea0, 0xf68, 0xf88, 0xfac, 0xf8c, 0xfb0, 0xfb0, 0xfb0, 0xe40, 0xea0, 0xea0, 0xf70, 0xf20, 0xfa0, 0xfa0, 0xfc0, 0xf40, 0xfb0, 0xfb0, 0xfcc, 0xfc4, 0xfcc, 0xfd0, 0xfd0, 0xf50, 0xfc8, 0xfc8, 0xfe0, 0xfd0, 0xfe0, 0xfe0, 0xfe0, 0xfdc, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xfdc, 0xfe0, 0xfe0, 0xfe0, 0xfd0, 0xfe0, 0xfc8, 0xfc8, 0xf50, 0xfd0, 0xfd0, 0xfcc, 0xfb4, 0xfcc, 0xfb0, 0xfb0, 0xf40, 0xfc0, 0xfa0, 0xfa0, 0xf20, 0xf70, 0xea0, 0xea0, 0xe40, 0xfb0, 0xfb0, 0xfac, 0xf8c, 0xfac, 0xf68, 0xf68, 0xee0, 0xf98, 0xf68, 0xf60, 0xea0, 0xf40, 0xea0, 0xe80, 0xd00, 0xf8c, 0xf40, 0xf40, 0xe80, 0xf40, 0xe40, 0xe40, 0xd00, 0xf00, 0xe40, 0xe40, 0xc80, 0xd40, 0xb80, 0xb80, 0xa00, 0xf70, 0xf70, 0xf70, 0xf3c, 0xf6c, 0xf18, 0xf18, 0xe80, 0xf58, 0xf18, 0xf10, 0xe40, 0xed0, 0xe40, 0xe40, 0xd00, 0xf4c, 0xed0, 0xed0, 0xe40, 0xec0, 0xd40, 0xd40, 0xb80, 0xe80, 0xd40, 0xd00, 0xb80, 0xd00, 0xa80, 0xa80, 0x900, 0xf24, 0xec0, 0xe80, 0xd40, 0xe80, 0xd00, 0xd00, 0xa80, 0xe80, 0xd00, 0xd00, 0xa80, 0xd00, 0x900, 0x900, 0x900, 0xe80, 0xd00, 0xb80, 0x900, 0xb80, 0x900, 0x900, 0x400, 0xa80, 0x900, 0x900, 0x400, 0x900, 0x400, 0x200, 0x200, 0xef0, 0xef0, 0xef0, 0xe9c, 0xeec, 0xe68, 0xe58, 0xe20, 0xed8, 0xe58, 0xe50, 0xd00, 0xe30, 0xd00, 0xd00, 0xb80, 0xecc, 0xe30, 0xe30, 0xd00, 0xe20, 0xd00, 0xd00, 0xa80, 0xe20, 0xd00, 0xb80, 0x900, 0xb80, 0x900, 0x900, 0x600, 0xea4, 0xe20, 0xe20, 0xd00, 0xe20, 0xc80, 0xb80, 0x900, 0xda0, 0xa80, 0xa80, 0x900, 0xa80, 0x900, 0x900, 0x200, 0xda0, 0xa80, 0xa80, 0x900, 0xa80, 0x900, 0x700, 0x200, 0xa80, 0x700, 0x500, 0x200, 0x200, 0x200, 0x200, 0x000, 0xe70, 0xe18, 0xd80, 0xb80, 0xd80, 0xa80, 0xa80, 0x900, 0xd80, 0xa80, 0xa80, 0x900, 0xa80, 0x700, 0x700, 0x200, 0xd00, 0xa80, 0x900, 0x500, 0x900, 0x200, 0x200, 0x200, 0x900, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0xd00, 0x900, 0x900, 0x200, 0x900, 0x200, 0x200, 0x000, 0x900, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x900, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xdf0, 0xdf0, 0xdf0, 0xd9c, 0xdec, 0xd48, 0xd18, 0xc60, 0xdd8, 0xd18, 0xd10, 0xc40, 0xcd0, 0xc40, 0xc00, 0x900, 0xdcc, 0xcd0, 0xcb0, 0xc00, 0xca0, 0xa00, 0xa00, 0x900, 0xca0, 0xa00, 0xa00, 0x900, 0xa00, 0x900, 0x700, 0x200, 0xda4, 0xca0, 0xca0, 0xa00, 0xca0, 0xa00, 0xa00, 0x900, 0xc60, 0xa00, 0x900, 0x700, 0x900, 0x200, 0x200, 0x200, 0xc60, 0x900, 0x900, 0x200, 0x900, 0x200, 0x200, 0x000, 0x900, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0xd70, 0xc98, 0xc40, 0xa00, 0xc40, 0x900, 0x900, 0x200, 0xc40, 0x900, 0x900, 0x200, 0x900, 0x200, 0x200, 0x000, 0xb40, 0x900, 0x900, 0x200, 0x900, 0x200, 0x200, 0x000, 0x700, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0xb40, 0x900, 0x700, 0x200, 0x500, 0x200, 0x200, 0x000, 0x300, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xcf0, 0xc38, 0xc30, 0x900, 0xb20, 0x900, 0x900, 0x200, 0xb20, 0x900, 0x900, 0x200, 0x700, 0x200, 0x200, 0x000, 0xa00, 0x700, 0x500, 0x200, 0x300, 0x200, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xa00, 0x500, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xa00, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xbf0, 0xbf0, 0xbf0, 0xb9c, 0xbec, 0xb48, 0xb28, 0x960, 0xbe0, 0xb18, 0xb18, 0x940, 0xad0, 0x940, 0x8c0, 0x800, 0xbcc, 0xad0, 0xa30, 0x880, 0xa30, 0x880, 0x880, 0x400, 0xa20, 0x880, 0x880, 0x200, 0x880, 0x200, 0x200, 0x000, 0xba4, 0xa28, 0xa20, 0x880, 0x9a0, 0x880, 0x880, 0x200, 0x960, 0x880, 0x880, 0x200, 0x600, 0x200, 0x200, 0x000, 0x960, 0x600, 0x600, 0x200, 0x400, 0x200, 0x200, 0x000, 0x400, 0x200, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0xb70, 0x998, 0x950, 0x880, 0x940, 0x880, 0x600, 0x200, 0x940, 0x600, 0x400, 0x200, 0x400, 0x200, 0x200, 0x000, 0x940, 0x400, 0x200, 0x200, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x940, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0xaf0, 0x938, 0x938, 0x600, 0x920, 0x400, 0x400, 0x200, 0x920, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x880, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x880, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x880, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x9f0, 0x87c, 0x878, 0x200, 0x870, 0x200, 0x200, 0x000, 0x860, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x860, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x600, 0x200, 0x200, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x600, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x63c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x7f0, 0x7f0, 0x7f0, 0x79c, 0x7ec, 0x788, 0x748, 0x460, 0x7e0, 0x718, 0x718, 0x340, 0x710, 0x340, 0x340, 0x100, 0x7cc, 0x6d0, 0x6d0, 0x340, 0x630, 0x280, 0x280, 0x100, 0x620, 0x180, 0x180, 0x000, 0x180, 0x000, 0x000, 0x000, 0x7a4, 0x628, 0x620, 0x180, 0x620, 0x180, 0x180, 0x000, 0x4a0, 0x180, 0x180, 0x000, 0x180, 0x000, 0x000, 0x000, 0x360, 0x100, 0x100, 0x000, 0x100, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x770, 0x598, 0x490, 0x180, 0x340, 0x180, 0x100, 0x000, 0x340, 0x100, 0x100, 0x000, 0x100, 0x000, 0x000, 0x000, 0x340, 0x100, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x6f0, 0x33c, 0x338, 0x100, 0x330, 0x100, 0x100, 0x000, 0x320, 0x100, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x2a0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x280, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x180, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x5f0, 0x27c, 0x278, 0x000, 0x278, 0x000, 0x000, 0x000, 0x270, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x160, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x160, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x10c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x13c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x3f0, 0x1dc, 0x1bc, 0x000, 0x178, 0x000, 0x000, 0x000, 0x0f8, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0e0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0ec, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0cc, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0bc, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000 }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x098, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x084, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x078, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x078, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07c, 0x000, 0x000, 0x000, 0x084, 0x000, 0x084, 0x098, 0x1f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0ac, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0b8, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0b4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0b8, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0bc, 0x000, 0x000, 0x000, 0x0bc, 0x000, 0x0bc, 0x0bc, 0x2f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0d4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0d8, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0dc, 0x000, 0x000, 0x000, 0x0dc, 0x000, 0x0dc, 0x0dc, 0x370, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0e4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0e8, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0ec, 0x000, 0x000, 0x000, 0x0ec, 0x000, 0x0ec, 0x0ec, 0x3b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f4, 0x000, 0x000, 0x000, 0x0f4, 0x000, 0x0f4, 0x174, 0x3d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x178, 0x000, 0x000, 0x000, 0x178, 0x000, 0x178, 0x178, 0x3e0, 0x000, 0x000, 0x000, 0x1bc, 0x000, 0x1bc, 0x1dc, 0x3f0, 0x000, 0x1dc, 0x1dc, 0x3f0, 0x1ec, 0x3f0, 0x3f0, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x12c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x130, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x134, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x138, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x13c, 0x000, 0x000, 0x000, 0x13c, 0x000, 0x13c, 0x13c, 0x4f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x10c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x154, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x158, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x15c, 0x000, 0x000, 0x000, 0x15c, 0x000, 0x15c, 0x15c, 0x570, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x164, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x168, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x16c, 0x000, 0x000, 0x000, 0x16c, 0x000, 0x16c, 0x26c, 0x5b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x170, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x174, 0x000, 0x000, 0x000, 0x274, 0x000, 0x274, 0x274, 0x5d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x278, 0x000, 0x000, 0x000, 0x278, 0x000, 0x278, 0x278, 0x5e0, 0x000, 0x000, 0x000, 0x27c, 0x000, 0x27c, 0x2bc, 0x5f0, 0x000, 0x2dc, 0x2dc, 0x5f0, 0x2ec, 0x5f0, 0x5f0, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x18c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x184, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x188, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x18c, 0x000, 0x000, 0x000, 0x29c, 0x000, 0x29c, 0x29c, 0x670, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x284, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x280, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x284, 0x000, 0x000, 0x000, 0x2ac, 0x000, 0x2ac, 0x32c, 0x6b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x320, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x320, 0x000, 0x000, 0x000, 0x320, 0x000, 0x334, 0x334, 0x6d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x330, 0x000, 0x000, 0x000, 0x330, 0x000, 0x338, 0x338, 0x6e0, 0x000, 0x000, 0x100, 0x338, 0x100, 0x338, 0x33c, 0x6f0, 0x100, 0x33c, 0x33c, 0x6f0, 0x33c, 0x6f0, 0x6f0, 0x6f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x344, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x000, 0x344, 0x000, 0x344, 0x34c, 0x730, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x000, 0x340, 0x100, 0x340, 0x340, 0x750, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x100, 0x340, 0x000, 0x100, 0x100, 0x350, 0x100, 0x350, 0x350, 0x760, 0x000, 0x180, 0x180, 0x398, 0x180, 0x398, 0x498, 0x770, 0x180, 0x49c, 0x49c, 0x770, 0x51c, 0x770, 0x770, 0x770, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x100, 0x360, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x100, 0x360, 0x000, 0x100, 0x100, 0x3a0, 0x180, 0x3a0, 0x3a0, 0x790, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x180, 0x4a0, 0x000, 0x180, 0x180, 0x4a0, 0x180, 0x4a0, 0x4a0, 0x7a0, 0x000, 0x180, 0x180, 0x520, 0x180, 0x520, 0x620, 0x7b0, 0x180, 0x628, 0x648, 0x7b0, 0x64c, 0x7b0, 0x7b0, 0x7b0, 0x000, 0x000, 0x000, 0x180, 0x000, 0x180, 0x180, 0x630, 0x000, 0x180, 0x180, 0x630, 0x180, 0x630, 0x650, 0x7c0, 0x000, 0x180, 0x280, 0x650, 0x280, 0x650, 0x650, 0x7d0, 0x340, 0x6d0, 0x6d0, 0x7d0, 0x714, 0x7d0, 0x7d0, 0x7d0, 0x100, 0x340, 0x340, 0x718, 0x340, 0x718, 0x718, 0x7e0, 0x340, 0x718, 0x728, 0x7e0, 0x728, 0x7e0, 0x7e0, 0x7e0, 0x360, 0x74c, 0x78c, 0x7f0, 0x79c, 0x7f0, 0x7f0, 0x7f0, 0x7c4, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x004, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x098, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x084, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x078, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x078, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07c, 0x000, 0x000, 0x000, 0x084, 0x000, 0x084, 0x098, 0x1f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0ac, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0b8, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0b4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0b8, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0bc, 0x000, 0x000, 0x000, 0x0bc, 0x000, 0x0bc, 0x0bc, 0x2f0, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x2c4, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x280, 0x280, 0x2c8, 0x200, 0x200, 0x200, 0x280, 0x200, 0x280, 0x280, 0x2cc, 0x200, 0x280, 0x280, 0x2cc, 0x280, 0x2cc, 0x2cc, 0x2d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0d4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0d8, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0dc, 0x000, 0x000, 0x000, 0x0dc, 0x000, 0x0dc, 0x0dc, 0x370, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0e4, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0e8, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0ec, 0x000, 0x000, 0x000, 0x0ec, 0x000, 0x0ec, 0x0ec, 0x3b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f4, 0x000, 0x000, 0x000, 0x0f4, 0x000, 0x0f4, 0x174, 0x3d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x178, 0x000, 0x000, 0x000, 0x178, 0x000, 0x178, 0x178, 0x3e0, 0x000, 0x000, 0x000, 0x1bc, 0x000, 0x1bc, 0x1dc, 0x3f0, 0x000, 0x1dc, 0x1ec, 0x3f0, 0x1ec, 0x3f0, 0x3f0, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x12c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x130, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x134, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x138, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x13c, 0x000, 0x000, 0x000, 0x13c, 0x000, 0x13c, 0x13c, 0x4f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x10c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x154, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x158, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x15c, 0x000, 0x000, 0x000, 0x15c, 0x000, 0x15c, 0x15c, 0x570, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x164, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x168, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x16c, 0x000, 0x000, 0x000, 0x16c, 0x000, 0x16c, 0x26c, 0x5b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x170, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x174, 0x000, 0x000, 0x000, 0x274, 0x000, 0x274, 0x274, 0x5d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x278, 0x000, 0x000, 0x000, 0x278, 0x000, 0x278, 0x278, 0x5e0, 0x000, 0x000, 0x000, 0x27c, 0x000, 0x27c, 0x2bc, 0x5f0, 0x000, 0x2dc, 0x2dc, 0x5f0, 0x2ec, 0x5f0, 0x5f0, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x18c, 0x200, 0x200, 0x200, 0x300, 0x200, 0x300, 0x300, 0x380, 0x200, 0x300, 0x300, 0x380, 0x300, 0x380, 0x380, 0x390, 0x200, 0x300, 0x300, 0x380, 0x300, 0x380, 0x380, 0x394, 0x300, 0x380, 0x380, 0x394, 0x380, 0x394, 0x394, 0x394, 0x300, 0x300, 0x300, 0x380, 0x300, 0x380, 0x380, 0x398, 0x380, 0x380, 0x380, 0x398, 0x380, 0x398, 0x398, 0x398, 0x380, 0x380, 0x380, 0x39c, 0x380, 0x39c, 0x39c, 0x39c, 0x380, 0x39c, 0x39c, 0x49c, 0x39c, 0x49c, 0x49c, 0x870, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x284, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x280, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x284, 0x000, 0x000, 0x000, 0x2ac, 0x000, 0x32c, 0x32c, 0x6b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x320, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x320, 0x000, 0x000, 0x000, 0x320, 0x000, 0x320, 0x334, 0x6d0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x330, 0x000, 0x000, 0x000, 0x330, 0x000, 0x338, 0x338, 0x6e0, 0x000, 0x000, 0x100, 0x338, 0x100, 0x338, 0x33c, 0x6f0, 0x100, 0x33c, 0x33c, 0x6f0, 0x35c, 0x6f0, 0x6f0, 0x6f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x344, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x000, 0x344, 0x000, 0x344, 0x34c, 0x730, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x340, 0x000, 0x000, 0x100, 0x340, 0x100, 0x340, 0x340, 0x750, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x100, 0x340, 0x000, 0x100, 0x100, 0x350, 0x100, 0x350, 0x350, 0x760, 0x000, 0x100, 0x180, 0x398, 0x180, 0x398, 0x498, 0x770, 0x180, 0x49c, 0x49c, 0x770, 0x51c, 0x770, 0x770, 0x770, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x100, 0x360, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x100, 0x360, 0x000, 0x100, 0x100, 0x3a0, 0x180, 0x3a0, 0x3a0, 0x790, 0x000, 0x000, 0x000, 0x100, 0x000, 0x100, 0x180, 0x4a0, 0x000, 0x180, 0x180, 0x4a0, 0x180, 0x4a0, 0x4a0, 0x7a0, 0x000, 0x180, 0x180, 0x520, 0x180, 0x620, 0x620, 0x7b0, 0x180, 0x628, 0x648, 0x7b0, 0x64c, 0x7b0, 0x7b0, 0x7b0, 0x000, 0x000, 0x000, 0x180, 0x000, 0x180, 0x180, 0x630, 0x000, 0x180, 0x180, 0x630, 0x180, 0x630, 0x650, 0x7c0, 0x000, 0x180, 0x280, 0x650, 0x280, 0x650, 0x650, 0x7d0, 0x340, 0x6d0, 0x6d0, 0x7d0, 0x714, 0x7d0, 0x7d0, 0x7d0, 0x100, 0x340, 0x340, 0x718, 0x340, 0x718, 0x718, 0x7e0, 0x340, 0x718, 0x728, 0x7e0, 0x728, 0x7e0, 0x7e0, 0x7e0, 0x360, 0x74c, 0x78c, 0x7f0, 0x79c, 0x7f0, 0x7f0, 0x7f0, 0x7c4, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0x7f0 }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x070, 0x274, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x240, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x2a0, 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x0c0, 0x3d0, 0x080, 0x1e0, 0x260, 0x4a8, 0x458, 0x6a4, 0x7ec, 0x7f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x070, 0x274, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01c, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x240, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x2a0, 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x0c0, 0x3d0, 0x080, 0x1e0, 0x260, 0x4a8, 0x458, 0x6a4, 0x7ec, 0x7f0 } + }; + + public static Sid Create(int newSampleRate, int clockFrqNum, int clockFrqDen) + { + return new Sid(WaveTable, newSampleRate, clockFrqNum, clockFrqDen); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip8580R5.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip8580R5.cs new file mode 100644 index 0000000000..718a16a0f2 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip8580R5.cs @@ -0,0 +1,22 @@ +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // SID Wavetables courtesy of Kevtris + public static class Chip8580R5 + { + private static readonly int[][] WaveTable = { + new[] { 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff }, + new[] { 0x000, 0x002, 0x004, 0x006, 0x008, 0x00a, 0x00c, 0x00e, 0x010, 0x012, 0x014, 0x016, 0x018, 0x01a, 0x01c, 0x01e, 0x020, 0x022, 0x024, 0x026, 0x028, 0x02a, 0x02c, 0x02e, 0x030, 0x032, 0x034, 0x036, 0x038, 0x03a, 0x03c, 0x03e, 0x040, 0x042, 0x044, 0x046, 0x048, 0x04a, 0x04c, 0x04e, 0x050, 0x052, 0x054, 0x056, 0x058, 0x05a, 0x05c, 0x05e, 0x060, 0x062, 0x064, 0x066, 0x068, 0x06a, 0x06c, 0x06e, 0x070, 0x072, 0x074, 0x076, 0x078, 0x07a, 0x07c, 0x07e, 0x080, 0x082, 0x084, 0x086, 0x088, 0x08a, 0x08c, 0x08e, 0x090, 0x092, 0x094, 0x096, 0x098, 0x09a, 0x09c, 0x09e, 0x0a0, 0x0a2, 0x0a4, 0x0a6, 0x0a8, 0x0aa, 0x0ac, 0x0ae, 0x0b0, 0x0b2, 0x0b4, 0x0b6, 0x0b8, 0x0ba, 0x0bc, 0x0be, 0x0c0, 0x0c2, 0x0c4, 0x0c6, 0x0c8, 0x0ca, 0x0cc, 0x0ce, 0x0d0, 0x0d2, 0x0d4, 0x0d6, 0x0d8, 0x0da, 0x0dc, 0x0de, 0x0e0, 0x0e2, 0x0e4, 0x0e6, 0x0e8, 0x0ea, 0x0ec, 0x0ee, 0x0f0, 0x0f2, 0x0f4, 0x0f6, 0x0f8, 0x0fa, 0x0fc, 0x0fe, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12c, 0x12e, 0x130, 0x132, 0x134, 0x136, 0x138, 0x13a, 0x13c, 0x13e, 0x140, 0x142, 0x144, 0x146, 0x148, 0x14a, 0x14c, 0x14e, 0x150, 0x152, 0x154, 0x156, 0x158, 0x15a, 0x15c, 0x15e, 0x160, 0x162, 0x164, 0x166, 0x168, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x176, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x182, 0x184, 0x186, 0x188, 0x18a, 0x18c, 0x18e, 0x190, 0x192, 0x194, 0x196, 0x198, 0x19a, 0x19c, 0x19e, 0x1a0, 0x1a2, 0x1a4, 0x1a6, 0x1a8, 0x1aa, 0x1ac, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b6, 0x1b8, 0x1ba, 0x1bc, 0x1be, 0x1c0, 0x1c2, 0x1c4, 0x1c6, 0x1c8, 0x1ca, 0x1cc, 0x1ce, 0x1d0, 0x1d2, 0x1d4, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1de, 0x1e0, 0x1e2, 0x1e4, 0x1e6, 0x1e8, 0x1ea, 0x1ec, 0x1ee, 0x1f0, 0x1f2, 0x1f4, 0x1f6, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21c, 0x21e, 0x220, 0x222, 0x224, 0x226, 0x228, 0x22a, 0x22c, 0x22e, 0x230, 0x232, 0x234, 0x236, 0x238, 0x23a, 0x23c, 0x23e, 0x240, 0x242, 0x244, 0x246, 0x248, 0x24a, 0x24c, 0x24e, 0x250, 0x252, 0x254, 0x256, 0x258, 0x25a, 0x25c, 0x25e, 0x260, 0x262, 0x264, 0x266, 0x268, 0x26a, 0x26c, 0x26e, 0x270, 0x272, 0x274, 0x276, 0x278, 0x27a, 0x27c, 0x27e, 0x280, 0x282, 0x284, 0x286, 0x288, 0x28a, 0x28c, 0x28e, 0x290, 0x292, 0x294, 0x296, 0x298, 0x29a, 0x29c, 0x29e, 0x2a0, 0x2a2, 0x2a4, 0x2a6, 0x2a8, 0x2aa, 0x2ac, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2bc, 0x2be, 0x2c0, 0x2c2, 0x2c4, 0x2c6, 0x2c8, 0x2ca, 0x2cc, 0x2ce, 0x2d0, 0x2d2, 0x2d4, 0x2d6, 0x2d8, 0x2da, 0x2dc, 0x2de, 0x2e0, 0x2e2, 0x2e4, 0x2e6, 0x2e8, 0x2ea, 0x2ec, 0x2ee, 0x2f0, 0x2f2, 0x2f4, 0x2f6, 0x2f8, 0x2fa, 0x2fc, 0x2fe, 0x300, 0x302, 0x304, 0x306, 0x308, 0x30a, 0x30c, 0x30e, 0x310, 0x312, 0x314, 0x316, 0x318, 0x31a, 0x31c, 0x31e, 0x320, 0x322, 0x324, 0x326, 0x328, 0x32a, 0x32c, 0x32e, 0x330, 0x332, 0x334, 0x336, 0x338, 0x33a, 0x33c, 0x33e, 0x340, 0x342, 0x344, 0x346, 0x348, 0x34a, 0x34c, 0x34e, 0x350, 0x352, 0x354, 0x356, 0x358, 0x35a, 0x35c, 0x35e, 0x360, 0x362, 0x364, 0x366, 0x368, 0x36a, 0x36c, 0x36e, 0x370, 0x372, 0x374, 0x376, 0x378, 0x37a, 0x37c, 0x37e, 0x380, 0x382, 0x384, 0x386, 0x388, 0x38a, 0x38c, 0x38e, 0x390, 0x392, 0x394, 0x396, 0x398, 0x39a, 0x39c, 0x39e, 0x3a0, 0x3a2, 0x3a4, 0x3a6, 0x3a8, 0x3aa, 0x3ac, 0x3ae, 0x3b0, 0x3b2, 0x3b4, 0x3b6, 0x3b8, 0x3ba, 0x3bc, 0x3be, 0x3c0, 0x3c2, 0x3c4, 0x3c6, 0x3c8, 0x3ca, 0x3cc, 0x3ce, 0x3d0, 0x3d2, 0x3d4, 0x3d6, 0x3d8, 0x3da, 0x3dc, 0x3de, 0x3e0, 0x3e2, 0x3e4, 0x3e6, 0x3e8, 0x3ea, 0x3ec, 0x3ee, 0x3f0, 0x3f2, 0x3f4, 0x3f6, 0x3f8, 0x3fa, 0x3fc, 0x3fe, 0x400, 0x402, 0x404, 0x406, 0x408, 0x40a, 0x40c, 0x40e, 0x410, 0x412, 0x414, 0x416, 0x418, 0x41a, 0x41c, 0x41e, 0x420, 0x422, 0x424, 0x426, 0x428, 0x42a, 0x42c, 0x42e, 0x430, 0x432, 0x434, 0x436, 0x438, 0x43a, 0x43c, 0x43e, 0x440, 0x442, 0x444, 0x446, 0x448, 0x44a, 0x44c, 0x44e, 0x450, 0x452, 0x454, 0x456, 0x458, 0x45a, 0x45c, 0x45e, 0x460, 0x462, 0x464, 0x466, 0x468, 0x46a, 0x46c, 0x46e, 0x470, 0x472, 0x474, 0x476, 0x478, 0x47a, 0x47c, 0x47e, 0x480, 0x482, 0x484, 0x486, 0x488, 0x48a, 0x48c, 0x48e, 0x490, 0x492, 0x494, 0x496, 0x498, 0x49a, 0x49c, 0x49e, 0x4a0, 0x4a2, 0x4a4, 0x4a6, 0x4a8, 0x4aa, 0x4ac, 0x4ae, 0x4b0, 0x4b2, 0x4b4, 0x4b6, 0x4b8, 0x4ba, 0x4bc, 0x4be, 0x4c0, 0x4c2, 0x4c4, 0x4c6, 0x4c8, 0x4ca, 0x4cc, 0x4ce, 0x4d0, 0x4d2, 0x4d4, 0x4d6, 0x4d8, 0x4da, 0x4dc, 0x4de, 0x4e0, 0x4e2, 0x4e4, 0x4e6, 0x4e8, 0x4ea, 0x4ec, 0x4ee, 0x4f0, 0x4f2, 0x4f4, 0x4f6, 0x4f8, 0x4fa, 0x4fc, 0x4fe, 0x500, 0x502, 0x504, 0x506, 0x508, 0x50a, 0x50c, 0x50e, 0x510, 0x512, 0x514, 0x516, 0x518, 0x51a, 0x51c, 0x51e, 0x520, 0x522, 0x524, 0x526, 0x528, 0x52a, 0x52c, 0x52e, 0x530, 0x532, 0x534, 0x536, 0x538, 0x53a, 0x53c, 0x53e, 0x540, 0x542, 0x544, 0x546, 0x548, 0x54a, 0x54c, 0x54e, 0x550, 0x552, 0x554, 0x556, 0x558, 0x55a, 0x55c, 0x55e, 0x560, 0x562, 0x564, 0x566, 0x568, 0x56a, 0x56c, 0x56e, 0x570, 0x572, 0x574, 0x576, 0x578, 0x57a, 0x57c, 0x57e, 0x580, 0x582, 0x584, 0x586, 0x588, 0x58a, 0x58c, 0x58e, 0x590, 0x592, 0x594, 0x596, 0x598, 0x59a, 0x59c, 0x59e, 0x5a0, 0x5a2, 0x5a4, 0x5a6, 0x5a8, 0x5aa, 0x5ac, 0x5ae, 0x5b0, 0x5b2, 0x5b4, 0x5b6, 0x5b8, 0x5ba, 0x5bc, 0x5be, 0x5c0, 0x5c2, 0x5c4, 0x5c6, 0x5c8, 0x5ca, 0x5cc, 0x5ce, 0x5d0, 0x5d2, 0x5d4, 0x5d6, 0x5d8, 0x5da, 0x5dc, 0x5de, 0x5e0, 0x5e2, 0x5e4, 0x5e6, 0x5e8, 0x5ea, 0x5ec, 0x5ee, 0x5f0, 0x5f2, 0x5f4, 0x5f6, 0x5f8, 0x5fa, 0x5fc, 0x5fe, 0x600, 0x602, 0x604, 0x606, 0x608, 0x60a, 0x60c, 0x60e, 0x610, 0x612, 0x614, 0x616, 0x618, 0x61a, 0x61c, 0x61e, 0x620, 0x622, 0x624, 0x626, 0x628, 0x62a, 0x62c, 0x62e, 0x630, 0x632, 0x634, 0x636, 0x638, 0x63a, 0x63c, 0x63e, 0x640, 0x642, 0x644, 0x646, 0x648, 0x64a, 0x64c, 0x64e, 0x650, 0x652, 0x654, 0x656, 0x658, 0x65a, 0x65c, 0x65e, 0x660, 0x662, 0x664, 0x666, 0x668, 0x66a, 0x66c, 0x66e, 0x670, 0x672, 0x674, 0x676, 0x678, 0x67a, 0x67c, 0x67e, 0x680, 0x682, 0x684, 0x686, 0x688, 0x68a, 0x68c, 0x68e, 0x690, 0x692, 0x694, 0x696, 0x698, 0x69a, 0x69c, 0x69e, 0x6a0, 0x6a2, 0x6a4, 0x6a6, 0x6a8, 0x6aa, 0x6ac, 0x6ae, 0x6b0, 0x6b2, 0x6b4, 0x6b6, 0x6b8, 0x6ba, 0x6bc, 0x6be, 0x6c0, 0x6c2, 0x6c4, 0x6c6, 0x6c8, 0x6ca, 0x6cc, 0x6ce, 0x6d0, 0x6d2, 0x6d4, 0x6d6, 0x6d8, 0x6da, 0x6dc, 0x6de, 0x6e0, 0x6e2, 0x6e4, 0x6e6, 0x6e8, 0x6ea, 0x6ec, 0x6ee, 0x6f0, 0x6f2, 0x6f4, 0x6f6, 0x6f8, 0x6fa, 0x6fc, 0x6fe, 0x700, 0x702, 0x704, 0x706, 0x708, 0x70a, 0x70c, 0x70e, 0x710, 0x712, 0x714, 0x716, 0x718, 0x71a, 0x71c, 0x71e, 0x720, 0x722, 0x724, 0x726, 0x728, 0x72a, 0x72c, 0x72e, 0x730, 0x732, 0x734, 0x736, 0x738, 0x73a, 0x73c, 0x73e, 0x740, 0x742, 0x744, 0x746, 0x748, 0x74a, 0x74c, 0x74e, 0x750, 0x752, 0x754, 0x756, 0x758, 0x75a, 0x75c, 0x75e, 0x760, 0x762, 0x764, 0x766, 0x768, 0x76a, 0x76c, 0x76e, 0x770, 0x772, 0x774, 0x776, 0x778, 0x77a, 0x77c, 0x77e, 0x780, 0x782, 0x784, 0x786, 0x788, 0x78a, 0x78c, 0x78e, 0x790, 0x792, 0x794, 0x796, 0x798, 0x79a, 0x79c, 0x79e, 0x7a0, 0x7a2, 0x7a4, 0x7a6, 0x7a8, 0x7aa, 0x7ac, 0x7ae, 0x7b0, 0x7b2, 0x7b4, 0x7b6, 0x7b8, 0x7ba, 0x7bc, 0x7be, 0x7c0, 0x7c2, 0x7c4, 0x7c6, 0x7c8, 0x7ca, 0x7cc, 0x7ce, 0x7d0, 0x7d2, 0x7d4, 0x7d6, 0x7d8, 0x7da, 0x7dc, 0x7de, 0x7e0, 0x7e2, 0x7e4, 0x7e6, 0x7e8, 0x7ea, 0x7ec, 0x7ee, 0x7f0, 0x7f2, 0x7f4, 0x7f6, 0x7f8, 0x7fa, 0x7fc, 0x7fe, 0x800, 0x802, 0x804, 0x806, 0x808, 0x80a, 0x80c, 0x80e, 0x810, 0x812, 0x814, 0x816, 0x818, 0x81a, 0x81c, 0x81e, 0x820, 0x822, 0x824, 0x826, 0x828, 0x82a, 0x82c, 0x82e, 0x830, 0x832, 0x834, 0x836, 0x838, 0x83a, 0x83c, 0x83e, 0x840, 0x842, 0x844, 0x846, 0x848, 0x84a, 0x84c, 0x84e, 0x850, 0x852, 0x854, 0x856, 0x858, 0x85a, 0x85c, 0x85e, 0x860, 0x862, 0x864, 0x866, 0x868, 0x86a, 0x86c, 0x86e, 0x870, 0x872, 0x874, 0x876, 0x878, 0x87a, 0x87c, 0x87e, 0x880, 0x882, 0x884, 0x886, 0x888, 0x88a, 0x88c, 0x88e, 0x890, 0x892, 0x894, 0x896, 0x898, 0x89a, 0x89c, 0x89e, 0x8a0, 0x8a2, 0x8a4, 0x8a6, 0x8a8, 0x8aa, 0x8ac, 0x8ae, 0x8b0, 0x8b2, 0x8b4, 0x8b6, 0x8b8, 0x8ba, 0x8bc, 0x8be, 0x8c0, 0x8c2, 0x8c4, 0x8c6, 0x8c8, 0x8ca, 0x8cc, 0x8ce, 0x8d0, 0x8d2, 0x8d4, 0x8d6, 0x8d8, 0x8da, 0x8dc, 0x8de, 0x8e0, 0x8e2, 0x8e4, 0x8e6, 0x8e8, 0x8ea, 0x8ec, 0x8ee, 0x8f0, 0x8f2, 0x8f4, 0x8f6, 0x8f8, 0x8fa, 0x8fc, 0x8fe, 0x900, 0x902, 0x904, 0x906, 0x908, 0x90a, 0x90c, 0x90e, 0x910, 0x912, 0x914, 0x916, 0x918, 0x91a, 0x91c, 0x91e, 0x920, 0x922, 0x924, 0x926, 0x928, 0x92a, 0x92c, 0x92e, 0x930, 0x932, 0x934, 0x936, 0x938, 0x93a, 0x93c, 0x93e, 0x940, 0x942, 0x944, 0x946, 0x948, 0x94a, 0x94c, 0x94e, 0x950, 0x952, 0x954, 0x956, 0x958, 0x95a, 0x95c, 0x95e, 0x960, 0x962, 0x964, 0x966, 0x968, 0x96a, 0x96c, 0x96e, 0x970, 0x972, 0x974, 0x976, 0x978, 0x97a, 0x97c, 0x97e, 0x980, 0x982, 0x984, 0x986, 0x988, 0x98a, 0x98c, 0x98e, 0x990, 0x992, 0x994, 0x996, 0x998, 0x99a, 0x99c, 0x99e, 0x9a0, 0x9a2, 0x9a4, 0x9a6, 0x9a8, 0x9aa, 0x9ac, 0x9ae, 0x9b0, 0x9b2, 0x9b4, 0x9b6, 0x9b8, 0x9ba, 0x9bc, 0x9be, 0x9c0, 0x9c2, 0x9c4, 0x9c6, 0x9c8, 0x9ca, 0x9cc, 0x9ce, 0x9d0, 0x9d2, 0x9d4, 0x9d6, 0x9d8, 0x9da, 0x9dc, 0x9de, 0x9e0, 0x9e2, 0x9e4, 0x9e6, 0x9e8, 0x9ea, 0x9ec, 0x9ee, 0x9f0, 0x9f2, 0x9f4, 0x9f6, 0x9f8, 0x9fa, 0x9fc, 0x9fe, 0xa00, 0xa02, 0xa04, 0xa06, 0xa08, 0xa0a, 0xa0c, 0xa0e, 0xa10, 0xa12, 0xa14, 0xa16, 0xa18, 0xa1a, 0xa1c, 0xa1e, 0xa20, 0xa22, 0xa24, 0xa26, 0xa28, 0xa2a, 0xa2c, 0xa2e, 0xa30, 0xa32, 0xa34, 0xa36, 0xa38, 0xa3a, 0xa3c, 0xa3e, 0xa40, 0xa42, 0xa44, 0xa46, 0xa48, 0xa4a, 0xa4c, 0xa4e, 0xa50, 0xa52, 0xa54, 0xa56, 0xa58, 0xa5a, 0xa5c, 0xa5e, 0xa60, 0xa62, 0xa64, 0xa66, 0xa68, 0xa6a, 0xa6c, 0xa6e, 0xa70, 0xa72, 0xa74, 0xa76, 0xa78, 0xa7a, 0xa7c, 0xa7e, 0xa80, 0xa82, 0xa84, 0xa86, 0xa88, 0xa8a, 0xa8c, 0xa8e, 0xa90, 0xa92, 0xa94, 0xa96, 0xa98, 0xa9a, 0xa9c, 0xa9e, 0xaa0, 0xaa2, 0xaa4, 0xaa6, 0xaa8, 0xaaa, 0xaac, 0xaae, 0xab0, 0xab2, 0xab4, 0xab6, 0xab8, 0xaba, 0xabc, 0xabe, 0xac0, 0xac2, 0xac4, 0xac6, 0xac8, 0xaca, 0xacc, 0xace, 0xad0, 0xad2, 0xad4, 0xad6, 0xad8, 0xada, 0xadc, 0xade, 0xae0, 0xae2, 0xae4, 0xae6, 0xae8, 0xaea, 0xaec, 0xaee, 0xaf0, 0xaf2, 0xaf4, 0xaf6, 0xaf8, 0xafa, 0xafc, 0xafe, 0xb00, 0xb02, 0xb04, 0xb06, 0xb08, 0xb0a, 0xb0c, 0xb0e, 0xb10, 0xb12, 0xb14, 0xb16, 0xb18, 0xb1a, 0xb1c, 0xb1e, 0xb20, 0xb22, 0xb24, 0xb26, 0xb28, 0xb2a, 0xb2c, 0xb2e, 0xb30, 0xb32, 0xb34, 0xb36, 0xb38, 0xb3a, 0xb3c, 0xb3e, 0xb40, 0xb42, 0xb44, 0xb46, 0xb48, 0xb4a, 0xb4c, 0xb4e, 0xb50, 0xb52, 0xb54, 0xb56, 0xb58, 0xb5a, 0xb5c, 0xb5e, 0xb60, 0xb62, 0xb64, 0xb66, 0xb68, 0xb6a, 0xb6c, 0xb6e, 0xb70, 0xb72, 0xb74, 0xb76, 0xb78, 0xb7a, 0xb7c, 0xb7e, 0xb80, 0xb82, 0xb84, 0xb86, 0xb88, 0xb8a, 0xb8c, 0xb8e, 0xb90, 0xb92, 0xb94, 0xb96, 0xb98, 0xb9a, 0xb9c, 0xb9e, 0xba0, 0xba2, 0xba4, 0xba6, 0xba8, 0xbaa, 0xbac, 0xbae, 0xbb0, 0xbb2, 0xbb4, 0xbb6, 0xbb8, 0xbba, 0xbbc, 0xbbe, 0xbc0, 0xbc2, 0xbc4, 0xbc6, 0xbc8, 0xbca, 0xbcc, 0xbce, 0xbd0, 0xbd2, 0xbd4, 0xbd6, 0xbd8, 0xbda, 0xbdc, 0xbde, 0xbe0, 0xbe2, 0xbe4, 0xbe6, 0xbe8, 0xbea, 0xbec, 0xbee, 0xbf0, 0xbf2, 0xbf4, 0xbf6, 0xbf8, 0xbfa, 0xbfc, 0xbfe, 0xc00, 0xc02, 0xc04, 0xc06, 0xc08, 0xc0a, 0xc0c, 0xc0e, 0xc10, 0xc12, 0xc14, 0xc16, 0xc18, 0xc1a, 0xc1c, 0xc1e, 0xc20, 0xc22, 0xc24, 0xc26, 0xc28, 0xc2a, 0xc2c, 0xc2e, 0xc30, 0xc32, 0xc34, 0xc36, 0xc38, 0xc3a, 0xc3c, 0xc3e, 0xc40, 0xc42, 0xc44, 0xc46, 0xc48, 0xc4a, 0xc4c, 0xc4e, 0xc50, 0xc52, 0xc54, 0xc56, 0xc58, 0xc5a, 0xc5c, 0xc5e, 0xc60, 0xc62, 0xc64, 0xc66, 0xc68, 0xc6a, 0xc6c, 0xc6e, 0xc70, 0xc72, 0xc74, 0xc76, 0xc78, 0xc7a, 0xc7c, 0xc7e, 0xc80, 0xc82, 0xc84, 0xc86, 0xc88, 0xc8a, 0xc8c, 0xc8e, 0xc90, 0xc92, 0xc94, 0xc96, 0xc98, 0xc9a, 0xc9c, 0xc9e, 0xca0, 0xca2, 0xca4, 0xca6, 0xca8, 0xcaa, 0xcac, 0xcae, 0xcb0, 0xcb2, 0xcb4, 0xcb6, 0xcb8, 0xcba, 0xcbc, 0xcbe, 0xcc0, 0xcc2, 0xcc4, 0xcc6, 0xcc8, 0xcca, 0xccc, 0xcce, 0xcd0, 0xcd2, 0xcd4, 0xcd6, 0xcd8, 0xcda, 0xcdc, 0xcde, 0xce0, 0xce2, 0xce4, 0xce6, 0xce8, 0xcea, 0xcec, 0xcee, 0xcf0, 0xcf2, 0xcf4, 0xcf6, 0xcf8, 0xcfa, 0xcfc, 0xcfe, 0xd00, 0xd02, 0xd04, 0xd06, 0xd08, 0xd0a, 0xd0c, 0xd0e, 0xd10, 0xd12, 0xd14, 0xd16, 0xd18, 0xd1a, 0xd1c, 0xd1e, 0xd20, 0xd22, 0xd24, 0xd26, 0xd28, 0xd2a, 0xd2c, 0xd2e, 0xd30, 0xd32, 0xd34, 0xd36, 0xd38, 0xd3a, 0xd3c, 0xd3e, 0xd40, 0xd42, 0xd44, 0xd46, 0xd48, 0xd4a, 0xd4c, 0xd4e, 0xd50, 0xd52, 0xd54, 0xd56, 0xd58, 0xd5a, 0xd5c, 0xd5e, 0xd60, 0xd62, 0xd64, 0xd66, 0xd68, 0xd6a, 0xd6c, 0xd6e, 0xd70, 0xd72, 0xd74, 0xd76, 0xd78, 0xd7a, 0xd7c, 0xd7e, 0xd80, 0xd82, 0xd84, 0xd86, 0xd88, 0xd8a, 0xd8c, 0xd8e, 0xd90, 0xd92, 0xd94, 0xd96, 0xd98, 0xd9a, 0xd9c, 0xd9e, 0xda0, 0xda2, 0xda4, 0xda6, 0xda8, 0xdaa, 0xdac, 0xdae, 0xdb0, 0xdb2, 0xdb4, 0xdb6, 0xdb8, 0xdba, 0xdbc, 0xdbe, 0xdc0, 0xdc2, 0xdc4, 0xdc6, 0xdc8, 0xdca, 0xdcc, 0xdce, 0xdd0, 0xdd2, 0xdd4, 0xdd6, 0xdd8, 0xdda, 0xddc, 0xdde, 0xde0, 0xde2, 0xde4, 0xde6, 0xde8, 0xdea, 0xdec, 0xdee, 0xdf0, 0xdf2, 0xdf4, 0xdf6, 0xdf8, 0xdfa, 0xdfc, 0xdfe, 0xe00, 0xe02, 0xe04, 0xe06, 0xe08, 0xe0a, 0xe0c, 0xe0e, 0xe10, 0xe12, 0xe14, 0xe16, 0xe18, 0xe1a, 0xe1c, 0xe1e, 0xe20, 0xe22, 0xe24, 0xe26, 0xe28, 0xe2a, 0xe2c, 0xe2e, 0xe30, 0xe32, 0xe34, 0xe36, 0xe38, 0xe3a, 0xe3c, 0xe3e, 0xe40, 0xe42, 0xe44, 0xe46, 0xe48, 0xe4a, 0xe4c, 0xe4e, 0xe50, 0xe52, 0xe54, 0xe56, 0xe58, 0xe5a, 0xe5c, 0xe5e, 0xe60, 0xe62, 0xe64, 0xe66, 0xe68, 0xe6a, 0xe6c, 0xe6e, 0xe70, 0xe72, 0xe74, 0xe76, 0xe78, 0xe7a, 0xe7c, 0xe7e, 0xe80, 0xe82, 0xe84, 0xe86, 0xe88, 0xe8a, 0xe8c, 0xe8e, 0xe90, 0xe92, 0xe94, 0xe96, 0xe98, 0xe9a, 0xe9c, 0xe9e, 0xea0, 0xea2, 0xea4, 0xea6, 0xea8, 0xeaa, 0xeac, 0xeae, 0xeb0, 0xeb2, 0xeb4, 0xeb6, 0xeb8, 0xeba, 0xebc, 0xebe, 0xec0, 0xec2, 0xec4, 0xec6, 0xec8, 0xeca, 0xecc, 0xece, 0xed0, 0xed2, 0xed4, 0xed6, 0xed8, 0xeda, 0xedc, 0xede, 0xee0, 0xee2, 0xee4, 0xee6, 0xee8, 0xeea, 0xeec, 0xeee, 0xef0, 0xef2, 0xef4, 0xef6, 0xef8, 0xefa, 0xefc, 0xefe, 0xf00, 0xf02, 0xf04, 0xf06, 0xf08, 0xf0a, 0xf0c, 0xf0e, 0xf10, 0xf12, 0xf14, 0xf16, 0xf18, 0xf1a, 0xf1c, 0xf1e, 0xf20, 0xf22, 0xf24, 0xf26, 0xf28, 0xf2a, 0xf2c, 0xf2e, 0xf30, 0xf32, 0xf34, 0xf36, 0xf38, 0xf3a, 0xf3c, 0xf3e, 0xf40, 0xf42, 0xf44, 0xf46, 0xf48, 0xf4a, 0xf4c, 0xf4e, 0xf50, 0xf52, 0xf54, 0xf56, 0xf58, 0xf5a, 0xf5c, 0xf5e, 0xf60, 0xf62, 0xf64, 0xf66, 0xf68, 0xf6a, 0xf6c, 0xf6e, 0xf70, 0xf72, 0xf74, 0xf76, 0xf78, 0xf7a, 0xf7c, 0xf7e, 0xf80, 0xf82, 0xf84, 0xf86, 0xf88, 0xf8a, 0xf8c, 0xf8e, 0xf90, 0xf92, 0xf94, 0xf96, 0xf98, 0xf9a, 0xf9c, 0xf9e, 0xfa0, 0xfa2, 0xfa4, 0xfa6, 0xfa8, 0xfaa, 0xfac, 0xfae, 0xfb0, 0xfb2, 0xfb4, 0xfb6, 0xfb8, 0xfba, 0xfbc, 0xfbe, 0xfc0, 0xfc2, 0xfc4, 0xfc6, 0xfc8, 0xfca, 0xfcc, 0xfce, 0xfd0, 0xfd2, 0xfd4, 0xfd6, 0xfd8, 0xfda, 0xfdc, 0xfde, 0xfe0, 0xfe2, 0xfe4, 0xfe6, 0xfe8, 0xfea, 0xfec, 0xfee, 0xff0, 0xff2, 0xff4, 0xff6, 0xff8, 0xffa, 0xffc, 0xffe, 0xffe, 0xffc, 0xffa, 0xff8, 0xff6, 0xff4, 0xff2, 0xff0, 0xfee, 0xfec, 0xfea, 0xfe8, 0xfe6, 0xfe4, 0xfe2, 0xfe0, 0xfde, 0xfdc, 0xfda, 0xfd8, 0xfd6, 0xfd4, 0xfd2, 0xfd0, 0xfce, 0xfcc, 0xfca, 0xfc8, 0xfc6, 0xfc4, 0xfc2, 0xfc0, 0xfbe, 0xfbc, 0xfba, 0xfb8, 0xfb6, 0xfb4, 0xfb2, 0xfb0, 0xfae, 0xfac, 0xfaa, 0xfa8, 0xfa6, 0xfa4, 0xfa2, 0xfa0, 0xf9e, 0xf9c, 0xf9a, 0xf98, 0xf96, 0xf94, 0xf92, 0xf90, 0xf8e, 0xf8c, 0xf8a, 0xf88, 0xf86, 0xf84, 0xf82, 0xf80, 0xf7e, 0xf7c, 0xf7a, 0xf78, 0xf76, 0xf74, 0xf72, 0xf70, 0xf6e, 0xf6c, 0xf6a, 0xf68, 0xf66, 0xf64, 0xf62, 0xf60, 0xf5e, 0xf5c, 0xf5a, 0xf58, 0xf56, 0xf54, 0xf52, 0xf50, 0xf4e, 0xf4c, 0xf4a, 0xf48, 0xf46, 0xf44, 0xf42, 0xf40, 0xf3e, 0xf3c, 0xf3a, 0xf38, 0xf36, 0xf34, 0xf32, 0xf30, 0xf2e, 0xf2c, 0xf2a, 0xf28, 0xf26, 0xf24, 0xf22, 0xf20, 0xf1e, 0xf1c, 0xf1a, 0xf18, 0xf16, 0xf14, 0xf12, 0xf10, 0xf0e, 0xf0c, 0xf0a, 0xf08, 0xf06, 0xf04, 0xf02, 0xf00, 0xefe, 0xefc, 0xefa, 0xef8, 0xef6, 0xef4, 0xef2, 0xef0, 0xeee, 0xeec, 0xeea, 0xee8, 0xee6, 0xee4, 0xee2, 0xee0, 0xede, 0xedc, 0xeda, 0xed8, 0xed6, 0xed4, 0xed2, 0xed0, 0xece, 0xecc, 0xeca, 0xec8, 0xec6, 0xec4, 0xec2, 0xec0, 0xebe, 0xebc, 0xeba, 0xeb8, 0xeb6, 0xeb4, 0xeb2, 0xeb0, 0xeae, 0xeac, 0xeaa, 0xea8, 0xea6, 0xea4, 0xea2, 0xea0, 0xe9e, 0xe9c, 0xe9a, 0xe98, 0xe96, 0xe94, 0xe92, 0xe90, 0xe8e, 0xe8c, 0xe8a, 0xe88, 0xe86, 0xe84, 0xe82, 0xe80, 0xe7e, 0xe7c, 0xe7a, 0xe78, 0xe76, 0xe74, 0xe72, 0xe70, 0xe6e, 0xe6c, 0xe6a, 0xe68, 0xe66, 0xe64, 0xe62, 0xe60, 0xe5e, 0xe5c, 0xe5a, 0xe58, 0xe56, 0xe54, 0xe52, 0xe50, 0xe4e, 0xe4c, 0xe4a, 0xe48, 0xe46, 0xe44, 0xe42, 0xe40, 0xe3e, 0xe3c, 0xe3a, 0xe38, 0xe36, 0xe34, 0xe32, 0xe30, 0xe2e, 0xe2c, 0xe2a, 0xe28, 0xe26, 0xe24, 0xe22, 0xe20, 0xe1e, 0xe1c, 0xe1a, 0xe18, 0xe16, 0xe14, 0xe12, 0xe10, 0xe0e, 0xe0c, 0xe0a, 0xe08, 0xe06, 0xe04, 0xe02, 0xe00, 0xdfe, 0xdfc, 0xdfa, 0xdf8, 0xdf6, 0xdf4, 0xdf2, 0xdf0, 0xdee, 0xdec, 0xdea, 0xde8, 0xde6, 0xde4, 0xde2, 0xde0, 0xdde, 0xddc, 0xdda, 0xdd8, 0xdd6, 0xdd4, 0xdd2, 0xdd0, 0xdce, 0xdcc, 0xdca, 0xdc8, 0xdc6, 0xdc4, 0xdc2, 0xdc0, 0xdbe, 0xdbc, 0xdba, 0xdb8, 0xdb6, 0xdb4, 0xdb2, 0xdb0, 0xdae, 0xdac, 0xdaa, 0xda8, 0xda6, 0xda4, 0xda2, 0xda0, 0xd9e, 0xd9c, 0xd9a, 0xd98, 0xd96, 0xd94, 0xd92, 0xd90, 0xd8e, 0xd8c, 0xd8a, 0xd88, 0xd86, 0xd84, 0xd82, 0xd80, 0xd7e, 0xd7c, 0xd7a, 0xd78, 0xd76, 0xd74, 0xd72, 0xd70, 0xd6e, 0xd6c, 0xd6a, 0xd68, 0xd66, 0xd64, 0xd62, 0xd60, 0xd5e, 0xd5c, 0xd5a, 0xd58, 0xd56, 0xd54, 0xd52, 0xd50, 0xd4e, 0xd4c, 0xd4a, 0xd48, 0xd46, 0xd44, 0xd42, 0xd40, 0xd3e, 0xd3c, 0xd3a, 0xd38, 0xd36, 0xd34, 0xd32, 0xd30, 0xd2e, 0xd2c, 0xd2a, 0xd28, 0xd26, 0xd24, 0xd22, 0xd20, 0xd1e, 0xd1c, 0xd1a, 0xd18, 0xd16, 0xd14, 0xd12, 0xd10, 0xd0e, 0xd0c, 0xd0a, 0xd08, 0xd06, 0xd04, 0xd02, 0xd00, 0xcfe, 0xcfc, 0xcfa, 0xcf8, 0xcf6, 0xcf4, 0xcf2, 0xcf0, 0xcee, 0xcec, 0xcea, 0xce8, 0xce6, 0xce4, 0xce2, 0xce0, 0xcde, 0xcdc, 0xcda, 0xcd8, 0xcd6, 0xcd4, 0xcd2, 0xcd0, 0xcce, 0xccc, 0xcca, 0xcc8, 0xcc6, 0xcc4, 0xcc2, 0xcc0, 0xcbe, 0xcbc, 0xcba, 0xcb8, 0xcb6, 0xcb4, 0xcb2, 0xcb0, 0xcae, 0xcac, 0xcaa, 0xca8, 0xca6, 0xca4, 0xca2, 0xca0, 0xc9e, 0xc9c, 0xc9a, 0xc98, 0xc96, 0xc94, 0xc92, 0xc90, 0xc8e, 0xc8c, 0xc8a, 0xc88, 0xc86, 0xc84, 0xc82, 0xc80, 0xc7e, 0xc7c, 0xc7a, 0xc78, 0xc76, 0xc74, 0xc72, 0xc70, 0xc6e, 0xc6c, 0xc6a, 0xc68, 0xc66, 0xc64, 0xc62, 0xc60, 0xc5e, 0xc5c, 0xc5a, 0xc58, 0xc56, 0xc54, 0xc52, 0xc50, 0xc4e, 0xc4c, 0xc4a, 0xc48, 0xc46, 0xc44, 0xc42, 0xc40, 0xc3e, 0xc3c, 0xc3a, 0xc38, 0xc36, 0xc34, 0xc32, 0xc30, 0xc2e, 0xc2c, 0xc2a, 0xc28, 0xc26, 0xc24, 0xc22, 0xc20, 0xc1e, 0xc1c, 0xc1a, 0xc18, 0xc16, 0xc14, 0xc12, 0xc10, 0xc0e, 0xc0c, 0xc0a, 0xc08, 0xc06, 0xc04, 0xc02, 0xc00, 0xbfe, 0xbfc, 0xbfa, 0xbf8, 0xbf6, 0xbf4, 0xbf2, 0xbf0, 0xbee, 0xbec, 0xbea, 0xbe8, 0xbe6, 0xbe4, 0xbe2, 0xbe0, 0xbde, 0xbdc, 0xbda, 0xbd8, 0xbd6, 0xbd4, 0xbd2, 0xbd0, 0xbce, 0xbcc, 0xbca, 0xbc8, 0xbc6, 0xbc4, 0xbc2, 0xbc0, 0xbbe, 0xbbc, 0xbba, 0xbb8, 0xbb6, 0xbb4, 0xbb2, 0xbb0, 0xbae, 0xbac, 0xbaa, 0xba8, 0xba6, 0xba4, 0xba2, 0xba0, 0xb9e, 0xb9c, 0xb9a, 0xb98, 0xb96, 0xb94, 0xb92, 0xb90, 0xb8e, 0xb8c, 0xb8a, 0xb88, 0xb86, 0xb84, 0xb82, 0xb80, 0xb7e, 0xb7c, 0xb7a, 0xb78, 0xb76, 0xb74, 0xb72, 0xb70, 0xb6e, 0xb6c, 0xb6a, 0xb68, 0xb66, 0xb64, 0xb62, 0xb60, 0xb5e, 0xb5c, 0xb5a, 0xb58, 0xb56, 0xb54, 0xb52, 0xb50, 0xb4e, 0xb4c, 0xb4a, 0xb48, 0xb46, 0xb44, 0xb42, 0xb40, 0xb3e, 0xb3c, 0xb3a, 0xb38, 0xb36, 0xb34, 0xb32, 0xb30, 0xb2e, 0xb2c, 0xb2a, 0xb28, 0xb26, 0xb24, 0xb22, 0xb20, 0xb1e, 0xb1c, 0xb1a, 0xb18, 0xb16, 0xb14, 0xb12, 0xb10, 0xb0e, 0xb0c, 0xb0a, 0xb08, 0xb06, 0xb04, 0xb02, 0xb00, 0xafe, 0xafc, 0xafa, 0xaf8, 0xaf6, 0xaf4, 0xaf2, 0xaf0, 0xaee, 0xaec, 0xaea, 0xae8, 0xae6, 0xae4, 0xae2, 0xae0, 0xade, 0xadc, 0xada, 0xad8, 0xad6, 0xad4, 0xad2, 0xad0, 0xace, 0xacc, 0xaca, 0xac8, 0xac6, 0xac4, 0xac2, 0xac0, 0xabe, 0xabc, 0xaba, 0xab8, 0xab6, 0xab4, 0xab2, 0xab0, 0xaae, 0xaac, 0xaaa, 0xaa8, 0xaa6, 0xaa4, 0xaa2, 0xaa0, 0xa9e, 0xa9c, 0xa9a, 0xa98, 0xa96, 0xa94, 0xa92, 0xa90, 0xa8e, 0xa8c, 0xa8a, 0xa88, 0xa86, 0xa84, 0xa82, 0xa80, 0xa7e, 0xa7c, 0xa7a, 0xa78, 0xa76, 0xa74, 0xa72, 0xa70, 0xa6e, 0xa6c, 0xa6a, 0xa68, 0xa66, 0xa64, 0xa62, 0xa60, 0xa5e, 0xa5c, 0xa5a, 0xa58, 0xa56, 0xa54, 0xa52, 0xa50, 0xa4e, 0xa4c, 0xa4a, 0xa48, 0xa46, 0xa44, 0xa42, 0xa40, 0xa3e, 0xa3c, 0xa3a, 0xa38, 0xa36, 0xa34, 0xa32, 0xa30, 0xa2e, 0xa2c, 0xa2a, 0xa28, 0xa26, 0xa24, 0xa22, 0xa20, 0xa1e, 0xa1c, 0xa1a, 0xa18, 0xa16, 0xa14, 0xa12, 0xa10, 0xa0e, 0xa0c, 0xa0a, 0xa08, 0xa06, 0xa04, 0xa02, 0xa00, 0x9fe, 0x9fc, 0x9fa, 0x9f8, 0x9f6, 0x9f4, 0x9f2, 0x9f0, 0x9ee, 0x9ec, 0x9ea, 0x9e8, 0x9e6, 0x9e4, 0x9e2, 0x9e0, 0x9de, 0x9dc, 0x9da, 0x9d8, 0x9d6, 0x9d4, 0x9d2, 0x9d0, 0x9ce, 0x9cc, 0x9ca, 0x9c8, 0x9c6, 0x9c4, 0x9c2, 0x9c0, 0x9be, 0x9bc, 0x9ba, 0x9b8, 0x9b6, 0x9b4, 0x9b2, 0x9b0, 0x9ae, 0x9ac, 0x9aa, 0x9a8, 0x9a6, 0x9a4, 0x9a2, 0x9a0, 0x99e, 0x99c, 0x99a, 0x998, 0x996, 0x994, 0x992, 0x990, 0x98e, 0x98c, 0x98a, 0x988, 0x986, 0x984, 0x982, 0x980, 0x97e, 0x97c, 0x97a, 0x978, 0x976, 0x974, 0x972, 0x970, 0x96e, 0x96c, 0x96a, 0x968, 0x966, 0x964, 0x962, 0x960, 0x95e, 0x95c, 0x95a, 0x958, 0x956, 0x954, 0x952, 0x950, 0x94e, 0x94c, 0x94a, 0x948, 0x946, 0x944, 0x942, 0x940, 0x93e, 0x93c, 0x93a, 0x938, 0x936, 0x934, 0x932, 0x930, 0x92e, 0x92c, 0x92a, 0x928, 0x926, 0x924, 0x922, 0x920, 0x91e, 0x91c, 0x91a, 0x918, 0x916, 0x914, 0x912, 0x910, 0x90e, 0x90c, 0x90a, 0x908, 0x906, 0x904, 0x902, 0x900, 0x8fe, 0x8fc, 0x8fa, 0x8f8, 0x8f6, 0x8f4, 0x8f2, 0x8f0, 0x8ee, 0x8ec, 0x8ea, 0x8e8, 0x8e6, 0x8e4, 0x8e2, 0x8e0, 0x8de, 0x8dc, 0x8da, 0x8d8, 0x8d6, 0x8d4, 0x8d2, 0x8d0, 0x8ce, 0x8cc, 0x8ca, 0x8c8, 0x8c6, 0x8c4, 0x8c2, 0x8c0, 0x8be, 0x8bc, 0x8ba, 0x8b8, 0x8b6, 0x8b4, 0x8b2, 0x8b0, 0x8ae, 0x8ac, 0x8aa, 0x8a8, 0x8a6, 0x8a4, 0x8a2, 0x8a0, 0x89e, 0x89c, 0x89a, 0x898, 0x896, 0x894, 0x892, 0x890, 0x88e, 0x88c, 0x88a, 0x888, 0x886, 0x884, 0x882, 0x880, 0x87e, 0x87c, 0x87a, 0x878, 0x876, 0x874, 0x872, 0x870, 0x86e, 0x86c, 0x86a, 0x868, 0x866, 0x864, 0x862, 0x860, 0x85e, 0x85c, 0x85a, 0x858, 0x856, 0x854, 0x852, 0x850, 0x84e, 0x84c, 0x84a, 0x848, 0x846, 0x844, 0x842, 0x840, 0x83e, 0x83c, 0x83a, 0x838, 0x836, 0x834, 0x832, 0x830, 0x82e, 0x82c, 0x82a, 0x828, 0x826, 0x824, 0x822, 0x820, 0x81e, 0x81c, 0x81a, 0x818, 0x816, 0x814, 0x812, 0x810, 0x80e, 0x80c, 0x80a, 0x808, 0x806, 0x804, 0x802, 0x800, 0x7fe, 0x7fc, 0x7fa, 0x7f8, 0x7f6, 0x7f4, 0x7f2, 0x7f0, 0x7ee, 0x7ec, 0x7ea, 0x7e8, 0x7e6, 0x7e4, 0x7e2, 0x7e0, 0x7de, 0x7dc, 0x7da, 0x7d8, 0x7d6, 0x7d4, 0x7d2, 0x7d0, 0x7ce, 0x7cc, 0x7ca, 0x7c8, 0x7c6, 0x7c4, 0x7c2, 0x7c0, 0x7be, 0x7bc, 0x7ba, 0x7b8, 0x7b6, 0x7b4, 0x7b2, 0x7b0, 0x7ae, 0x7ac, 0x7aa, 0x7a8, 0x7a6, 0x7a4, 0x7a2, 0x7a0, 0x79e, 0x79c, 0x79a, 0x798, 0x796, 0x794, 0x792, 0x790, 0x78e, 0x78c, 0x78a, 0x788, 0x786, 0x784, 0x782, 0x780, 0x77e, 0x77c, 0x77a, 0x778, 0x776, 0x774, 0x772, 0x770, 0x76e, 0x76c, 0x76a, 0x768, 0x766, 0x764, 0x762, 0x760, 0x75e, 0x75c, 0x75a, 0x758, 0x756, 0x754, 0x752, 0x750, 0x74e, 0x74c, 0x74a, 0x748, 0x746, 0x744, 0x742, 0x740, 0x73e, 0x73c, 0x73a, 0x738, 0x736, 0x734, 0x732, 0x730, 0x72e, 0x72c, 0x72a, 0x728, 0x726, 0x724, 0x722, 0x720, 0x71e, 0x71c, 0x71a, 0x718, 0x716, 0x714, 0x712, 0x710, 0x70e, 0x70c, 0x70a, 0x708, 0x706, 0x704, 0x702, 0x700, 0x6fe, 0x6fc, 0x6fa, 0x6f8, 0x6f6, 0x6f4, 0x6f2, 0x6f0, 0x6ee, 0x6ec, 0x6ea, 0x6e8, 0x6e6, 0x6e4, 0x6e2, 0x6e0, 0x6de, 0x6dc, 0x6da, 0x6d8, 0x6d6, 0x6d4, 0x6d2, 0x6d0, 0x6ce, 0x6cc, 0x6ca, 0x6c8, 0x6c6, 0x6c4, 0x6c2, 0x6c0, 0x6be, 0x6bc, 0x6ba, 0x6b8, 0x6b6, 0x6b4, 0x6b2, 0x6b0, 0x6ae, 0x6ac, 0x6aa, 0x6a8, 0x6a6, 0x6a4, 0x6a2, 0x6a0, 0x69e, 0x69c, 0x69a, 0x698, 0x696, 0x694, 0x692, 0x690, 0x68e, 0x68c, 0x68a, 0x688, 0x686, 0x684, 0x682, 0x680, 0x67e, 0x67c, 0x67a, 0x678, 0x676, 0x674, 0x672, 0x670, 0x66e, 0x66c, 0x66a, 0x668, 0x666, 0x664, 0x662, 0x660, 0x65e, 0x65c, 0x65a, 0x658, 0x656, 0x654, 0x652, 0x650, 0x64e, 0x64c, 0x64a, 0x648, 0x646, 0x644, 0x642, 0x640, 0x63e, 0x63c, 0x63a, 0x638, 0x636, 0x634, 0x632, 0x630, 0x62e, 0x62c, 0x62a, 0x628, 0x626, 0x624, 0x622, 0x620, 0x61e, 0x61c, 0x61a, 0x618, 0x616, 0x614, 0x612, 0x610, 0x60e, 0x60c, 0x60a, 0x608, 0x606, 0x604, 0x602, 0x600, 0x5fe, 0x5fc, 0x5fa, 0x5f8, 0x5f6, 0x5f4, 0x5f2, 0x5f0, 0x5ee, 0x5ec, 0x5ea, 0x5e8, 0x5e6, 0x5e4, 0x5e2, 0x5e0, 0x5de, 0x5dc, 0x5da, 0x5d8, 0x5d6, 0x5d4, 0x5d2, 0x5d0, 0x5ce, 0x5cc, 0x5ca, 0x5c8, 0x5c6, 0x5c4, 0x5c2, 0x5c0, 0x5be, 0x5bc, 0x5ba, 0x5b8, 0x5b6, 0x5b4, 0x5b2, 0x5b0, 0x5ae, 0x5ac, 0x5aa, 0x5a8, 0x5a6, 0x5a4, 0x5a2, 0x5a0, 0x59e, 0x59c, 0x59a, 0x598, 0x596, 0x594, 0x592, 0x590, 0x58e, 0x58c, 0x58a, 0x588, 0x586, 0x584, 0x582, 0x580, 0x57e, 0x57c, 0x57a, 0x578, 0x576, 0x574, 0x572, 0x570, 0x56e, 0x56c, 0x56a, 0x568, 0x566, 0x564, 0x562, 0x560, 0x55e, 0x55c, 0x55a, 0x558, 0x556, 0x554, 0x552, 0x550, 0x54e, 0x54c, 0x54a, 0x548, 0x546, 0x544, 0x542, 0x540, 0x53e, 0x53c, 0x53a, 0x538, 0x536, 0x534, 0x532, 0x530, 0x52e, 0x52c, 0x52a, 0x528, 0x526, 0x524, 0x522, 0x520, 0x51e, 0x51c, 0x51a, 0x518, 0x516, 0x514, 0x512, 0x510, 0x50e, 0x50c, 0x50a, 0x508, 0x506, 0x504, 0x502, 0x500, 0x4fe, 0x4fc, 0x4fa, 0x4f8, 0x4f6, 0x4f4, 0x4f2, 0x4f0, 0x4ee, 0x4ec, 0x4ea, 0x4e8, 0x4e6, 0x4e4, 0x4e2, 0x4e0, 0x4de, 0x4dc, 0x4da, 0x4d8, 0x4d6, 0x4d4, 0x4d2, 0x4d0, 0x4ce, 0x4cc, 0x4ca, 0x4c8, 0x4c6, 0x4c4, 0x4c2, 0x4c0, 0x4be, 0x4bc, 0x4ba, 0x4b8, 0x4b6, 0x4b4, 0x4b2, 0x4b0, 0x4ae, 0x4ac, 0x4aa, 0x4a8, 0x4a6, 0x4a4, 0x4a2, 0x4a0, 0x49e, 0x49c, 0x49a, 0x498, 0x496, 0x494, 0x492, 0x490, 0x48e, 0x48c, 0x48a, 0x488, 0x486, 0x484, 0x482, 0x480, 0x47e, 0x47c, 0x47a, 0x478, 0x476, 0x474, 0x472, 0x470, 0x46e, 0x46c, 0x46a, 0x468, 0x466, 0x464, 0x462, 0x460, 0x45e, 0x45c, 0x45a, 0x458, 0x456, 0x454, 0x452, 0x450, 0x44e, 0x44c, 0x44a, 0x448, 0x446, 0x444, 0x442, 0x440, 0x43e, 0x43c, 0x43a, 0x438, 0x436, 0x434, 0x432, 0x430, 0x42e, 0x42c, 0x42a, 0x428, 0x426, 0x424, 0x422, 0x420, 0x41e, 0x41c, 0x41a, 0x418, 0x416, 0x414, 0x412, 0x410, 0x40e, 0x40c, 0x40a, 0x408, 0x406, 0x404, 0x402, 0x400, 0x3fe, 0x3fc, 0x3fa, 0x3f8, 0x3f6, 0x3f4, 0x3f2, 0x3f0, 0x3ee, 0x3ec, 0x3ea, 0x3e8, 0x3e6, 0x3e4, 0x3e2, 0x3e0, 0x3de, 0x3dc, 0x3da, 0x3d8, 0x3d6, 0x3d4, 0x3d2, 0x3d0, 0x3ce, 0x3cc, 0x3ca, 0x3c8, 0x3c6, 0x3c4, 0x3c2, 0x3c0, 0x3be, 0x3bc, 0x3ba, 0x3b8, 0x3b6, 0x3b4, 0x3b2, 0x3b0, 0x3ae, 0x3ac, 0x3aa, 0x3a8, 0x3a6, 0x3a4, 0x3a2, 0x3a0, 0x39e, 0x39c, 0x39a, 0x398, 0x396, 0x394, 0x392, 0x390, 0x38e, 0x38c, 0x38a, 0x388, 0x386, 0x384, 0x382, 0x380, 0x37e, 0x37c, 0x37a, 0x378, 0x376, 0x374, 0x372, 0x370, 0x36e, 0x36c, 0x36a, 0x368, 0x366, 0x364, 0x362, 0x360, 0x35e, 0x35c, 0x35a, 0x358, 0x356, 0x354, 0x352, 0x350, 0x34e, 0x34c, 0x34a, 0x348, 0x346, 0x344, 0x342, 0x340, 0x33e, 0x33c, 0x33a, 0x338, 0x336, 0x334, 0x332, 0x330, 0x32e, 0x32c, 0x32a, 0x328, 0x326, 0x324, 0x322, 0x320, 0x31e, 0x31c, 0x31a, 0x318, 0x316, 0x314, 0x312, 0x310, 0x30e, 0x30c, 0x30a, 0x308, 0x306, 0x304, 0x302, 0x300, 0x2fe, 0x2fc, 0x2fa, 0x2f8, 0x2f6, 0x2f4, 0x2f2, 0x2f0, 0x2ee, 0x2ec, 0x2ea, 0x2e8, 0x2e6, 0x2e4, 0x2e2, 0x2e0, 0x2de, 0x2dc, 0x2da, 0x2d8, 0x2d6, 0x2d4, 0x2d2, 0x2d0, 0x2ce, 0x2cc, 0x2ca, 0x2c8, 0x2c6, 0x2c4, 0x2c2, 0x2c0, 0x2be, 0x2bc, 0x2ba, 0x2b8, 0x2b6, 0x2b4, 0x2b2, 0x2b0, 0x2ae, 0x2ac, 0x2aa, 0x2a8, 0x2a6, 0x2a4, 0x2a2, 0x2a0, 0x29e, 0x29c, 0x29a, 0x298, 0x296, 0x294, 0x292, 0x290, 0x28e, 0x28c, 0x28a, 0x288, 0x286, 0x284, 0x282, 0x280, 0x27e, 0x27c, 0x27a, 0x278, 0x276, 0x274, 0x272, 0x270, 0x26e, 0x26c, 0x26a, 0x268, 0x266, 0x264, 0x262, 0x260, 0x25e, 0x25c, 0x25a, 0x258, 0x256, 0x254, 0x252, 0x250, 0x24e, 0x24c, 0x24a, 0x248, 0x246, 0x244, 0x242, 0x240, 0x23e, 0x23c, 0x23a, 0x238, 0x236, 0x234, 0x232, 0x230, 0x22e, 0x22c, 0x22a, 0x228, 0x226, 0x224, 0x222, 0x220, 0x21e, 0x21c, 0x21a, 0x218, 0x216, 0x214, 0x212, 0x210, 0x20e, 0x20c, 0x20a, 0x208, 0x206, 0x204, 0x202, 0x200, 0x1fe, 0x1fc, 0x1fa, 0x1f8, 0x1f6, 0x1f4, 0x1f2, 0x1f0, 0x1ee, 0x1ec, 0x1ea, 0x1e8, 0x1e6, 0x1e4, 0x1e2, 0x1e0, 0x1de, 0x1dc, 0x1da, 0x1d8, 0x1d6, 0x1d4, 0x1d2, 0x1d0, 0x1ce, 0x1cc, 0x1ca, 0x1c8, 0x1c6, 0x1c4, 0x1c2, 0x1c0, 0x1be, 0x1bc, 0x1ba, 0x1b8, 0x1b6, 0x1b4, 0x1b2, 0x1b0, 0x1ae, 0x1ac, 0x1aa, 0x1a8, 0x1a6, 0x1a4, 0x1a2, 0x1a0, 0x19e, 0x19c, 0x19a, 0x198, 0x196, 0x194, 0x192, 0x190, 0x18e, 0x18c, 0x18a, 0x188, 0x186, 0x184, 0x182, 0x180, 0x17e, 0x17c, 0x17a, 0x178, 0x176, 0x174, 0x172, 0x170, 0x16e, 0x16c, 0x16a, 0x168, 0x166, 0x164, 0x162, 0x160, 0x15e, 0x15c, 0x15a, 0x158, 0x156, 0x154, 0x152, 0x150, 0x14e, 0x14c, 0x14a, 0x148, 0x146, 0x144, 0x142, 0x140, 0x13e, 0x13c, 0x13a, 0x138, 0x136, 0x134, 0x132, 0x130, 0x12e, 0x12c, 0x12a, 0x128, 0x126, 0x124, 0x122, 0x120, 0x11e, 0x11c, 0x11a, 0x118, 0x116, 0x114, 0x112, 0x110, 0x10e, 0x10c, 0x10a, 0x108, 0x106, 0x104, 0x102, 0x100, 0x0fe, 0x0fc, 0x0fa, 0x0f8, 0x0f6, 0x0f4, 0x0f2, 0x0f0, 0x0ee, 0x0ec, 0x0ea, 0x0e8, 0x0e6, 0x0e4, 0x0e2, 0x0e0, 0x0de, 0x0dc, 0x0da, 0x0d8, 0x0d6, 0x0d4, 0x0d2, 0x0d0, 0x0ce, 0x0cc, 0x0ca, 0x0c8, 0x0c6, 0x0c4, 0x0c2, 0x0c0, 0x0be, 0x0bc, 0x0ba, 0x0b8, 0x0b6, 0x0b4, 0x0b2, 0x0b0, 0x0ae, 0x0ac, 0x0aa, 0x0a8, 0x0a6, 0x0a4, 0x0a2, 0x0a0, 0x09e, 0x09c, 0x09a, 0x098, 0x096, 0x094, 0x092, 0x090, 0x08e, 0x08c, 0x08a, 0x088, 0x086, 0x084, 0x082, 0x080, 0x07e, 0x07c, 0x07a, 0x078, 0x076, 0x074, 0x072, 0x070, 0x06e, 0x06c, 0x06a, 0x068, 0x066, 0x064, 0x062, 0x060, 0x05e, 0x05c, 0x05a, 0x058, 0x056, 0x054, 0x052, 0x050, 0x04e, 0x04c, 0x04a, 0x048, 0x046, 0x044, 0x042, 0x040, 0x03e, 0x03c, 0x03a, 0x038, 0x036, 0x034, 0x032, 0x030, 0x02e, 0x02c, 0x02a, 0x028, 0x026, 0x024, 0x022, 0x020, 0x01e, 0x01c, 0x01a, 0x018, 0x016, 0x014, 0x012, 0x010, 0x00e, 0x00c, 0x00a, 0x008, 0x006, 0x004, 0x002, 0x000 }, + new[] { 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, 0x008, 0x009, 0x00a, 0x00b, 0x00c, 0x00d, 0x00e, 0x00f, 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, 0x018, 0x019, 0x01a, 0x01b, 0x01c, 0x01d, 0x01e, 0x01f, 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, 0x028, 0x029, 0x02a, 0x02b, 0x02c, 0x02d, 0x02e, 0x02f, 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, 0x038, 0x039, 0x03a, 0x03b, 0x03c, 0x03d, 0x03e, 0x03f, 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, 0x048, 0x049, 0x04a, 0x04b, 0x04c, 0x04d, 0x04e, 0x04f, 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, 0x058, 0x059, 0x05a, 0x05b, 0x05c, 0x05d, 0x05e, 0x05f, 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, 0x068, 0x069, 0x06a, 0x06b, 0x06c, 0x06d, 0x06e, 0x06f, 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, 0x078, 0x079, 0x07a, 0x07b, 0x07c, 0x07d, 0x07e, 0x07f, 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, 0x088, 0x089, 0x08a, 0x08b, 0x08c, 0x08d, 0x08e, 0x08f, 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097, 0x098, 0x099, 0x09a, 0x09b, 0x09c, 0x09d, 0x09e, 0x09f, 0x0a0, 0x0a1, 0x0a2, 0x0a3, 0x0a4, 0x0a5, 0x0a6, 0x0a7, 0x0a8, 0x0a9, 0x0aa, 0x0ab, 0x0ac, 0x0ad, 0x0ae, 0x0af, 0x0b0, 0x0b1, 0x0b2, 0x0b3, 0x0b4, 0x0b5, 0x0b6, 0x0b7, 0x0b8, 0x0b9, 0x0ba, 0x0bb, 0x0bc, 0x0bd, 0x0be, 0x0bf, 0x0c0, 0x0c1, 0x0c2, 0x0c3, 0x0c4, 0x0c5, 0x0c6, 0x0c7, 0x0c8, 0x0c9, 0x0ca, 0x0cb, 0x0cc, 0x0cd, 0x0ce, 0x0cf, 0x0d0, 0x0d1, 0x0d2, 0x0d3, 0x0d4, 0x0d5, 0x0d6, 0x0d7, 0x0d8, 0x0d9, 0x0da, 0x0db, 0x0dc, 0x0dd, 0x0de, 0x0df, 0x0e0, 0x0e1, 0x0e2, 0x0e3, 0x0e4, 0x0e5, 0x0e6, 0x0e7, 0x0e8, 0x0e9, 0x0ea, 0x0eb, 0x0ec, 0x0ed, 0x0ee, 0x0ef, 0x0f0, 0x0f1, 0x0f2, 0x0f3, 0x0f4, 0x0f5, 0x0f6, 0x0f7, 0x0f8, 0x0f9, 0x0fa, 0x0fb, 0x0fc, 0x0fd, 0x0fe, 0x0ff, 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, 0x108, 0x109, 0x10a, 0x10b, 0x10c, 0x10d, 0x10e, 0x10f, 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, 0x118, 0x119, 0x11a, 0x11b, 0x11c, 0x11d, 0x11e, 0x11f, 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, 0x128, 0x129, 0x12a, 0x12b, 0x12c, 0x12d, 0x12e, 0x12f, 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, 0x138, 0x139, 0x13a, 0x13b, 0x13c, 0x13d, 0x13e, 0x13f, 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, 0x148, 0x149, 0x14a, 0x14b, 0x14c, 0x14d, 0x14e, 0x14f, 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, 0x158, 0x159, 0x15a, 0x15b, 0x15c, 0x15d, 0x15e, 0x15f, 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, 0x168, 0x169, 0x16a, 0x16b, 0x16c, 0x16d, 0x16e, 0x16f, 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, 0x178, 0x179, 0x17a, 0x17b, 0x17c, 0x17d, 0x17e, 0x17f, 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, 0x188, 0x189, 0x18a, 0x18b, 0x18c, 0x18d, 0x18e, 0x18f, 0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, 0x198, 0x199, 0x19a, 0x19b, 0x19c, 0x19d, 0x19e, 0x19f, 0x1a0, 0x1a1, 0x1a2, 0x1a3, 0x1a4, 0x1a5, 0x1a6, 0x1a7, 0x1a8, 0x1a9, 0x1aa, 0x1ab, 0x1ac, 0x1ad, 0x1ae, 0x1af, 0x1b0, 0x1b1, 0x1b2, 0x1b3, 0x1b4, 0x1b5, 0x1b6, 0x1b7, 0x1b8, 0x1b9, 0x1ba, 0x1bb, 0x1bc, 0x1bd, 0x1be, 0x1bf, 0x1c0, 0x1c1, 0x1c2, 0x1c3, 0x1c4, 0x1c5, 0x1c6, 0x1c7, 0x1c8, 0x1c9, 0x1ca, 0x1cb, 0x1cc, 0x1cd, 0x1ce, 0x1cf, 0x1d0, 0x1d1, 0x1d2, 0x1d3, 0x1d4, 0x1d5, 0x1d6, 0x1d7, 0x1d8, 0x1d9, 0x1da, 0x1db, 0x1dc, 0x1dd, 0x1de, 0x1df, 0x1e0, 0x1e1, 0x1e2, 0x1e3, 0x1e4, 0x1e5, 0x1e6, 0x1e7, 0x1e8, 0x1e9, 0x1ea, 0x1eb, 0x1ec, 0x1ed, 0x1ee, 0x1ef, 0x1f0, 0x1f1, 0x1f2, 0x1f3, 0x1f4, 0x1f5, 0x1f6, 0x1f7, 0x1f8, 0x1f9, 0x1fa, 0x1fb, 0x1fc, 0x1fd, 0x1fe, 0x1ff, 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, 0x208, 0x209, 0x20a, 0x20b, 0x20c, 0x20d, 0x20e, 0x20f, 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, 0x218, 0x219, 0x21a, 0x21b, 0x21c, 0x21d, 0x21e, 0x21f, 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, 0x228, 0x229, 0x22a, 0x22b, 0x22c, 0x22d, 0x22e, 0x22f, 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, 0x238, 0x239, 0x23a, 0x23b, 0x23c, 0x23d, 0x23e, 0x23f, 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, 0x248, 0x249, 0x24a, 0x24b, 0x24c, 0x24d, 0x24e, 0x24f, 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, 0x258, 0x259, 0x25a, 0x25b, 0x25c, 0x25d, 0x25e, 0x25f, 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, 0x268, 0x269, 0x26a, 0x26b, 0x26c, 0x26d, 0x26e, 0x26f, 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, 0x278, 0x279, 0x27a, 0x27b, 0x27c, 0x27d, 0x27e, 0x27f, 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287, 0x288, 0x289, 0x28a, 0x28b, 0x28c, 0x28d, 0x28e, 0x28f, 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, 0x298, 0x299, 0x29a, 0x29b, 0x29c, 0x29d, 0x29e, 0x29f, 0x2a0, 0x2a1, 0x2a2, 0x2a3, 0x2a4, 0x2a5, 0x2a6, 0x2a7, 0x2a8, 0x2a9, 0x2aa, 0x2ab, 0x2ac, 0x2ad, 0x2ae, 0x2af, 0x2b0, 0x2b1, 0x2b2, 0x2b3, 0x2b4, 0x2b5, 0x2b6, 0x2b7, 0x2b8, 0x2b9, 0x2ba, 0x2bb, 0x2bc, 0x2bd, 0x2be, 0x2bf, 0x2c0, 0x2c1, 0x2c2, 0x2c3, 0x2c4, 0x2c5, 0x2c6, 0x2c7, 0x2c8, 0x2c9, 0x2ca, 0x2cb, 0x2cc, 0x2cd, 0x2ce, 0x2cf, 0x2d0, 0x2d1, 0x2d2, 0x2d3, 0x2d4, 0x2d5, 0x2d6, 0x2d7, 0x2d8, 0x2d9, 0x2da, 0x2db, 0x2dc, 0x2dd, 0x2de, 0x2df, 0x2e0, 0x2e1, 0x2e2, 0x2e3, 0x2e4, 0x2e5, 0x2e6, 0x2e7, 0x2e8, 0x2e9, 0x2ea, 0x2eb, 0x2ec, 0x2ed, 0x2ee, 0x2ef, 0x2f0, 0x2f1, 0x2f2, 0x2f3, 0x2f4, 0x2f5, 0x2f6, 0x2f7, 0x2f8, 0x2f9, 0x2fa, 0x2fb, 0x2fc, 0x2fd, 0x2fe, 0x2ff, 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, 0x308, 0x309, 0x30a, 0x30b, 0x30c, 0x30d, 0x30e, 0x30f, 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, 0x318, 0x319, 0x31a, 0x31b, 0x31c, 0x31d, 0x31e, 0x31f, 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, 0x328, 0x329, 0x32a, 0x32b, 0x32c, 0x32d, 0x32e, 0x32f, 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, 0x338, 0x339, 0x33a, 0x33b, 0x33c, 0x33d, 0x33e, 0x33f, 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, 0x348, 0x349, 0x34a, 0x34b, 0x34c, 0x34d, 0x34e, 0x34f, 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, 0x358, 0x359, 0x35a, 0x35b, 0x35c, 0x35d, 0x35e, 0x35f, 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, 0x368, 0x369, 0x36a, 0x36b, 0x36c, 0x36d, 0x36e, 0x36f, 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, 0x378, 0x379, 0x37a, 0x37b, 0x37c, 0x37d, 0x37e, 0x37f, 0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387, 0x388, 0x389, 0x38a, 0x38b, 0x38c, 0x38d, 0x38e, 0x38f, 0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, 0x398, 0x399, 0x39a, 0x39b, 0x39c, 0x39d, 0x39e, 0x39f, 0x3a0, 0x3a1, 0x3a2, 0x3a3, 0x3a4, 0x3a5, 0x3a6, 0x3a7, 0x3a8, 0x3a9, 0x3aa, 0x3ab, 0x3ac, 0x3ad, 0x3ae, 0x3af, 0x3b0, 0x3b1, 0x3b2, 0x3b3, 0x3b4, 0x3b5, 0x3b6, 0x3b7, 0x3b8, 0x3b9, 0x3ba, 0x3bb, 0x3bc, 0x3bd, 0x3be, 0x3bf, 0x3c0, 0x3c1, 0x3c2, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c7, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3cc, 0x3cd, 0x3ce, 0x3cf, 0x3d0, 0x3d1, 0x3d2, 0x3d3, 0x3d4, 0x3d5, 0x3d6, 0x3d7, 0x3d8, 0x3d9, 0x3da, 0x3db, 0x3dc, 0x3dd, 0x3de, 0x3df, 0x3e0, 0x3e1, 0x3e2, 0x3e3, 0x3e4, 0x3e5, 0x3e6, 0x3e7, 0x3e8, 0x3e9, 0x3ea, 0x3eb, 0x3ec, 0x3ed, 0x3ee, 0x3ef, 0x3f0, 0x3f1, 0x3f2, 0x3f3, 0x3f4, 0x3f5, 0x3f6, 0x3f7, 0x3f8, 0x3f9, 0x3fa, 0x3fb, 0x3fc, 0x3fd, 0x3fe, 0x3ff, 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, 0x408, 0x409, 0x40a, 0x40b, 0x40c, 0x40d, 0x40e, 0x40f, 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f, 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f, 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, 0x458, 0x459, 0x45a, 0x45b, 0x45c, 0x45d, 0x45e, 0x45f, 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, 0x468, 0x469, 0x46a, 0x46b, 0x46c, 0x46d, 0x46e, 0x46f, 0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, 0x478, 0x479, 0x47a, 0x47b, 0x47c, 0x47d, 0x47e, 0x47f, 0x480, 0x481, 0x482, 0x483, 0x484, 0x485, 0x486, 0x487, 0x488, 0x489, 0x48a, 0x48b, 0x48c, 0x48d, 0x48e, 0x48f, 0x490, 0x491, 0x492, 0x493, 0x494, 0x495, 0x496, 0x497, 0x498, 0x499, 0x49a, 0x49b, 0x49c, 0x49d, 0x49e, 0x49f, 0x4a0, 0x4a1, 0x4a2, 0x4a3, 0x4a4, 0x4a5, 0x4a6, 0x4a7, 0x4a8, 0x4a9, 0x4aa, 0x4ab, 0x4ac, 0x4ad, 0x4ae, 0x4af, 0x4b0, 0x4b1, 0x4b2, 0x4b3, 0x4b4, 0x4b5, 0x4b6, 0x4b7, 0x4b8, 0x4b9, 0x4ba, 0x4bb, 0x4bc, 0x4bd, 0x4be, 0x4bf, 0x4c0, 0x4c1, 0x4c2, 0x4c3, 0x4c4, 0x4c5, 0x4c6, 0x4c7, 0x4c8, 0x4c9, 0x4ca, 0x4cb, 0x4cc, 0x4cd, 0x4ce, 0x4cf, 0x4d0, 0x4d1, 0x4d2, 0x4d3, 0x4d4, 0x4d5, 0x4d6, 0x4d7, 0x4d8, 0x4d9, 0x4da, 0x4db, 0x4dc, 0x4dd, 0x4de, 0x4df, 0x4e0, 0x4e1, 0x4e2, 0x4e3, 0x4e4, 0x4e5, 0x4e6, 0x4e7, 0x4e8, 0x4e9, 0x4ea, 0x4eb, 0x4ec, 0x4ed, 0x4ee, 0x4ef, 0x4f0, 0x4f1, 0x4f2, 0x4f3, 0x4f4, 0x4f5, 0x4f6, 0x4f7, 0x4f8, 0x4f9, 0x4fa, 0x4fb, 0x4fc, 0x4fd, 0x4fe, 0x4ff, 0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, 0x508, 0x509, 0x50a, 0x50b, 0x50c, 0x50d, 0x50e, 0x50f, 0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, 0x518, 0x519, 0x51a, 0x51b, 0x51c, 0x51d, 0x51e, 0x51f, 0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, 0x528, 0x529, 0x52a, 0x52b, 0x52c, 0x52d, 0x52e, 0x52f, 0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, 0x538, 0x539, 0x53a, 0x53b, 0x53c, 0x53d, 0x53e, 0x53f, 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, 0x548, 0x549, 0x54a, 0x54b, 0x54c, 0x54d, 0x54e, 0x54f, 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, 0x558, 0x559, 0x55a, 0x55b, 0x55c, 0x55d, 0x55e, 0x55f, 0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, 0x568, 0x569, 0x56a, 0x56b, 0x56c, 0x56d, 0x56e, 0x56f, 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, 0x578, 0x579, 0x57a, 0x57b, 0x57c, 0x57d, 0x57e, 0x57f, 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0x587, 0x588, 0x589, 0x58a, 0x58b, 0x58c, 0x58d, 0x58e, 0x58f, 0x590, 0x591, 0x592, 0x593, 0x594, 0x595, 0x596, 0x597, 0x598, 0x599, 0x59a, 0x59b, 0x59c, 0x59d, 0x59e, 0x59f, 0x5a0, 0x5a1, 0x5a2, 0x5a3, 0x5a4, 0x5a5, 0x5a6, 0x5a7, 0x5a8, 0x5a9, 0x5aa, 0x5ab, 0x5ac, 0x5ad, 0x5ae, 0x5af, 0x5b0, 0x5b1, 0x5b2, 0x5b3, 0x5b4, 0x5b5, 0x5b6, 0x5b7, 0x5b8, 0x5b9, 0x5ba, 0x5bb, 0x5bc, 0x5bd, 0x5be, 0x5bf, 0x5c0, 0x5c1, 0x5c2, 0x5c3, 0x5c4, 0x5c5, 0x5c6, 0x5c7, 0x5c8, 0x5c9, 0x5ca, 0x5cb, 0x5cc, 0x5cd, 0x5ce, 0x5cf, 0x5d0, 0x5d1, 0x5d2, 0x5d3, 0x5d4, 0x5d5, 0x5d6, 0x5d7, 0x5d8, 0x5d9, 0x5da, 0x5db, 0x5dc, 0x5dd, 0x5de, 0x5df, 0x5e0, 0x5e1, 0x5e2, 0x5e3, 0x5e4, 0x5e5, 0x5e6, 0x5e7, 0x5e8, 0x5e9, 0x5ea, 0x5eb, 0x5ec, 0x5ed, 0x5ee, 0x5ef, 0x5f0, 0x5f1, 0x5f2, 0x5f3, 0x5f4, 0x5f5, 0x5f6, 0x5f7, 0x5f8, 0x5f9, 0x5fa, 0x5fb, 0x5fc, 0x5fd, 0x5fe, 0x5ff, 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, 0x608, 0x609, 0x60a, 0x60b, 0x60c, 0x60d, 0x60e, 0x60f, 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, 0x618, 0x619, 0x61a, 0x61b, 0x61c, 0x61d, 0x61e, 0x61f, 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, 0x628, 0x629, 0x62a, 0x62b, 0x62c, 0x62d, 0x62e, 0x62f, 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, 0x638, 0x639, 0x63a, 0x63b, 0x63c, 0x63d, 0x63e, 0x63f, 0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, 0x648, 0x649, 0x64a, 0x64b, 0x64c, 0x64d, 0x64e, 0x64f, 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, 0x658, 0x659, 0x65a, 0x65b, 0x65c, 0x65d, 0x65e, 0x65f, 0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, 0x668, 0x669, 0x66a, 0x66b, 0x66c, 0x66d, 0x66e, 0x66f, 0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, 0x678, 0x679, 0x67a, 0x67b, 0x67c, 0x67d, 0x67e, 0x67f, 0x680, 0x681, 0x682, 0x683, 0x684, 0x685, 0x686, 0x687, 0x688, 0x689, 0x68a, 0x68b, 0x68c, 0x68d, 0x68e, 0x68f, 0x690, 0x691, 0x692, 0x693, 0x694, 0x695, 0x696, 0x697, 0x698, 0x699, 0x69a, 0x69b, 0x69c, 0x69d, 0x69e, 0x69f, 0x6a0, 0x6a1, 0x6a2, 0x6a3, 0x6a4, 0x6a5, 0x6a6, 0x6a7, 0x6a8, 0x6a9, 0x6aa, 0x6ab, 0x6ac, 0x6ad, 0x6ae, 0x6af, 0x6b0, 0x6b1, 0x6b2, 0x6b3, 0x6b4, 0x6b5, 0x6b6, 0x6b7, 0x6b8, 0x6b9, 0x6ba, 0x6bb, 0x6bc, 0x6bd, 0x6be, 0x6bf, 0x6c0, 0x6c1, 0x6c2, 0x6c3, 0x6c4, 0x6c5, 0x6c6, 0x6c7, 0x6c8, 0x6c9, 0x6ca, 0x6cb, 0x6cc, 0x6cd, 0x6ce, 0x6cf, 0x6d0, 0x6d1, 0x6d2, 0x6d3, 0x6d4, 0x6d5, 0x6d6, 0x6d7, 0x6d8, 0x6d9, 0x6da, 0x6db, 0x6dc, 0x6dd, 0x6de, 0x6df, 0x6e0, 0x6e1, 0x6e2, 0x6e3, 0x6e4, 0x6e5, 0x6e6, 0x6e7, 0x6e8, 0x6e9, 0x6ea, 0x6eb, 0x6ec, 0x6ed, 0x6ee, 0x6ef, 0x6f0, 0x6f1, 0x6f2, 0x6f3, 0x6f4, 0x6f5, 0x6f6, 0x6f7, 0x6f8, 0x6f9, 0x6fa, 0x6fb, 0x6fc, 0x6fd, 0x6fe, 0x6ff, 0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, 0x708, 0x709, 0x70a, 0x70b, 0x70c, 0x70d, 0x70e, 0x70f, 0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, 0x718, 0x719, 0x71a, 0x71b, 0x71c, 0x71d, 0x71e, 0x71f, 0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, 0x728, 0x729, 0x72a, 0x72b, 0x72c, 0x72d, 0x72e, 0x72f, 0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, 0x738, 0x739, 0x73a, 0x73b, 0x73c, 0x73d, 0x73e, 0x73f, 0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, 0x748, 0x749, 0x74a, 0x74b, 0x74c, 0x74d, 0x74e, 0x74f, 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, 0x758, 0x759, 0x75a, 0x75b, 0x75c, 0x75d, 0x75e, 0x75f, 0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, 0x768, 0x769, 0x76a, 0x76b, 0x76c, 0x76d, 0x76e, 0x76f, 0x770, 0x771, 0x772, 0x773, 0x774, 0x775, 0x776, 0x777, 0x778, 0x779, 0x77a, 0x77b, 0x77c, 0x77d, 0x77e, 0x77f, 0x780, 0x781, 0x782, 0x783, 0x784, 0x785, 0x786, 0x787, 0x788, 0x789, 0x78a, 0x78b, 0x78c, 0x78d, 0x78e, 0x78f, 0x790, 0x791, 0x792, 0x793, 0x794, 0x795, 0x796, 0x797, 0x798, 0x799, 0x79a, 0x79b, 0x79c, 0x79d, 0x79e, 0x79f, 0x7a0, 0x7a1, 0x7a2, 0x7a3, 0x7a4, 0x7a5, 0x7a6, 0x7a7, 0x7a8, 0x7a9, 0x7aa, 0x7ab, 0x7ac, 0x7ad, 0x7ae, 0x7af, 0x7b0, 0x7b1, 0x7b2, 0x7b3, 0x7b4, 0x7b5, 0x7b6, 0x7b7, 0x7b8, 0x7b9, 0x7ba, 0x7bb, 0x7bc, 0x7bd, 0x7be, 0x7bf, 0x7c0, 0x7c1, 0x7c2, 0x7c3, 0x7c4, 0x7c5, 0x7c6, 0x7c7, 0x7c8, 0x7c9, 0x7ca, 0x7cb, 0x7cc, 0x7cd, 0x7ce, 0x7cf, 0x7d0, 0x7d1, 0x7d2, 0x7d3, 0x7d4, 0x7d5, 0x7d6, 0x7d7, 0x7d8, 0x7d9, 0x7da, 0x7db, 0x7dc, 0x7dd, 0x7de, 0x7df, 0x7e0, 0x7e1, 0x7e2, 0x7e3, 0x7e4, 0x7e5, 0x7e6, 0x7e7, 0x7e8, 0x7e9, 0x7ea, 0x7eb, 0x7ec, 0x7ed, 0x7ee, 0x7ef, 0x7f0, 0x7f1, 0x7f2, 0x7f3, 0x7f4, 0x7f5, 0x7f6, 0x7f7, 0x7f8, 0x7f9, 0x7fa, 0x7fb, 0x7fc, 0x7fd, 0x7fe, 0x7ff, 0x800, 0x801, 0x802, 0x803, 0x804, 0x805, 0x806, 0x807, 0x808, 0x809, 0x80a, 0x80b, 0x80c, 0x80d, 0x80e, 0x80f, 0x810, 0x811, 0x812, 0x813, 0x814, 0x815, 0x816, 0x817, 0x818, 0x819, 0x81a, 0x81b, 0x81c, 0x81d, 0x81e, 0x81f, 0x820, 0x821, 0x822, 0x823, 0x824, 0x825, 0x826, 0x827, 0x828, 0x829, 0x82a, 0x82b, 0x82c, 0x82d, 0x82e, 0x82f, 0x830, 0x831, 0x832, 0x833, 0x834, 0x835, 0x836, 0x837, 0x838, 0x839, 0x83a, 0x83b, 0x83c, 0x83d, 0x83e, 0x83f, 0x840, 0x841, 0x842, 0x843, 0x844, 0x845, 0x846, 0x847, 0x848, 0x849, 0x84a, 0x84b, 0x84c, 0x84d, 0x84e, 0x84f, 0x850, 0x851, 0x852, 0x853, 0x854, 0x855, 0x856, 0x857, 0x858, 0x859, 0x85a, 0x85b, 0x85c, 0x85d, 0x85e, 0x85f, 0x860, 0x861, 0x862, 0x863, 0x864, 0x865, 0x866, 0x867, 0x868, 0x869, 0x86a, 0x86b, 0x86c, 0x86d, 0x86e, 0x86f, 0x870, 0x871, 0x872, 0x873, 0x874, 0x875, 0x876, 0x877, 0x878, 0x879, 0x87a, 0x87b, 0x87c, 0x87d, 0x87e, 0x87f, 0x880, 0x881, 0x882, 0x883, 0x884, 0x885, 0x886, 0x887, 0x888, 0x889, 0x88a, 0x88b, 0x88c, 0x88d, 0x88e, 0x88f, 0x890, 0x891, 0x892, 0x893, 0x894, 0x895, 0x896, 0x897, 0x898, 0x899, 0x89a, 0x89b, 0x89c, 0x89d, 0x89e, 0x89f, 0x8a0, 0x8a1, 0x8a2, 0x8a3, 0x8a4, 0x8a5, 0x8a6, 0x8a7, 0x8a8, 0x8a9, 0x8aa, 0x8ab, 0x8ac, 0x8ad, 0x8ae, 0x8af, 0x8b0, 0x8b1, 0x8b2, 0x8b3, 0x8b4, 0x8b5, 0x8b6, 0x8b7, 0x8b8, 0x8b9, 0x8ba, 0x8bb, 0x8bc, 0x8bd, 0x8be, 0x8bf, 0x8c0, 0x8c1, 0x8c2, 0x8c3, 0x8c4, 0x8c5, 0x8c6, 0x8c7, 0x8c8, 0x8c9, 0x8ca, 0x8cb, 0x8cc, 0x8cd, 0x8ce, 0x8cf, 0x8d0, 0x8d1, 0x8d2, 0x8d3, 0x8d4, 0x8d5, 0x8d6, 0x8d7, 0x8d8, 0x8d9, 0x8da, 0x8db, 0x8dc, 0x8dd, 0x8de, 0x8df, 0x8e0, 0x8e1, 0x8e2, 0x8e3, 0x8e4, 0x8e5, 0x8e6, 0x8e7, 0x8e8, 0x8e9, 0x8ea, 0x8eb, 0x8ec, 0x8ed, 0x8ee, 0x8ef, 0x8f0, 0x8f1, 0x8f2, 0x8f3, 0x8f4, 0x8f5, 0x8f6, 0x8f7, 0x8f8, 0x8f9, 0x8fa, 0x8fb, 0x8fc, 0x8fd, 0x8fe, 0x8ff, 0x900, 0x901, 0x902, 0x903, 0x904, 0x905, 0x906, 0x907, 0x908, 0x909, 0x90a, 0x90b, 0x90c, 0x90d, 0x90e, 0x90f, 0x910, 0x911, 0x912, 0x913, 0x914, 0x915, 0x916, 0x917, 0x918, 0x919, 0x91a, 0x91b, 0x91c, 0x91d, 0x91e, 0x91f, 0x920, 0x921, 0x922, 0x923, 0x924, 0x925, 0x926, 0x927, 0x928, 0x929, 0x92a, 0x92b, 0x92c, 0x92d, 0x92e, 0x92f, 0x930, 0x931, 0x932, 0x933, 0x934, 0x935, 0x936, 0x937, 0x938, 0x939, 0x93a, 0x93b, 0x93c, 0x93d, 0x93e, 0x93f, 0x940, 0x941, 0x942, 0x943, 0x944, 0x945, 0x946, 0x947, 0x948, 0x949, 0x94a, 0x94b, 0x94c, 0x94d, 0x94e, 0x94f, 0x950, 0x951, 0x952, 0x953, 0x954, 0x955, 0x956, 0x957, 0x958, 0x959, 0x95a, 0x95b, 0x95c, 0x95d, 0x95e, 0x95f, 0x960, 0x961, 0x962, 0x963, 0x964, 0x965, 0x966, 0x967, 0x968, 0x969, 0x96a, 0x96b, 0x96c, 0x96d, 0x96e, 0x96f, 0x970, 0x971, 0x972, 0x973, 0x974, 0x975, 0x976, 0x977, 0x978, 0x979, 0x97a, 0x97b, 0x97c, 0x97d, 0x97e, 0x97f, 0x980, 0x981, 0x982, 0x983, 0x984, 0x985, 0x986, 0x987, 0x988, 0x989, 0x98a, 0x98b, 0x98c, 0x98d, 0x98e, 0x98f, 0x990, 0x991, 0x992, 0x993, 0x994, 0x995, 0x996, 0x997, 0x998, 0x999, 0x99a, 0x99b, 0x99c, 0x99d, 0x99e, 0x99f, 0x9a0, 0x9a1, 0x9a2, 0x9a3, 0x9a4, 0x9a5, 0x9a6, 0x9a7, 0x9a8, 0x9a9, 0x9aa, 0x9ab, 0x9ac, 0x9ad, 0x9ae, 0x9af, 0x9b0, 0x9b1, 0x9b2, 0x9b3, 0x9b4, 0x9b5, 0x9b6, 0x9b7, 0x9b8, 0x9b9, 0x9ba, 0x9bb, 0x9bc, 0x9bd, 0x9be, 0x9bf, 0x9c0, 0x9c1, 0x9c2, 0x9c3, 0x9c4, 0x9c5, 0x9c6, 0x9c7, 0x9c8, 0x9c9, 0x9ca, 0x9cb, 0x9cc, 0x9cd, 0x9ce, 0x9cf, 0x9d0, 0x9d1, 0x9d2, 0x9d3, 0x9d4, 0x9d5, 0x9d6, 0x9d7, 0x9d8, 0x9d9, 0x9da, 0x9db, 0x9dc, 0x9dd, 0x9de, 0x9df, 0x9e0, 0x9e1, 0x9e2, 0x9e3, 0x9e4, 0x9e5, 0x9e6, 0x9e7, 0x9e8, 0x9e9, 0x9ea, 0x9eb, 0x9ec, 0x9ed, 0x9ee, 0x9ef, 0x9f0, 0x9f1, 0x9f2, 0x9f3, 0x9f4, 0x9f5, 0x9f6, 0x9f7, 0x9f8, 0x9f9, 0x9fa, 0x9fb, 0x9fc, 0x9fd, 0x9fe, 0x9ff, 0xa00, 0xa01, 0xa02, 0xa03, 0xa04, 0xa05, 0xa06, 0xa07, 0xa08, 0xa09, 0xa0a, 0xa0b, 0xa0c, 0xa0d, 0xa0e, 0xa0f, 0xa10, 0xa11, 0xa12, 0xa13, 0xa14, 0xa15, 0xa16, 0xa17, 0xa18, 0xa19, 0xa1a, 0xa1b, 0xa1c, 0xa1d, 0xa1e, 0xa1f, 0xa20, 0xa21, 0xa22, 0xa23, 0xa24, 0xa25, 0xa26, 0xa27, 0xa28, 0xa29, 0xa2a, 0xa2b, 0xa2c, 0xa2d, 0xa2e, 0xa2f, 0xa30, 0xa31, 0xa32, 0xa33, 0xa34, 0xa35, 0xa36, 0xa37, 0xa38, 0xa39, 0xa3a, 0xa3b, 0xa3c, 0xa3d, 0xa3e, 0xa3f, 0xa40, 0xa41, 0xa42, 0xa43, 0xa44, 0xa45, 0xa46, 0xa47, 0xa48, 0xa49, 0xa4a, 0xa4b, 0xa4c, 0xa4d, 0xa4e, 0xa4f, 0xa50, 0xa51, 0xa52, 0xa53, 0xa54, 0xa55, 0xa56, 0xa57, 0xa58, 0xa59, 0xa5a, 0xa5b, 0xa5c, 0xa5d, 0xa5e, 0xa5f, 0xa60, 0xa61, 0xa62, 0xa63, 0xa64, 0xa65, 0xa66, 0xa67, 0xa68, 0xa69, 0xa6a, 0xa6b, 0xa6c, 0xa6d, 0xa6e, 0xa6f, 0xa70, 0xa71, 0xa72, 0xa73, 0xa74, 0xa75, 0xa76, 0xa77, 0xa78, 0xa79, 0xa7a, 0xa7b, 0xa7c, 0xa7d, 0xa7e, 0xa7f, 0xa80, 0xa81, 0xa82, 0xa83, 0xa84, 0xa85, 0xa86, 0xa87, 0xa88, 0xa89, 0xa8a, 0xa8b, 0xa8c, 0xa8d, 0xa8e, 0xa8f, 0xa90, 0xa91, 0xa92, 0xa93, 0xa94, 0xa95, 0xa96, 0xa97, 0xa98, 0xa99, 0xa9a, 0xa9b, 0xa9c, 0xa9d, 0xa9e, 0xa9f, 0xaa0, 0xaa1, 0xaa2, 0xaa3, 0xaa4, 0xaa5, 0xaa6, 0xaa7, 0xaa8, 0xaa9, 0xaaa, 0xaab, 0xaac, 0xaad, 0xaae, 0xaaf, 0xab0, 0xab1, 0xab2, 0xab3, 0xab4, 0xab5, 0xab6, 0xab7, 0xab8, 0xab9, 0xaba, 0xabb, 0xabc, 0xabd, 0xabe, 0xabf, 0xac0, 0xac1, 0xac2, 0xac3, 0xac4, 0xac5, 0xac6, 0xac7, 0xac8, 0xac9, 0xaca, 0xacb, 0xacc, 0xacd, 0xace, 0xacf, 0xad0, 0xad1, 0xad2, 0xad3, 0xad4, 0xad5, 0xad6, 0xad7, 0xad8, 0xad9, 0xada, 0xadb, 0xadc, 0xadd, 0xade, 0xadf, 0xae0, 0xae1, 0xae2, 0xae3, 0xae4, 0xae5, 0xae6, 0xae7, 0xae8, 0xae9, 0xaea, 0xaeb, 0xaec, 0xaed, 0xaee, 0xaef, 0xaf0, 0xaf1, 0xaf2, 0xaf3, 0xaf4, 0xaf5, 0xaf6, 0xaf7, 0xaf8, 0xaf9, 0xafa, 0xafb, 0xafc, 0xafd, 0xafe, 0xaff, 0xb00, 0xb01, 0xb02, 0xb03, 0xb04, 0xb05, 0xb06, 0xb07, 0xb08, 0xb09, 0xb0a, 0xb0b, 0xb0c, 0xb0d, 0xb0e, 0xb0f, 0xb10, 0xb11, 0xb12, 0xb13, 0xb14, 0xb15, 0xb16, 0xb17, 0xb18, 0xb19, 0xb1a, 0xb1b, 0xb1c, 0xb1d, 0xb1e, 0xb1f, 0xb20, 0xb21, 0xb22, 0xb23, 0xb24, 0xb25, 0xb26, 0xb27, 0xb28, 0xb29, 0xb2a, 0xb2b, 0xb2c, 0xb2d, 0xb2e, 0xb2f, 0xb30, 0xb31, 0xb32, 0xb33, 0xb34, 0xb35, 0xb36, 0xb37, 0xb38, 0xb39, 0xb3a, 0xb3b, 0xb3c, 0xb3d, 0xb3e, 0xb3f, 0xb40, 0xb41, 0xb42, 0xb43, 0xb44, 0xb45, 0xb46, 0xb47, 0xb48, 0xb49, 0xb4a, 0xb4b, 0xb4c, 0xb4d, 0xb4e, 0xb4f, 0xb50, 0xb51, 0xb52, 0xb53, 0xb54, 0xb55, 0xb56, 0xb57, 0xb58, 0xb59, 0xb5a, 0xb5b, 0xb5c, 0xb5d, 0xb5e, 0xb5f, 0xb60, 0xb61, 0xb62, 0xb63, 0xb64, 0xb65, 0xb66, 0xb67, 0xb68, 0xb69, 0xb6a, 0xb6b, 0xb6c, 0xb6d, 0xb6e, 0xb6f, 0xb70, 0xb71, 0xb72, 0xb73, 0xb74, 0xb75, 0xb76, 0xb77, 0xb78, 0xb79, 0xb7a, 0xb7b, 0xb7c, 0xb7d, 0xb7e, 0xb7f, 0xb80, 0xb81, 0xb82, 0xb83, 0xb84, 0xb85, 0xb86, 0xb87, 0xb88, 0xb89, 0xb8a, 0xb8b, 0xb8c, 0xb8d, 0xb8e, 0xb8f, 0xb90, 0xb91, 0xb92, 0xb93, 0xb94, 0xb95, 0xb96, 0xb97, 0xb98, 0xb99, 0xb9a, 0xb9b, 0xb9c, 0xb9d, 0xb9e, 0xb9f, 0xba0, 0xba1, 0xba2, 0xba3, 0xba4, 0xba5, 0xba6, 0xba7, 0xba8, 0xba9, 0xbaa, 0xbab, 0xbac, 0xbad, 0xbae, 0xbaf, 0xbb0, 0xbb1, 0xbb2, 0xbb3, 0xbb4, 0xbb5, 0xbb6, 0xbb7, 0xbb8, 0xbb9, 0xbba, 0xbbb, 0xbbc, 0xbbd, 0xbbe, 0xbbf, 0xbc0, 0xbc1, 0xbc2, 0xbc3, 0xbc4, 0xbc5, 0xbc6, 0xbc7, 0xbc8, 0xbc9, 0xbca, 0xbcb, 0xbcc, 0xbcd, 0xbce, 0xbcf, 0xbd0, 0xbd1, 0xbd2, 0xbd3, 0xbd4, 0xbd5, 0xbd6, 0xbd7, 0xbd8, 0xbd9, 0xbda, 0xbdb, 0xbdc, 0xbdd, 0xbde, 0xbdf, 0xbe0, 0xbe1, 0xbe2, 0xbe3, 0xbe4, 0xbe5, 0xbe6, 0xbe7, 0xbe8, 0xbe9, 0xbea, 0xbeb, 0xbec, 0xbed, 0xbee, 0xbef, 0xbf0, 0xbf1, 0xbf2, 0xbf3, 0xbf4, 0xbf5, 0xbf6, 0xbf7, 0xbf8, 0xbf9, 0xbfa, 0xbfb, 0xbfc, 0xbfd, 0xbfe, 0xbff, 0xc00, 0xc01, 0xc02, 0xc03, 0xc04, 0xc05, 0xc06, 0xc07, 0xc08, 0xc09, 0xc0a, 0xc0b, 0xc0c, 0xc0d, 0xc0e, 0xc0f, 0xc10, 0xc11, 0xc12, 0xc13, 0xc14, 0xc15, 0xc16, 0xc17, 0xc18, 0xc19, 0xc1a, 0xc1b, 0xc1c, 0xc1d, 0xc1e, 0xc1f, 0xc20, 0xc21, 0xc22, 0xc23, 0xc24, 0xc25, 0xc26, 0xc27, 0xc28, 0xc29, 0xc2a, 0xc2b, 0xc2c, 0xc2d, 0xc2e, 0xc2f, 0xc30, 0xc31, 0xc32, 0xc33, 0xc34, 0xc35, 0xc36, 0xc37, 0xc38, 0xc39, 0xc3a, 0xc3b, 0xc3c, 0xc3d, 0xc3e, 0xc3f, 0xc40, 0xc41, 0xc42, 0xc43, 0xc44, 0xc45, 0xc46, 0xc47, 0xc48, 0xc49, 0xc4a, 0xc4b, 0xc4c, 0xc4d, 0xc4e, 0xc4f, 0xc50, 0xc51, 0xc52, 0xc53, 0xc54, 0xc55, 0xc56, 0xc57, 0xc58, 0xc59, 0xc5a, 0xc5b, 0xc5c, 0xc5d, 0xc5e, 0xc5f, 0xc60, 0xc61, 0xc62, 0xc63, 0xc64, 0xc65, 0xc66, 0xc67, 0xc68, 0xc69, 0xc6a, 0xc6b, 0xc6c, 0xc6d, 0xc6e, 0xc6f, 0xc70, 0xc71, 0xc72, 0xc73, 0xc74, 0xc75, 0xc76, 0xc77, 0xc78, 0xc79, 0xc7a, 0xc7b, 0xc7c, 0xc7d, 0xc7e, 0xc7f, 0xc80, 0xc81, 0xc82, 0xc83, 0xc84, 0xc85, 0xc86, 0xc87, 0xc88, 0xc89, 0xc8a, 0xc8b, 0xc8c, 0xc8d, 0xc8e, 0xc8f, 0xc90, 0xc91, 0xc92, 0xc93, 0xc94, 0xc95, 0xc96, 0xc97, 0xc98, 0xc99, 0xc9a, 0xc9b, 0xc9c, 0xc9d, 0xc9e, 0xc9f, 0xca0, 0xca1, 0xca2, 0xca3, 0xca4, 0xca5, 0xca6, 0xca7, 0xca8, 0xca9, 0xcaa, 0xcab, 0xcac, 0xcad, 0xcae, 0xcaf, 0xcb0, 0xcb1, 0xcb2, 0xcb3, 0xcb4, 0xcb5, 0xcb6, 0xcb7, 0xcb8, 0xcb9, 0xcba, 0xcbb, 0xcbc, 0xcbd, 0xcbe, 0xcbf, 0xcc0, 0xcc1, 0xcc2, 0xcc3, 0xcc4, 0xcc5, 0xcc6, 0xcc7, 0xcc8, 0xcc9, 0xcca, 0xccb, 0xccc, 0xccd, 0xcce, 0xccf, 0xcd0, 0xcd1, 0xcd2, 0xcd3, 0xcd4, 0xcd5, 0xcd6, 0xcd7, 0xcd8, 0xcd9, 0xcda, 0xcdb, 0xcdc, 0xcdd, 0xcde, 0xcdf, 0xce0, 0xce1, 0xce2, 0xce3, 0xce4, 0xce5, 0xce6, 0xce7, 0xce8, 0xce9, 0xcea, 0xceb, 0xcec, 0xced, 0xcee, 0xcef, 0xcf0, 0xcf1, 0xcf2, 0xcf3, 0xcf4, 0xcf5, 0xcf6, 0xcf7, 0xcf8, 0xcf9, 0xcfa, 0xcfb, 0xcfc, 0xcfd, 0xcfe, 0xcff, 0xd00, 0xd01, 0xd02, 0xd03, 0xd04, 0xd05, 0xd06, 0xd07, 0xd08, 0xd09, 0xd0a, 0xd0b, 0xd0c, 0xd0d, 0xd0e, 0xd0f, 0xd10, 0xd11, 0xd12, 0xd13, 0xd14, 0xd15, 0xd16, 0xd17, 0xd18, 0xd19, 0xd1a, 0xd1b, 0xd1c, 0xd1d, 0xd1e, 0xd1f, 0xd20, 0xd21, 0xd22, 0xd23, 0xd24, 0xd25, 0xd26, 0xd27, 0xd28, 0xd29, 0xd2a, 0xd2b, 0xd2c, 0xd2d, 0xd2e, 0xd2f, 0xd30, 0xd31, 0xd32, 0xd33, 0xd34, 0xd35, 0xd36, 0xd37, 0xd38, 0xd39, 0xd3a, 0xd3b, 0xd3c, 0xd3d, 0xd3e, 0xd3f, 0xd40, 0xd41, 0xd42, 0xd43, 0xd44, 0xd45, 0xd46, 0xd47, 0xd48, 0xd49, 0xd4a, 0xd4b, 0xd4c, 0xd4d, 0xd4e, 0xd4f, 0xd50, 0xd51, 0xd52, 0xd53, 0xd54, 0xd55, 0xd56, 0xd57, 0xd58, 0xd59, 0xd5a, 0xd5b, 0xd5c, 0xd5d, 0xd5e, 0xd5f, 0xd60, 0xd61, 0xd62, 0xd63, 0xd64, 0xd65, 0xd66, 0xd67, 0xd68, 0xd69, 0xd6a, 0xd6b, 0xd6c, 0xd6d, 0xd6e, 0xd6f, 0xd70, 0xd71, 0xd72, 0xd73, 0xd74, 0xd75, 0xd76, 0xd77, 0xd78, 0xd79, 0xd7a, 0xd7b, 0xd7c, 0xd7d, 0xd7e, 0xd7f, 0xd80, 0xd81, 0xd82, 0xd83, 0xd84, 0xd85, 0xd86, 0xd87, 0xd88, 0xd89, 0xd8a, 0xd8b, 0xd8c, 0xd8d, 0xd8e, 0xd8f, 0xd90, 0xd91, 0xd92, 0xd93, 0xd94, 0xd95, 0xd96, 0xd97, 0xd98, 0xd99, 0xd9a, 0xd9b, 0xd9c, 0xd9d, 0xd9e, 0xd9f, 0xda0, 0xda1, 0xda2, 0xda3, 0xda4, 0xda5, 0xda6, 0xda7, 0xda8, 0xda9, 0xdaa, 0xdab, 0xdac, 0xdad, 0xdae, 0xdaf, 0xdb0, 0xdb1, 0xdb2, 0xdb3, 0xdb4, 0xdb5, 0xdb6, 0xdb7, 0xdb8, 0xdb9, 0xdba, 0xdbb, 0xdbc, 0xdbd, 0xdbe, 0xdbf, 0xdc0, 0xdc1, 0xdc2, 0xdc3, 0xdc4, 0xdc5, 0xdc6, 0xdc7, 0xdc8, 0xdc9, 0xdca, 0xdcb, 0xdcc, 0xdcd, 0xdce, 0xdcf, 0xdd0, 0xdd1, 0xdd2, 0xdd3, 0xdd4, 0xdd5, 0xdd6, 0xdd7, 0xdd8, 0xdd9, 0xdda, 0xddb, 0xddc, 0xddd, 0xdde, 0xddf, 0xde0, 0xde1, 0xde2, 0xde3, 0xde4, 0xde5, 0xde6, 0xde7, 0xde8, 0xde9, 0xdea, 0xdeb, 0xdec, 0xded, 0xdee, 0xdef, 0xdf0, 0xdf1, 0xdf2, 0xdf3, 0xdf4, 0xdf5, 0xdf6, 0xdf7, 0xdf8, 0xdf9, 0xdfa, 0xdfb, 0xdfc, 0xdfd, 0xdfe, 0xdff, 0xe00, 0xe01, 0xe02, 0xe03, 0xe04, 0xe05, 0xe06, 0xe07, 0xe08, 0xe09, 0xe0a, 0xe0b, 0xe0c, 0xe0d, 0xe0e, 0xe0f, 0xe10, 0xe11, 0xe12, 0xe13, 0xe14, 0xe15, 0xe16, 0xe17, 0xe18, 0xe19, 0xe1a, 0xe1b, 0xe1c, 0xe1d, 0xe1e, 0xe1f, 0xe20, 0xe21, 0xe22, 0xe23, 0xe24, 0xe25, 0xe26, 0xe27, 0xe28, 0xe29, 0xe2a, 0xe2b, 0xe2c, 0xe2d, 0xe2e, 0xe2f, 0xe30, 0xe31, 0xe32, 0xe33, 0xe34, 0xe35, 0xe36, 0xe37, 0xe38, 0xe39, 0xe3a, 0xe3b, 0xe3c, 0xe3d, 0xe3e, 0xe3f, 0xe40, 0xe41, 0xe42, 0xe43, 0xe44, 0xe45, 0xe46, 0xe47, 0xe48, 0xe49, 0xe4a, 0xe4b, 0xe4c, 0xe4d, 0xe4e, 0xe4f, 0xe50, 0xe51, 0xe52, 0xe53, 0xe54, 0xe55, 0xe56, 0xe57, 0xe58, 0xe59, 0xe5a, 0xe5b, 0xe5c, 0xe5d, 0xe5e, 0xe5f, 0xe60, 0xe61, 0xe62, 0xe63, 0xe64, 0xe65, 0xe66, 0xe67, 0xe68, 0xe69, 0xe6a, 0xe6b, 0xe6c, 0xe6d, 0xe6e, 0xe6f, 0xe70, 0xe71, 0xe72, 0xe73, 0xe74, 0xe75, 0xe76, 0xe77, 0xe78, 0xe79, 0xe7a, 0xe7b, 0xe7c, 0xe7d, 0xe7e, 0xe7f, 0xe80, 0xe81, 0xe82, 0xe83, 0xe84, 0xe85, 0xe86, 0xe87, 0xe88, 0xe89, 0xe8a, 0xe8b, 0xe8c, 0xe8d, 0xe8e, 0xe8f, 0xe90, 0xe91, 0xe92, 0xe93, 0xe94, 0xe95, 0xe96, 0xe97, 0xe98, 0xe99, 0xe9a, 0xe9b, 0xe9c, 0xe9d, 0xe9e, 0xe9f, 0xea0, 0xea1, 0xea2, 0xea3, 0xea4, 0xea5, 0xea6, 0xea7, 0xea8, 0xea9, 0xeaa, 0xeab, 0xeac, 0xead, 0xeae, 0xeaf, 0xeb0, 0xeb1, 0xeb2, 0xeb3, 0xeb4, 0xeb5, 0xeb6, 0xeb7, 0xeb8, 0xeb9, 0xeba, 0xebb, 0xebc, 0xebd, 0xebe, 0xebf, 0xec0, 0xec1, 0xec2, 0xec3, 0xec4, 0xec5, 0xec6, 0xec7, 0xec8, 0xec9, 0xeca, 0xecb, 0xecc, 0xecd, 0xece, 0xecf, 0xed0, 0xed1, 0xed2, 0xed3, 0xed4, 0xed5, 0xed6, 0xed7, 0xed8, 0xed9, 0xeda, 0xedb, 0xedc, 0xedd, 0xede, 0xedf, 0xee0, 0xee1, 0xee2, 0xee3, 0xee4, 0xee5, 0xee6, 0xee7, 0xee8, 0xee9, 0xeea, 0xeeb, 0xeec, 0xeed, 0xeee, 0xeef, 0xef0, 0xef1, 0xef2, 0xef3, 0xef4, 0xef5, 0xef6, 0xef7, 0xef8, 0xef9, 0xefa, 0xefb, 0xefc, 0xefd, 0xefe, 0xeff, 0xf00, 0xf01, 0xf02, 0xf03, 0xf04, 0xf05, 0xf06, 0xf07, 0xf08, 0xf09, 0xf0a, 0xf0b, 0xf0c, 0xf0d, 0xf0e, 0xf0f, 0xf10, 0xf11, 0xf12, 0xf13, 0xf14, 0xf15, 0xf16, 0xf17, 0xf18, 0xf19, 0xf1a, 0xf1b, 0xf1c, 0xf1d, 0xf1e, 0xf1f, 0xf20, 0xf21, 0xf22, 0xf23, 0xf24, 0xf25, 0xf26, 0xf27, 0xf28, 0xf29, 0xf2a, 0xf2b, 0xf2c, 0xf2d, 0xf2e, 0xf2f, 0xf30, 0xf31, 0xf32, 0xf33, 0xf34, 0xf35, 0xf36, 0xf37, 0xf38, 0xf39, 0xf3a, 0xf3b, 0xf3c, 0xf3d, 0xf3e, 0xf3f, 0xf40, 0xf41, 0xf42, 0xf43, 0xf44, 0xf45, 0xf46, 0xf47, 0xf48, 0xf49, 0xf4a, 0xf4b, 0xf4c, 0xf4d, 0xf4e, 0xf4f, 0xf50, 0xf51, 0xf52, 0xf53, 0xf54, 0xf55, 0xf56, 0xf57, 0xf58, 0xf59, 0xf5a, 0xf5b, 0xf5c, 0xf5d, 0xf5e, 0xf5f, 0xf60, 0xf61, 0xf62, 0xf63, 0xf64, 0xf65, 0xf66, 0xf67, 0xf68, 0xf69, 0xf6a, 0xf6b, 0xf6c, 0xf6d, 0xf6e, 0xf6f, 0xf70, 0xf71, 0xf72, 0xf73, 0xf74, 0xf75, 0xf76, 0xf77, 0xf78, 0xf79, 0xf7a, 0xf7b, 0xf7c, 0xf7d, 0xf7e, 0xf7f, 0xf80, 0xf81, 0xf82, 0xf83, 0xf84, 0xf85, 0xf86, 0xf87, 0xf88, 0xf89, 0xf8a, 0xf8b, 0xf8c, 0xf8d, 0xf8e, 0xf8f, 0xf90, 0xf91, 0xf92, 0xf93, 0xf94, 0xf95, 0xf96, 0xf97, 0xf98, 0xf99, 0xf9a, 0xf9b, 0xf9c, 0xf9d, 0xf9e, 0xf9f, 0xfa0, 0xfa1, 0xfa2, 0xfa3, 0xfa4, 0xfa5, 0xfa6, 0xfa7, 0xfa8, 0xfa9, 0xfaa, 0xfab, 0xfac, 0xfad, 0xfae, 0xfaf, 0xfb0, 0xfb1, 0xfb2, 0xfb3, 0xfb4, 0xfb5, 0xfb6, 0xfb7, 0xfb8, 0xfb9, 0xfba, 0xfbb, 0xfbc, 0xfbd, 0xfbe, 0xfbf, 0xfc0, 0xfc1, 0xfc2, 0xfc3, 0xfc4, 0xfc5, 0xfc6, 0xfc7, 0xfc8, 0xfc9, 0xfca, 0xfcb, 0xfcc, 0xfcd, 0xfce, 0xfcf, 0xfd0, 0xfd1, 0xfd2, 0xfd3, 0xfd4, 0xfd5, 0xfd6, 0xfd7, 0xfd8, 0xfd9, 0xfda, 0xfdb, 0xfdc, 0xfdd, 0xfde, 0xfdf, 0xfe0, 0xfe1, 0xfe2, 0xfe3, 0xfe4, 0xfe5, 0xfe6, 0xfe7, 0xfe8, 0xfe9, 0xfea, 0xfeb, 0xfec, 0xfed, 0xfee, 0xfef, 0xff0, 0xff1, 0xff2, 0xff3, 0xff4, 0xff5, 0xff6, 0xff7, 0xff8, 0xff9, 0xffa, 0xffb, 0xffc, 0xffd, 0xffe, 0xfff }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x050, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x020, 0x020, 0x020, 0x0b0, 0x0b0, 0x0f0, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x050, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x060, 0x060, 0x160, 0x160, 0x160, 0x160, 0x1f0, 0x1f0, 0x1f0, 0x1f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x050, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x020, 0x030, 0x030, 0x0b0, 0x0b0, 0x0f0, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x018, 0x070, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x080, 0x080, 0x080, 0x080, 0x080, 0x0c0, 0x080, 0x080, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x0c0, 0x1c0, 0x3c0, 0x3c0, 0x3c0, 0x3c0, 0x3c0, 0x3c0, 0x3c0, 0x3c0, 0x3e0, 0x3e0, 0x3e0, 0x3e8, 0x3f0, 0x5f0, 0x5f0, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x050, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x020, 0x030, 0x030, 0x0b0, 0x0b0, 0x0f0, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x050, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x040, 0x040, 0x060, 0x040, 0x060, 0x060, 0x0e0, 0x0e0, 0x1e0, 0x1e0, 0x1e0, 0x1e0, 0x1f0, 0x1f0, 0x1f0, 0x2f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x010, 0x050, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x070, 0x070, 0x070, 0x070, 0x0f0, 0x0f0, 0x0f0, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x438, 0x438, 0x470, 0x470, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd18, 0xd30, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xf00, 0xe80, 0xe80, 0xe80, 0xf00, 0xe80, 0xf00, 0xe80, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0 }, + new[] { 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff, 0xfff }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x040, 0x0f0, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x200, 0x678, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x200, 0x200, 0x300, 0x500, 0x738, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x200, 0x200, 0x000, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x500, 0x200, 0x300, 0x300, 0x500, 0x500, 0x580, 0x680, 0x740, 0x200, 0x200, 0x300, 0x300, 0x300, 0x500, 0x500, 0x680, 0x500, 0x580, 0x580, 0x680, 0x680, 0x740, 0x740, 0x7a0, 0x680, 0x6c0, 0x6c0, 0x740, 0x6c0, 0x740, 0x760, 0x7d0, 0x760, 0x7a0, 0x7a0, 0x7e0, 0x7d0, 0x7e8, 0x7f0, 0x7f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x968, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x000, 0x000, 0x000, 0x400, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x800, 0x400, 0x400, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x978, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x400, 0x400, 0x400, 0x800, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x900, 0xa90, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x900, 0x900, 0x900, 0x980, 0xb40, 0x800, 0x800, 0x800, 0x800, 0x800, 0x900, 0x900, 0x980, 0x900, 0x900, 0x900, 0xa80, 0x980, 0xa80, 0xac0, 0xba0, 0x980, 0x980, 0xa80, 0xac0, 0xac0, 0xb40, 0xb40, 0xbd0, 0xb40, 0xba0, 0xba0, 0xbd0, 0xbd0, 0xbe8, 0xbf0, 0xbf0, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0xa00, 0xa00, 0x800, 0x800, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc78, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0x800, 0x800, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc80, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd40, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc80, 0xc00, 0xc80, 0xc80, 0xd60, 0xc00, 0xc80, 0xc80, 0xcc0, 0xc80, 0xd40, 0xd40, 0xda0, 0xd40, 0xd60, 0xda0, 0xdd0, 0xdd0, 0xde8, 0xdf0, 0xdf0, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xc00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xe00, 0xe00, 0xe00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xc00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xe00, 0xd00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xd00, 0xd00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe40, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe40, 0xe40, 0xea0, 0xe40, 0xe40, 0xea0, 0xed0, 0xea0, 0xee0, 0xef0, 0xef0, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe80, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe80, 0xe00, 0xe80, 0xe80, 0xe80, 0xe80, 0xf00, 0xf00, 0xf00, 0xe00, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xf00, 0xe80, 0xe80, 0xe80, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf20, 0xf00, 0xf00, 0xf20, 0xf50, 0xf20, 0xf60, 0xf68, 0xf70, 0xe80, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf40, 0xf00, 0xf00, 0xf40, 0xf40, 0xf40, 0xf40, 0xf80, 0xf80, 0xf40, 0xf40, 0xf40, 0xf80, 0xf40, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf90, 0xfa8, 0xfb0, 0xf80, 0xf80, 0xf80, 0xfa0, 0xf80, 0xfa0, 0xfa0, 0xfc0, 0xfa0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc8, 0xfd0, 0xfc0, 0xfd0, 0xfd0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfd0, 0xfd0, 0xfc0, 0xfd0, 0xfc8, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfa0, 0xfc0, 0xfa0, 0xfa0, 0xfa0, 0xfa0, 0xf80, 0xf80, 0xf80, 0xfb0, 0xfa8, 0xf90, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf40, 0xf80, 0xf40, 0xf40, 0xf40, 0xf80, 0xf80, 0xf40, 0xf40, 0xf40, 0xf40, 0xf40, 0xf00, 0xf40, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf70, 0xf68, 0xf60, 0xf20, 0xf50, 0xf20, 0xf00, 0xf00, 0xf20, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xe80, 0xe80, 0xf00, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe00, 0xf00, 0xf00, 0xf00, 0xe80, 0xe80, 0xe80, 0xe80, 0xe00, 0xe80, 0xe80, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe80, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xd00, 0xe00, 0xd00, 0xd00, 0xd00, 0xef0, 0xef0, 0xee8, 0xeb0, 0xed0, 0xea0, 0xe40, 0xe40, 0xea0, 0xe40, 0xe40, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe40, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xd00, 0xd00, 0xd00, 0xe40, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xd00, 0xe00, 0xe00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xc00, 0xc00, 0xd00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xe00, 0xe00, 0xe00, 0xd00, 0xe00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xc00, 0xd00, 0xc00, 0xc00, 0xc00, 0xd00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xdf0, 0xdf0, 0xde8, 0xdd0, 0xdd0, 0xda0, 0xd60, 0xd40, 0xdc0, 0xd40, 0xd40, 0xc80, 0xcc0, 0xc80, 0xc80, 0xc00, 0xda0, 0xc80, 0xc80, 0xc00, 0xc80, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd40, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc90, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0x800, 0xa00, 0x800, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0x800, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xc78, 0xc00, 0xc00, 0xc00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0x800, 0x800, 0x800, 0xa00, 0xa00, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0xbf0, 0xbf0, 0xbe8, 0xbd0, 0xbd0, 0xba0, 0xba0, 0xb40, 0xbd0, 0xb60, 0xb40, 0xac0, 0xb40, 0xa80, 0xa80, 0x980, 0xba0, 0xb40, 0xa80, 0x980, 0xa80, 0x900, 0x900, 0x900, 0x980, 0x900, 0x900, 0x800, 0x800, 0x800, 0x800, 0x800, 0xb40, 0xa80, 0x900, 0x900, 0x900, 0x800, 0x800, 0x800, 0x900, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xab8, 0x900, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x400, 0x800, 0x800, 0x800, 0x400, 0x800, 0x400, 0x400, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x978, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x400, 0x800, 0x400, 0x400, 0x400, 0x800, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x000, 0x000, 0x000, 0x400, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x968, 0x800, 0x800, 0x800, 0x800, 0x800, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x7f0, 0x7f0, 0x7e8, 0x7d0, 0x7e0, 0x7a0, 0x7a0, 0x760, 0x7d0, 0x7a0, 0x740, 0x740, 0x740, 0x6c0, 0x680, 0x580, 0x7a0, 0x740, 0x740, 0x680, 0x680, 0x580, 0x580, 0x500, 0x680, 0x500, 0x500, 0x300, 0x300, 0x300, 0x200, 0x200, 0x740, 0x680, 0x680, 0x500, 0x500, 0x300, 0x300, 0x200, 0x500, 0x200, 0x200, 0x200, 0x200, 0x200, 0x000, 0x000, 0x200, 0x200, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x738, 0x500, 0x300, 0x200, 0x200, 0x200, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x678, 0x200, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x568, 0x040, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x3f0, 0x0f0, 0x0c0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000 }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x050, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x1f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x218, 0x000, 0x000, 0x000, 0x2f0, 0x0f0, 0x2f0, 0x2f0, 0x3f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x068, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x070, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x078, 0x000, 0x000, 0x000, 0x0f8, 0x000, 0x318, 0x370, 0x5f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x250, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x220, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x208, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x230, 0x000, 0x000, 0x000, 0x378, 0x000, 0x578, 0x578, 0x6f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x320, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x508, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x500, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x500, 0x000, 0x200, 0x200, 0x580, 0x300, 0x698, 0x6b8, 0x770, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x000, 0x200, 0x000, 0x200, 0x200, 0x680, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x000, 0x000, 0x200, 0x200, 0x200, 0x200, 0x200, 0x680, 0x200, 0x200, 0x200, 0x300, 0x200, 0x300, 0x300, 0x680, 0x300, 0x500, 0x500, 0x6c0, 0x580, 0x740, 0x740, 0x7b0, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x200, 0x500, 0x200, 0x300, 0x300, 0x500, 0x300, 0x500, 0x500, 0x740, 0x300, 0x300, 0x300, 0x580, 0x300, 0x580, 0x580, 0x740, 0x580, 0x680, 0x680, 0x760, 0x6c0, 0x760, 0x7a0, 0x7d0, 0x580, 0x580, 0x580, 0x6c0, 0x580, 0x6c0, 0x6c0, 0x7a0, 0x6c0, 0x740, 0x740, 0x7a0, 0x740, 0x7a0, 0x7d0, 0x7e0, 0x740, 0x760, 0x760, 0x7d0, 0x7a0, 0x7d0, 0x7d0, 0x7f0, 0x7d0, 0x7e8, 0x7e8, 0x7f0, 0x7f0, 0x7f0, 0x7f0, 0xbf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x8b0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x850, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x820, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x808, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x400, 0x000, 0x400, 0x400, 0x830, 0x000, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x878, 0x400, 0x400, 0x400, 0x878, 0x800, 0x878, 0x928, 0x9f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x400, 0x000, 0x400, 0x400, 0x850, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x400, 0x400, 0x400, 0x400, 0x820, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x400, 0x400, 0x000, 0x000, 0x000, 0x400, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x808, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x800, 0x800, 0x400, 0x800, 0x800, 0x838, 0x800, 0x838, 0x878, 0xaf0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x000, 0x000, 0x000, 0x400, 0x000, 0x400, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x800, 0x818, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x800, 0x800, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x800, 0x400, 0x800, 0x800, 0x800, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x900, 0x800, 0x900, 0x918, 0xb70, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x800, 0x400, 0x800, 0x800, 0x800, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x900, 0x400, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x900, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x900, 0x800, 0x800, 0x800, 0x980, 0x900, 0x980, 0xa80, 0xbb0, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xac0, 0x800, 0x800, 0x800, 0x900, 0x800, 0x900, 0x900, 0xac0, 0x900, 0x900, 0x900, 0xb40, 0x980, 0xb40, 0xb40, 0xbd0, 0x900, 0x900, 0x900, 0x980, 0x900, 0x980, 0x980, 0xb60, 0x980, 0x9c0, 0xac0, 0xb60, 0xac0, 0xba0, 0xba0, 0xbe0, 0xac0, 0xb40, 0xb60, 0xbb0, 0xb60, 0xbd0, 0xbd0, 0xbf0, 0xbb0, 0xbd8, 0xbe8, 0xbf0, 0xbf0, 0xbf0, 0xbf0, 0xbf0, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x000, 0x400, 0x000, 0x400, 0x000, 0x400, 0x400, 0x400, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x800, 0x800, 0x400, 0x800, 0x800, 0xc50, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x800, 0x800, 0x400, 0x400, 0x400, 0x800, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xc20, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x800, 0x400, 0x800, 0x800, 0x800, 0x400, 0x400, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xc08, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0xa00, 0xa00, 0xc00, 0x800, 0x800, 0x800, 0xa00, 0x800, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc10, 0xa00, 0xc38, 0xc38, 0xcf0, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x800, 0x800, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0x800, 0x800, 0xa00, 0x800, 0xa00, 0xa00, 0xc08, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0x800, 0xa00, 0x800, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xc00, 0xc00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd70, 0x800, 0x800, 0x800, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xc00, 0xc00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc80, 0xdb0, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc80, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc80, 0xc00, 0xc00, 0xc00, 0xcc0, 0xc00, 0xcc0, 0xd40, 0xdd0, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd40, 0xc00, 0xc80, 0xc80, 0xd60, 0xcc0, 0xd60, 0xd60, 0xde0, 0xc80, 0xcc0, 0xcc0, 0xda0, 0xd40, 0xdb0, 0xdd0, 0xdf0, 0xda0, 0xdd0, 0xdd8, 0xdf0, 0xde8, 0xdf0, 0xdf0, 0xdf0, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xc00, 0xc00, 0xc00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xe08, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xe00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xe00, 0xc00, 0xc00, 0xc00, 0xd00, 0xc00, 0xd00, 0xd00, 0xe00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xe00, 0xe00, 0xe70, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xc00, 0xc00, 0xc00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xc00, 0xc00, 0xc00, 0xd00, 0xc00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xeb0, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xe00, 0xe00, 0xe00, 0xd00, 0xd00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe40, 0xed0, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe40, 0xe00, 0xe00, 0xe00, 0xe40, 0xe00, 0xe40, 0xe60, 0xee0, 0xe00, 0xe40, 0xe40, 0xea0, 0xe40, 0xea0, 0xeb0, 0xef0, 0xe60, 0xed0, 0xed0, 0xef0, 0xee8, 0xef0, 0xef0, 0xef0, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xf00, 0xd00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xf00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe80, 0xe80, 0xf00, 0xe00, 0xe80, 0xe80, 0xf00, 0xe80, 0xf00, 0xf00, 0xf30, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe80, 0xe00, 0xe00, 0xe00, 0xe80, 0xe80, 0xe80, 0xe80, 0xf00, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xf00, 0xe80, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf50, 0xe80, 0xe80, 0xe80, 0xf00, 0xe80, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf60, 0xf00, 0xf00, 0xf00, 0xf20, 0xf00, 0xf20, 0xf20, 0xf70, 0xf20, 0xf50, 0xf50, 0xf70, 0xf68, 0xf70, 0xf70, 0xf70, 0xe80, 0xe80, 0xe80, 0xf00, 0xe80, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf80, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf40, 0xf40, 0xf80, 0xf00, 0xf40, 0xf40, 0xf80, 0xf40, 0xf80, 0xf80, 0xf90, 0xf00, 0xf40, 0xf40, 0xf40, 0xf40, 0xf40, 0xf40, 0xf80, 0xf40, 0xf40, 0xf40, 0xf80, 0xf80, 0xf80, 0xf80, 0xfa0, 0xf40, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xfb0, 0xf80, 0xf90, 0xf90, 0xfb0, 0xf98, 0xfb0, 0xfb0, 0xfb0, 0xf40, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xfc0, 0xf80, 0xfa0, 0xfa0, 0xfc0, 0xfa0, 0xfc0, 0xfc0, 0xfc0, 0xfa0, 0xfa0, 0xfa0, 0xfc0, 0xfa0, 0xfc0, 0xfc0, 0xfd0, 0xfc0, 0xfc0, 0xfc0, 0xfd0, 0xfc0, 0xfd0, 0xfd0, 0xfd0, 0xfc0, 0xfc0, 0xfc0, 0xfd0, 0xfd0, 0xfe0, 0xfe0, 0xfe0, 0xfd0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xfe8, 0xfe8, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0 }, + new[] { 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x078, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x100, 0x000, 0x000, 0x000, 0x100, 0x100, 0x100, 0x380, 0x3c0, 0x3c0, 0x3c0, 0x4c0, 0x760, 0x760, 0x7d0, 0x7e8, 0x7f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0f0, 0x2f0, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x918, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x000, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x800, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x400, 0x800, 0x400, 0x400, 0x400, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xc38, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0x800, 0x800, 0x800, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xa00, 0xa00, 0xc00, 0xc00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xa00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xc00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xe00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xe00, 0xe00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xd00, 0xe00, 0xd00, 0xe00, 0xd00, 0xd00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe00, 0xe80, 0xe80, 0xe80, 0xe80, 0xf00, 0xf00, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xe80, 0xf00, 0xf00, 0xf00, 0xe80, 0xe80, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf00, 0xf40, 0xf40, 0xf40, 0xf40, 0xf80, 0xf40, 0xf40, 0xf40, 0xf40, 0xf40, 0xf40, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xf80, 0xfa0, 0xfa0, 0xfc0, 0xfa0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfc0, 0xfd0, 0xfe0, 0xfe0, 0xfe0, 0xfe0, 0xff0, 0xff0, 0xff0, 0xff0, 0xff0 } + }; + + public static Sid Create(int newSampleRate, int clockFrqNum, int clockFrqDen) + { + return new Sid(WaveTable, newSampleRate, clockFrqNum, clockFrqDen); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip90611401.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip90611401.cs new file mode 100644 index 0000000000..96820f5160 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Chip90611401.cs @@ -0,0 +1,352 @@ +using System; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + // emulates the PLA + // which handles all bank switching + + public sealed class Chip90611401 + { + // ------------------------------------ + + public Func PeekBasicRom; + public Func PeekCartridgeLo; + public Func PeekCartridgeHi; + public Func PeekCharRom; + public Func PeekCia0; + public Func PeekCia1; + public Func PeekColorRam; + public Func PeekExpansionLo; + public Func PeekExpansionHi; + public Func PeekKernalRom; + public Func PeekMemory; + public Func PeekSid; + public Func PeekVic; + public Action PokeCartridgeLo; + public Action PokeCartridgeHi; + public Action PokeCia0; + public Action PokeCia1; + public Action PokeColorRam; + public Action PokeExpansionLo; + public Action PokeExpansionHi; + public Action PokeMemory; + public Action PokeSid; + public Action PokeVic; + public Func ReadAec; + public Func ReadBa; + public Func ReadBasicRom; + public Func ReadCartridgeLo; + public Func ReadCartridgeHi; + public Func ReadCharen; + public Func ReadCharRom; + public Func ReadCia0; + public Func ReadCia1; + public Func ReadColorRam; + public Func ReadExpansionLo; + public Func ReadExpansionHi; + public Func ReadExRom; + public Func ReadGame; + public Func ReadHiRam; + public Func ReadKernalRom; + public Func ReadLoRam; + public Func ReadMemory; + public Func ReadSid; + public Func ReadVic; + public Action WriteCartridgeLo; + public Action WriteCartridgeHi; + public Action WriteCia0; + public Action WriteCia1; + public Action WriteColorRam; + public Action WriteExpansionLo; + public Action WriteExpansionHi; + public Action WriteMemory; + public Action WriteSid; + public Action WriteVic; + + // ------------------------------------ + + private enum PlaBank + { + None, + Ram, + BasicRom, + KernalRom, + CharRom, + CartridgeLo, + CartridgeHi, + Vic, + Sid, + ColorRam, + Cia0, + Cia1, + Expansion0, + Expansion1 + } + + // ------------------------------------ + + private bool _p24; + private bool _p25; + private bool _p26; + private bool _p27; + private bool _p28; + private bool _loram; + private bool _hiram; + private bool _game; + private bool _exrom; + private bool _charen; + private bool _a15; + private bool _a14; + private bool _a13; + private bool _a12; + + private PlaBank Bank(int addr, bool read) + { + _loram = ReadLoRam(); + _hiram = ReadHiRam(); + _game = ReadGame(); + + _a15 = (addr & 0x08000) != 0; + _a14 = (addr & 0x04000) != 0; + _a13 = (addr & 0x02000) != 0; + _a12 = (addr & 0x01000) != 0; + + // upper memory regions 8000-FFFF + _exrom = ReadExRom(); + if (_a15) + { + // io/character access + if (_a14 && !_a13 && _a12) + { + // character rom, banked in at D000-DFFF + _charen = ReadCharen(); + if (read && !_charen && (((_hiram || _loram) && _game) || (_hiram && !_exrom && !_game))) + return PlaBank.CharRom; + + // io block, banked in at D000-DFFF + if ((_charen && (_hiram || _loram)) || (_exrom && !_game)) + { + if (addr < 0xD400) + return PlaBank.Vic; + if (addr < 0xD800) + return PlaBank.Sid; + if (addr < 0xDC00) + return PlaBank.ColorRam; + if (addr < 0xDD00) + return PlaBank.Cia0; + if (addr < 0xDE00) + return PlaBank.Cia1; + return addr < 0xDF00 + ? PlaBank.Expansion0 + : PlaBank.Expansion1; + } + } + + // cartridge high, banked either at A000-BFFF or E000-FFFF depending + if (_a13 && !_game && ((_hiram && !_a14 && read && !_exrom) || (_a14 && _exrom))) + return PlaBank.CartridgeHi; + + // cartridge low, banked at 8000-9FFF + if (!_a14 && !_a13 && ((_loram && _hiram && read && !_exrom) || (_exrom && !_game))) + return PlaBank.CartridgeLo; + + // kernal rom, banked at E000-FFFF + if (_hiram && _a14 && _a13 && read && (_game || (!_exrom && !_game))) + return PlaBank.KernalRom; + + // basic rom, banked at A000-BFFF + if (_loram && _hiram && !_a14 && _a13 && read && _game) + return PlaBank.BasicRom; + } + + // ultimax mode ram exclusion + if (_exrom && !_game) + { + _p24 = !_a15 && !_a14 && _a12; //00x1 1000-1FFF, 3000-3FFF + _p25 = !_a15 && !_a14 && _a13; //001x 2000-3FFF + _p26 = !_a15 && _a14; //01xx 4000-7FFF + _p27 = _a15 && !_a14 && _a13; //101x A000-BFFF + _p28 = _a15 && _a14 && !_a13 && !_a12; //1100 C000-CFFF + if (_p24 || _p25 || _p26 || _p27 || _p28) + return PlaBank.None; + } + + return PlaBank.Ram; + } + + public int Peek(int addr) + { + switch (Bank(addr, true)) + { + case PlaBank.BasicRom: + return PeekBasicRom(addr); + case PlaBank.CartridgeHi: + return PeekCartridgeHi(addr); + case PlaBank.CartridgeLo: + return PeekCartridgeLo(addr); + case PlaBank.CharRom: + return PeekCharRom(addr); + case PlaBank.Cia0: + return PeekCia0(addr); + case PlaBank.Cia1: + return PeekCia1(addr); + case PlaBank.ColorRam: + return PeekColorRam(addr); + case PlaBank.Expansion0: + return PeekExpansionLo(addr); + case PlaBank.Expansion1: + return PeekExpansionHi(addr); + case PlaBank.KernalRom: + return PeekKernalRom(addr); + case PlaBank.Ram: + return PeekMemory(addr); + case PlaBank.Sid: + return PeekSid(addr); + case PlaBank.Vic: + return PeekVic(addr); + } + return 0xFF; + } + + public void Poke(int addr, int val) + { + switch (Bank(addr, false)) + { + case PlaBank.CartridgeHi: + PokeCartridgeHi(addr, val); + break; + case PlaBank.CartridgeLo: + PokeCartridgeLo(addr, val); + break; + case PlaBank.Cia0: + PokeCia0(addr, val); + break; + case PlaBank.Cia1: + PokeCia1(addr, val); + break; + case PlaBank.ColorRam: + PokeColorRam(addr, val); + break; + case PlaBank.Expansion0: + PokeExpansionLo(addr, val); + break; + case PlaBank.Expansion1: + PokeExpansionHi(addr, val); + break; + case PlaBank.Ram: + PokeMemory(addr, val); + break; + case PlaBank.Sid: + PokeSid(addr, val); + break; + case PlaBank.Vic: + PokeVic(addr, val); + break; + } + } + + public int Read(int addr) + { + switch (Bank(addr, true)) + { + case PlaBank.BasicRom: + return ReadBasicRom(addr); + case PlaBank.CartridgeHi: + return ReadCartridgeHi(addr); + case PlaBank.CartridgeLo: + return ReadCartridgeLo(addr); + case PlaBank.CharRom: + return ReadCharRom(addr); + case PlaBank.Cia0: + return ReadCia0(addr); + case PlaBank.Cia1: + return ReadCia1(addr); + case PlaBank.ColorRam: + return ReadColorRam(addr); + case PlaBank.Expansion0: + return ReadExpansionLo(addr); + case PlaBank.Expansion1: + return ReadExpansionHi(addr); + case PlaBank.KernalRom: + return ReadKernalRom(addr); + case PlaBank.Ram: + return ReadMemory(addr); + case PlaBank.Sid: + return ReadSid(addr); + case PlaBank.Vic: + return ReadVic(addr); + } + return 0xFF; + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + + public int VicRead(int addr) + { + _game = ReadGame(); + _exrom = ReadExRom(); + _a14 = (addr & 0x04000) == 0; + _a13 = (addr & 0x02000) != 0; + _a12 = (addr & 0x01000) != 0; + + // read char rom at 1000-1FFF and 9000-9FFF + if (_a14 && !_a13 && _a12 && (_game || !_exrom)) + return ReadCharRom(addr); + + // read cartridge rom in ultimax mode + if (_a13 && _a12 && _exrom && !_game) + return ReadCartridgeHi(addr); + + return ReadMemory(addr); + } + + public void Write(int addr, int val) + { + switch (Bank(addr, false)) + { + case PlaBank.CartridgeHi: + WriteCartridgeHi(addr, val); + if (ReadGame() || !ReadExRom()) + { + WriteMemory(addr, val); + } + break; + case PlaBank.CartridgeLo: + WriteCartridgeLo(addr, val); + if (ReadGame() || !ReadExRom()) + { + WriteMemory(addr, val); + } + break; + case PlaBank.Cia0: + WriteCia0(addr, val); + break; + case PlaBank.Cia1: + WriteCia1(addr, val); + break; + case PlaBank.ColorRam: + WriteColorRam(addr, val); + break; + case PlaBank.Expansion0: + WriteExpansionLo(addr, val); + return; + case PlaBank.Expansion1: + WriteExpansionHi(addr, val); + return; + case PlaBank.Ram: + WriteMemory(addr, val); + break; + case PlaBank.Sid: + WriteSid(addr, val); + break; + case PlaBank.Vic: + WriteVic(addr, val); + break; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Port.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Port.cs new file mode 100644 index 0000000000..a9e8aeaf4f --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Port.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Cia + { + private abstract class Port + { + public abstract int ReadPra(int pra, int ddra, int prb, int ddrb); + public abstract int ReadPrb(int pra, int ddra, int prb, int ddrb); + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } + + private sealed class DisconnectedPort : Port + { + public override int ReadPra(int pra, int ddra, int prb, int ddrb) + { + return (pra | ~ddra) & 0xFF; + } + + public override int ReadPrb(int pra, int ddra, int prb, int ddrb) + { + return (prb | ~ddrb) & 0xFF; + } + } + + private sealed class JoystickKeyboardPort : Port + { + [SaveState.DoNotSave] private int _ret; + [SaveState.DoNotSave] private int _tst; + [SaveState.DoNotSave] private readonly int[] _joyData; + [SaveState.DoNotSave] private readonly int[] _keyData; + + public JoystickKeyboardPort(int[] joyData, int[] keyData) + { + _joyData = joyData; + _keyData = keyData; + } + + private int GetJoystick1() + { + return 0xE0 | + (_joyData[0] == 0 ? 0x01 : 0x00) | + (_joyData[1] == 0 ? 0x02 : 0x00) | + (_joyData[2] == 0 ? 0x04 : 0x00) | + (_joyData[3] == 0 ? 0x08 : 0x00) | + (_joyData[4] == 0 ? 0x10 : 0x00); + } + + private int GetJoystick2() + { + return 0xE0 | + (_joyData[5] == 0 ? 0x01 : 0x00) | + (_joyData[6] == 0 ? 0x02 : 0x00) | + (_joyData[7] == 0 ? 0x04 : 0x00) | + (_joyData[8] == 0 ? 0x08 : 0x00) | + (_joyData[9] == 0 ? 0x10 : 0x00); + } + + private int GetKeyboardRows(int activeColumns) + { + var result = 0xFF; + for (var r = 0; r < 8; r++) + { + if ((activeColumns & 0x1) == 0) + { + var i = r << 3; + for (var c = 0; c < 8; c++) + { + if (_keyData[i++] != 0) + { + result &= ~(1 << c); + } + } + } + activeColumns >>= 1; + } + return result; + } + + private int GetKeyboardColumns(int activeRows) + { + var result = 0xFF; + for (var c = 0; c < 8; c++) + { + if ((activeRows & 0x1) == 0) + { + var i = c; + for (var r = 0; r < 8; r++) + { + if (_keyData[i] != 0) + { + result &= ~(1 << r); + } + i += 0x8; + } + } + activeRows >>= 1; + } + return result; + } + + public override int ReadPra(int pra, int ddra, int prb, int ddrb) + { + _ret = (pra | ~ddra) & 0xFF; + _tst = (prb | ~ddrb) & GetJoystick1(); + _ret &= GetKeyboardColumns(_tst); + return _ret & GetJoystick2(); + } + + public override int ReadPrb(int pra, int ddra, int prb, int ddrb) + { + _ret = ~ddrb & 0xFF; + _tst = (pra | ~ddra) & GetJoystick2(); + _ret &= GetKeyboardRows(_tst); + return (_ret | (prb & ddrb)) & GetJoystick1(); + } + } + + private sealed class IecPort : Port + { + private readonly Func _readIec; + + public IecPort(Func readIec) + { + _readIec = readIec; + } + + public override int ReadPra(int pra, int ddra, int prb, int ddrb) + { + return (pra & ddra) | (~ddra & _readIec()); + } + + public override int ReadPrb(int pra, int ddra, int prb, int ddrb) + { + return (prb | ~ddrb) & 0xFF; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Registers.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Registers.cs new file mode 100644 index 0000000000..6f7061cbea --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Registers.cs @@ -0,0 +1,284 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Cia + { + public int Peek(int addr) + { + return ReadRegister(addr & 0xF); + } + + public bool ReadIrq() + { + return (_icr & 0x80) == 0; + } + + public int ReadPortA() + { + return (_pra | ~_ddra) & 0xFF; + } + + public int Read(int addr) + { + addr &= 0xF; + switch (addr) + { + case 0x8: + _todLatch = false; + return _latch10Ths; + case 0x9: + return _latchSec; + case 0xA: + return _latchMin; + case 0xB: + _todLatch = true; + return _latchHr; + case 0xD: + var icrTemp = _icr; + _icr = 0; + return icrTemp; + } + return ReadRegister(addr); + } + + private int ReadRegister(int addr) + { + switch (addr) + { + case 0x0: + return _port.ReadPra(_pra, _ddra, _prb, _ddrb); + case 0x1: + return _port.ReadPrb(_pra, _ddra, _prb, _ddrb); + case 0x2: + return _ddra; + case 0x3: + return _ddrb; + case 0x4: + return _ta & 0xFF; + case 0x5: + return (_ta >> 8) & 0xFF; + case 0x6: + return _tb & 0xFF; + case 0x7: + return (_tb >> 8) & 0xFF; + case 0x8: + return _tod10Ths; + case 0x9: + return _todSec; + case 0xA: + return _todMin; + case 0xB: + return _todHr; + case 0xC: + return _sdr; + case 0xD: + return _icr; + case 0xE: + return _cra; + case 0xF: + return _crb; + } + return 0; + } + + public void Poke(int addr, int val) + { + WriteRegister(addr, val); + } + + public void Write(int addr, int val) + { + addr &= 0xF; + switch (addr) + { + case 0x4: + _latcha = (_latcha & 0xFF00) | val; + break; + case 0x5: + _latcha = (_latcha & 0xFF) | (val << 8); + if ((_cra & 0x01) == 0) + { + _ta = _latcha; + } + break; + case 0x6: + _latchb = (_latchb & 0xFF00) | val; + break; + case 0x7: + _latchb = (_latchb & 0xFF) | (val << 8); + if ((_crb & 0x01) == 0) + { + _tb = _latchb; + } + break; + case 0x8: + if ((_crb & 0x80) != 0) + { + _alm10Ths = val & 0xF; + } + else + { + _tod10Ths = val & 0xF; + } + break; + case 0x9: + if ((_crb & 0x80) != 0) + { + _almSec = val & 0x7F; + } + else + { + _todSec = val & 0x7F; + } + break; + case 0xA: + if ((_crb & 0x80) != 0) + { + _almMin = val & 0x7F; + } + else + { + _todMin = val & 0x7F; + } + break; + case 0xB: + if ((_crb & 0x80) != 0) + { + _almHr = val & 0x9F; + } + else + { + _todHr = val & 0x9F; + } + break; + case 0xC: + WriteRegister(addr, val); + TriggerInterrupt(8); + break; + case 0xD: + if ((val & 0x80) != 0) + { + _intMask |= (val & 0x7F); + } + else + { + _intMask &= ~val; + } + if ((_icr & _intMask & 0x1F) != 0) + { + _icr |= 0x80; + } + break; + default: + WriteRegister(addr, val); + break; + } + } + + private void WriteRegister(int addr, int val) + { + switch (addr) + { + case 0x0: + _pra = val; + break; + case 0x1: + _prb = val; + break; + case 0x2: + _ddra = val; + break; + case 0x3: + _ddrb = val; + break; + case 0x4: + _latcha = (_latcha & 0xFF00) | val; + _ta = _latcha; + break; + case 0x5: + _latcha = (_latcha & 0xFF) | (val << 8); + _ta = _latcha; + break; + case 0x6: + _latchb = (_latchb & 0xFF00) | val; + _tb = _latchb; + break; + case 0x7: + _latchb = (_latchb & 0xFF) | (val << 8); + _tb = _latchb; + break; + case 0x8: + _tod10Ths = val & 0xF; + break; + case 0x9: + _todSec = val & 0x7F; + break; + case 0xA: + _todMin = val & 0x7F; + break; + case 0xB: + _todHr = val & 0x9F; + break; + case 0xC: + _sdr = val; + break; + case 0xD: + _intMask = val; + break; + case 0xE: + _hasNewCra = true; + _newCra = val; + _taCntPhi2 = ((val & 0x20) == 0); + _taCntCnt = ((val & 0x20) == 0x20); + break; + case 0xF: + _hasNewCrb = true; + _newCrb = val; + _tbCntPhi2 = ((val & 0x60) == 0); + _tbCntTa = ((val & 0x40) == 0x40); + _tbCntCnt = ((val & 0x20) == 0x20); + break; + } + } + + [SaveState.DoNotSave] + public int DdrA + { + get { return _ddra; } + } + + [SaveState.DoNotSave] + public int DdrB + { + get { return _ddrb; } + } + + [SaveState.DoNotSave] + public int PrA + { + get { return _pra; } + } + + [SaveState.DoNotSave] + public int PrB + { + get { return _prb; } + } + + [SaveState.DoNotSave] + public int EffectivePrA + { + get { return _pra | ~_ddra; } + } + + [SaveState.DoNotSave] + public int EffectivePrB + { + get { return _prb | ~_ddrb; } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Tod.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Tod.cs new file mode 100644 index 0000000000..f0512eddc2 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.Tod.cs @@ -0,0 +1,69 @@ +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Cia + { + private void CountTod() + { + if (_todCounter > 0) + { + _todCounter -= _todDen; + return; + } + + _todCounter += _todNum * ((_cra & 0x80) != 0 ? 6 : 5); + _tod10Ths++; + if (_tod10Ths > 9) + { + _tod10Ths = 0; + _todlo = (_todSec & 0x0F) + 1; + _todhi = (_todSec >> 4); + if (_todlo > 9) + { + _todlo = 0; + _todhi++; + } + if (_todhi > 5) + { + _todSec = 0; + _todlo = (_todMin & 0x0F) + 1; + _todhi = (_todMin >> 4); + if (_todlo > 9) + { + _todlo = 0; + _todhi++; + } + if (_todhi > 5) + { + _todMin = 0; + _todlo = (_todHr & 0x0F) + 1; + _todhi = (_todHr >> 4); + _todHr &= 0x80; + if (_todlo > 9) + { + _todlo = 0; + _todhi++; + } + _todHr |= (_todhi << 4) | _todlo; + if ((_todHr & 0x1F) > 0x11) + { + _todHr &= 0x80 ^ 0x80; + } + } + else + { + _todMin = (_todhi << 4) | _todlo; + } + } + else + { + _todSec = (_todhi << 4) | _todlo; + } + } + + if (_tod10Ths == _alm10Ths && _todSec == _almSec && _todMin == _almMin && _todHr == _almHr) + { + TriggerInterrupt(4); + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.cs new file mode 100644 index 0000000000..07a3450deb --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Cia.cs @@ -0,0 +1,504 @@ +using BizHawk.Common; +using System; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Cia + { + /* + Commodore CIA 6526 core. + + Many thanks to: + - 6502.org for hosting the 6526 datasheet + http://archive.6502.org/datasheets/mos_6526_cia.pdf + - Christian Bauer for information on the delayed interrupt mechanism on the 6526 + http://frodo.cebix.net/ + */ + + private enum TimerState + { + Stop = 0, + WaitThenCount = 1, + LoadThenStop = 2, + LoadThenCount = 3, + LoadThenWaitThenCount = 4, + Count = 5, + CountThenStop = 6 + } + + public Func ReadFlag = () => true; + public bool DelayedInterrupts = true; + + private int _pra; + private int _prb; + private int _ddra; + private int _ddrb; + private int _ta; + private int _tb; + private int _latcha; + private int _latchb; + private int _tod10Ths; + private int _todSec; + private int _todMin; + private int _todHr; + private int _latch10Ths; + private int _latchSec; + private int _latchMin; + private int _latchHr; + private int _alm10Ths; + private int _almSec; + private int _almMin; + private int _almHr; + private int _sdr; + private int _icr; + private int _cra; + private int _crb; + private int _intMask; + private bool _todLatch; + private bool _taCntPhi2; + private bool _taCntCnt; + private bool _tbCntPhi2; + private bool _tbCntTa; + private bool _tbCntCnt; + private bool _taIrqNextCycle; + private bool _taPrb6NegativeNextCycle; + private bool _tbIrqNextCycle; + private bool _tbPrb7NegativeNextCycle; + private bool _hasNewCra; + private bool _hasNewCrb; + private TimerState _taState; + private TimerState _tbState; + private int _newCra; + private int _newCrb; + private bool _flagLatch; + [SaveState.DoNotSave] private bool _flagInput; + [SaveState.DoNotSave] private bool _taUnderflow; + + private readonly Port _port; + [SaveState.DoNotSave] private int _todlo; + [SaveState.DoNotSave] private int _todhi; + [SaveState.DoNotSave] private readonly int _todNum; + [SaveState.DoNotSave] private readonly int _todDen; + private int _todCounter; + + private Cia(int todNum, int todDen) + { + _todNum = todNum; + _todDen = todDen; + } + + public Cia(int todNum, int todDen, int[] keyboard, int[] joysticks) : this(todNum, todDen) + { + _port = new JoystickKeyboardPort(joysticks, keyboard); + } + + public Cia(int todNum, int todDen, Func readIec) : this(todNum, todDen) + { + _port = new IecPort(readIec); + } + + public void HardReset() + { + _pra = 0; + _prb = 0; + _ddra = 0; + _ddrb = 0; + _ta = 0xFFFF; + _tb = 0xFFFF; + _latcha = 1; + _latchb = 1; + _tod10Ths = 0; + _todSec = 0; + _todMin = 0; + _todHr = 0; + _alm10Ths = 0; + _almSec = 0; + _almMin = 0; + _almHr = 0; + _sdr = 0; + _icr = 0; + _cra = 0; + _crb = 0; + _intMask = 0; + _todLatch = false; + _taCntPhi2 = false; + _taCntCnt = false; + _tbCntPhi2 = false; + _tbCntTa = false; + _tbCntCnt = false; + _taIrqNextCycle = false; + _tbIrqNextCycle = false; + _taState = TimerState.Stop; + _tbState = TimerState.Stop; + } + + private void CheckIrqs() + { + if (_taIrqNextCycle) + { + _taIrqNextCycle = false; + TriggerInterrupt(1); + } + if (_tbIrqNextCycle) + { + _tbIrqNextCycle = false; + TriggerInterrupt(2); + } + } + + public void ExecutePhase() + { + _taUnderflow = false; + if (DelayedInterrupts) + { + CheckIrqs(); + } + + if (_taPrb6NegativeNextCycle) + { + _prb &= 0xBF; + _taPrb6NegativeNextCycle = false; + } + if (_tbPrb7NegativeNextCycle) + { + _prb &= 0x7F; + _tbPrb7NegativeNextCycle = false; + } + + + switch (_taState) + { + case TimerState.WaitThenCount: + _taState = TimerState.Count; + Ta_Idle(); + break; + case TimerState.Stop: + Ta_Idle(); + break; + case TimerState.LoadThenStop: + _taState = TimerState.Stop; + _ta = _latcha; + Ta_Idle(); + break; + case TimerState.LoadThenCount: + _taState = TimerState.Count; + _ta = _latcha; + Ta_Idle(); + break; + case TimerState.LoadThenWaitThenCount: + _taState = TimerState.WaitThenCount; + if (_ta == 1) + { + Ta_Interrupt(); + _taUnderflow = true; + } + else + { + _ta = _latcha; + } + Ta_Idle(); + break; + case TimerState.Count: + Ta_Count(); + break; + case TimerState.CountThenStop: + _taState = TimerState.Stop; + Ta_Count(); + break; + } + + switch (_tbState) + { + case TimerState.WaitThenCount: + _tbState = TimerState.Count; + Tb_Idle(); + break; + case TimerState.Stop: + Tb_Idle(); + break; + case TimerState.LoadThenStop: + _tbState = TimerState.Stop; + _tb = _latchb; + Tb_Idle(); + break; + case TimerState.LoadThenCount: + _tbState = TimerState.Count; + _tb = _latchb; + Tb_Idle(); + break; + case TimerState.LoadThenWaitThenCount: + _tbState = TimerState.WaitThenCount; + if (_tb == 1) + { + Tb_Interrupt(); + } + else + { + _tb = _latchb; + } + Tb_Idle(); + break; + case TimerState.Count: + Tb_Count(); + break; + case TimerState.CountThenStop: + _tbState = TimerState.Stop; + Tb_Count(); + break; + } + + CountTod(); + + if (!_todLatch) + { + _latch10Ths = _tod10Ths; + _latchSec = _todSec; + _latchMin = _todMin; + _latchHr = _todHr; + } + + _flagInput = ReadFlag(); + if (!_flagInput && _flagLatch) + { + TriggerInterrupt(16); + } + _flagLatch = _flagInput; + + if (!DelayedInterrupts) + { + CheckIrqs(); + } + } + + private void Ta_Count() + { + if (_taCntPhi2) + { + if (_ta <= 0 || --_ta == 0) + { + if (_taState != TimerState.Stop) + { + Ta_Interrupt(); + } + _taUnderflow = true; + } + } + Ta_Idle(); + } + + private void Ta_Interrupt() + { + _ta = _latcha; + _taIrqNextCycle = true; + _icr |= 1; + + if ((_cra & 0x08) != 0) + { + _cra &= 0xFE; + _newCra &= 0xFE; + _taState = TimerState.LoadThenStop; + } + else + { + _taState = TimerState.LoadThenCount; + } + + if ((_cra & 0x02) != 0) + { + if ((_cra & 0x04) != 0) + { + _taPrb6NegativeNextCycle = true; + _prb |= 0x40; + } + else + { + _prb ^= 0x40; + } + _ddrb |= 0x40; + } + } + + private void Ta_Idle() + { + if (_hasNewCra) + { + switch (_taState) + { + case TimerState.Stop: + case TimerState.LoadThenStop: + if ((_newCra & 0x01) != 0) + { + _taState = (_newCra & 0x10) != 0 + ? TimerState.LoadThenWaitThenCount + : TimerState.WaitThenCount; + } + else + { + if ((_newCra & 0x10) != 0) + { + _taState = TimerState.LoadThenStop; + } + } + break; + case TimerState.Count: + if ((_newCra & 0x01) != 0) + { + if ((_newCra & 0x10) != 0) + { + _taState = TimerState.LoadThenWaitThenCount; + } + } + else + { + _taState = (_newCra & 0x10) != 0 + ? TimerState.LoadThenStop + : TimerState.CountThenStop; + } + break; + case TimerState.LoadThenCount: + case TimerState.WaitThenCount: + if ((_newCra & 0x01) != 0) + { + if ((_newCra & 0x08) != 0) + { + _newCra &= 0xFE; + _taState = TimerState.Stop; + } + else if ((_newCra & 0x10) != 0) + { + _taState = TimerState.LoadThenWaitThenCount; + } + } + else + { + _taState = TimerState.Stop; + } + break; + } + _cra = _newCra & 0xEF; + _hasNewCra = false; + } + } + + private void Tb_Count() + { + if (_tbCntPhi2 || (_tbCntTa && _taUnderflow)) + { + if (_tb <= 0 || --_tb == 0) + { + if (_tbState != TimerState.Stop) + { + Tb_Interrupt(); + } + } + } + Tb_Idle(); + } + + private void Tb_Interrupt() + { + _tb = _latchb; + _tbIrqNextCycle = true; + _icr |= 2; + + if ((_crb & 0x08) != 0) + { + _crb &= 0xFE; + _newCrb &= 0xFE; + _tbState = TimerState.LoadThenStop; + } + else + { + _tbState = TimerState.LoadThenCount; + } + + if ((_cra & 0x02) != 0) + { + if ((_cra & 0x04) != 0) + { + _tbPrb7NegativeNextCycle = true; + _prb |= 0x80; + } + else + { + _prb ^= 0x80; + } + _ddrb |= 0x80; + } + } + + private void Tb_Idle() + { + if (_hasNewCrb) + { + switch (_tbState) + { + case TimerState.Stop: + case TimerState.LoadThenStop: + if ((_newCrb & 0x01) != 0) + { + _tbState = (_newCrb & 0x10) != 0 + ? TimerState.LoadThenWaitThenCount + : TimerState.WaitThenCount; + } + else + { + if ((_newCrb & 0x10) != 0) + { + _tbState = TimerState.LoadThenStop; + } + } + break; + case TimerState.Count: + if ((_newCrb & 0x01) != 0) + { + if ((_newCrb & 0x10) != 0) + { + _tbState = TimerState.LoadThenWaitThenCount; + } + } + else + { + _tbState = (_newCrb & 0x10) != 0 + ? TimerState.LoadThenStop + : TimerState.CountThenStop; + } + break; + case TimerState.LoadThenCount: + case TimerState.WaitThenCount: + if ((_newCrb & 0x01) != 0) + { + if ((_newCrb & 0x08) != 0) + { + _newCrb &= 0xFE; + _tbState = TimerState.Stop; + } + else if ((_newCrb & 0x10) != 0) + { + _tbState = TimerState.LoadThenWaitThenCount; + } + } + else + { + _tbState = TimerState.Stop; + } + break; + } + _crb = _newCrb & 0xEF; + _hasNewCrb = false; + } + } + + private void TriggerInterrupt(int bit) + { + _icr |= bit; + if ((_intMask & bit) == 0) return; + _icr |= 0x80; + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Port.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/LatchedPort.cs similarity index 79% rename from BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Port.cs rename to BizHawk.Emulation.Cores/Computers/Commodore64/MOS/LatchedPort.cs index ba947b5a5f..2fd7e3bd3c 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Port.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/LatchedPort.cs @@ -1,85 +1,85 @@ -using System; -using BizHawk.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - sealed public class LatchedPort - { - public byte Direction; - public byte Latch; - - public LatchedPort() - { - Direction = 0x00; - Latch = 0x00; - } - - // data works like this in these types of systems: - // - // directionA directionB result - // 0 0 1 - // 1 0 latchA - // 0 1 latchB - // 1 1 latchA && latchB - // - // however because this uses transistor logic, there are cases where wired-ands - // cause the pull-up resistors not to be enough to keep the bus bit set to 1 when - // both the direction and latch are 1 (the keyboard and joystick port 2 can do this.) - // the class does not handle this case as it must be handled differently in every occurrence. - - public byte ReadInput(byte bus) - { - return (byte)((Latch & Direction) | ((Direction ^ 0xFF) & bus)); - } - - public byte ReadOutput() - { - return (byte)((Latch & Direction) | (Direction ^ 0xFF)); - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - } - - sealed public class LatchedBooleanPort - { - public bool Direction; - public bool Latch; - - public LatchedBooleanPort() - { - Direction = false; - Latch = false; - } - - // data dir bus out - // 0 0 0 0 - // 0 0 1 1 - - // 0 1 0 0 - // 0 1 1 0 - - // 1 0 0 0 - // 1 0 1 1 - - // 1 1 0 1 - // 1 1 1 1 - - public bool ReadInput(bool bus) - { - return (Direction && Latch) || (!Direction && bus); - } - - public bool ReadOutput() - { - return (Latch || !Direction); - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - } -} +using System; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed class LatchedPort + { + public int Direction; + public int Latch; + + public LatchedPort() + { + Direction = 0x00; + Latch = 0x00; + } + + // data works like this in these types of systems: + // + // directionA directionB result + // 0 0 1 + // 1 0 latchA + // 0 1 latchB + // 1 1 latchA && latchB + // + // however because this uses transistor logic, there are cases where wired-ands + // cause the pull-up resistors not to be enough to keep the bus bit set to 1 when + // both the direction and latch are 1 (the keyboard and joystick port 2 can do this.) + // the class does not handle this case as it must be handled differently in every occurrence. + + public int ReadInput(int bus) + { + return (Latch & Direction) | ((Direction ^ 0xFF) & bus); + } + + public int ReadOutput() + { + return (Latch & Direction) | (Direction ^ 0xFF); + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } + + public sealed class LatchedBooleanPort + { + public bool Direction; + public bool Latch; + + public LatchedBooleanPort() + { + Direction = false; + Latch = false; + } + + // data dir bus out + // 0 0 0 0 + // 0 0 1 1 + + // 0 1 0 0 + // 0 1 1 0 + + // 1 0 0 0 + // 1 0 1 1 + + // 1 1 0 1 + // 1 1 1 1 + + public bool ReadInput(bool bus) + { + return (Direction && Latch) || (!Direction && bus); + } + + public bool ReadOutput() + { + return (Latch || !Direction); + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6510.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6510.cs deleted file mode 100644 index 51cb927531..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6510.cs +++ /dev/null @@ -1,220 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -using BizHawk.Common; -using BizHawk.Emulation.Cores.Components.M6502; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // an extension of the 6502 processor - - sealed public class MOS6510 - { - // ------------------------------------ - - MOS6502X cpu; - int lagCycles; - bool pinNMILast; - LatchedPort port; - bool thisNMI; - - public Func PeekMemory; - public Action PokeMemory; - public Func ReadAEC; - public Func ReadIRQ; - public Func ReadNMI; - public Func ReadRDY; - public Func ReadMemory; - public Func ReadPort; - public Action WriteMemory; - public Action WriteMemoryPort; - - // ------------------------------------ - - public MOS6510() - { - cpu = new MOS6502X(); - - // configure cpu r/w - cpu.DummyReadMemory = Read; - cpu.ReadMemory = Read; - cpu.WriteMemory = Write; - - // perform hard reset - HardReset(); - } - - public void HardReset() - { - // configure CPU defaults - cpu.Reset(); - cpu.FlagI = true; - cpu.BCD_Enabled = true; - if (ReadMemory != null) - cpu.PC = (ushort)(ReadMemory(0x0FFFC) | (ReadMemory(0x0FFFD) << 8)); - - // configure data port defaults - port = new LatchedPort(); - port.Direction = 0x00; - port.Latch = 0xFF; - - // NMI is high on startup (todo: verify) - pinNMILast = true; - } - - // ------------------------------------ - - public void ExecutePhase1() - { - cpu.IRQ = !ReadIRQ(); - } - - public void ExecutePhase2() - { - cpu.RDY = ReadRDY(); - - // the 6502 core expects active high - // so we reverse the polarity here - thisNMI = ReadNMI(); - if (!thisNMI && pinNMILast) - cpu.NMI = true; - - if (ReadAEC()) - { - cpu.ExecuteOne(); - pinNMILast = thisNMI; - } - else - { - lagCycles++; - } - } - - public int LagCycles - { - get - { - return lagCycles; - } - set - { - lagCycles = value; - } - } - - internal bool AtInstructionStart() - { - return cpu.AtInstructionStart(); - } - - // ------------------------------------ - - public ushort PC - { - get - { - return cpu.PC; - } - set - { - cpu.PC = value; - } - } - - public byte A - { - get { return cpu.A; } set { cpu.A = value; } - } - - public byte X - { - get { return cpu.X; } set { cpu.X = value; } - } - - public byte Y - { - get { return cpu.Y; } set { cpu.Y = value; } - } - - public byte S - { - get { return cpu.S; } set { cpu.S = value; } - } - - public bool FlagC { get { return cpu.FlagC; } } - public bool FlagZ { get { return cpu.FlagZ; } } - public bool FlagI { get { return cpu.FlagI; } } - public bool FlagD { get { return cpu.FlagD; } } - public bool FlagB { get { return cpu.FlagB; } } - public bool FlagV { get { return cpu.FlagV; } } - public bool FlagN { get { return cpu.FlagN; } } - public bool FlagT { get { return cpu.FlagT; } } - - public byte Peek(long addr) - { - if (addr == 0x0000) - return port.Direction; - else if (addr == 0x0001) - return PortData; - else - return PeekMemory((int)addr); - } - - public void Poke(long addr, byte val) - { - if (addr == 0x0000) - port.Direction = val; - else if (addr == 0x0001) - port.Latch = val; - else - PokeMemory((int)addr, val); - } - - public byte PortData - { - get - { - return port.ReadInput(ReadPort()); - } - set - { - port.Latch = value; - } - } - - public byte Read(ushort addr) - { - if (addr == 0x0000) - return port.Direction; - else if (addr == 0x0001) - return PortData; - else - return ReadMemory(addr); - } - - public void SyncState(Serializer ser) - { - cpu.SyncState(ser); - SaveState.SyncObject(ser, this); - } - - public void Write(ushort addr, byte val) - { - if (addr == 0x0000) - { - port.Direction = val; - WriteMemoryPort(addr, val); - } - else if (addr == 0x0001) - { - port.Latch = val; - WriteMemoryPort(addr, val); - } - else - { - WriteMemory(addr, val); - } - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6522.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6522.cs deleted file mode 100644 index 455c33416d..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6522.cs +++ /dev/null @@ -1,570 +0,0 @@ -using System; - -#if false -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // via - public class MOS6522 : Timer - { - private const uint acrShiftModeDisabled = 0; - private const uint acrShiftModeInT1 = 1; - private const uint acrShiftModeInClock = 2; - private const uint acrShiftModeInExtClock = 3; - private const uint acrShiftModeOutFree = 4; - private const uint acrShiftModeOutT1 = 5; - private const uint acrShiftModeOutClock = 6; - private const uint acrShiftModeOutExtClock = 7; - - private const uint pcrControlInNegative = 0; - private const uint pcrControlInNegativeIndep = 1; - private const uint pcrControlInPositive = 2; - private const uint pcrControlInPositiveIndep = 3; - private const uint pcrControlHandshake = 4; - private const uint pcrControlPulse = 5; - private const uint pcrControlLow = 6; - private const uint pcrControlHigh = 7; - - private const uint tControlLoad = 0; - private const uint tControlContinuous = 1; - private const uint tControlLoadPB = 2; - private const uint tControlContinuousPB = 3; - private const uint tControlPulseCounter = 4; - - private static byte[] portBit = new byte[] { 0x80, 0x40 }; - private static byte[] portMask = new byte[] { 0x7F, 0xBF }; - - private bool caPulse; - private bool cbPulse; - private bool[] enableIrqCA; - private bool[] enableIrqCB; - private bool enableIrqSR; - private bool[] enableIrqT; - private bool[] irqCA; - private bool[] irqCB; - private bool irqSR; - private bool[] irqT; - private bool[] lastca; - private bool[] lastcb; - private byte lastpb; - private byte paLatch; - private bool paLatchEnable; - private byte paOut; - private byte pbLatch; - private bool pbLatchEnable; - private byte pbOut; - private readonly bool[] pbPulse; - private readonly uint[] pcrControlA; - private readonly uint[] pcrControlB; - private byte sr; - private uint srControl; - private readonly uint[] tControl; - - public Func ReadCA0; - public Func ReadCA1; - public Func ReadCB0; - public Func ReadCB1; - public Action WriteCA0; - public Action WriteCA1; - public Action WriteCB0; - public Action WriteCB1; - - public MOS6522() - { - enableIrqCA = new bool[2]; - enableIrqCB = new bool[2]; - enableIrqT = new bool[2]; - irqCA = new bool[2]; - irqCB = new bool[2]; - irqT = new bool[2]; - lastca = new bool[2]; - lastcb = new bool[2]; - pbPulse = new bool[2]; - pcrControlA = new uint[2]; - pcrControlB = new uint[2]; - tControl = new uint[2]; - } - - public void HardReset() - { - caPulse = false; - cbPulse = false; - enableIrqCA[0] = false; - enableIrqCA[1] = false; - enableIrqCB[0] = false; - enableIrqCB[1] = false; - enableIrqSR = false; - enableIrqT[0] = false; - enableIrqT[1] = false; - irqCA[0] = false; - irqCA[1] = false; - irqCB[0] = false; - irqCB[1] = false; - irqSR = false; - irqT[0] = false; - irqT[1] = false; - lastca[0] = ReadCA0(); - lastca[1] = ReadCA1(); - lastcb[0] = ReadCB0(); - lastcb[1] = ReadCB1(); - pbPulse[0] = false; - pbPulse[1] = false; - pcrControlA[0] = 0; - pcrControlA[1] = 0; - pcrControlB[0] = 0; - pcrControlB[1] = 0; - tControl[0] = 0; - tControl[1] = 0; - HardResetInternal(); - } - - // ------------------------------------ - - public void ExecutePhase1() - { - } - - public void ExecutePhase2() - { - bool ca0 = ReadCA0(); - bool ca1 = ReadCA1(); - bool cb0 = ReadCB0(); - bool cb1 = ReadCB1(); - bool ca0Trans = (lastca[0] != ca0); - bool ca1Trans = (lastca[1] != ca1); - bool cb0Trans = (lastcb[0] != cb0); - bool cb1Trans = (lastcb[1] != cb1); - - // edge triggered interrupts - - switch (pcrControlA[0]) - { - case pcrControlInNegative: - if (lastca[0] && !ca0) - irqCA[0] = true; - break; - case pcrControlInPositive: - if (!lastca[0] && ca0) - irqCA[0] = true; - break; - } - - switch (pcrControlB[0]) - { - case pcrControlInNegative: - if (lastcb[0] && !cb0) - irqCB[0] = true; - break; - case pcrControlInPositive: - if (!lastcb[0] && cb0) - irqCB[0] = true; - break; - } - - switch (pcrControlA[1]) - { - case pcrControlInNegative: - case pcrControlInNegativeIndep: - if (lastca[1] && !ca1) - irqCA[1] = true; - break; - case pcrControlInPositive: - case pcrControlInPositiveIndep: - if (!lastca[1] && ca1) - irqCA[1] = true; - break; - case pcrControlHandshake: - if (lastca[0] != ca0) - WriteCA1(true); - break; - case pcrControlPulse: - if (caPulse) - caPulse = false; - else - WriteCA1(true); - break; - case pcrControlLow: - WriteCA1(false); - break; - case pcrControlHigh: - WriteCA1(true); - break; - } - - switch (pcrControlB[1]) - { - case pcrControlInNegative: - case pcrControlInNegativeIndep: - if (lastcb[1] && !cb1) - irqCB[1] = true; - break; - case pcrControlInPositive: - case pcrControlInPositiveIndep: - if (!lastcb[1] && cb1) - irqCB[1] = true; - break; - case pcrControlHandshake: - if (lastcb[0] != cb0) - WriteCB1(true); - break; - case pcrControlPulse: - if (cbPulse) - cbPulse = false; - else - WriteCB1(true); - break; - case pcrControlLow: - WriteCB1(false); - break; - case pcrControlHigh: - WriteCB1(true); - break; - } - - // run timers - for (uint i = 0; i < 2; i++) - { - switch (tControl[i]) - { - case tControlLoad: - if (timer[i] > 0) - { - timer[i]--; - if (timer[i] == 0) - irqT[i] = true; - } - break; - case tControlContinuous: - if (timer[i] > 0) - { - timer[i]--; - if (timer[i] == 0) - { - irqT[i] = true; - timer[i] = timerLatch[i]; - } - } - break; - case tControlLoadPB: - if (!pbPulse[i]) - WritePortB((byte)(ReadPortB() & portMask[i])); - - if (timer[i] > 0) - { - timer[i]--; - if (timer[i] == 0) - { - irqT[i] = true; - if (irqT[i]) - WritePortB((byte)(ReadPortB() | portBit[i])); - } - } - break; - case tControlContinuousPB: - if (timer[i] > 0) - { - timer[i]--; - if (timer[i] == 0) - { - irqT[i] = true; - timer[i] = timerLatch[i]; - WritePortB((byte)(ReadPortB() ^ portBit[i])); - } - } - break; - case tControlPulseCounter: - if ((lastpb & 0x40) != 0 && (ReadPortB() & 0x40) == 0) - { - if (timer[i] > 0) - { - timer[i]--; - if (timer[i] == 0) - { - irqT[i] = true; - } - } - } - break; - } - } - - lastca[0] = ca0; - lastca[1] = ca1; - lastcb[0] = cb0; - lastcb[1] = cb1; - lastpb = ReadPortB(); - - pinIRQ = !((irqCA[0] & enableIrqCA[0]) | - (irqCA[1] & enableIrqCA[1]) | - (irqCB[0] & enableIrqCB[0]) | - (irqCB[1] & enableIrqCB[1]) | - (irqSR & enableIrqSR) | - (irqT[0] & enableIrqT[0]) | - (irqT[1] & enableIrqT[1]) - ); - - - } - - // ------------------------------------ - - public byte Peek(int addr) - { - return ReadRegister((ushort)(addr & 0xF)); - } - - public void Poke(int addr, byte val) - { - WriteRegister((ushort)(addr & 0xF), val); - } - - public byte Read(ushort addr) - { - - //Console.WriteLine("via R: reg" + C64Util.ToHex(addr, 4)); - - addr &= 0xF; - switch (addr) - { - case 0x0: - irqCB[0] = false; - irqCB[1] = false; - - if (pbLatchEnable) - return Port.ExternalWrite(pbLatch, ReadPortB(), ReadDirB()); - else - return ReadPortB(); - case 0x1: - if (pcrControlA[0] != pcrControlInNegativeIndep && pcrControlA[0] != pcrControlInPositiveIndep) - irqCA[0] = false; - if (pcrControlA[1] != pcrControlInNegativeIndep && pcrControlA[1] != pcrControlInPositiveIndep) - irqCA[1] = false; - - if (paLatchEnable) - return Port.ExternalWrite(paLatch, ReadPortA(), ReadDirA()); - else - return ReadPortA(); - case 0x4: - irqT[0] = false; - return ReadRegister(addr); - case 0x8: - irqT[1] = false; - return ReadRegister(addr); - default: - return ReadRegister(addr); - } - } - - private byte ReadRegister(ushort addr) - { - switch (addr) - { - case 0x0: - return ReadPortB(); - case 0x1: - return ReadPortA(); - case 0x2: - return ReadDirB(); - case 0x3: - return ReadDirA(); - case 0x4: - return (byte)(timer[0] & 0xFF); - case 0x5: - return (byte)(timer[0] >> 8); - case 0x6: - return (byte)(timerLatch[0] & 0xFF); - case 0x7: - return (byte)(timerLatch[0] >> 8); - case 0x8: - return (byte)(timer[1] & 0xFF); - case 0x9: - return (byte)(timer[1] >> 8); - case 0xA: - return sr; - case 0xB: - return (byte)( - (paLatchEnable ? 0x01 : 0x00) | - (pbLatchEnable ? 0x02 : 0x00) | - (byte)((srControl & 0x7) << 2) | - (byte)((tControl[1] & 0x4) << 3) | - (byte)((tControl[0] & 0x3) << 6) - ); - case 0xC: - return (byte)( - (byte)((pcrControlA[0] & 0x2) >> 1) | - (byte)((pcrControlA[1] & 0x3) << 1) | - (byte)((pcrControlB[0] & 0x2) << 3) | - (byte)((pcrControlB[1] & 0x3) << 5) - ); - case 0xD: //IFR - return (byte)( - (irqCA[1] ? 0x01 : 0x00) | - (irqCA[0] ? 0x02 : 0x00) | - (irqSR ? 0x04 : 0x00) | - (irqCB[1] ? 0x08 : 0x00) | - (irqCB[0] ? 0x10 : 0x00) | - (irqT[1] ? 0x20 : 0x00) | - (irqT[0] ? 0x40 : 0x00) | - (pinIRQ ? 0x00 : 0x80) - ); - case 0xE: //IER - return (byte)( - (enableIrqCA[1] ? 0x01 : 0x00) | - (enableIrqCA[0] ? 0x02 : 0x00) | - (enableIrqSR ? 0x04 : 0x00) | - (enableIrqCB[1] ? 0x08 : 0x00) | - (enableIrqCB[0] ? 0x10 : 0x00) | - (enableIrqT[1] ? 0x20 : 0x00) | - (enableIrqT[0] ? 0x40 : 0x00) | - (0x00) - ); - default: - return 0x00; - } - } - - public void Write(ushort addr, byte val) - { - byte result; - bool intEnable; - - //Console.WriteLine("via W: reg" + C64Util.ToHex(addr, 4) + " val" + C64Util.ToHex(val, 2)); - - addr &= 0xF; - switch (addr) - { - case 0x0: - irqCB[0] = false; - irqCB[1] = false; - pbOut = val; - WritePortB(val); - break; - case 0x1: - if (pcrControlA[0] != pcrControlInNegativeIndep && pcrControlA[0] != pcrControlInPositiveIndep) - irqCA[0] = false; - if (pcrControlA[1] != pcrControlInNegativeIndep && pcrControlA[1] != pcrControlInPositiveIndep) - irqCA[1] = false; - paOut = val; - WritePortA(val); - break; - case 0x2: - WriteDirB(val); - WritePortB(pbOut); - break; - case 0x3: - WriteDirA(val); - WritePortA(paOut); - break; - case 0x4: - case 0x6: - WriteRegister(0x6, val); - break; - case 0x5: - WriteRegister(0x7, val); - WriteRegister(0x4, ReadRegister(0x6)); - WriteRegister(0x5, ReadRegister(0x7)); - irqT[0] = false; - pbPulse[0] = false; - break; - case 0x9: - timer[1] = timerLatch[1]; - irqT[1] = false; - pbPulse[1] = false; - break; - case 0xE: - intEnable = ((val & 0x80) != 0); - result = ReadRegister(addr); - if (intEnable) - result |= (byte)(val & 0x7F); - else - result &= (byte)((val & 0x7F) ^ 0x7F); - WriteRegister(0xE, result); - break; - default: - WriteRegister(addr, val); - break; - } - } - - private void WriteRegister(ushort addr, byte val) - { - switch (addr) - { - case 0x0: - WritePortB(val); - break; - case 0x1: - WritePortA(val); - break; - case 0x2: - WriteDirB(val); - break; - case 0x3: - WriteDirA(val); - break; - case 0x4: - timer[0] &= 0xFF00; - timer[0] |= val; - break; - case 0x5: - timer[0] &= 0x00FF; - timer[0] |= (uint)val << 8; - break; - case 0x6: - timerLatch[0] &= 0xFF00; - timerLatch[0] |= val; - break; - case 0x7: - timerLatch[0] &= 0x00FF; - timerLatch[0] |= (uint)val << 8; - break; - case 0x8: - timerLatch[1] &= 0xFF00; - timerLatch[1] |= val; - break; - case 0x9: - timer[1] &= 0x00FF; - timer[1] |= (uint)val << 8; - break; - case 0xA: - sr = val; - break; - case 0xB: - paLatchEnable = ((val & 0x01) != 0); - pbLatchEnable = ((val & 0x02) != 0); - srControl = (((uint)val >> 2) & 0x7); - tControl[1] = (((uint)val >> 3) & 0x4); - tControl[0] = (((uint)val >> 6) & 0x3); - break; - case 0xC: - pcrControlA[0] = ((uint)val << 1) & 0x2; - pcrControlA[1] = ((uint)val >> 1) & 0x7; - pcrControlB[0] = ((uint)val >> 3) & 0x2; - pcrControlB[1] = ((uint)val >> 5) & 0x7; - break; - case 0xD: - irqCA[1] = ((val & 0x01) != 0); - irqCA[0] = ((val & 0x02) != 0); - irqSR = ((val & 0x04) != 0); - irqCB[1] = ((val & 0x08) != 0); - irqCB[0] = ((val & 0x10) != 0); - irqT[1] = ((val & 0x20) != 0); - irqT[0] = ((val & 0x40) != 0); - break; - case 0xE: - enableIrqCA[1] = ((val & 0x01) != 0); - enableIrqCA[0] = ((val & 0x02) != 0); - enableIrqSR = ((val & 0x04) != 0); - enableIrqCB[1] = ((val & 0x08) != 0); - enableIrqCB[0] = ((val & 0x10) != 0); - enableIrqT[1] = ((val & 0x20) != 0); - enableIrqT[0] = ((val & 0x40) != 0); - break; - default: - break; - } - } - - // ------------------------------------ - } -} -#endif \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.Interface.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.Interface.cs deleted file mode 100644 index bcd23ae880..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.Interface.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - sealed public partial class MOS6526_2 - { - public void ExecutePhase1() - { - proc_a(); - proc_b(); - if (--tod_cycles <= 0) - { - //tod_cycles += tod_period; - tod(); - } - } - - public void ExecutePhase2() - { - } - - public void HardReset() - { - reset(); - } - - public byte PortAData - { - get - { - return portA.ReadOutput(); - } - } - - public byte PortAMask - { - get; - set; - } - - public byte PortADirection - { - get - { - return portA.Direction; - } - } - - public byte PortALatch - { - get - { - return portA.Latch; - } - } - - public byte PortBData - { - get - { - return portB.ReadOutput(); - } - } - - public byte PortBDirection - { - get - { - return portB.Direction; - } - } - - public byte PortBLatch - { - get - { - return portB.Latch; - } - } - - public byte PortBMask - { - get; - set; - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.PortIO.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.PortIO.cs deleted file mode 100644 index fe673e8025..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.PortIO.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - sealed public partial class MOS6526_2 - { - public Func ReadCNT; - public Func ReadFlag; - public bool ReadIRQBuffer() { - return (idr & 0x80) == 0; - } - public Func ReadPortA = (() => { return 0xFF; }); - public Func ReadPortB = (() => { return 0xFF; }); - public Func ReadSP; - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.Registers.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.Registers.cs deleted file mode 100644 index af4bbe04fd..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.Registers.cs +++ /dev/null @@ -1,250 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - sealed public partial class MOS6526_2 - { - int read_data; - - public byte Peek(int addr) - { - addr &= 0xF; - switch (addr) - { - case 0x0: - return (byte)(portA.ReadInput(ReadPortA()) & PortAMask); - case 0x1: - return (byte)(portB.ReadInput(ReadPortB()) & PortBMask); - case 0x2: - return (byte)portA.Direction; - case 0x3: - return (byte)portB.Direction; - case 0x4: - return (byte)(a.getTimer() & 0xFF); - case 0x5: - return (byte)((a.getTimer() >> 8) & 0xFF); - case 0x6: - return (byte)(b.getTimer() & 0xFF); - case 0x7: - return (byte)((b.getTimer() >> 8) & 0xFF); - case 0x8: - case 0x9: - case 0xA: - case 0xB: - return (byte)(tod_clock[addr - 0x08] & 0xFF); - case 0xC: - return (byte)(sdr & 0xFF); - case 0xD: - return (byte)(idr & 0xFF); - case 0xE: - return (byte)((cra & 0xEE) | (a.state & 1)); - case 0xF: - return (byte)((crb & 0xEE) | (b.state & 1)); - } - return 0xFF; - } - - public void Poke(int addr, byte val) - { - // TODO - } - - public byte Read(int addr) - { - return Read(addr, 0xFF); - } - - public byte Read(int addr, byte mask) - { - addr &= 0xF; - switch (addr) - { - case 0x0: - return (byte)(portA.ReadInput(ReadPortA()) & PortAMask); - case 0x1: - read_data = portB.ReadInput(ReadPortB()) & PortBMask; - if ((cra & 0x02) != 0) - { - read_data &= 0xBF; - if (((cra & 0x04) != 0) ? (a.getPbToggle()) : ((a.state & CiaTimer.TIMER_OUT) != 0)) - { - read_data |= 0x40; - } - } - if ((crb & 0x02) != 0) - { - read_data &= 0x7F; - if (((crb & 0x04) != 0) ? (b.getPbToggle()) : ((b.state & CiaTimer.TIMER_OUT) != 0)) - { - read_data |= 0x80; - } - } - return (byte)(read_data & 0xFF); - case 0x2: - return (byte)portA.Direction; - case 0x3: - return (byte)portB.Direction; - case 0x4: - return (byte)(a.getTimer() & 0xFF); - case 0x5: - return (byte)((a.getTimer() >> 8) & 0xFF); - case 0x6: - return (byte)(b.getTimer() & 0xFF); - case 0x7: - return (byte)((b.getTimer() >> 8) & 0xFF); - case 0x8: - case 0x9: - case 0xA: - case 0xB: - if (!tod_latched) - { - tod_latch[0] = tod_clock[0]; - tod_latch[1] = tod_clock[1]; - tod_latch[2] = tod_clock[2]; - tod_latch[3] = tod_clock[3]; - } - if (addr == 0x8) - { - tod_latched = false; - } - else if (addr == 0xB) - { - tod_latched = true; - } - return (byte)(tod_latch[addr - 0x08] & 0xFF); - case 0xC: - return (byte)(sdr & 0xFF); - case 0xD: - int_clear(); - return (byte)(icr & 0xFF); - case 0xE: - return (byte)((cra & 0xEE) | (a.state & 1)); - case 0xF: - return (byte)((crb & 0xEE) | (b.state & 1)); - } - return 0xFF; - } - - public bool ReadCNTBuffer() - { - return true; - } - - public bool ReadPCBuffer() - { - return true; - } - - public bool ReadSPBuffer() - { - return true; - } - - public void Write(int addr, byte val) - { - Write(addr, val, 0xFF); - } - - public void Write(int addr, byte val, byte mask) - { - addr &= 0xF; - switch (addr) - { - case 0x0: - portA.Latch = val; - pra = val; - break; - case 0x1: - portB.Latch = val; - prb = val; - break; - case 0x2: - portA.Direction = val; - ddra = val; - break; - case 0x3: - portB.Direction = val; - ddrb = val; - break; - case 0x4: - a.setLatchLow(val); - ta = ((int)val | (ta & 0xFF00)); - break; - case 0x5: - a.setLatchHigh(val); - ta = (((int)val << 8) | (ta & 0xFF)); - break; - case 0x6: - b.setLatchLow(val); - tb = ((int)val | (tb & 0xFF00)); - break; - case 0x7: - b.setLatchHigh(val); - tb = (((int)val << 8) | (tb & 0xFF)); - break; - case 0x8: - case 0x9: - case 0xA: - case 0xB: - if (addr == 0xB) - { - val &= 0x9F; - if ((val & 0x1F) == 0x12 && (crb & 0x80) == 0) - { - val ^= 0x80; - } - } - if ((crb & 0x80) != 0) - { - tod_alarm[addr - 0x8] = val; - } - else - { - if (addr == 0x8) - { - tod_stopped = false; - } - else if (addr == 0xB) - { - tod_stopped = true; - } - } - tod_clock[addr - 0x8] = val; - break; - case 0xC: - if ((cra & 0x40) != 0) - { - sdr_buffered = true; - } - break; - case 0xD: - if ((val & 0x80) != 0) - { - int_setEnabled(val); - } - else - { - int_clearEnabled(val); - } - break; - case 0xE: - if ((val & 0x1) != 0 && (cra & 0x1) == 0) - { - a.setPbToggle(true); - } - a.setControlRegister(val); - break; - case 0xF: - if ((val & 0x1) != 0 && (crb & 0x1) == 0) - { - b.setPbToggle(true); - } - b.setControlRegister((val | (val & 0x40) >> 1)); - break; - } - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.cs deleted file mode 100644 index 30a3bdfd9d..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526-2.cs +++ /dev/null @@ -1,448 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using BizHawk.Common; - -#pragma warning disable 0169 -#pragma warning disable 0414 -#pragma warning disable 0649 - -// thanks to these fine folks for their research on this buggy as hell chip: -// Simon White (s_a_white@email.com) -// Antti S. Lankila "alankila" -// Andreas Boose (viceteam@t-online.de) -// Alexander Bluhm (mam96ehy@studserv.uni-leipzig.de) - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - sealed public partial class MOS6526_2 - { - sealed private class CiaTimer - { - public const int TIMER_CR_START = 0x01; - public const int TIMER_STEP = 0x04; - public const int TIMER_CR_ONESHOT = 0x08; - public const int TIMER_CR_FLOAD = 0x10; - public const int TIMER_PHI2IN = 0x20; - public const int TIMER_MASK = TIMER_CR_START | TIMER_CR_ONESHOT | TIMER_CR_FLOAD | TIMER_PHI2IN; - public const int TIMER_COUNT2 = 0x100; - public const int TIMER_COUNT3 = 0x200; - public const int TIMER_ONESHOT0 = 0x800; - public const int TIMER_ONESHOT = 0x80000; - public const int TIMER_LOAD1 = 0x1000; - public const int TIMER_LOAD = 0x100000; - public const int TIMER_OUT = 0x40000000 << 1; - - const int WANTED = TIMER_CR_START | TIMER_PHI2IN | TIMER_COUNT2 | TIMER_COUNT3; - const int UNWANTED = TIMER_OUT | TIMER_CR_FLOAD | TIMER_LOAD1 | TIMER_LOAD; - const int UNWANTED1 = TIMER_CR_START | TIMER_PHI2IN; - const int UNWANTED2 = TIMER_CR_START | TIMER_STEP; - - int adj; - bool toggle; - public int state; - int lastControlValue; - int timer; - int latch; - bool pbToggle; - int ciaEventPauseTime; - bool phi1tod; - bool phi1run; - int cycleSkippingEvent = -1; - int nextTick = 0; - - Action serialPort; - Action underFlow; - - public CiaTimer(Action serialPortCallback, Action underFlowCallback) - { - this.serialPort = serialPortCallback; - this.underFlow = underFlowCallback; - } - - public void clock() - { - if (timer != 0 && (state & TIMER_COUNT3) != 0) - { - timer--; - } - - adj = state & (TIMER_CR_START | TIMER_CR_ONESHOT | TIMER_PHI2IN); - if ((state & (TIMER_CR_START | TIMER_PHI2IN)) == (TIMER_CR_START | TIMER_PHI2IN)) - { - adj |= TIMER_COUNT2; - } - if ((state & TIMER_COUNT2) != 0 || (state & (TIMER_STEP | TIMER_CR_START)) == (TIMER_STEP | TIMER_CR_START)) - { - adj |= TIMER_COUNT3; - } - adj |= (state & (TIMER_CR_FLOAD | TIMER_CR_ONESHOT | TIMER_LOAD1 | TIMER_ONESHOT0)) << 8; - state = adj; - - if (timer == 0 && (state & TIMER_COUNT3) != 0) - { - state |= TIMER_LOAD | TIMER_OUT; - - if ((state & (TIMER_ONESHOT | TIMER_ONESHOT0)) != 0) - { - state &= ~(TIMER_CR_START | TIMER_COUNT2); - } - - toggle = (lastControlValue & 0x06) == 0x06; - pbToggle = toggle && !pbToggle; - serialPort(); - underFlow(); - } - - if ((state & TIMER_LOAD) != 0) - { - timer = latch; - state &= ~TIMER_COUNT3; - } - } - - public bool getPbToggle() - { - return pbToggle; - } - - public int getTimer() - { - return timer; - } - - public void reschedule() - { - if ((state & UNWANTED) != 0) - { - return; - } - - if ((state & TIMER_COUNT3) != 0) - { - if ((timer & 0xFFFF) > 2 && (state & UNWANTED) == WANTED) - { - ciaEventPauseTime = 1; - cycleSkippingEvent = (timer - 1) & 0xFFFF; - return; - } - nextTick = 1; - return; - } - else - { - if ((state & UNWANTED1) == UNWANTED1 || (state & UNWANTED2) == UNWANTED2) - { - nextTick = 1; - return; - } - - ciaEventPauseTime = -1; - return; - } - } - - public void reset() - { - timer = 0xFFFF; - latch = 0xFFFF; - pbToggle = false; - state = 0; - ciaEventPauseTime = 0; - cycleSkippingEvent = -1; - } - - public void setControlRegister(int cr) - { - state &= ~TIMER_MASK; - state |= cr & TIMER_MASK ^ TIMER_PHI2IN; - lastControlValue = cr; - } - - public void setLatchLow(int low) - { - latch = ((latch & 0xFF00) | (low & 0xFF)); - if ((state & TIMER_LOAD) != 0) - { - timer = ((timer & 0xFF00) | (low & 0xFF)); - } - } - - public void setLatchHigh(int high) - { - latch = ((latch & 0xFF) | ((high & 0xFF) << 8)); - if ((state & TIMER_LOAD) != 0 || (state & TIMER_CR_START) == 0) - { - timer = latch; - } - } - - public void setPbToggle(bool st) - { - pbToggle = st; - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - } - - const int INT_NONE = 0x00; - const int INT_UNDERFLOW_A = 0x01; - const int INT_UNDERFLOW_B = 0x02; - const int INT_ALARM = 0x04; - const int INT_SP = 0x08; - const int INT_FLAG = 0x10; - - int pra; - int prb; - int ddra; - int ddrb; - int ta; - int tb; - int tod_ten; - int tod_sec; - int tod_min; - int tod_hr; - int sdr; - int icr; - int idr; - int cra; - int crb; - - int sdr_out; - bool sdr_buffered; - int sdr_count; - bool tod_latched; - bool tod_stopped; - int[] tod_clock = new int[4]; - int[] tod_alarm = new int[4]; - int[] tod_latch = new int[4]; - int tod_cycles = -1; - int tod_period = -1; - bool postTimerBEvent; - int idr_old; - bool int_delayed; - - int bcd_internal; - - CiaTimer a; - CiaTimer b; - LatchedPort portA; - LatchedPort portB; - - public MOS6526_2(Common.DisplayType region) - { - a = new CiaTimer(serialPortA, underFlowA); - b = new CiaTimer(serialPortB, underFlowB); - portA = new LatchedPort(); - portB = new LatchedPort(); - switch (region) - { - case Common.DisplayType.NTSC: - tod_period = 14318181 / 140; - break; - case Common.DisplayType.PAL: - tod_period = 17734472 / 180; - break; - } - } - - int bcdToByte(int input) - { - return 10 * ((input & 0xF0) >> 4) + (input & 0x0F); - } - - int byteToBcd(int input) - { - return (((input / 10) << 4) + (input % 10)) & 0xFF; - } - - int int_clear() - { - int_delayed = false; - idr_old = idr; - idr = 0; - return idr_old; - } - - void int_clearEnabled(int i) - { - icr &= ~i; - } - - void int_reset() - { - int_delayed = false; - } - - void int_set(int i) - { - idr |= i; - if ((icr & idr) != 0 && (idr & 0x80) == 0) - { - int_delayed = true; - } - } - - void int_setEnabled(int i) - { - icr |= i & ~0x80; - } - - void proc_a() - { - if (int_delayed) - { - int_delayed = false; - idr |= 0x80; - } - if (postTimerBEvent) - { - postTimerBEvent = false; - b.state |= CiaTimer.TIMER_STEP; - } - a.clock(); - } - - void proc_b() - { - b.clock(); - } - - void reset() - { - a.reset(); - b.reset(); - sdr_out = 0; - sdr_count = 0; - sdr_buffered = false; - icr = 0; - idr = 0; - idr_old = 0; - int_reset(); - portA.Latch = 0xFF; - portB.Latch = 0xFF; - portA.Direction = 0xFF; - portB.Direction = 0xFF; - PortAMask = 0xFF; - PortBMask = 0xFF; - } - - void serialPortA() - { - if ((cra & 0x40) != 0) - { - if (sdr_count != 0) - { - if (--sdr_count == 0) - { - triggerInterruptSP(); - } - } - if (sdr_count == 0 && sdr_buffered) - { - sdr_out = sdr; - sdr_buffered = false; - sdr_count = 16; - } - } - } - - void serialPortB() - { - // nop - } - - void tod() - { - tod_cycles += tod_period; - if (!tod_stopped) - { - int todpos = 0; - int t = bcdToByte(tod_clock[todpos]) + 1; - tod_clock[todpos++] = byteToBcd(t % 10); - if (t >= 10) - { - t = bcdToByte(tod_clock[todpos]) + 1; - tod_clock[todpos++] = byteToBcd(t % 60); - if (t >= 60) - { - t = bcdToByte(tod_clock[todpos]) + 1; - tod_clock[todpos++] = byteToBcd(t % 60); - if (t >= 60) - { - int pm = tod_clock[todpos] & 0x80; - t = bcdToByte(tod_clock[todpos] & 0x1F); - if (t == 0x11) - { - pm ^= 0x80; - } - if (t == 0x12) - { - t = 1; - } - else if (++t == 10) - { - t = 0x10; - } - t &= 0x1F; - tod_clock[todpos] = t | pm; - } - } - } - if (tod_clock[0] == tod_alarm[0] && - tod_clock[1] == tod_alarm[1] && - tod_clock[2] == tod_alarm[2] && - tod_clock[3] == tod_alarm[3]) - { - triggerInterruptAlarm(); - } - } - } - - void triggerInterruptAlarm() - { - int_set(INT_ALARM); - } - - void triggerInterruptSP() - { - int_set(INT_SP); - } - - void triggerInterruptUnderFlowA() - { - int_set(INT_UNDERFLOW_A); - } - - void triggerInterruptUnderFlowB() - { - int_set(INT_UNDERFLOW_B); - } - - void underFlowA() - { - triggerInterruptUnderFlowA(); - if ((crb & 0x41) == 0x41) - { - if ((b.state & CiaTimer.TIMER_CR_START) != 0) - { - postTimerBEvent = true; - } - } - } - - void underFlowB() - { - triggerInterruptUnderFlowB(); - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526.cs deleted file mode 100644 index cec480ae07..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6526.cs +++ /dev/null @@ -1,786 +0,0 @@ -using System; -using BizHawk.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // MOS technology 6526 "CIA" - // - // emulation notes: - // * CS, R/W and RS# pins are not emulated. (not needed) - // * A low RES pin is emulated via HardReset(). - - sealed public class MOS6526 - { - // ------------------------------------ - - enum InMode - { - Phase2, - CNT, - TimerAUnderflow, - TimerAUnderflowCNT - } - - enum OutMode - { - Pulse, - Toggle - } - - enum RunMode - { - Continuous, - Oneshot - } - - enum SPMode - { - Input, - Output - } - - static byte[] PBOnBit = new byte[] { 0x40, 0x80 }; - static byte[] PBOnMask = new byte[] { 0xBF, 0x7F }; - - // ------------------------------------ - - public Func ReadCNT; - public Func ReadFlag; - public Func ReadSP; - - // ------------------------------------ - - bool alarmSelect; - bool cntPos; - bool enableIntAlarm; - bool enableIntFlag; - bool enableIntSP; - bool[] enableIntTimer; - bool intAlarm; - bool intFlag; - bool intSP; - bool[] intTimer; - bool pinCnt; - bool pinCntLast; - bool pinPC; - bool pinSP; - byte sr; - int[] timerDelay; - InMode[] timerInMode; - OutMode[] timerOutMode; - bool[] timerPortEnable; - bool[] timerPulse; - RunMode[] timerRunMode; - SPMode timerSPMode; - byte[] tod; - byte[] todAlarm; - bool todAlarmPM; - int todCounter; - bool todIn; - bool todPM; - bool oldFlag; - // ------------------------------------ - - int todStepsNum; - int todStepsDen; - - // todStepsNum/todStepsDen is the number of clock cycles it takes the external clock source to advance one cycle - // (50 or 60 Hz depending on AC frequency in use). - // By default the CIA assumes 60 Hz and will thus count incorrectly when fed with 50 Hz. - public MOS6526(int todStepsNum, int todStepsDen) - { - this.todStepsNum = todStepsNum; - this.todStepsDen = todStepsDen; - enableIntTimer = new bool[2]; - intTimer = new bool[2]; - timerDelay = new int[2]; - timerInMode = new InMode[2]; - timerOutMode = new OutMode[2]; - timerPortEnable = new bool[2]; - timerPulse = new bool[2]; - timerRunMode = new RunMode[2]; - tod = new byte[4]; - todAlarm = new byte[4]; - - portA = new LatchedPort(); - portB = new LatchedPort(); - timer = new int[2]; - timerLatch = new int[2]; - timerOn = new bool[2]; - underflow = new bool[2]; - - pinSP = true; - } - - // ------------------------------------ - - public void ExecutePhase1() - { - // unsure if the timer actually operates in ph1 - pinIRQ = !( - (intTimer[0] && enableIntTimer[0]) || - (intTimer[1] && enableIntTimer[1]) || - (intAlarm && enableIntAlarm) || - (intSP && enableIntSP) || - (intFlag && enableIntFlag) - ); - } - - public void ExecutePhase2() - { - { - bool sumCnt = ReadCNT(); - cntPos |= (!pinCntLast && sumCnt); - pinCntLast = sumCnt; - - pinPC = true; - TODRun(); - - if (timerPulse[0]) - { - portA.Latch &= PBOnMask[0]; - } - if (timerPulse[1]) - { - portB.Latch &= PBOnMask[1]; - } - - if (timerDelay[0] == 0) - TimerRun(0); - else - timerDelay[0]--; - - if (timerDelay[1] == 0) - TimerRun(1); - else - timerDelay[1]--; - - intAlarm |= ( - tod[0] == todAlarm[0] && - tod[1] == todAlarm[1] && - tod[2] == todAlarm[2] && - tod[3] == todAlarm[3] && - todPM == todAlarmPM); - - cntPos = false; - underflow[0] = false; - underflow[1] = false; - - bool newFlag = ReadFlag(); - intFlag |= oldFlag && !newFlag; - oldFlag = newFlag; - } - } - - public void HardReset() - { - HardResetInternal(); - alarmSelect = false; - cntPos = false; - enableIntAlarm = false; - enableIntFlag = false; - enableIntSP = false; - enableIntTimer[0] = false; - enableIntTimer[1] = false; - intAlarm = false; - intFlag = false; - intSP = false; - intTimer[0] = false; - intTimer[1] = false; - sr = 0; - timerDelay[0] = 0; - timerDelay[1] = 0; - timerInMode[0] = InMode.Phase2; - timerInMode[1] = InMode.Phase2; - timerOn[0] = false; - timerOn[1] = false; - timerOutMode[0] = OutMode.Pulse; - timerOutMode[1] = OutMode.Pulse; - timerPortEnable[0] = false; - timerPortEnable[1] = false; - timerPulse[0] = false; - timerPulse[1] = false; - timerRunMode[0] = RunMode.Continuous; - timerRunMode[1] = RunMode.Continuous; - timerSPMode = SPMode.Input; - tod[0] = 0; - tod[1] = 0; - tod[2] = 0; - tod[3] = 0x12; - todAlarm[0] = 0; - todAlarm[1] = 0; - todAlarm[2] = 0; - todAlarm[3] = 0; - todCounter = 0; - todIn = false; - todPM = false; - - pinCnt = false; - pinPC = true; - } - - // ------------------------------------ - - private byte BCDAdd(byte i, byte j, out bool overflow) - { - - { - int lo; - int hi; - int result; - - lo = (i & 0x0F) + (j & 0x0F); - hi = (i & 0x70) + (j & 0x70); - if (lo > 0x09) - { - hi += 0x10; - lo += 0x06; - } - if (hi > 0x50) - { - hi += 0xA0; - } - overflow = hi >= 0x60; - result = (hi & 0x70) + (lo & 0x0F); - return (byte)(result & 0xFF); - } - } - - private void TimerRun(int index) - { - - { - if (timerOn[index]) - { - int t = timer[index]; - bool u = false; - - { - switch (timerInMode[index]) - { - case InMode.CNT: - // CNT positive - if (cntPos) - { - t--; - u = (t == 0); - intTimer[index] |= (t == 0); - } - break; - case InMode.Phase2: - // every clock - t--; - u = (t == 0); - intTimer[index] |= (t == 0); - break; - case InMode.TimerAUnderflow: - // every underflow[0] - if (underflow[0]) - { - t--; - u = (t == 0); - intTimer[index] |= (t == 0); - } - break; - case InMode.TimerAUnderflowCNT: - // every underflow[0] while CNT high - if (underflow[0] && pinCnt) - { - t--; - u = (t == 0); - intTimer[index] |= (t == 0); - } - break; - } - - // underflow? - if (u) - { - timerDelay[index] = 1; - t = timerLatch[index]; - if (timerRunMode[index] == RunMode.Oneshot) - timerOn[index] = false; - - if (timerPortEnable[index]) - { - // force port B bit to output - portB.Direction |= PBOnBit[index]; - switch (timerOutMode[index]) - { - case OutMode.Pulse: - timerPulse[index] = true; - portB.Latch |= PBOnBit[index]; - break; - case OutMode.Toggle: - portB.Latch ^= PBOnBit[index]; - break; - } - } - } - - underflow[index] = u; - timer[index] = t; - } - } - } - } - - private void TODRun() - { - - { - bool todV; - - if (todCounter <= 0) - { - todCounter += todStepsNum*(todIn ? 6 : 5); - tod[0] = BCDAdd(tod[0], 1, out todV); - if (tod[0] >= 10) - { - tod[0] = 0; - tod[1] = BCDAdd(tod[1], 1, out todV); - if (todV) - { - tod[1] = 0; - tod[2] = BCDAdd(tod[2], 1, out todV); - if (todV) - { - tod[2] = 0; - tod[3] = BCDAdd(tod[3], 1, out todV); - if (tod[3] > 12) - { - tod[3] = 1; - } - else if (tod[3] == 12) - { - todPM = !todPM; - } - } - } - } - } - todCounter -= todStepsDen; - } - } - - // ------------------------------------ - - public byte Peek(long addr) - { - return ReadRegister((int)addr & 0xF); - } - - public void Poke(long addr, byte val) - { - WriteRegister((int)(addr & 0xF), val); - } - - public byte Peek(int addr) - { - return ReadRegister((int)addr & 0xF); - } - - public void Poke(int addr, byte val) - { - WriteRegister((int)(addr & 0xF), val); - } - - public byte Read(int addr) - { - return Read(addr, 0xFF); - } - - public byte Read(int addr, byte mask) - { - addr &= 0xF; - byte val; - - switch (addr) - { - case 0x01: - val = ReadRegister(addr); - pinPC = false; - break; - case 0x0D: - val = ReadRegister(addr); - intTimer[0] = false; - intTimer[1] = false; - intAlarm = false; - intSP = false; - intFlag = false; - pinIRQ = true; - break; - default: - val = ReadRegister(addr); - break; - } - - val &= mask; - return val; - } - - public bool ReadCNTBuffer() - { - return pinCnt; - } - - public bool ReadPCBuffer() - { - return pinPC; - } - - private byte ReadRegister(int addr) - { - byte val = 0x00; //unused pin value - int timerVal; - - switch (addr) - { - case 0x0: - val = (byte)(portA.ReadInput(ReadPortA()) & PortAMask); - break; - case 0x1: - val = (byte)(portB.ReadInput(ReadPortB()) & PortBMask); - break; - case 0x2: - val = portA.Direction; - break; - case 0x3: - val = portB.Direction; - break; - case 0x4: - timerVal = ReadTimerValue(0); - val = (byte)(timerVal & 0xFF); - break; - case 0x5: - timerVal = ReadTimerValue(0); - val = (byte)(timerVal >> 8); - break; - case 0x6: - timerVal = ReadTimerValue(1); - val = (byte)(timerVal & 0xFF); - break; - case 0x7: - timerVal = ReadTimerValue(1); - val = (byte)(timerVal >> 8); - break; - case 0x8: - val = tod[0]; - break; - case 0x9: - val = tod[1]; - break; - case 0xA: - val = tod[2]; - break; - case 0xB: - val = tod[3]; - break; - case 0xC: - val = sr; - break; - case 0xD: - val = (byte)( - (intTimer[0] ? 0x01 : 0x00) | - (intTimer[1] ? 0x02 : 0x00) | - (intAlarm ? 0x04 : 0x00) | - (intSP ? 0x08 : 0x00) | - (intFlag ? 0x10 : 0x00) | - (!pinIRQ ? 0x80 : 0x00) - ); - break; - case 0xE: - val = (byte)( - (timerOn[0] ? 0x01 : 0x00) | - (timerPortEnable[0] ? 0x02 : 0x00) | - (todIn ? 0x80 : 0x00)); - if (timerOutMode[0] == OutMode.Toggle) - val |= 0x04; - if (timerRunMode[0] == RunMode.Oneshot) - val |= 0x08; - if (timerInMode[0] == InMode.CNT) - val |= 0x20; - if (timerSPMode == SPMode.Output) - val |= 0x40; - break; - case 0xF: - val = (byte)( - (timerOn[1] ? 0x01 : 0x00) | - (timerPortEnable[1] ? 0x02 : 0x00) | - (alarmSelect ? 0x80 : 0x00)); - if (timerOutMode[1] == OutMode.Toggle) - val |= 0x04; - if (timerRunMode[1] == RunMode.Oneshot) - val |= 0x08; - switch (timerInMode[1]) - { - case InMode.CNT: - val |= 0x20; - break; - case InMode.TimerAUnderflow: - val |= 0x40; - break; - case InMode.TimerAUnderflowCNT: - val |= 0x60; - break; - } - break; - } - - return val; - } - - public bool ReadSPBuffer() - { - return pinSP; - } - - private int ReadTimerValue(int index) - { - if (timerOn[index]) - { - if (timer[index] == 0) - return timerLatch[index]; - else - return timer[index]; - } - else - { - return timer[index]; - } - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - - public void Write(int addr, byte val) - { - Write(addr, val, 0xFF); - } - - public void Write(int addr, byte val, byte mask) - { - addr &= 0xF; - val &= mask; - val |= (byte)(ReadRegister(addr) & ~mask); - - switch (addr) - { - case 0x1: - WriteRegister(addr, val); - pinPC = false; - break; - case 0x5: - WriteRegister(addr, val); - if (!timerOn[0]) - timer[0] = timerLatch[0]; - break; - case 0x7: - WriteRegister(addr, val); - if (!timerOn[1]) - timer[1] = timerLatch[1]; - break; - case 0xE: - WriteRegister(addr, val); - if ((val & 0x10) != 0) - timer[0] = timerLatch[0]; - break; - case 0xF: - WriteRegister(addr, val); - if ((val & 0x10) != 0) - timer[1] = timerLatch[1]; - break; - default: - WriteRegister(addr, val); - break; - } - } - - public void WriteRegister(int addr, byte val) - { - bool intReg; - - switch (addr) - { - case 0x0: - portA.Latch = val; - break; - case 0x1: - portB.Latch = val; - break; - case 0x2: - portA.Direction = val; - break; - case 0x3: - portB.Direction = val; - break; - case 0x4: - timerLatch[0] &= 0xFF00; - timerLatch[0] |= val; - break; - case 0x5: - timerLatch[0] &= 0x00FF; - timerLatch[0] |= val << 8; - break; - case 0x6: - timerLatch[1] &= 0xFF00; - timerLatch[1] |= val; - break; - case 0x7: - timerLatch[1] &= 0x00FF; - timerLatch[1] |= val << 8; - break; - case 0x8: - if (alarmSelect) - todAlarm[0] = (byte)(val & 0xF); - else - tod[0] = (byte)(val & 0xF); - break; - case 0x9: - if (alarmSelect) - todAlarm[1] = (byte)(val & 0x7F); - else - tod[1] = (byte)(val & 0x7F); - break; - case 0xA: - if (alarmSelect) - todAlarm[2] = (byte)(val & 0x7F); - else - tod[2] = (byte)(val & 0x7F); - break; - case 0xB: - if (alarmSelect) - { - todAlarm[3] = (byte)(val & 0x1F); - todAlarmPM = ((val & 0x80) != 0); - } - else - { - tod[3] = (byte)(val & 0x1F); - todPM = ((val & 0x80) != 0); - } - break; - case 0xC: - sr = val; - break; - case 0xD: - intReg = ((val & 0x80) != 0); - if ((val & 0x01) != 0) - enableIntTimer[0] = intReg; - if ((val & 0x02) != 0) - enableIntTimer[1] = intReg; - if ((val & 0x04) != 0) - enableIntAlarm = intReg; - if ((val & 0x08) != 0) - enableIntSP = intReg; - if ((val & 0x10) != 0) - enableIntFlag = intReg; - break; - case 0xE: - if ((val & 0x01) != 0 && !timerOn[0]) - timerDelay[0] = 2; - timerOn[0] = ((val & 0x01) != 0); - timerPortEnable[0] = ((val & 0x02) != 0); - timerOutMode[0] = ((val & 0x04) != 0) ? OutMode.Toggle : OutMode.Pulse; - timerRunMode[0] = ((val & 0x08) != 0) ? RunMode.Oneshot : RunMode.Continuous; - timerInMode[0] = ((val & 0x20) != 0) ? InMode.CNT : InMode.Phase2; - timerSPMode = ((val & 0x40) != 0) ? SPMode.Output : SPMode.Input; - todIn = ((val & 0x80) != 0); - break; - case 0xF: - if ((val & 0x01) != 0 && !timerOn[1]) - timerDelay[1] = 2; - timerOn[1] = ((val & 0x01) != 0); - timerPortEnable[1] = ((val & 0x02) != 0); - timerOutMode[1] = ((val & 0x04) != 0) ? OutMode.Toggle : OutMode.Pulse; - timerRunMode[1] = ((val & 0x08) != 0) ? RunMode.Oneshot : RunMode.Continuous; - switch (val & 0x60) - { - case 0x00: timerInMode[1] = InMode.Phase2; break; - case 0x20: timerInMode[1] = InMode.CNT; break; - case 0x40: timerInMode[1] = InMode.TimerAUnderflow; break; - case 0x60: timerInMode[1] = InMode.TimerAUnderflowCNT; break; - } - alarmSelect = ((val & 0x80) != 0); - break; - } - } - - // ------------------------------------ - - public byte PortAMask = 0xFF; - public byte PortBMask = 0xFF; - - bool pinIRQ; - LatchedPort portA; - LatchedPort portB; - int[] timer; - int[] timerLatch; - bool[] timerOn; - bool[] underflow; - - public Func ReadPortA = (() => { return 0xFF; }); - public Func ReadPortB = (() => { return 0xFF; }); - - void HardResetInternal() - { - timer[0] = 0xFFFF; - timer[1] = 0xFFFF; - timerLatch[0] = timer[0]; - timerLatch[1] = timer[1]; - pinIRQ = true; - } - - public byte PortAData - { - get - { - return portA.ReadOutput(); - } - } - - public byte PortADirection - { - get - { - return portA.Direction; - } - } - - public byte PortALatch - { - get - { - return portA.Latch; - } - } - - public byte PortBData - { - get - { - return portB.ReadOutput(); - } - } - - public byte PortBDirection - { - get - { - return portB.Direction; - } - } - - public byte PortBLatch - { - get - { - return portB.Latch; - } - } - - public bool ReadIRQBuffer() { return pinIRQ; } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6567R56A.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6567R56A.cs deleted file mode 100644 index 49570065e4..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6567R56A.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // vic ntsc old - // TODO is everything right? it's mostly a copy from the other NTSC chip with tweaks wherever it was neccessary to fix something - static public class MOS6567R56A - { - static int cycles = 64; - static int scanwidth = cycles * 8; - static int lines = 262; - static int vblankstart = 0x00D % lines; - static int vblankend = 0x018 % lines; - static int hblankoffset = 20; - static int hblankstart = (0x18C + hblankoffset) % scanwidth; - static int hblankend = (0x1F0 + hblankoffset) % scanwidth; - - static int[] timing = Vic.TimingBuilder_XRaster(0x19C, 0x200, scanwidth, -1, -1); - static int[] fetch = Vic.TimingBuilder_Fetch(timing, 0x174); - static int[] ba = Vic.TimingBuilder_BA(fetch); - static int[] act = Vic.TimingBuilder_Act(timing, 0x004, 0x14C, hblankstart, hblankend); - - static int[][] pipeline = new int[][] - { - timing, - fetch, - ba, - act - }; - - static public Vic Create() - { - return new Vic( - cycles, lines, - pipeline, - 14318181 / 14, - hblankstart, hblankend, - vblankstart, vblankend - ); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6567R8.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6567R8.cs deleted file mode 100644 index f6470b0d6a..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6567R8.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Drawing; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // vic ntsc - static public class MOS6567R8 - { - static int cycles = 65; - static int scanwidth = cycles * 8; - static int lines = 263; - static int vblankstart = 0x00D % lines; - static int vblankend = 0x018 % lines; - static int hblankoffset = 20; - static int hblankstart = (0x18C + hblankoffset) % scanwidth - 8; // -8 because the VIC repeats internal pixel cycles around 0x18C - static int hblankend = (0x1F0 + hblankoffset) % scanwidth - 8; - - static int[] timing = Vic.TimingBuilder_XRaster(0x19C, 0x200, scanwidth, 0x18C, 8); - static int[] fetch = Vic.TimingBuilder_Fetch(timing, 0x174); - static int[] ba = Vic.TimingBuilder_BA(fetch); - static int[] act = Vic.TimingBuilder_Act(timing, 0x004, 0x14C, hblankstart, hblankend); - - static int[][] pipeline = new int[][] - { - timing, - fetch, - ba, - act - }; - - static public Vic Create() - { - return new Vic( - cycles, lines, - pipeline, - 14318181 / 14, - hblankstart, hblankend, - vblankstart, vblankend - ); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6569.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6569.cs deleted file mode 100644 index 0c00115a95..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6569.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Drawing; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // vic pal - static public class MOS6569 - { - static int cycles = 63; - static int scanwidth = cycles * 8; - static int lines = 312; - static int vblankstart = 0x12C % lines; - static int vblankend = 0x00F % lines; - static int hblankoffset = 20; - static int hblankstart = (0x17C + hblankoffset) % scanwidth; - static int hblankend = (0x1E0 + hblankoffset) % scanwidth; - - static int[] timing = Vic.TimingBuilder_XRaster(0x194, 0x1F8, scanwidth, -1, -1); - static int[] fetch = Vic.TimingBuilder_Fetch(timing, 0x164); - static int[] ba = Vic.TimingBuilder_BA(fetch); - static int[] act = Vic.TimingBuilder_Act(timing, 0x004, 0x14C, hblankstart, hblankend); - - static int[][] pipeline = new int[][] - { - timing, - fetch, - ba, - act - }; - - static public Vic Create() - { - return new Vic( - cycles, lines, - pipeline, - 17734472 / 18, - hblankstart, hblankend, - vblankstart, vblankend - ); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6572.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6572.cs deleted file mode 100644 index ad11e5737c..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6572.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // pal n / drean - TODO correct? - class MOS6572 - { - static int cycles = 65; - static int scanwidth = cycles * 8; - static int lines = 312; - static int vblankstart = 0x12C % lines; - static int vblankend = 0x00F % lines; - static int hblankoffset = 20; - static int hblankstart = (0x18C + hblankoffset) % scanwidth - 8; // -8 because the VIC repeats internal pixel cycles around 0x18C - static int hblankend = (0x1F0 + hblankoffset) % scanwidth - 8; - - static int[] timing = Vic.TimingBuilder_XRaster(0x19C, 0x200, scanwidth, 0x18C, 8); - static int[] fetch = Vic.TimingBuilder_Fetch(timing, 0x174); - static int[] ba = Vic.TimingBuilder_BA(fetch); - static int[] act = Vic.TimingBuilder_Act(timing, 0x004, 0x14C, hblankstart, hblankend); - - static int[][] pipeline = new int[][] - { - timing, - fetch, - ba, - act - }; - - static public Vic Create() - { - return new Vic( - cycles, lines, - pipeline, - 14328225 / 14, - hblankstart, hblankend, - vblankstart, vblankend - ); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6581.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6581.cs deleted file mode 100644 index d19800e88c..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOS6581.cs +++ /dev/null @@ -1,4127 +0,0 @@ -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // sid - static public class MOS6581 - { - static int[][] waveTable = new int[][] - { - new int[] { - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF - }, - new int[] { - 0x000, 0x002, 0x004, 0x006, 0x008, 0x00A, 0x00C, 0x00E, - 0x010, 0x012, 0x014, 0x016, 0x018, 0x01A, 0x01C, 0x01E, - 0x020, 0x022, 0x024, 0x026, 0x028, 0x02A, 0x02C, 0x02E, - 0x030, 0x032, 0x034, 0x036, 0x038, 0x03A, 0x03C, 0x03E, - 0x040, 0x042, 0x044, 0x046, 0x048, 0x04A, 0x04C, 0x04E, - 0x050, 0x052, 0x054, 0x056, 0x058, 0x05A, 0x05C, 0x05E, - 0x060, 0x062, 0x064, 0x066, 0x068, 0x06A, 0x06C, 0x06E, - 0x070, 0x072, 0x074, 0x076, 0x078, 0x07A, 0x07C, 0x07E, - 0x080, 0x082, 0x084, 0x086, 0x088, 0x08A, 0x08C, 0x08E, - 0x090, 0x092, 0x094, 0x096, 0x098, 0x09A, 0x09C, 0x09E, - 0x0A0, 0x0A2, 0x0A4, 0x0A6, 0x0A8, 0x0AA, 0x0AC, 0x0AE, - 0x0B0, 0x0B2, 0x0B4, 0x0B6, 0x0B8, 0x0BA, 0x0BC, 0x0BE, - 0x0C0, 0x0C2, 0x0C4, 0x0C6, 0x0C8, 0x0CA, 0x0CC, 0x0CE, - 0x0D0, 0x0D2, 0x0D4, 0x0D6, 0x0D8, 0x0DA, 0x0DC, 0x0DE, - 0x0E0, 0x0E2, 0x0E4, 0x0E6, 0x0E8, 0x0EA, 0x0EC, 0x0EE, - 0x0F0, 0x0F2, 0x0F4, 0x0F6, 0x0F8, 0x0FA, 0x0FC, 0x0FE, - 0x100, 0x102, 0x104, 0x106, 0x108, 0x10A, 0x10C, 0x10E, - 0x110, 0x112, 0x114, 0x116, 0x118, 0x11A, 0x11C, 0x11E, - 0x120, 0x122, 0x124, 0x126, 0x128, 0x12A, 0x12C, 0x12E, - 0x130, 0x132, 0x134, 0x136, 0x138, 0x13A, 0x13C, 0x13E, - 0x140, 0x142, 0x144, 0x146, 0x148, 0x14A, 0x14C, 0x14E, - 0x150, 0x152, 0x154, 0x156, 0x158, 0x15A, 0x15C, 0x15E, - 0x160, 0x162, 0x164, 0x166, 0x168, 0x16A, 0x16C, 0x16E, - 0x170, 0x172, 0x174, 0x176, 0x178, 0x17A, 0x17C, 0x17E, - 0x180, 0x182, 0x184, 0x186, 0x188, 0x18A, 0x18C, 0x18E, - 0x190, 0x192, 0x194, 0x196, 0x198, 0x19A, 0x19C, 0x19E, - 0x1A0, 0x1A2, 0x1A4, 0x1A6, 0x1A8, 0x1AA, 0x1AC, 0x1AE, - 0x1B0, 0x1B2, 0x1B4, 0x1B6, 0x1B8, 0x1BA, 0x1BC, 0x1BE, - 0x1C0, 0x1C2, 0x1C4, 0x1C6, 0x1C8, 0x1CA, 0x1CC, 0x1CE, - 0x1D0, 0x1D2, 0x1D4, 0x1D6, 0x1D8, 0x1DA, 0x1DC, 0x1DE, - 0x1E0, 0x1E2, 0x1E4, 0x1E6, 0x1E8, 0x1EA, 0x1EC, 0x1EE, - 0x1F0, 0x1F2, 0x1F4, 0x1F6, 0x1F8, 0x1FA, 0x1FC, 0x1FE, - 0x200, 0x202, 0x204, 0x206, 0x208, 0x20A, 0x20C, 0x20E, - 0x210, 0x212, 0x214, 0x216, 0x218, 0x21A, 0x21C, 0x21E, - 0x220, 0x222, 0x224, 0x226, 0x228, 0x22A, 0x22C, 0x22E, - 0x230, 0x232, 0x234, 0x236, 0x238, 0x23A, 0x23C, 0x23E, - 0x240, 0x242, 0x244, 0x246, 0x248, 0x24A, 0x24C, 0x24E, - 0x250, 0x252, 0x254, 0x256, 0x258, 0x25A, 0x25C, 0x25E, - 0x260, 0x262, 0x264, 0x266, 0x268, 0x26A, 0x26C, 0x26E, - 0x270, 0x272, 0x274, 0x276, 0x278, 0x27A, 0x27C, 0x27E, - 0x280, 0x282, 0x284, 0x286, 0x288, 0x28A, 0x28C, 0x28E, - 0x290, 0x292, 0x294, 0x296, 0x298, 0x29A, 0x29C, 0x29E, - 0x2A0, 0x2A2, 0x2A4, 0x2A6, 0x2A8, 0x2AA, 0x2AC, 0x2AE, - 0x2B0, 0x2B2, 0x2B4, 0x2B6, 0x2B8, 0x2BA, 0x2BC, 0x2BE, - 0x2C0, 0x2C2, 0x2C4, 0x2C6, 0x2C8, 0x2CA, 0x2CC, 0x2CE, - 0x2D0, 0x2D2, 0x2D4, 0x2D6, 0x2D8, 0x2DA, 0x2DC, 0x2DE, - 0x2E0, 0x2E2, 0x2E4, 0x2E6, 0x2E8, 0x2EA, 0x2EC, 0x2EE, - 0x2F0, 0x2F2, 0x2F4, 0x2F6, 0x2F8, 0x2FA, 0x2FC, 0x2FE, - 0x300, 0x302, 0x304, 0x306, 0x308, 0x30A, 0x30C, 0x30E, - 0x310, 0x312, 0x314, 0x316, 0x318, 0x31A, 0x31C, 0x31E, - 0x320, 0x322, 0x324, 0x326, 0x328, 0x32A, 0x32C, 0x32E, - 0x330, 0x332, 0x334, 0x336, 0x338, 0x33A, 0x33C, 0x33E, - 0x340, 0x342, 0x344, 0x346, 0x348, 0x34A, 0x34C, 0x34E, - 0x350, 0x352, 0x354, 0x356, 0x358, 0x35A, 0x35C, 0x35E, - 0x360, 0x362, 0x364, 0x366, 0x368, 0x36A, 0x36C, 0x36E, - 0x370, 0x372, 0x374, 0x376, 0x378, 0x37A, 0x37C, 0x37E, - 0x380, 0x382, 0x384, 0x386, 0x388, 0x38A, 0x38C, 0x38E, - 0x390, 0x392, 0x394, 0x396, 0x398, 0x39A, 0x39C, 0x39E, - 0x3A0, 0x3A2, 0x3A4, 0x3A6, 0x3A8, 0x3AA, 0x3AC, 0x3AE, - 0x3B0, 0x3B2, 0x3B4, 0x3B6, 0x3B8, 0x3BA, 0x3BC, 0x3BE, - 0x3C0, 0x3C2, 0x3C4, 0x3C6, 0x3C8, 0x3CA, 0x3CC, 0x3CE, - 0x3D0, 0x3D2, 0x3D4, 0x3D6, 0x3D8, 0x3DA, 0x3DC, 0x3DE, - 0x3E0, 0x3E2, 0x3E4, 0x3E6, 0x3E8, 0x3EA, 0x3EC, 0x3EE, - 0x3F0, 0x3F2, 0x3F4, 0x3F6, 0x3F8, 0x3FA, 0x3FC, 0x3FE, - 0x400, 0x402, 0x404, 0x406, 0x408, 0x40A, 0x40C, 0x40E, - 0x410, 0x412, 0x414, 0x416, 0x418, 0x41A, 0x41C, 0x41E, - 0x420, 0x422, 0x424, 0x426, 0x428, 0x42A, 0x42C, 0x42E, - 0x430, 0x432, 0x434, 0x436, 0x438, 0x43A, 0x43C, 0x43E, - 0x440, 0x442, 0x444, 0x446, 0x448, 0x44A, 0x44C, 0x44E, - 0x450, 0x452, 0x454, 0x456, 0x458, 0x45A, 0x45C, 0x45E, - 0x460, 0x462, 0x464, 0x466, 0x468, 0x46A, 0x46C, 0x46E, - 0x470, 0x472, 0x474, 0x476, 0x478, 0x47A, 0x47C, 0x47E, - 0x480, 0x482, 0x484, 0x486, 0x488, 0x48A, 0x48C, 0x48E, - 0x490, 0x492, 0x494, 0x496, 0x498, 0x49A, 0x49C, 0x49E, - 0x4A0, 0x4A2, 0x4A4, 0x4A6, 0x4A8, 0x4AA, 0x4AC, 0x4AE, - 0x4B0, 0x4B2, 0x4B4, 0x4B6, 0x4B8, 0x4BA, 0x4BC, 0x4BE, - 0x4C0, 0x4C2, 0x4C4, 0x4C6, 0x4C8, 0x4CA, 0x4CC, 0x4CE, - 0x4D0, 0x4D2, 0x4D4, 0x4D6, 0x4D8, 0x4DA, 0x4DC, 0x4DE, - 0x4E0, 0x4E2, 0x4E4, 0x4E6, 0x4E8, 0x4EA, 0x4EC, 0x4EE, - 0x4F0, 0x4F2, 0x4F4, 0x4F6, 0x4F8, 0x4FA, 0x4FC, 0x4FE, - 0x500, 0x502, 0x504, 0x506, 0x508, 0x50A, 0x50C, 0x50E, - 0x510, 0x512, 0x514, 0x516, 0x518, 0x51A, 0x51C, 0x51E, - 0x520, 0x522, 0x524, 0x526, 0x528, 0x52A, 0x52C, 0x52E, - 0x530, 0x532, 0x534, 0x536, 0x538, 0x53A, 0x53C, 0x53E, - 0x540, 0x542, 0x544, 0x546, 0x548, 0x54A, 0x54C, 0x54E, - 0x550, 0x552, 0x554, 0x556, 0x558, 0x55A, 0x55C, 0x55E, - 0x560, 0x562, 0x564, 0x566, 0x568, 0x56A, 0x56C, 0x56E, - 0x570, 0x572, 0x574, 0x576, 0x578, 0x57A, 0x57C, 0x57E, - 0x580, 0x582, 0x584, 0x586, 0x588, 0x58A, 0x58C, 0x58E, - 0x590, 0x592, 0x594, 0x596, 0x598, 0x59A, 0x59C, 0x59E, - 0x5A0, 0x5A2, 0x5A4, 0x5A6, 0x5A8, 0x5AA, 0x5AC, 0x5AE, - 0x5B0, 0x5B2, 0x5B4, 0x5B6, 0x5B8, 0x5BA, 0x5BC, 0x5BE, - 0x5C0, 0x5C2, 0x5C4, 0x5C6, 0x5C8, 0x5CA, 0x5CC, 0x5CE, - 0x5D0, 0x5D2, 0x5D4, 0x5D6, 0x5D8, 0x5DA, 0x5DC, 0x5DE, - 0x5E0, 0x5E2, 0x5E4, 0x5E6, 0x5E8, 0x5EA, 0x5EC, 0x5EE, - 0x5F0, 0x5F2, 0x5F4, 0x5F6, 0x5F8, 0x5FA, 0x5FC, 0x5FE, - 0x600, 0x602, 0x604, 0x606, 0x608, 0x60A, 0x60C, 0x60E, - 0x610, 0x612, 0x614, 0x616, 0x618, 0x61A, 0x61C, 0x61E, - 0x620, 0x622, 0x624, 0x626, 0x628, 0x62A, 0x62C, 0x62E, - 0x630, 0x632, 0x634, 0x636, 0x638, 0x63A, 0x63C, 0x63E, - 0x640, 0x642, 0x644, 0x646, 0x648, 0x64A, 0x64C, 0x64E, - 0x650, 0x652, 0x654, 0x656, 0x658, 0x65A, 0x65C, 0x65E, - 0x660, 0x662, 0x664, 0x666, 0x668, 0x66A, 0x66C, 0x66E, - 0x670, 0x672, 0x674, 0x676, 0x678, 0x67A, 0x67C, 0x67E, - 0x680, 0x682, 0x684, 0x686, 0x688, 0x68A, 0x68C, 0x68E, - 0x690, 0x692, 0x694, 0x696, 0x698, 0x69A, 0x69C, 0x69E, - 0x6A0, 0x6A2, 0x6A4, 0x6A6, 0x6A8, 0x6AA, 0x6AC, 0x6AE, - 0x6B0, 0x6B2, 0x6B4, 0x6B6, 0x6B8, 0x6BA, 0x6BC, 0x6BE, - 0x6C0, 0x6C2, 0x6C4, 0x6C6, 0x6C8, 0x6CA, 0x6CC, 0x6CE, - 0x6D0, 0x6D2, 0x6D4, 0x6D6, 0x6D8, 0x6DA, 0x6DC, 0x6DE, - 0x6E0, 0x6E2, 0x6E4, 0x6E6, 0x6E8, 0x6EA, 0x6EC, 0x6EE, - 0x6F0, 0x6F2, 0x6F4, 0x6F6, 0x6F8, 0x6FA, 0x6FC, 0x6FE, - 0x700, 0x702, 0x704, 0x706, 0x708, 0x70A, 0x70C, 0x70E, - 0x710, 0x712, 0x714, 0x716, 0x718, 0x71A, 0x71C, 0x71E, - 0x720, 0x722, 0x724, 0x726, 0x728, 0x72A, 0x72C, 0x72E, - 0x730, 0x732, 0x734, 0x736, 0x738, 0x73A, 0x73C, 0x73E, - 0x740, 0x742, 0x744, 0x746, 0x748, 0x74A, 0x74C, 0x74E, - 0x750, 0x752, 0x754, 0x756, 0x758, 0x75A, 0x75C, 0x75E, - 0x760, 0x762, 0x764, 0x766, 0x768, 0x76A, 0x76C, 0x76E, - 0x770, 0x772, 0x774, 0x776, 0x778, 0x77A, 0x77C, 0x77E, - 0x780, 0x782, 0x784, 0x786, 0x788, 0x78A, 0x78C, 0x78E, - 0x790, 0x792, 0x794, 0x796, 0x798, 0x79A, 0x79C, 0x79E, - 0x7A0, 0x7A2, 0x7A4, 0x7A6, 0x7A8, 0x7AA, 0x7AC, 0x7AE, - 0x7B0, 0x7B2, 0x7B4, 0x7B6, 0x7B8, 0x7BA, 0x7BC, 0x7BE, - 0x7C0, 0x7C2, 0x7C4, 0x7C6, 0x7C8, 0x7CA, 0x7CC, 0x7CE, - 0x7D0, 0x7D2, 0x7D4, 0x7D6, 0x7D8, 0x7DA, 0x7DC, 0x7DE, - 0x7E0, 0x7E2, 0x7E4, 0x7E6, 0x7E8, 0x7EA, 0x7EC, 0x7EE, - 0x7F0, 0x7F2, 0x7F4, 0x7F6, 0x7F8, 0x7FA, 0x7FC, 0x7FE, - 0x800, 0x802, 0x804, 0x806, 0x808, 0x80A, 0x80C, 0x80E, - 0x810, 0x812, 0x814, 0x816, 0x818, 0x81A, 0x81C, 0x81E, - 0x820, 0x822, 0x824, 0x826, 0x828, 0x82A, 0x82C, 0x82E, - 0x830, 0x832, 0x834, 0x836, 0x838, 0x83A, 0x83C, 0x83E, - 0x840, 0x842, 0x844, 0x846, 0x848, 0x84A, 0x84C, 0x84E, - 0x850, 0x852, 0x854, 0x856, 0x858, 0x85A, 0x85C, 0x85E, - 0x860, 0x862, 0x864, 0x866, 0x868, 0x86A, 0x86C, 0x86E, - 0x870, 0x872, 0x874, 0x876, 0x878, 0x87A, 0x87C, 0x87E, - 0x880, 0x882, 0x884, 0x886, 0x888, 0x88A, 0x88C, 0x88E, - 0x890, 0x892, 0x894, 0x896, 0x898, 0x89A, 0x89C, 0x89E, - 0x8A0, 0x8A2, 0x8A4, 0x8A6, 0x8A8, 0x8AA, 0x8AC, 0x8AE, - 0x8B0, 0x8B2, 0x8B4, 0x8B6, 0x8B8, 0x8BA, 0x8BC, 0x8BE, - 0x8C0, 0x8C2, 0x8C4, 0x8C6, 0x8C8, 0x8CA, 0x8CC, 0x8CE, - 0x8D0, 0x8D2, 0x8D4, 0x8D6, 0x8D8, 0x8DA, 0x8DC, 0x8DE, - 0x8E0, 0x8E2, 0x8E4, 0x8E6, 0x8E8, 0x8EA, 0x8EC, 0x8EE, - 0x8F0, 0x8F2, 0x8F4, 0x8F6, 0x8F8, 0x8FA, 0x8FC, 0x8FE, - 0x900, 0x902, 0x904, 0x906, 0x908, 0x90A, 0x90C, 0x90E, - 0x910, 0x912, 0x914, 0x916, 0x918, 0x91A, 0x91C, 0x91E, - 0x920, 0x922, 0x924, 0x926, 0x928, 0x92A, 0x92C, 0x92E, - 0x930, 0x932, 0x934, 0x936, 0x938, 0x93A, 0x93C, 0x93E, - 0x940, 0x942, 0x944, 0x946, 0x948, 0x94A, 0x94C, 0x94E, - 0x950, 0x952, 0x954, 0x956, 0x958, 0x95A, 0x95C, 0x95E, - 0x960, 0x962, 0x964, 0x966, 0x968, 0x96A, 0x96C, 0x96E, - 0x970, 0x972, 0x974, 0x976, 0x978, 0x97A, 0x97C, 0x97E, - 0x980, 0x982, 0x984, 0x986, 0x988, 0x98A, 0x98C, 0x98E, - 0x990, 0x992, 0x994, 0x996, 0x998, 0x99A, 0x99C, 0x99E, - 0x9A0, 0x9A2, 0x9A4, 0x9A6, 0x9A8, 0x9AA, 0x9AC, 0x9AE, - 0x9B0, 0x9B2, 0x9B4, 0x9B6, 0x9B8, 0x9BA, 0x9BC, 0x9BE, - 0x9C0, 0x9C2, 0x9C4, 0x9C6, 0x9C8, 0x9CA, 0x9CC, 0x9CE, - 0x9D0, 0x9D2, 0x9D4, 0x9D6, 0x9D8, 0x9DA, 0x9DC, 0x9DE, - 0x9E0, 0x9E2, 0x9E4, 0x9E6, 0x9E8, 0x9EA, 0x9EC, 0x9EE, - 0x9F0, 0x9F2, 0x9F4, 0x9F6, 0x9F8, 0x9FA, 0x9FC, 0x9FE, - 0xA00, 0xA02, 0xA04, 0xA06, 0xA08, 0xA0A, 0xA0C, 0xA0E, - 0xA10, 0xA12, 0xA14, 0xA16, 0xA18, 0xA1A, 0xA1C, 0xA1E, - 0xA20, 0xA22, 0xA24, 0xA26, 0xA28, 0xA2A, 0xA2C, 0xA2E, - 0xA30, 0xA32, 0xA34, 0xA36, 0xA38, 0xA3A, 0xA3C, 0xA3E, - 0xA40, 0xA42, 0xA44, 0xA46, 0xA48, 0xA4A, 0xA4C, 0xA4E, - 0xA50, 0xA52, 0xA54, 0xA56, 0xA58, 0xA5A, 0xA5C, 0xA5E, - 0xA60, 0xA62, 0xA64, 0xA66, 0xA68, 0xA6A, 0xA6C, 0xA6E, - 0xA70, 0xA72, 0xA74, 0xA76, 0xA78, 0xA7A, 0xA7C, 0xA7E, - 0xA80, 0xA82, 0xA84, 0xA86, 0xA88, 0xA8A, 0xA8C, 0xA8E, - 0xA90, 0xA92, 0xA94, 0xA96, 0xA98, 0xA9A, 0xA9C, 0xA9E, - 0xAA0, 0xAA2, 0xAA4, 0xAA6, 0xAA8, 0xAAA, 0xAAC, 0xAAE, - 0xAB0, 0xAB2, 0xAB4, 0xAB6, 0xAB8, 0xABA, 0xABC, 0xABE, - 0xAC0, 0xAC2, 0xAC4, 0xAC6, 0xAC8, 0xACA, 0xACC, 0xACE, - 0xAD0, 0xAD2, 0xAD4, 0xAD6, 0xAD8, 0xADA, 0xADC, 0xADE, - 0xAE0, 0xAE2, 0xAE4, 0xAE6, 0xAE8, 0xAEA, 0xAEC, 0xAEE, - 0xAF0, 0xAF2, 0xAF4, 0xAF6, 0xAF8, 0xAFA, 0xAFC, 0xAFE, - 0xB00, 0xB02, 0xB04, 0xB06, 0xB08, 0xB0A, 0xB0C, 0xB0E, - 0xB10, 0xB12, 0xB14, 0xB16, 0xB18, 0xB1A, 0xB1C, 0xB1E, - 0xB20, 0xB22, 0xB24, 0xB26, 0xB28, 0xB2A, 0xB2C, 0xB2E, - 0xB30, 0xB32, 0xB34, 0xB36, 0xB38, 0xB3A, 0xB3C, 0xB3E, - 0xB40, 0xB42, 0xB44, 0xB46, 0xB48, 0xB4A, 0xB4C, 0xB4E, - 0xB50, 0xB52, 0xB54, 0xB56, 0xB58, 0xB5A, 0xB5C, 0xB5E, - 0xB60, 0xB62, 0xB64, 0xB66, 0xB68, 0xB6A, 0xB6C, 0xB6E, - 0xB70, 0xB72, 0xB74, 0xB76, 0xB78, 0xB7A, 0xB7C, 0xB7E, - 0xB80, 0xB82, 0xB84, 0xB86, 0xB88, 0xB8A, 0xB8C, 0xB8E, - 0xB90, 0xB92, 0xB94, 0xB96, 0xB98, 0xB9A, 0xB9C, 0xB9E, - 0xBA0, 0xBA2, 0xBA4, 0xBA6, 0xBA8, 0xBAA, 0xBAC, 0xBAE, - 0xBB0, 0xBB2, 0xBB4, 0xBB6, 0xBB8, 0xBBA, 0xBBC, 0xBBE, - 0xBC0, 0xBC2, 0xBC4, 0xBC6, 0xBC8, 0xBCA, 0xBCC, 0xBCE, - 0xBD0, 0xBD2, 0xBD4, 0xBD6, 0xBD8, 0xBDA, 0xBDC, 0xBDE, - 0xBE0, 0xBE2, 0xBE4, 0xBE6, 0xBE8, 0xBEA, 0xBEC, 0xBEE, - 0xBF0, 0xBF2, 0xBF4, 0xBF6, 0xBF8, 0xBFA, 0xBFC, 0xBFE, - 0xC00, 0xC02, 0xC04, 0xC06, 0xC08, 0xC0A, 0xC0C, 0xC0E, - 0xC10, 0xC12, 0xC14, 0xC16, 0xC18, 0xC1A, 0xC1C, 0xC1E, - 0xC20, 0xC22, 0xC24, 0xC26, 0xC28, 0xC2A, 0xC2C, 0xC2E, - 0xC30, 0xC32, 0xC34, 0xC36, 0xC38, 0xC3A, 0xC3C, 0xC3E, - 0xC40, 0xC42, 0xC44, 0xC46, 0xC48, 0xC4A, 0xC4C, 0xC4E, - 0xC50, 0xC52, 0xC54, 0xC56, 0xC58, 0xC5A, 0xC5C, 0xC5E, - 0xC60, 0xC62, 0xC64, 0xC66, 0xC68, 0xC6A, 0xC6C, 0xC6E, - 0xC70, 0xC72, 0xC74, 0xC76, 0xC78, 0xC7A, 0xC7C, 0xC7E, - 0xC80, 0xC82, 0xC84, 0xC86, 0xC88, 0xC8A, 0xC8C, 0xC8E, - 0xC90, 0xC92, 0xC94, 0xC96, 0xC98, 0xC9A, 0xC9C, 0xC9E, - 0xCA0, 0xCA2, 0xCA4, 0xCA6, 0xCA8, 0xCAA, 0xCAC, 0xCAE, - 0xCB0, 0xCB2, 0xCB4, 0xCB6, 0xCB8, 0xCBA, 0xCBC, 0xCBE, - 0xCC0, 0xCC2, 0xCC4, 0xCC6, 0xCC8, 0xCCA, 0xCCC, 0xCCE, - 0xCD0, 0xCD2, 0xCD4, 0xCD6, 0xCD8, 0xCDA, 0xCDC, 0xCDE, - 0xCE0, 0xCE2, 0xCE4, 0xCE6, 0xCE8, 0xCEA, 0xCEC, 0xCEE, - 0xCF0, 0xCF2, 0xCF4, 0xCF6, 0xCF8, 0xCFA, 0xCFC, 0xCFE, - 0xD00, 0xD02, 0xD04, 0xD06, 0xD08, 0xD0A, 0xD0C, 0xD0E, - 0xD10, 0xD12, 0xD14, 0xD16, 0xD18, 0xD1A, 0xD1C, 0xD1E, - 0xD20, 0xD22, 0xD24, 0xD26, 0xD28, 0xD2A, 0xD2C, 0xD2E, - 0xD30, 0xD32, 0xD34, 0xD36, 0xD38, 0xD3A, 0xD3C, 0xD3E, - 0xD40, 0xD42, 0xD44, 0xD46, 0xD48, 0xD4A, 0xD4C, 0xD4E, - 0xD50, 0xD52, 0xD54, 0xD56, 0xD58, 0xD5A, 0xD5C, 0xD5E, - 0xD60, 0xD62, 0xD64, 0xD66, 0xD68, 0xD6A, 0xD6C, 0xD6E, - 0xD70, 0xD72, 0xD74, 0xD76, 0xD78, 0xD7A, 0xD7C, 0xD7E, - 0xD80, 0xD82, 0xD84, 0xD86, 0xD88, 0xD8A, 0xD8C, 0xD8E, - 0xD90, 0xD92, 0xD94, 0xD96, 0xD98, 0xD9A, 0xD9C, 0xD9E, - 0xDA0, 0xDA2, 0xDA4, 0xDA6, 0xDA8, 0xDAA, 0xDAC, 0xDAE, - 0xDB0, 0xDB2, 0xDB4, 0xDB6, 0xDB8, 0xDBA, 0xDBC, 0xDBE, - 0xDC0, 0xDC2, 0xDC4, 0xDC6, 0xDC8, 0xDCA, 0xDCC, 0xDCE, - 0xDD0, 0xDD2, 0xDD4, 0xDD6, 0xDD8, 0xDDA, 0xDDC, 0xDDE, - 0xDE0, 0xDE2, 0xDE4, 0xDE6, 0xDE8, 0xDEA, 0xDEC, 0xDEE, - 0xDF0, 0xDF2, 0xDF4, 0xDF6, 0xDF8, 0xDFA, 0xDFC, 0xDFE, - 0xE00, 0xE02, 0xE04, 0xE06, 0xE08, 0xE0A, 0xE0C, 0xE0E, - 0xE10, 0xE12, 0xE14, 0xE16, 0xE18, 0xE1A, 0xE1C, 0xE1E, - 0xE20, 0xE22, 0xE24, 0xE26, 0xE28, 0xE2A, 0xE2C, 0xE2E, - 0xE30, 0xE32, 0xE34, 0xE36, 0xE38, 0xE3A, 0xE3C, 0xE3E, - 0xE40, 0xE42, 0xE44, 0xE46, 0xE48, 0xE4A, 0xE4C, 0xE4E, - 0xE50, 0xE52, 0xE54, 0xE56, 0xE58, 0xE5A, 0xE5C, 0xE5E, - 0xE60, 0xE62, 0xE64, 0xE66, 0xE68, 0xE6A, 0xE6C, 0xE6E, - 0xE70, 0xE72, 0xE74, 0xE76, 0xE78, 0xE7A, 0xE7C, 0xE7E, - 0xE80, 0xE82, 0xE84, 0xE86, 0xE88, 0xE8A, 0xE8C, 0xE8E, - 0xE90, 0xE92, 0xE94, 0xE96, 0xE98, 0xE9A, 0xE9C, 0xE9E, - 0xEA0, 0xEA2, 0xEA4, 0xEA6, 0xEA8, 0xEAA, 0xEAC, 0xEAE, - 0xEB0, 0xEB2, 0xEB4, 0xEB6, 0xEB8, 0xEBA, 0xEBC, 0xEBE, - 0xEC0, 0xEC2, 0xEC4, 0xEC6, 0xEC8, 0xECA, 0xECC, 0xECE, - 0xED0, 0xED2, 0xED4, 0xED6, 0xED8, 0xEDA, 0xEDC, 0xEDE, - 0xEE0, 0xEE2, 0xEE4, 0xEE6, 0xEE8, 0xEEA, 0xEEC, 0xEEE, - 0xEF0, 0xEF2, 0xEF4, 0xEF6, 0xEF8, 0xEFA, 0xEFC, 0xEFE, - 0xF00, 0xF02, 0xF04, 0xF06, 0xF08, 0xF0A, 0xF0C, 0xF0E, - 0xF10, 0xF12, 0xF14, 0xF16, 0xF18, 0xF1A, 0xF1C, 0xF1E, - 0xF20, 0xF22, 0xF24, 0xF26, 0xF28, 0xF2A, 0xF2C, 0xF2E, - 0xF30, 0xF32, 0xF34, 0xF36, 0xF38, 0xF3A, 0xF3C, 0xF3E, - 0xF40, 0xF42, 0xF44, 0xF46, 0xF48, 0xF4A, 0xF4C, 0xF4E, - 0xF50, 0xF52, 0xF54, 0xF56, 0xF58, 0xF5A, 0xF5C, 0xF5E, - 0xF60, 0xF62, 0xF64, 0xF66, 0xF68, 0xF6A, 0xF6C, 0xF6E, - 0xF70, 0xF72, 0xF74, 0xF76, 0xF78, 0xF7A, 0xF7C, 0xF7E, - 0xF80, 0xF82, 0xF84, 0xF86, 0xF88, 0xF8A, 0xF8C, 0xF8E, - 0xF90, 0xF92, 0xF94, 0xF96, 0xF98, 0xF9A, 0xF9C, 0xF9E, - 0xFA0, 0xFA2, 0xFA4, 0xFA6, 0xFA8, 0xFAA, 0xFAC, 0xFAE, - 0xFB0, 0xFB2, 0xFB4, 0xFB6, 0xFB8, 0xFBA, 0xFBC, 0xFBE, - 0xFC0, 0xFC2, 0xFC4, 0xFC6, 0xFC8, 0xFCA, 0xFCC, 0xFCE, - 0xFD0, 0xFD2, 0xFD4, 0xFD6, 0xFD8, 0xFDA, 0xFDC, 0xFDE, - 0xFE0, 0xFE2, 0xFE4, 0xFE6, 0xFE8, 0xFEA, 0xFEC, 0xFEE, - 0xFF0, 0xFF2, 0xFF4, 0xFF6, 0xFF8, 0xFFA, 0xFFC, 0xFFE, - 0xFFE, 0xFFC, 0xFFA, 0xFF8, 0xFF6, 0xFF4, 0xFF2, 0xFF0, - 0xFEE, 0xFEC, 0xFEA, 0xFE8, 0xFE6, 0xFE4, 0xFE2, 0xFE0, - 0xFDE, 0xFDC, 0xFDA, 0xFD8, 0xFD6, 0xFD4, 0xFD2, 0xFD0, - 0xFCE, 0xFCC, 0xFCA, 0xFC8, 0xFC6, 0xFC4, 0xFC2, 0xFC0, - 0xFBE, 0xFBC, 0xFBA, 0xFB8, 0xFB6, 0xFB4, 0xFB2, 0xFB0, - 0xFAE, 0xFAC, 0xFAA, 0xFA8, 0xFA6, 0xFA4, 0xFA2, 0xFA0, - 0xF9E, 0xF9C, 0xF9A, 0xF98, 0xF96, 0xF94, 0xF92, 0xF90, - 0xF8E, 0xF8C, 0xF8A, 0xF88, 0xF86, 0xF84, 0xF82, 0xF80, - 0xF7E, 0xF7C, 0xF7A, 0xF78, 0xF76, 0xF74, 0xF72, 0xF70, - 0xF6E, 0xF6C, 0xF6A, 0xF68, 0xF66, 0xF64, 0xF62, 0xF60, - 0xF5E, 0xF5C, 0xF5A, 0xF58, 0xF56, 0xF54, 0xF52, 0xF50, - 0xF4E, 0xF4C, 0xF4A, 0xF48, 0xF46, 0xF44, 0xF42, 0xF40, - 0xF3E, 0xF3C, 0xF3A, 0xF38, 0xF36, 0xF34, 0xF32, 0xF30, - 0xF2E, 0xF2C, 0xF2A, 0xF28, 0xF26, 0xF24, 0xF22, 0xF20, - 0xF1E, 0xF1C, 0xF1A, 0xF18, 0xF16, 0xF14, 0xF12, 0xF10, - 0xF0E, 0xF0C, 0xF0A, 0xF08, 0xF06, 0xF04, 0xF02, 0xF00, - 0xEFE, 0xEFC, 0xEFA, 0xEF8, 0xEF6, 0xEF4, 0xEF2, 0xEF0, - 0xEEE, 0xEEC, 0xEEA, 0xEE8, 0xEE6, 0xEE4, 0xEE2, 0xEE0, - 0xEDE, 0xEDC, 0xEDA, 0xED8, 0xED6, 0xED4, 0xED2, 0xED0, - 0xECE, 0xECC, 0xECA, 0xEC8, 0xEC6, 0xEC4, 0xEC2, 0xEC0, - 0xEBE, 0xEBC, 0xEBA, 0xEB8, 0xEB6, 0xEB4, 0xEB2, 0xEB0, - 0xEAE, 0xEAC, 0xEAA, 0xEA8, 0xEA6, 0xEA4, 0xEA2, 0xEA0, - 0xE9E, 0xE9C, 0xE9A, 0xE98, 0xE96, 0xE94, 0xE92, 0xE90, - 0xE8E, 0xE8C, 0xE8A, 0xE88, 0xE86, 0xE84, 0xE82, 0xE80, - 0xE7E, 0xE7C, 0xE7A, 0xE78, 0xE76, 0xE74, 0xE72, 0xE70, - 0xE6E, 0xE6C, 0xE6A, 0xE68, 0xE66, 0xE64, 0xE62, 0xE60, - 0xE5E, 0xE5C, 0xE5A, 0xE58, 0xE56, 0xE54, 0xE52, 0xE50, - 0xE4E, 0xE4C, 0xE4A, 0xE48, 0xE46, 0xE44, 0xE42, 0xE40, - 0xE3E, 0xE3C, 0xE3A, 0xE38, 0xE36, 0xE34, 0xE32, 0xE30, - 0xE2E, 0xE2C, 0xE2A, 0xE28, 0xE26, 0xE24, 0xE22, 0xE20, - 0xE1E, 0xE1C, 0xE1A, 0xE18, 0xE16, 0xE14, 0xE12, 0xE10, - 0xE0E, 0xE0C, 0xE0A, 0xE08, 0xE06, 0xE04, 0xE02, 0xE00, - 0xDFE, 0xDFC, 0xDFA, 0xDF8, 0xDF6, 0xDF4, 0xDF2, 0xDF0, - 0xDEE, 0xDEC, 0xDEA, 0xDE8, 0xDE6, 0xDE4, 0xDE2, 0xDE0, - 0xDDE, 0xDDC, 0xDDA, 0xDD8, 0xDD6, 0xDD4, 0xDD2, 0xDD0, - 0xDCE, 0xDCC, 0xDCA, 0xDC8, 0xDC6, 0xDC4, 0xDC2, 0xDC0, - 0xDBE, 0xDBC, 0xDBA, 0xDB8, 0xDB6, 0xDB4, 0xDB2, 0xDB0, - 0xDAE, 0xDAC, 0xDAA, 0xDA8, 0xDA6, 0xDA4, 0xDA2, 0xDA0, - 0xD9E, 0xD9C, 0xD9A, 0xD98, 0xD96, 0xD94, 0xD92, 0xD90, - 0xD8E, 0xD8C, 0xD8A, 0xD88, 0xD86, 0xD84, 0xD82, 0xD80, - 0xD7E, 0xD7C, 0xD7A, 0xD78, 0xD76, 0xD74, 0xD72, 0xD70, - 0xD6E, 0xD6C, 0xD6A, 0xD68, 0xD66, 0xD64, 0xD62, 0xD60, - 0xD5E, 0xD5C, 0xD5A, 0xD58, 0xD56, 0xD54, 0xD52, 0xD50, - 0xD4E, 0xD4C, 0xD4A, 0xD48, 0xD46, 0xD44, 0xD42, 0xD40, - 0xD3E, 0xD3C, 0xD3A, 0xD38, 0xD36, 0xD34, 0xD32, 0xD30, - 0xD2E, 0xD2C, 0xD2A, 0xD28, 0xD26, 0xD24, 0xD22, 0xD20, - 0xD1E, 0xD1C, 0xD1A, 0xD18, 0xD16, 0xD14, 0xD12, 0xD10, - 0xD0E, 0xD0C, 0xD0A, 0xD08, 0xD06, 0xD04, 0xD02, 0xD00, - 0xCFE, 0xCFC, 0xCFA, 0xCF8, 0xCF6, 0xCF4, 0xCF2, 0xCF0, - 0xCEE, 0xCEC, 0xCEA, 0xCE8, 0xCE6, 0xCE4, 0xCE2, 0xCE0, - 0xCDE, 0xCDC, 0xCDA, 0xCD8, 0xCD6, 0xCD4, 0xCD2, 0xCD0, - 0xCCE, 0xCCC, 0xCCA, 0xCC8, 0xCC6, 0xCC4, 0xCC2, 0xCC0, - 0xCBE, 0xCBC, 0xCBA, 0xCB8, 0xCB6, 0xCB4, 0xCB2, 0xCB0, - 0xCAE, 0xCAC, 0xCAA, 0xCA8, 0xCA6, 0xCA4, 0xCA2, 0xCA0, - 0xC9E, 0xC9C, 0xC9A, 0xC98, 0xC96, 0xC94, 0xC92, 0xC90, - 0xC8E, 0xC8C, 0xC8A, 0xC88, 0xC86, 0xC84, 0xC82, 0xC80, - 0xC7E, 0xC7C, 0xC7A, 0xC78, 0xC76, 0xC74, 0xC72, 0xC70, - 0xC6E, 0xC6C, 0xC6A, 0xC68, 0xC66, 0xC64, 0xC62, 0xC60, - 0xC5E, 0xC5C, 0xC5A, 0xC58, 0xC56, 0xC54, 0xC52, 0xC50, - 0xC4E, 0xC4C, 0xC4A, 0xC48, 0xC46, 0xC44, 0xC42, 0xC40, - 0xC3E, 0xC3C, 0xC3A, 0xC38, 0xC36, 0xC34, 0xC32, 0xC30, - 0xC2E, 0xC2C, 0xC2A, 0xC28, 0xC26, 0xC24, 0xC22, 0xC20, - 0xC1E, 0xC1C, 0xC1A, 0xC18, 0xC16, 0xC14, 0xC12, 0xC10, - 0xC0E, 0xC0C, 0xC0A, 0xC08, 0xC06, 0xC04, 0xC02, 0xC00, - 0xBFE, 0xBFC, 0xBFA, 0xBF8, 0xBF6, 0xBF4, 0xBF2, 0xBF0, - 0xBEE, 0xBEC, 0xBEA, 0xBE8, 0xBE6, 0xBE4, 0xBE2, 0xBE0, - 0xBDE, 0xBDC, 0xBDA, 0xBD8, 0xBD6, 0xBD4, 0xBD2, 0xBD0, - 0xBCE, 0xBCC, 0xBCA, 0xBC8, 0xBC6, 0xBC4, 0xBC2, 0xBC0, - 0xBBE, 0xBBC, 0xBBA, 0xBB8, 0xBB6, 0xBB4, 0xBB2, 0xBB0, - 0xBAE, 0xBAC, 0xBAA, 0xBA8, 0xBA6, 0xBA4, 0xBA2, 0xBA0, - 0xB9E, 0xB9C, 0xB9A, 0xB98, 0xB96, 0xB94, 0xB92, 0xB90, - 0xB8E, 0xB8C, 0xB8A, 0xB88, 0xB86, 0xB84, 0xB82, 0xB80, - 0xB7E, 0xB7C, 0xB7A, 0xB78, 0xB76, 0xB74, 0xB72, 0xB70, - 0xB6E, 0xB6C, 0xB6A, 0xB68, 0xB66, 0xB64, 0xB62, 0xB60, - 0xB5E, 0xB5C, 0xB5A, 0xB58, 0xB56, 0xB54, 0xB52, 0xB50, - 0xB4E, 0xB4C, 0xB4A, 0xB48, 0xB46, 0xB44, 0xB42, 0xB40, - 0xB3E, 0xB3C, 0xB3A, 0xB38, 0xB36, 0xB34, 0xB32, 0xB30, - 0xB2E, 0xB2C, 0xB2A, 0xB28, 0xB26, 0xB24, 0xB22, 0xB20, - 0xB1E, 0xB1C, 0xB1A, 0xB18, 0xB16, 0xB14, 0xB12, 0xB10, - 0xB0E, 0xB0C, 0xB0A, 0xB08, 0xB06, 0xB04, 0xB02, 0xB00, - 0xAFE, 0xAFC, 0xAFA, 0xAF8, 0xAF6, 0xAF4, 0xAF2, 0xAF0, - 0xAEE, 0xAEC, 0xAEA, 0xAE8, 0xAE6, 0xAE4, 0xAE2, 0xAE0, - 0xADE, 0xADC, 0xADA, 0xAD8, 0xAD6, 0xAD4, 0xAD2, 0xAD0, - 0xACE, 0xACC, 0xACA, 0xAC8, 0xAC6, 0xAC4, 0xAC2, 0xAC0, - 0xABE, 0xABC, 0xABA, 0xAB8, 0xAB6, 0xAB4, 0xAB2, 0xAB0, - 0xAAE, 0xAAC, 0xAAA, 0xAA8, 0xAA6, 0xAA4, 0xAA2, 0xAA0, - 0xA9E, 0xA9C, 0xA9A, 0xA98, 0xA96, 0xA94, 0xA92, 0xA90, - 0xA8E, 0xA8C, 0xA8A, 0xA88, 0xA86, 0xA84, 0xA82, 0xA80, - 0xA7E, 0xA7C, 0xA7A, 0xA78, 0xA76, 0xA74, 0xA72, 0xA70, - 0xA6E, 0xA6C, 0xA6A, 0xA68, 0xA66, 0xA64, 0xA62, 0xA60, - 0xA5E, 0xA5C, 0xA5A, 0xA58, 0xA56, 0xA54, 0xA52, 0xA50, - 0xA4E, 0xA4C, 0xA4A, 0xA48, 0xA46, 0xA44, 0xA42, 0xA40, - 0xA3E, 0xA3C, 0xA3A, 0xA38, 0xA36, 0xA34, 0xA32, 0xA30, - 0xA2E, 0xA2C, 0xA2A, 0xA28, 0xA26, 0xA24, 0xA22, 0xA20, - 0xA1E, 0xA1C, 0xA1A, 0xA18, 0xA16, 0xA14, 0xA12, 0xA10, - 0xA0E, 0xA0C, 0xA0A, 0xA08, 0xA06, 0xA04, 0xA02, 0xA00, - 0x9FE, 0x9FC, 0x9FA, 0x9F8, 0x9F6, 0x9F4, 0x9F2, 0x9F0, - 0x9EE, 0x9EC, 0x9EA, 0x9E8, 0x9E6, 0x9E4, 0x9E2, 0x9E0, - 0x9DE, 0x9DC, 0x9DA, 0x9D8, 0x9D6, 0x9D4, 0x9D2, 0x9D0, - 0x9CE, 0x9CC, 0x9CA, 0x9C8, 0x9C6, 0x9C4, 0x9C2, 0x9C0, - 0x9BE, 0x9BC, 0x9BA, 0x9B8, 0x9B6, 0x9B4, 0x9B2, 0x9B0, - 0x9AE, 0x9AC, 0x9AA, 0x9A8, 0x9A6, 0x9A4, 0x9A2, 0x9A0, - 0x99E, 0x99C, 0x99A, 0x998, 0x996, 0x994, 0x992, 0x990, - 0x98E, 0x98C, 0x98A, 0x988, 0x986, 0x984, 0x982, 0x980, - 0x97E, 0x97C, 0x97A, 0x978, 0x976, 0x974, 0x972, 0x970, - 0x96E, 0x96C, 0x96A, 0x968, 0x966, 0x964, 0x962, 0x960, - 0x95E, 0x95C, 0x95A, 0x958, 0x956, 0x954, 0x952, 0x950, - 0x94E, 0x94C, 0x94A, 0x948, 0x946, 0x944, 0x942, 0x940, - 0x93E, 0x93C, 0x93A, 0x938, 0x936, 0x934, 0x932, 0x930, - 0x92E, 0x92C, 0x92A, 0x928, 0x926, 0x924, 0x922, 0x920, - 0x91E, 0x91C, 0x91A, 0x918, 0x916, 0x914, 0x912, 0x910, - 0x90E, 0x90C, 0x90A, 0x908, 0x906, 0x904, 0x902, 0x900, - 0x8FE, 0x8FC, 0x8FA, 0x8F8, 0x8F6, 0x8F4, 0x8F2, 0x8F0, - 0x8EE, 0x8EC, 0x8EA, 0x8E8, 0x8E6, 0x8E4, 0x8E2, 0x8E0, - 0x8DE, 0x8DC, 0x8DA, 0x8D8, 0x8D6, 0x8D4, 0x8D2, 0x8D0, - 0x8CE, 0x8CC, 0x8CA, 0x8C8, 0x8C6, 0x8C4, 0x8C2, 0x8C0, - 0x8BE, 0x8BC, 0x8BA, 0x8B8, 0x8B6, 0x8B4, 0x8B2, 0x8B0, - 0x8AE, 0x8AC, 0x8AA, 0x8A8, 0x8A6, 0x8A4, 0x8A2, 0x8A0, - 0x89E, 0x89C, 0x89A, 0x898, 0x896, 0x894, 0x892, 0x890, - 0x88E, 0x88C, 0x88A, 0x888, 0x886, 0x884, 0x882, 0x880, - 0x87E, 0x87C, 0x87A, 0x878, 0x876, 0x874, 0x872, 0x870, - 0x86E, 0x86C, 0x86A, 0x868, 0x866, 0x864, 0x862, 0x860, - 0x85E, 0x85C, 0x85A, 0x858, 0x856, 0x854, 0x852, 0x850, - 0x84E, 0x84C, 0x84A, 0x848, 0x846, 0x844, 0x842, 0x840, - 0x83E, 0x83C, 0x83A, 0x838, 0x836, 0x834, 0x832, 0x830, - 0x82E, 0x82C, 0x82A, 0x828, 0x826, 0x824, 0x822, 0x820, - 0x81E, 0x81C, 0x81A, 0x818, 0x816, 0x814, 0x812, 0x810, - 0x80E, 0x80C, 0x80A, 0x808, 0x806, 0x804, 0x802, 0x800, - 0x7FE, 0x7FC, 0x7FA, 0x7F8, 0x7F6, 0x7F4, 0x7F2, 0x7F0, - 0x7EE, 0x7EC, 0x7EA, 0x7E8, 0x7E6, 0x7E4, 0x7E2, 0x7E0, - 0x7DE, 0x7DC, 0x7DA, 0x7D8, 0x7D6, 0x7D4, 0x7D2, 0x7D0, - 0x7CE, 0x7CC, 0x7CA, 0x7C8, 0x7C6, 0x7C4, 0x7C2, 0x7C0, - 0x7BE, 0x7BC, 0x7BA, 0x7B8, 0x7B6, 0x7B4, 0x7B2, 0x7B0, - 0x7AE, 0x7AC, 0x7AA, 0x7A8, 0x7A6, 0x7A4, 0x7A2, 0x7A0, - 0x79E, 0x79C, 0x79A, 0x798, 0x796, 0x794, 0x792, 0x790, - 0x78E, 0x78C, 0x78A, 0x788, 0x786, 0x784, 0x782, 0x780, - 0x77E, 0x77C, 0x77A, 0x778, 0x776, 0x774, 0x772, 0x770, - 0x76E, 0x76C, 0x76A, 0x768, 0x766, 0x764, 0x762, 0x760, - 0x75E, 0x75C, 0x75A, 0x758, 0x756, 0x754, 0x752, 0x750, - 0x74E, 0x74C, 0x74A, 0x748, 0x746, 0x744, 0x742, 0x740, - 0x73E, 0x73C, 0x73A, 0x738, 0x736, 0x734, 0x732, 0x730, - 0x72E, 0x72C, 0x72A, 0x728, 0x726, 0x724, 0x722, 0x720, - 0x71E, 0x71C, 0x71A, 0x718, 0x716, 0x714, 0x712, 0x710, - 0x70E, 0x70C, 0x70A, 0x708, 0x706, 0x704, 0x702, 0x700, - 0x6FE, 0x6FC, 0x6FA, 0x6F8, 0x6F6, 0x6F4, 0x6F2, 0x6F0, - 0x6EE, 0x6EC, 0x6EA, 0x6E8, 0x6E6, 0x6E4, 0x6E2, 0x6E0, - 0x6DE, 0x6DC, 0x6DA, 0x6D8, 0x6D6, 0x6D4, 0x6D2, 0x6D0, - 0x6CE, 0x6CC, 0x6CA, 0x6C8, 0x6C6, 0x6C4, 0x6C2, 0x6C0, - 0x6BE, 0x6BC, 0x6BA, 0x6B8, 0x6B6, 0x6B4, 0x6B2, 0x6B0, - 0x6AE, 0x6AC, 0x6AA, 0x6A8, 0x6A6, 0x6A4, 0x6A2, 0x6A0, - 0x69E, 0x69C, 0x69A, 0x698, 0x696, 0x694, 0x692, 0x690, - 0x68E, 0x68C, 0x68A, 0x688, 0x686, 0x684, 0x682, 0x680, - 0x67E, 0x67C, 0x67A, 0x678, 0x676, 0x674, 0x672, 0x670, - 0x66E, 0x66C, 0x66A, 0x668, 0x666, 0x664, 0x662, 0x660, - 0x65E, 0x65C, 0x65A, 0x658, 0x656, 0x654, 0x652, 0x650, - 0x64E, 0x64C, 0x64A, 0x648, 0x646, 0x644, 0x642, 0x640, - 0x63E, 0x63C, 0x63A, 0x638, 0x636, 0x634, 0x632, 0x630, - 0x62E, 0x62C, 0x62A, 0x628, 0x626, 0x624, 0x622, 0x620, - 0x61E, 0x61C, 0x61A, 0x618, 0x616, 0x614, 0x612, 0x610, - 0x60E, 0x60C, 0x60A, 0x608, 0x606, 0x604, 0x602, 0x600, - 0x5FE, 0x5FC, 0x5FA, 0x5F8, 0x5F6, 0x5F4, 0x5F2, 0x5F0, - 0x5EE, 0x5EC, 0x5EA, 0x5E8, 0x5E6, 0x5E4, 0x5E2, 0x5E0, - 0x5DE, 0x5DC, 0x5DA, 0x5D8, 0x5D6, 0x5D4, 0x5D2, 0x5D0, - 0x5CE, 0x5CC, 0x5CA, 0x5C8, 0x5C6, 0x5C4, 0x5C2, 0x5C0, - 0x5BE, 0x5BC, 0x5BA, 0x5B8, 0x5B6, 0x5B4, 0x5B2, 0x5B0, - 0x5AE, 0x5AC, 0x5AA, 0x5A8, 0x5A6, 0x5A4, 0x5A2, 0x5A0, - 0x59E, 0x59C, 0x59A, 0x598, 0x596, 0x594, 0x592, 0x590, - 0x58E, 0x58C, 0x58A, 0x588, 0x586, 0x584, 0x582, 0x580, - 0x57E, 0x57C, 0x57A, 0x578, 0x576, 0x574, 0x572, 0x570, - 0x56E, 0x56C, 0x56A, 0x568, 0x566, 0x564, 0x562, 0x560, - 0x55E, 0x55C, 0x55A, 0x558, 0x556, 0x554, 0x552, 0x550, - 0x54E, 0x54C, 0x54A, 0x548, 0x546, 0x544, 0x542, 0x540, - 0x53E, 0x53C, 0x53A, 0x538, 0x536, 0x534, 0x532, 0x530, - 0x52E, 0x52C, 0x52A, 0x528, 0x526, 0x524, 0x522, 0x520, - 0x51E, 0x51C, 0x51A, 0x518, 0x516, 0x514, 0x512, 0x510, - 0x50E, 0x50C, 0x50A, 0x508, 0x506, 0x504, 0x502, 0x500, - 0x4FE, 0x4FC, 0x4FA, 0x4F8, 0x4F6, 0x4F4, 0x4F2, 0x4F0, - 0x4EE, 0x4EC, 0x4EA, 0x4E8, 0x4E6, 0x4E4, 0x4E2, 0x4E0, - 0x4DE, 0x4DC, 0x4DA, 0x4D8, 0x4D6, 0x4D4, 0x4D2, 0x4D0, - 0x4CE, 0x4CC, 0x4CA, 0x4C8, 0x4C6, 0x4C4, 0x4C2, 0x4C0, - 0x4BE, 0x4BC, 0x4BA, 0x4B8, 0x4B6, 0x4B4, 0x4B2, 0x4B0, - 0x4AE, 0x4AC, 0x4AA, 0x4A8, 0x4A6, 0x4A4, 0x4A2, 0x4A0, - 0x49E, 0x49C, 0x49A, 0x498, 0x496, 0x494, 0x492, 0x490, - 0x48E, 0x48C, 0x48A, 0x488, 0x486, 0x484, 0x482, 0x480, - 0x47E, 0x47C, 0x47A, 0x478, 0x476, 0x474, 0x472, 0x470, - 0x46E, 0x46C, 0x46A, 0x468, 0x466, 0x464, 0x462, 0x460, - 0x45E, 0x45C, 0x45A, 0x458, 0x456, 0x454, 0x452, 0x450, - 0x44E, 0x44C, 0x44A, 0x448, 0x446, 0x444, 0x442, 0x440, - 0x43E, 0x43C, 0x43A, 0x438, 0x436, 0x434, 0x432, 0x430, - 0x42E, 0x42C, 0x42A, 0x428, 0x426, 0x424, 0x422, 0x420, - 0x41E, 0x41C, 0x41A, 0x418, 0x416, 0x414, 0x412, 0x410, - 0x40E, 0x40C, 0x40A, 0x408, 0x406, 0x404, 0x402, 0x400, - 0x3FE, 0x3FC, 0x3FA, 0x3F8, 0x3F6, 0x3F4, 0x3F2, 0x3F0, - 0x3EE, 0x3EC, 0x3EA, 0x3E8, 0x3E6, 0x3E4, 0x3E2, 0x3E0, - 0x3DE, 0x3DC, 0x3DA, 0x3D8, 0x3D6, 0x3D4, 0x3D2, 0x3D0, - 0x3CE, 0x3CC, 0x3CA, 0x3C8, 0x3C6, 0x3C4, 0x3C2, 0x3C0, - 0x3BE, 0x3BC, 0x3BA, 0x3B8, 0x3B6, 0x3B4, 0x3B2, 0x3B0, - 0x3AE, 0x3AC, 0x3AA, 0x3A8, 0x3A6, 0x3A4, 0x3A2, 0x3A0, - 0x39E, 0x39C, 0x39A, 0x398, 0x396, 0x394, 0x392, 0x390, - 0x38E, 0x38C, 0x38A, 0x388, 0x386, 0x384, 0x382, 0x380, - 0x37E, 0x37C, 0x37A, 0x378, 0x376, 0x374, 0x372, 0x370, - 0x36E, 0x36C, 0x36A, 0x368, 0x366, 0x364, 0x362, 0x360, - 0x35E, 0x35C, 0x35A, 0x358, 0x356, 0x354, 0x352, 0x350, - 0x34E, 0x34C, 0x34A, 0x348, 0x346, 0x344, 0x342, 0x340, - 0x33E, 0x33C, 0x33A, 0x338, 0x336, 0x334, 0x332, 0x330, - 0x32E, 0x32C, 0x32A, 0x328, 0x326, 0x324, 0x322, 0x320, - 0x31E, 0x31C, 0x31A, 0x318, 0x316, 0x314, 0x312, 0x310, - 0x30E, 0x30C, 0x30A, 0x308, 0x306, 0x304, 0x302, 0x300, - 0x2FE, 0x2FC, 0x2FA, 0x2F8, 0x2F6, 0x2F4, 0x2F2, 0x2F0, - 0x2EE, 0x2EC, 0x2EA, 0x2E8, 0x2E6, 0x2E4, 0x2E2, 0x2E0, - 0x2DE, 0x2DC, 0x2DA, 0x2D8, 0x2D6, 0x2D4, 0x2D2, 0x2D0, - 0x2CE, 0x2CC, 0x2CA, 0x2C8, 0x2C6, 0x2C4, 0x2C2, 0x2C0, - 0x2BE, 0x2BC, 0x2BA, 0x2B8, 0x2B6, 0x2B4, 0x2B2, 0x2B0, - 0x2AE, 0x2AC, 0x2AA, 0x2A8, 0x2A6, 0x2A4, 0x2A2, 0x2A0, - 0x29E, 0x29C, 0x29A, 0x298, 0x296, 0x294, 0x292, 0x290, - 0x28E, 0x28C, 0x28A, 0x288, 0x286, 0x284, 0x282, 0x280, - 0x27E, 0x27C, 0x27A, 0x278, 0x276, 0x274, 0x272, 0x270, - 0x26E, 0x26C, 0x26A, 0x268, 0x266, 0x264, 0x262, 0x260, - 0x25E, 0x25C, 0x25A, 0x258, 0x256, 0x254, 0x252, 0x250, - 0x24E, 0x24C, 0x24A, 0x248, 0x246, 0x244, 0x242, 0x240, - 0x23E, 0x23C, 0x23A, 0x238, 0x236, 0x234, 0x232, 0x230, - 0x22E, 0x22C, 0x22A, 0x228, 0x226, 0x224, 0x222, 0x220, - 0x21E, 0x21C, 0x21A, 0x218, 0x216, 0x214, 0x212, 0x210, - 0x20E, 0x20C, 0x20A, 0x208, 0x206, 0x204, 0x202, 0x200, - 0x1FE, 0x1FC, 0x1FA, 0x1F8, 0x1F6, 0x1F4, 0x1F2, 0x1F0, - 0x1EE, 0x1EC, 0x1EA, 0x1E8, 0x1E6, 0x1E4, 0x1E2, 0x1E0, - 0x1DE, 0x1DC, 0x1DA, 0x1D8, 0x1D6, 0x1D4, 0x1D2, 0x1D0, - 0x1CE, 0x1CC, 0x1CA, 0x1C8, 0x1C6, 0x1C4, 0x1C2, 0x1C0, - 0x1BE, 0x1BC, 0x1BA, 0x1B8, 0x1B6, 0x1B4, 0x1B2, 0x1B0, - 0x1AE, 0x1AC, 0x1AA, 0x1A8, 0x1A6, 0x1A4, 0x1A2, 0x1A0, - 0x19E, 0x19C, 0x19A, 0x198, 0x196, 0x194, 0x192, 0x190, - 0x18E, 0x18C, 0x18A, 0x188, 0x186, 0x184, 0x182, 0x180, - 0x17E, 0x17C, 0x17A, 0x178, 0x176, 0x174, 0x172, 0x170, - 0x16E, 0x16C, 0x16A, 0x168, 0x166, 0x164, 0x162, 0x160, - 0x15E, 0x15C, 0x15A, 0x158, 0x156, 0x154, 0x152, 0x150, - 0x14E, 0x14C, 0x14A, 0x148, 0x146, 0x144, 0x142, 0x140, - 0x13E, 0x13C, 0x13A, 0x138, 0x136, 0x134, 0x132, 0x130, - 0x12E, 0x12C, 0x12A, 0x128, 0x126, 0x124, 0x122, 0x120, - 0x11E, 0x11C, 0x11A, 0x118, 0x116, 0x114, 0x112, 0x110, - 0x10E, 0x10C, 0x10A, 0x108, 0x106, 0x104, 0x102, 0x100, - 0x0FE, 0x0FC, 0x0FA, 0x0F8, 0x0F6, 0x0F4, 0x0F2, 0x0F0, - 0x0EE, 0x0EC, 0x0EA, 0x0E8, 0x0E6, 0x0E4, 0x0E2, 0x0E0, - 0x0DE, 0x0DC, 0x0DA, 0x0D8, 0x0D6, 0x0D4, 0x0D2, 0x0D0, - 0x0CE, 0x0CC, 0x0CA, 0x0C8, 0x0C6, 0x0C4, 0x0C2, 0x0C0, - 0x0BE, 0x0BC, 0x0BA, 0x0B8, 0x0B6, 0x0B4, 0x0B2, 0x0B0, - 0x0AE, 0x0AC, 0x0AA, 0x0A8, 0x0A6, 0x0A4, 0x0A2, 0x0A0, - 0x09E, 0x09C, 0x09A, 0x098, 0x096, 0x094, 0x092, 0x090, - 0x08E, 0x08C, 0x08A, 0x088, 0x086, 0x084, 0x082, 0x080, - 0x07E, 0x07C, 0x07A, 0x078, 0x076, 0x074, 0x072, 0x070, - 0x06E, 0x06C, 0x06A, 0x068, 0x066, 0x064, 0x062, 0x060, - 0x05E, 0x05C, 0x05A, 0x058, 0x056, 0x054, 0x052, 0x050, - 0x04E, 0x04C, 0x04A, 0x048, 0x046, 0x044, 0x042, 0x040, - 0x03E, 0x03C, 0x03A, 0x038, 0x036, 0x034, 0x032, 0x030, - 0x02E, 0x02C, 0x02A, 0x028, 0x026, 0x024, 0x022, 0x020, - 0x01E, 0x01C, 0x01A, 0x018, 0x016, 0x014, 0x012, 0x010, - 0x00E, 0x00C, 0x00A, 0x008, 0x006, 0x004, 0x002, 0x000 - }, - new int[] { - 0x000, 0x001, 0x002, 0x003, 0x004, 0x005, 0x006, 0x007, - 0x008, 0x009, 0x00A, 0x00B, 0x00C, 0x00D, 0x00E, 0x00F, - 0x010, 0x011, 0x012, 0x013, 0x014, 0x015, 0x016, 0x017, - 0x018, 0x019, 0x01A, 0x01B, 0x01C, 0x01D, 0x01E, 0x01F, - 0x020, 0x021, 0x022, 0x023, 0x024, 0x025, 0x026, 0x027, - 0x028, 0x029, 0x02A, 0x02B, 0x02C, 0x02D, 0x02E, 0x02F, - 0x030, 0x031, 0x032, 0x033, 0x034, 0x035, 0x036, 0x037, - 0x038, 0x039, 0x03A, 0x03B, 0x03C, 0x03D, 0x03E, 0x03F, - 0x040, 0x041, 0x042, 0x043, 0x044, 0x045, 0x046, 0x047, - 0x048, 0x049, 0x04A, 0x04B, 0x04C, 0x04D, 0x04E, 0x04F, - 0x050, 0x051, 0x052, 0x053, 0x054, 0x055, 0x056, 0x057, - 0x058, 0x059, 0x05A, 0x05B, 0x05C, 0x05D, 0x05E, 0x05F, - 0x060, 0x061, 0x062, 0x063, 0x064, 0x065, 0x066, 0x067, - 0x068, 0x069, 0x06A, 0x06B, 0x06C, 0x06D, 0x06E, 0x06F, - 0x070, 0x071, 0x072, 0x073, 0x074, 0x075, 0x076, 0x077, - 0x078, 0x079, 0x07A, 0x07B, 0x07C, 0x07D, 0x07E, 0x07F, - 0x080, 0x081, 0x082, 0x083, 0x084, 0x085, 0x086, 0x087, - 0x088, 0x089, 0x08A, 0x08B, 0x08C, 0x08D, 0x08E, 0x08F, - 0x090, 0x091, 0x092, 0x093, 0x094, 0x095, 0x096, 0x097, - 0x098, 0x099, 0x09A, 0x09B, 0x09C, 0x09D, 0x09E, 0x09F, - 0x0A0, 0x0A1, 0x0A2, 0x0A3, 0x0A4, 0x0A5, 0x0A6, 0x0A7, - 0x0A8, 0x0A9, 0x0AA, 0x0AB, 0x0AC, 0x0AD, 0x0AE, 0x0AF, - 0x0B0, 0x0B1, 0x0B2, 0x0B3, 0x0B4, 0x0B5, 0x0B6, 0x0B7, - 0x0B8, 0x0B9, 0x0BA, 0x0BB, 0x0BC, 0x0BD, 0x0BE, 0x0BF, - 0x0C0, 0x0C1, 0x0C2, 0x0C3, 0x0C4, 0x0C5, 0x0C6, 0x0C7, - 0x0C8, 0x0C9, 0x0CA, 0x0CB, 0x0CC, 0x0CD, 0x0CE, 0x0CF, - 0x0D0, 0x0D1, 0x0D2, 0x0D3, 0x0D4, 0x0D5, 0x0D6, 0x0D7, - 0x0D8, 0x0D9, 0x0DA, 0x0DB, 0x0DC, 0x0DD, 0x0DE, 0x0DF, - 0x0E0, 0x0E1, 0x0E2, 0x0E3, 0x0E4, 0x0E5, 0x0E6, 0x0E7, - 0x0E8, 0x0E9, 0x0EA, 0x0EB, 0x0EC, 0x0ED, 0x0EE, 0x0EF, - 0x0F0, 0x0F1, 0x0F2, 0x0F3, 0x0F4, 0x0F5, 0x0F6, 0x0F7, - 0x0F8, 0x0F9, 0x0FA, 0x0FB, 0x0FC, 0x0FD, 0x0FE, 0x0FF, - 0x100, 0x101, 0x102, 0x103, 0x104, 0x105, 0x106, 0x107, - 0x108, 0x109, 0x10A, 0x10B, 0x10C, 0x10D, 0x10E, 0x10F, - 0x110, 0x111, 0x112, 0x113, 0x114, 0x115, 0x116, 0x117, - 0x118, 0x119, 0x11A, 0x11B, 0x11C, 0x11D, 0x11E, 0x11F, - 0x120, 0x121, 0x122, 0x123, 0x124, 0x125, 0x126, 0x127, - 0x128, 0x129, 0x12A, 0x12B, 0x12C, 0x12D, 0x12E, 0x12F, - 0x130, 0x131, 0x132, 0x133, 0x134, 0x135, 0x136, 0x137, - 0x138, 0x139, 0x13A, 0x13B, 0x13C, 0x13D, 0x13E, 0x13F, - 0x140, 0x141, 0x142, 0x143, 0x144, 0x145, 0x146, 0x147, - 0x148, 0x149, 0x14A, 0x14B, 0x14C, 0x14D, 0x14E, 0x14F, - 0x150, 0x151, 0x152, 0x153, 0x154, 0x155, 0x156, 0x157, - 0x158, 0x159, 0x15A, 0x15B, 0x15C, 0x15D, 0x15E, 0x15F, - 0x160, 0x161, 0x162, 0x163, 0x164, 0x165, 0x166, 0x167, - 0x168, 0x169, 0x16A, 0x16B, 0x16C, 0x16D, 0x16E, 0x16F, - 0x170, 0x171, 0x172, 0x173, 0x174, 0x175, 0x176, 0x177, - 0x178, 0x179, 0x17A, 0x17B, 0x17C, 0x17D, 0x17E, 0x17F, - 0x180, 0x181, 0x182, 0x183, 0x184, 0x185, 0x186, 0x187, - 0x188, 0x189, 0x18A, 0x18B, 0x18C, 0x18D, 0x18E, 0x18F, - 0x190, 0x191, 0x192, 0x193, 0x194, 0x195, 0x196, 0x197, - 0x198, 0x199, 0x19A, 0x19B, 0x19C, 0x19D, 0x19E, 0x19F, - 0x1A0, 0x1A1, 0x1A2, 0x1A3, 0x1A4, 0x1A5, 0x1A6, 0x1A7, - 0x1A8, 0x1A9, 0x1AA, 0x1AB, 0x1AC, 0x1AD, 0x1AE, 0x1AF, - 0x1B0, 0x1B1, 0x1B2, 0x1B3, 0x1B4, 0x1B5, 0x1B6, 0x1B7, - 0x1B8, 0x1B9, 0x1BA, 0x1BB, 0x1BC, 0x1BD, 0x1BE, 0x1BF, - 0x1C0, 0x1C1, 0x1C2, 0x1C3, 0x1C4, 0x1C5, 0x1C6, 0x1C7, - 0x1C8, 0x1C9, 0x1CA, 0x1CB, 0x1CC, 0x1CD, 0x1CE, 0x1CF, - 0x1D0, 0x1D1, 0x1D2, 0x1D3, 0x1D4, 0x1D5, 0x1D6, 0x1D7, - 0x1D8, 0x1D9, 0x1DA, 0x1DB, 0x1DC, 0x1DD, 0x1DE, 0x1DF, - 0x1E0, 0x1E1, 0x1E2, 0x1E3, 0x1E4, 0x1E5, 0x1E6, 0x1E7, - 0x1E8, 0x1E9, 0x1EA, 0x1EB, 0x1EC, 0x1ED, 0x1EE, 0x1EF, - 0x1F0, 0x1F1, 0x1F2, 0x1F3, 0x1F4, 0x1F5, 0x1F6, 0x1F7, - 0x1F8, 0x1F9, 0x1FA, 0x1FB, 0x1FC, 0x1FD, 0x1FE, 0x1FF, - 0x200, 0x201, 0x202, 0x203, 0x204, 0x205, 0x206, 0x207, - 0x208, 0x209, 0x20A, 0x20B, 0x20C, 0x20D, 0x20E, 0x20F, - 0x210, 0x211, 0x212, 0x213, 0x214, 0x215, 0x216, 0x217, - 0x218, 0x219, 0x21A, 0x21B, 0x21C, 0x21D, 0x21E, 0x21F, - 0x220, 0x221, 0x222, 0x223, 0x224, 0x225, 0x226, 0x227, - 0x228, 0x229, 0x22A, 0x22B, 0x22C, 0x22D, 0x22E, 0x22F, - 0x230, 0x231, 0x232, 0x233, 0x234, 0x235, 0x236, 0x237, - 0x238, 0x239, 0x23A, 0x23B, 0x23C, 0x23D, 0x23E, 0x23F, - 0x240, 0x241, 0x242, 0x243, 0x244, 0x245, 0x246, 0x247, - 0x248, 0x249, 0x24A, 0x24B, 0x24C, 0x24D, 0x24E, 0x24F, - 0x250, 0x251, 0x252, 0x253, 0x254, 0x255, 0x256, 0x257, - 0x258, 0x259, 0x25A, 0x25B, 0x25C, 0x25D, 0x25E, 0x25F, - 0x260, 0x261, 0x262, 0x263, 0x264, 0x265, 0x266, 0x267, - 0x268, 0x269, 0x26A, 0x26B, 0x26C, 0x26D, 0x26E, 0x26F, - 0x270, 0x271, 0x272, 0x273, 0x274, 0x275, 0x276, 0x277, - 0x278, 0x279, 0x27A, 0x27B, 0x27C, 0x27D, 0x27E, 0x27F, - 0x280, 0x281, 0x282, 0x283, 0x284, 0x285, 0x286, 0x287, - 0x288, 0x289, 0x28A, 0x28B, 0x28C, 0x28D, 0x28E, 0x28F, - 0x290, 0x291, 0x292, 0x293, 0x294, 0x295, 0x296, 0x297, - 0x298, 0x299, 0x29A, 0x29B, 0x29C, 0x29D, 0x29E, 0x29F, - 0x2A0, 0x2A1, 0x2A2, 0x2A3, 0x2A4, 0x2A5, 0x2A6, 0x2A7, - 0x2A8, 0x2A9, 0x2AA, 0x2AB, 0x2AC, 0x2AD, 0x2AE, 0x2AF, - 0x2B0, 0x2B1, 0x2B2, 0x2B3, 0x2B4, 0x2B5, 0x2B6, 0x2B7, - 0x2B8, 0x2B9, 0x2BA, 0x2BB, 0x2BC, 0x2BD, 0x2BE, 0x2BF, - 0x2C0, 0x2C1, 0x2C2, 0x2C3, 0x2C4, 0x2C5, 0x2C6, 0x2C7, - 0x2C8, 0x2C9, 0x2CA, 0x2CB, 0x2CC, 0x2CD, 0x2CE, 0x2CF, - 0x2D0, 0x2D1, 0x2D2, 0x2D3, 0x2D4, 0x2D5, 0x2D6, 0x2D7, - 0x2D8, 0x2D9, 0x2DA, 0x2DB, 0x2DC, 0x2DD, 0x2DE, 0x2DF, - 0x2E0, 0x2E1, 0x2E2, 0x2E3, 0x2E4, 0x2E5, 0x2E6, 0x2E7, - 0x2E8, 0x2E9, 0x2EA, 0x2EB, 0x2EC, 0x2ED, 0x2EE, 0x2EF, - 0x2F0, 0x2F1, 0x2F2, 0x2F3, 0x2F4, 0x2F5, 0x2F6, 0x2F7, - 0x2F8, 0x2F9, 0x2FA, 0x2FB, 0x2FC, 0x2FD, 0x2FE, 0x2FF, - 0x300, 0x301, 0x302, 0x303, 0x304, 0x305, 0x306, 0x307, - 0x308, 0x309, 0x30A, 0x30B, 0x30C, 0x30D, 0x30E, 0x30F, - 0x310, 0x311, 0x312, 0x313, 0x314, 0x315, 0x316, 0x317, - 0x318, 0x319, 0x31A, 0x31B, 0x31C, 0x31D, 0x31E, 0x31F, - 0x320, 0x321, 0x322, 0x323, 0x324, 0x325, 0x326, 0x327, - 0x328, 0x329, 0x32A, 0x32B, 0x32C, 0x32D, 0x32E, 0x32F, - 0x330, 0x331, 0x332, 0x333, 0x334, 0x335, 0x336, 0x337, - 0x338, 0x339, 0x33A, 0x33B, 0x33C, 0x33D, 0x33E, 0x33F, - 0x340, 0x341, 0x342, 0x343, 0x344, 0x345, 0x346, 0x347, - 0x348, 0x349, 0x34A, 0x34B, 0x34C, 0x34D, 0x34E, 0x34F, - 0x350, 0x351, 0x352, 0x353, 0x354, 0x355, 0x356, 0x357, - 0x358, 0x359, 0x35A, 0x35B, 0x35C, 0x35D, 0x35E, 0x35F, - 0x360, 0x361, 0x362, 0x363, 0x364, 0x365, 0x366, 0x367, - 0x368, 0x369, 0x36A, 0x36B, 0x36C, 0x36D, 0x36E, 0x36F, - 0x370, 0x371, 0x372, 0x373, 0x374, 0x375, 0x376, 0x377, - 0x378, 0x379, 0x37A, 0x37B, 0x37C, 0x37D, 0x37E, 0x37F, - 0x380, 0x381, 0x382, 0x383, 0x384, 0x385, 0x386, 0x387, - 0x388, 0x389, 0x38A, 0x38B, 0x38C, 0x38D, 0x38E, 0x38F, - 0x390, 0x391, 0x392, 0x393, 0x394, 0x395, 0x396, 0x397, - 0x398, 0x399, 0x39A, 0x39B, 0x39C, 0x39D, 0x39E, 0x39F, - 0x3A0, 0x3A1, 0x3A2, 0x3A3, 0x3A4, 0x3A5, 0x3A6, 0x3A7, - 0x3A8, 0x3A9, 0x3AA, 0x3AB, 0x3AC, 0x3AD, 0x3AE, 0x3AF, - 0x3B0, 0x3B1, 0x3B2, 0x3B3, 0x3B4, 0x3B5, 0x3B6, 0x3B7, - 0x3B8, 0x3B9, 0x3BA, 0x3BB, 0x3BC, 0x3BD, 0x3BE, 0x3BF, - 0x3C0, 0x3C1, 0x3C2, 0x3C3, 0x3C4, 0x3C5, 0x3C6, 0x3C7, - 0x3C8, 0x3C9, 0x3CA, 0x3CB, 0x3CC, 0x3CD, 0x3CE, 0x3CF, - 0x3D0, 0x3D1, 0x3D2, 0x3D3, 0x3D4, 0x3D5, 0x3D6, 0x3D7, - 0x3D8, 0x3D9, 0x3DA, 0x3DB, 0x3DC, 0x3DD, 0x3DE, 0x3DF, - 0x3E0, 0x3E1, 0x3E2, 0x3E3, 0x3E4, 0x3E5, 0x3E6, 0x3E7, - 0x3E8, 0x3E9, 0x3EA, 0x3EB, 0x3EC, 0x3ED, 0x3EE, 0x3EF, - 0x3F0, 0x3F1, 0x3F2, 0x3F3, 0x3F4, 0x3F5, 0x3F6, 0x3F7, - 0x3F8, 0x3F9, 0x3FA, 0x3FB, 0x3FC, 0x3FD, 0x3FE, 0x3FF, - 0x400, 0x401, 0x402, 0x403, 0x404, 0x405, 0x406, 0x407, - 0x408, 0x409, 0x40A, 0x40B, 0x40C, 0x40D, 0x40E, 0x40F, - 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, - 0x418, 0x419, 0x41A, 0x41B, 0x41C, 0x41D, 0x41E, 0x41F, - 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, - 0x428, 0x429, 0x42A, 0x42B, 0x42C, 0x42D, 0x42E, 0x42F, - 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, - 0x438, 0x439, 0x43A, 0x43B, 0x43C, 0x43D, 0x43E, 0x43F, - 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, - 0x448, 0x449, 0x44A, 0x44B, 0x44C, 0x44D, 0x44E, 0x44F, - 0x450, 0x451, 0x452, 0x453, 0x454, 0x455, 0x456, 0x457, - 0x458, 0x459, 0x45A, 0x45B, 0x45C, 0x45D, 0x45E, 0x45F, - 0x460, 0x461, 0x462, 0x463, 0x464, 0x465, 0x466, 0x467, - 0x468, 0x469, 0x46A, 0x46B, 0x46C, 0x46D, 0x46E, 0x46F, - 0x470, 0x471, 0x472, 0x473, 0x474, 0x475, 0x476, 0x477, - 0x478, 0x479, 0x47A, 0x47B, 0x47C, 0x47D, 0x47E, 0x47F, - 0x480, 0x481, 0x482, 0x483, 0x484, 0x485, 0x486, 0x487, - 0x488, 0x489, 0x48A, 0x48B, 0x48C, 0x48D, 0x48E, 0x48F, - 0x490, 0x491, 0x492, 0x493, 0x494, 0x495, 0x496, 0x497, - 0x498, 0x499, 0x49A, 0x49B, 0x49C, 0x49D, 0x49E, 0x49F, - 0x4A0, 0x4A1, 0x4A2, 0x4A3, 0x4A4, 0x4A5, 0x4A6, 0x4A7, - 0x4A8, 0x4A9, 0x4AA, 0x4AB, 0x4AC, 0x4AD, 0x4AE, 0x4AF, - 0x4B0, 0x4B1, 0x4B2, 0x4B3, 0x4B4, 0x4B5, 0x4B6, 0x4B7, - 0x4B8, 0x4B9, 0x4BA, 0x4BB, 0x4BC, 0x4BD, 0x4BE, 0x4BF, - 0x4C0, 0x4C1, 0x4C2, 0x4C3, 0x4C4, 0x4C5, 0x4C6, 0x4C7, - 0x4C8, 0x4C9, 0x4CA, 0x4CB, 0x4CC, 0x4CD, 0x4CE, 0x4CF, - 0x4D0, 0x4D1, 0x4D2, 0x4D3, 0x4D4, 0x4D5, 0x4D6, 0x4D7, - 0x4D8, 0x4D9, 0x4DA, 0x4DB, 0x4DC, 0x4DD, 0x4DE, 0x4DF, - 0x4E0, 0x4E1, 0x4E2, 0x4E3, 0x4E4, 0x4E5, 0x4E6, 0x4E7, - 0x4E8, 0x4E9, 0x4EA, 0x4EB, 0x4EC, 0x4ED, 0x4EE, 0x4EF, - 0x4F0, 0x4F1, 0x4F2, 0x4F3, 0x4F4, 0x4F5, 0x4F6, 0x4F7, - 0x4F8, 0x4F9, 0x4FA, 0x4FB, 0x4FC, 0x4FD, 0x4FE, 0x4FF, - 0x500, 0x501, 0x502, 0x503, 0x504, 0x505, 0x506, 0x507, - 0x508, 0x509, 0x50A, 0x50B, 0x50C, 0x50D, 0x50E, 0x50F, - 0x510, 0x511, 0x512, 0x513, 0x514, 0x515, 0x516, 0x517, - 0x518, 0x519, 0x51A, 0x51B, 0x51C, 0x51D, 0x51E, 0x51F, - 0x520, 0x521, 0x522, 0x523, 0x524, 0x525, 0x526, 0x527, - 0x528, 0x529, 0x52A, 0x52B, 0x52C, 0x52D, 0x52E, 0x52F, - 0x530, 0x531, 0x532, 0x533, 0x534, 0x535, 0x536, 0x537, - 0x538, 0x539, 0x53A, 0x53B, 0x53C, 0x53D, 0x53E, 0x53F, - 0x540, 0x541, 0x542, 0x543, 0x544, 0x545, 0x546, 0x547, - 0x548, 0x549, 0x54A, 0x54B, 0x54C, 0x54D, 0x54E, 0x54F, - 0x550, 0x551, 0x552, 0x553, 0x554, 0x555, 0x556, 0x557, - 0x558, 0x559, 0x55A, 0x55B, 0x55C, 0x55D, 0x55E, 0x55F, - 0x560, 0x561, 0x562, 0x563, 0x564, 0x565, 0x566, 0x567, - 0x568, 0x569, 0x56A, 0x56B, 0x56C, 0x56D, 0x56E, 0x56F, - 0x570, 0x571, 0x572, 0x573, 0x574, 0x575, 0x576, 0x577, - 0x578, 0x579, 0x57A, 0x57B, 0x57C, 0x57D, 0x57E, 0x57F, - 0x580, 0x581, 0x582, 0x583, 0x584, 0x585, 0x586, 0x587, - 0x588, 0x589, 0x58A, 0x58B, 0x58C, 0x58D, 0x58E, 0x58F, - 0x590, 0x591, 0x592, 0x593, 0x594, 0x595, 0x596, 0x597, - 0x598, 0x599, 0x59A, 0x59B, 0x59C, 0x59D, 0x59E, 0x59F, - 0x5A0, 0x5A1, 0x5A2, 0x5A3, 0x5A4, 0x5A5, 0x5A6, 0x5A7, - 0x5A8, 0x5A9, 0x5AA, 0x5AB, 0x5AC, 0x5AD, 0x5AE, 0x5AF, - 0x5B0, 0x5B1, 0x5B2, 0x5B3, 0x5B4, 0x5B5, 0x5B6, 0x5B7, - 0x5B8, 0x5B9, 0x5BA, 0x5BB, 0x5BC, 0x5BD, 0x5BE, 0x5BF, - 0x5C0, 0x5C1, 0x5C2, 0x5C3, 0x5C4, 0x5C5, 0x5C6, 0x5C7, - 0x5C8, 0x5C9, 0x5CA, 0x5CB, 0x5CC, 0x5CD, 0x5CE, 0x5CF, - 0x5D0, 0x5D1, 0x5D2, 0x5D3, 0x5D4, 0x5D5, 0x5D6, 0x5D7, - 0x5D8, 0x5D9, 0x5DA, 0x5DB, 0x5DC, 0x5DD, 0x5DE, 0x5DF, - 0x5E0, 0x5E1, 0x5E2, 0x5E3, 0x5E4, 0x5E5, 0x5E6, 0x5E7, - 0x5E8, 0x5E9, 0x5EA, 0x5EB, 0x5EC, 0x5ED, 0x5EE, 0x5EF, - 0x5F0, 0x5F1, 0x5F2, 0x5F3, 0x5F4, 0x5F5, 0x5F6, 0x5F7, - 0x5F8, 0x5F9, 0x5FA, 0x5FB, 0x5FC, 0x5FD, 0x5FE, 0x5FF, - 0x600, 0x601, 0x602, 0x603, 0x604, 0x605, 0x606, 0x607, - 0x608, 0x609, 0x60A, 0x60B, 0x60C, 0x60D, 0x60E, 0x60F, - 0x610, 0x611, 0x612, 0x613, 0x614, 0x615, 0x616, 0x617, - 0x618, 0x619, 0x61A, 0x61B, 0x61C, 0x61D, 0x61E, 0x61F, - 0x620, 0x621, 0x622, 0x623, 0x624, 0x625, 0x626, 0x627, - 0x628, 0x629, 0x62A, 0x62B, 0x62C, 0x62D, 0x62E, 0x62F, - 0x630, 0x631, 0x632, 0x633, 0x634, 0x635, 0x636, 0x637, - 0x638, 0x639, 0x63A, 0x63B, 0x63C, 0x63D, 0x63E, 0x63F, - 0x640, 0x641, 0x642, 0x643, 0x644, 0x645, 0x646, 0x647, - 0x648, 0x649, 0x64A, 0x64B, 0x64C, 0x64D, 0x64E, 0x64F, - 0x650, 0x651, 0x652, 0x653, 0x654, 0x655, 0x656, 0x657, - 0x658, 0x659, 0x65A, 0x65B, 0x65C, 0x65D, 0x65E, 0x65F, - 0x660, 0x661, 0x662, 0x663, 0x664, 0x665, 0x666, 0x667, - 0x668, 0x669, 0x66A, 0x66B, 0x66C, 0x66D, 0x66E, 0x66F, - 0x670, 0x671, 0x672, 0x673, 0x674, 0x675, 0x676, 0x677, - 0x678, 0x679, 0x67A, 0x67B, 0x67C, 0x67D, 0x67E, 0x67F, - 0x680, 0x681, 0x682, 0x683, 0x684, 0x685, 0x686, 0x687, - 0x688, 0x689, 0x68A, 0x68B, 0x68C, 0x68D, 0x68E, 0x68F, - 0x690, 0x691, 0x692, 0x693, 0x694, 0x695, 0x696, 0x697, - 0x698, 0x699, 0x69A, 0x69B, 0x69C, 0x69D, 0x69E, 0x69F, - 0x6A0, 0x6A1, 0x6A2, 0x6A3, 0x6A4, 0x6A5, 0x6A6, 0x6A7, - 0x6A8, 0x6A9, 0x6AA, 0x6AB, 0x6AC, 0x6AD, 0x6AE, 0x6AF, - 0x6B0, 0x6B1, 0x6B2, 0x6B3, 0x6B4, 0x6B5, 0x6B6, 0x6B7, - 0x6B8, 0x6B9, 0x6BA, 0x6BB, 0x6BC, 0x6BD, 0x6BE, 0x6BF, - 0x6C0, 0x6C1, 0x6C2, 0x6C3, 0x6C4, 0x6C5, 0x6C6, 0x6C7, - 0x6C8, 0x6C9, 0x6CA, 0x6CB, 0x6CC, 0x6CD, 0x6CE, 0x6CF, - 0x6D0, 0x6D1, 0x6D2, 0x6D3, 0x6D4, 0x6D5, 0x6D6, 0x6D7, - 0x6D8, 0x6D9, 0x6DA, 0x6DB, 0x6DC, 0x6DD, 0x6DE, 0x6DF, - 0x6E0, 0x6E1, 0x6E2, 0x6E3, 0x6E4, 0x6E5, 0x6E6, 0x6E7, - 0x6E8, 0x6E9, 0x6EA, 0x6EB, 0x6EC, 0x6ED, 0x6EE, 0x6EF, - 0x6F0, 0x6F1, 0x6F2, 0x6F3, 0x6F4, 0x6F5, 0x6F6, 0x6F7, - 0x6F8, 0x6F9, 0x6FA, 0x6FB, 0x6FC, 0x6FD, 0x6FE, 0x6FF, - 0x700, 0x701, 0x702, 0x703, 0x704, 0x705, 0x706, 0x707, - 0x708, 0x709, 0x70A, 0x70B, 0x70C, 0x70D, 0x70E, 0x70F, - 0x710, 0x711, 0x712, 0x713, 0x714, 0x715, 0x716, 0x717, - 0x718, 0x719, 0x71A, 0x71B, 0x71C, 0x71D, 0x71E, 0x71F, - 0x720, 0x721, 0x722, 0x723, 0x724, 0x725, 0x726, 0x727, - 0x728, 0x729, 0x72A, 0x72B, 0x72C, 0x72D, 0x72E, 0x72F, - 0x730, 0x731, 0x732, 0x733, 0x734, 0x735, 0x736, 0x737, - 0x738, 0x739, 0x73A, 0x73B, 0x73C, 0x73D, 0x73E, 0x73F, - 0x740, 0x741, 0x742, 0x743, 0x744, 0x745, 0x746, 0x747, - 0x748, 0x749, 0x74A, 0x74B, 0x74C, 0x74D, 0x74E, 0x74F, - 0x750, 0x751, 0x752, 0x753, 0x754, 0x755, 0x756, 0x757, - 0x758, 0x759, 0x75A, 0x75B, 0x75C, 0x75D, 0x75E, 0x75F, - 0x760, 0x761, 0x762, 0x763, 0x764, 0x765, 0x766, 0x767, - 0x768, 0x769, 0x76A, 0x76B, 0x76C, 0x76D, 0x76E, 0x76F, - 0x770, 0x771, 0x772, 0x773, 0x774, 0x775, 0x776, 0x777, - 0x778, 0x779, 0x77A, 0x77B, 0x77C, 0x77D, 0x77E, 0x77F, - 0x780, 0x781, 0x782, 0x783, 0x784, 0x785, 0x786, 0x787, - 0x788, 0x789, 0x78A, 0x78B, 0x78C, 0x78D, 0x78E, 0x78F, - 0x790, 0x791, 0x792, 0x793, 0x794, 0x795, 0x796, 0x797, - 0x798, 0x799, 0x79A, 0x79B, 0x79C, 0x79D, 0x79E, 0x79F, - 0x7A0, 0x7A1, 0x7A2, 0x7A3, 0x7A4, 0x7A5, 0x7A6, 0x7A7, - 0x7A8, 0x7A9, 0x7AA, 0x7AB, 0x7AC, 0x7AD, 0x7AE, 0x7AF, - 0x7B0, 0x7B1, 0x7B2, 0x7B3, 0x7B4, 0x7B5, 0x7B6, 0x7B7, - 0x7B8, 0x7B9, 0x7BA, 0x7BB, 0x7BC, 0x7BD, 0x7BE, 0x7BF, - 0x7C0, 0x7C1, 0x7C2, 0x7C3, 0x7C4, 0x7C5, 0x7C6, 0x7C7, - 0x7C8, 0x7C9, 0x7CA, 0x7CB, 0x7CC, 0x7CD, 0x7CE, 0x7CF, - 0x7D0, 0x7D1, 0x7D2, 0x7D3, 0x7D4, 0x7D5, 0x7D6, 0x7D7, - 0x7D8, 0x7D9, 0x7DA, 0x7DB, 0x7DC, 0x7DD, 0x7DE, 0x7DF, - 0x7E0, 0x7E1, 0x7E2, 0x7E3, 0x7E4, 0x7E5, 0x7E6, 0x7E7, - 0x7E8, 0x7E9, 0x7EA, 0x7EB, 0x7EC, 0x7ED, 0x7EE, 0x7EF, - 0x7F0, 0x7F1, 0x7F2, 0x7F3, 0x7F4, 0x7F5, 0x7F6, 0x7F7, - 0x7F8, 0x7F9, 0x7FA, 0x7FB, 0x7FC, 0x7FD, 0x7FE, 0x7FF, - 0x800, 0x801, 0x802, 0x803, 0x804, 0x805, 0x806, 0x807, - 0x808, 0x809, 0x80A, 0x80B, 0x80C, 0x80D, 0x80E, 0x80F, - 0x810, 0x811, 0x812, 0x813, 0x814, 0x815, 0x816, 0x817, - 0x818, 0x819, 0x81A, 0x81B, 0x81C, 0x81D, 0x81E, 0x81F, - 0x820, 0x821, 0x822, 0x823, 0x824, 0x825, 0x826, 0x827, - 0x828, 0x829, 0x82A, 0x82B, 0x82C, 0x82D, 0x82E, 0x82F, - 0x830, 0x831, 0x832, 0x833, 0x834, 0x835, 0x836, 0x837, - 0x838, 0x839, 0x83A, 0x83B, 0x83C, 0x83D, 0x83E, 0x83F, - 0x840, 0x841, 0x842, 0x843, 0x844, 0x845, 0x846, 0x847, - 0x848, 0x849, 0x84A, 0x84B, 0x84C, 0x84D, 0x84E, 0x84F, - 0x850, 0x851, 0x852, 0x853, 0x854, 0x855, 0x856, 0x857, - 0x858, 0x859, 0x85A, 0x85B, 0x85C, 0x85D, 0x85E, 0x85F, - 0x860, 0x861, 0x862, 0x863, 0x864, 0x865, 0x866, 0x867, - 0x868, 0x869, 0x86A, 0x86B, 0x86C, 0x86D, 0x86E, 0x86F, - 0x870, 0x871, 0x872, 0x873, 0x874, 0x875, 0x876, 0x877, - 0x878, 0x879, 0x87A, 0x87B, 0x87C, 0x87D, 0x87E, 0x87F, - 0x880, 0x881, 0x882, 0x883, 0x884, 0x885, 0x886, 0x887, - 0x888, 0x889, 0x88A, 0x88B, 0x88C, 0x88D, 0x88E, 0x88F, - 0x890, 0x891, 0x892, 0x893, 0x894, 0x895, 0x896, 0x897, - 0x898, 0x899, 0x89A, 0x89B, 0x89C, 0x89D, 0x89E, 0x89F, - 0x8A0, 0x8A1, 0x8A2, 0x8A3, 0x8A4, 0x8A5, 0x8A6, 0x8A7, - 0x8A8, 0x8A9, 0x8AA, 0x8AB, 0x8AC, 0x8AD, 0x8AE, 0x8AF, - 0x8B0, 0x8B1, 0x8B2, 0x8B3, 0x8B4, 0x8B5, 0x8B6, 0x8B7, - 0x8B8, 0x8B9, 0x8BA, 0x8BB, 0x8BC, 0x8BD, 0x8BE, 0x8BF, - 0x8C0, 0x8C1, 0x8C2, 0x8C3, 0x8C4, 0x8C5, 0x8C6, 0x8C7, - 0x8C8, 0x8C9, 0x8CA, 0x8CB, 0x8CC, 0x8CD, 0x8CE, 0x8CF, - 0x8D0, 0x8D1, 0x8D2, 0x8D3, 0x8D4, 0x8D5, 0x8D6, 0x8D7, - 0x8D8, 0x8D9, 0x8DA, 0x8DB, 0x8DC, 0x8DD, 0x8DE, 0x8DF, - 0x8E0, 0x8E1, 0x8E2, 0x8E3, 0x8E4, 0x8E5, 0x8E6, 0x8E7, - 0x8E8, 0x8E9, 0x8EA, 0x8EB, 0x8EC, 0x8ED, 0x8EE, 0x8EF, - 0x8F0, 0x8F1, 0x8F2, 0x8F3, 0x8F4, 0x8F5, 0x8F6, 0x8F7, - 0x8F8, 0x8F9, 0x8FA, 0x8FB, 0x8FC, 0x8FD, 0x8FE, 0x8FF, - 0x900, 0x901, 0x902, 0x903, 0x904, 0x905, 0x906, 0x907, - 0x908, 0x909, 0x90A, 0x90B, 0x90C, 0x90D, 0x90E, 0x90F, - 0x910, 0x911, 0x912, 0x913, 0x914, 0x915, 0x916, 0x917, - 0x918, 0x919, 0x91A, 0x91B, 0x91C, 0x91D, 0x91E, 0x91F, - 0x920, 0x921, 0x922, 0x923, 0x924, 0x925, 0x926, 0x927, - 0x928, 0x929, 0x92A, 0x92B, 0x92C, 0x92D, 0x92E, 0x92F, - 0x930, 0x931, 0x932, 0x933, 0x934, 0x935, 0x936, 0x937, - 0x938, 0x939, 0x93A, 0x93B, 0x93C, 0x93D, 0x93E, 0x93F, - 0x940, 0x941, 0x942, 0x943, 0x944, 0x945, 0x946, 0x947, - 0x948, 0x949, 0x94A, 0x94B, 0x94C, 0x94D, 0x94E, 0x94F, - 0x950, 0x951, 0x952, 0x953, 0x954, 0x955, 0x956, 0x957, - 0x958, 0x959, 0x95A, 0x95B, 0x95C, 0x95D, 0x95E, 0x95F, - 0x960, 0x961, 0x962, 0x963, 0x964, 0x965, 0x966, 0x967, - 0x968, 0x969, 0x96A, 0x96B, 0x96C, 0x96D, 0x96E, 0x96F, - 0x970, 0x971, 0x972, 0x973, 0x974, 0x975, 0x976, 0x977, - 0x978, 0x979, 0x97A, 0x97B, 0x97C, 0x97D, 0x97E, 0x97F, - 0x980, 0x981, 0x982, 0x983, 0x984, 0x985, 0x986, 0x987, - 0x988, 0x989, 0x98A, 0x98B, 0x98C, 0x98D, 0x98E, 0x98F, - 0x990, 0x991, 0x992, 0x993, 0x994, 0x995, 0x996, 0x997, - 0x998, 0x999, 0x99A, 0x99B, 0x99C, 0x99D, 0x99E, 0x99F, - 0x9A0, 0x9A1, 0x9A2, 0x9A3, 0x9A4, 0x9A5, 0x9A6, 0x9A7, - 0x9A8, 0x9A9, 0x9AA, 0x9AB, 0x9AC, 0x9AD, 0x9AE, 0x9AF, - 0x9B0, 0x9B1, 0x9B2, 0x9B3, 0x9B4, 0x9B5, 0x9B6, 0x9B7, - 0x9B8, 0x9B9, 0x9BA, 0x9BB, 0x9BC, 0x9BD, 0x9BE, 0x9BF, - 0x9C0, 0x9C1, 0x9C2, 0x9C3, 0x9C4, 0x9C5, 0x9C6, 0x9C7, - 0x9C8, 0x9C9, 0x9CA, 0x9CB, 0x9CC, 0x9CD, 0x9CE, 0x9CF, - 0x9D0, 0x9D1, 0x9D2, 0x9D3, 0x9D4, 0x9D5, 0x9D6, 0x9D7, - 0x9D8, 0x9D9, 0x9DA, 0x9DB, 0x9DC, 0x9DD, 0x9DE, 0x9DF, - 0x9E0, 0x9E1, 0x9E2, 0x9E3, 0x9E4, 0x9E5, 0x9E6, 0x9E7, - 0x9E8, 0x9E9, 0x9EA, 0x9EB, 0x9EC, 0x9ED, 0x9EE, 0x9EF, - 0x9F0, 0x9F1, 0x9F2, 0x9F3, 0x9F4, 0x9F5, 0x9F6, 0x9F7, - 0x9F8, 0x9F9, 0x9FA, 0x9FB, 0x9FC, 0x9FD, 0x9FE, 0x9FF, - 0xA00, 0xA01, 0xA02, 0xA03, 0xA04, 0xA05, 0xA06, 0xA07, - 0xA08, 0xA09, 0xA0A, 0xA0B, 0xA0C, 0xA0D, 0xA0E, 0xA0F, - 0xA10, 0xA11, 0xA12, 0xA13, 0xA14, 0xA15, 0xA16, 0xA17, - 0xA18, 0xA19, 0xA1A, 0xA1B, 0xA1C, 0xA1D, 0xA1E, 0xA1F, - 0xA20, 0xA21, 0xA22, 0xA23, 0xA24, 0xA25, 0xA26, 0xA27, - 0xA28, 0xA29, 0xA2A, 0xA2B, 0xA2C, 0xA2D, 0xA2E, 0xA2F, - 0xA30, 0xA31, 0xA32, 0xA33, 0xA34, 0xA35, 0xA36, 0xA37, - 0xA38, 0xA39, 0xA3A, 0xA3B, 0xA3C, 0xA3D, 0xA3E, 0xA3F, - 0xA40, 0xA41, 0xA42, 0xA43, 0xA44, 0xA45, 0xA46, 0xA47, - 0xA48, 0xA49, 0xA4A, 0xA4B, 0xA4C, 0xA4D, 0xA4E, 0xA4F, - 0xA50, 0xA51, 0xA52, 0xA53, 0xA54, 0xA55, 0xA56, 0xA57, - 0xA58, 0xA59, 0xA5A, 0xA5B, 0xA5C, 0xA5D, 0xA5E, 0xA5F, - 0xA60, 0xA61, 0xA62, 0xA63, 0xA64, 0xA65, 0xA66, 0xA67, - 0xA68, 0xA69, 0xA6A, 0xA6B, 0xA6C, 0xA6D, 0xA6E, 0xA6F, - 0xA70, 0xA71, 0xA72, 0xA73, 0xA74, 0xA75, 0xA76, 0xA77, - 0xA78, 0xA79, 0xA7A, 0xA7B, 0xA7C, 0xA7D, 0xA7E, 0xA7F, - 0xA80, 0xA81, 0xA82, 0xA83, 0xA84, 0xA85, 0xA86, 0xA87, - 0xA88, 0xA89, 0xA8A, 0xA8B, 0xA8C, 0xA8D, 0xA8E, 0xA8F, - 0xA90, 0xA91, 0xA92, 0xA93, 0xA94, 0xA95, 0xA96, 0xA97, - 0xA98, 0xA99, 0xA9A, 0xA9B, 0xA9C, 0xA9D, 0xA9E, 0xA9F, - 0xAA0, 0xAA1, 0xAA2, 0xAA3, 0xAA4, 0xAA5, 0xAA6, 0xAA7, - 0xAA8, 0xAA9, 0xAAA, 0xAAB, 0xAAC, 0xAAD, 0xAAE, 0xAAF, - 0xAB0, 0xAB1, 0xAB2, 0xAB3, 0xAB4, 0xAB5, 0xAB6, 0xAB7, - 0xAB8, 0xAB9, 0xABA, 0xABB, 0xABC, 0xABD, 0xABE, 0xABF, - 0xAC0, 0xAC1, 0xAC2, 0xAC3, 0xAC4, 0xAC5, 0xAC6, 0xAC7, - 0xAC8, 0xAC9, 0xACA, 0xACB, 0xACC, 0xACD, 0xACE, 0xACF, - 0xAD0, 0xAD1, 0xAD2, 0xAD3, 0xAD4, 0xAD5, 0xAD6, 0xAD7, - 0xAD8, 0xAD9, 0xADA, 0xADB, 0xADC, 0xADD, 0xADE, 0xADF, - 0xAE0, 0xAE1, 0xAE2, 0xAE3, 0xAE4, 0xAE5, 0xAE6, 0xAE7, - 0xAE8, 0xAE9, 0xAEA, 0xAEB, 0xAEC, 0xAED, 0xAEE, 0xAEF, - 0xAF0, 0xAF1, 0xAF2, 0xAF3, 0xAF4, 0xAF5, 0xAF6, 0xAF7, - 0xAF8, 0xAF9, 0xAFA, 0xAFB, 0xAFC, 0xAFD, 0xAFE, 0xAFF, - 0xB00, 0xB01, 0xB02, 0xB03, 0xB04, 0xB05, 0xB06, 0xB07, - 0xB08, 0xB09, 0xB0A, 0xB0B, 0xB0C, 0xB0D, 0xB0E, 0xB0F, - 0xB10, 0xB11, 0xB12, 0xB13, 0xB14, 0xB15, 0xB16, 0xB17, - 0xB18, 0xB19, 0xB1A, 0xB1B, 0xB1C, 0xB1D, 0xB1E, 0xB1F, - 0xB20, 0xB21, 0xB22, 0xB23, 0xB24, 0xB25, 0xB26, 0xB27, - 0xB28, 0xB29, 0xB2A, 0xB2B, 0xB2C, 0xB2D, 0xB2E, 0xB2F, - 0xB30, 0xB31, 0xB32, 0xB33, 0xB34, 0xB35, 0xB36, 0xB37, - 0xB38, 0xB39, 0xB3A, 0xB3B, 0xB3C, 0xB3D, 0xB3E, 0xB3F, - 0xB40, 0xB41, 0xB42, 0xB43, 0xB44, 0xB45, 0xB46, 0xB47, - 0xB48, 0xB49, 0xB4A, 0xB4B, 0xB4C, 0xB4D, 0xB4E, 0xB4F, - 0xB50, 0xB51, 0xB52, 0xB53, 0xB54, 0xB55, 0xB56, 0xB57, - 0xB58, 0xB59, 0xB5A, 0xB5B, 0xB5C, 0xB5D, 0xB5E, 0xB5F, - 0xB60, 0xB61, 0xB62, 0xB63, 0xB64, 0xB65, 0xB66, 0xB67, - 0xB68, 0xB69, 0xB6A, 0xB6B, 0xB6C, 0xB6D, 0xB6E, 0xB6F, - 0xB70, 0xB71, 0xB72, 0xB73, 0xB74, 0xB75, 0xB76, 0xB77, - 0xB78, 0xB79, 0xB7A, 0xB7B, 0xB7C, 0xB7D, 0xB7E, 0xB7F, - 0xB80, 0xB81, 0xB82, 0xB83, 0xB84, 0xB85, 0xB86, 0xB87, - 0xB88, 0xB89, 0xB8A, 0xB8B, 0xB8C, 0xB8D, 0xB8E, 0xB8F, - 0xB90, 0xB91, 0xB92, 0xB93, 0xB94, 0xB95, 0xB96, 0xB97, - 0xB98, 0xB99, 0xB9A, 0xB9B, 0xB9C, 0xB9D, 0xB9E, 0xB9F, - 0xBA0, 0xBA1, 0xBA2, 0xBA3, 0xBA4, 0xBA5, 0xBA6, 0xBA7, - 0xBA8, 0xBA9, 0xBAA, 0xBAB, 0xBAC, 0xBAD, 0xBAE, 0xBAF, - 0xBB0, 0xBB1, 0xBB2, 0xBB3, 0xBB4, 0xBB5, 0xBB6, 0xBB7, - 0xBB8, 0xBB9, 0xBBA, 0xBBB, 0xBBC, 0xBBD, 0xBBE, 0xBBF, - 0xBC0, 0xBC1, 0xBC2, 0xBC3, 0xBC4, 0xBC5, 0xBC6, 0xBC7, - 0xBC8, 0xBC9, 0xBCA, 0xBCB, 0xBCC, 0xBCD, 0xBCE, 0xBCF, - 0xBD0, 0xBD1, 0xBD2, 0xBD3, 0xBD4, 0xBD5, 0xBD6, 0xBD7, - 0xBD8, 0xBD9, 0xBDA, 0xBDB, 0xBDC, 0xBDD, 0xBDE, 0xBDF, - 0xBE0, 0xBE1, 0xBE2, 0xBE3, 0xBE4, 0xBE5, 0xBE6, 0xBE7, - 0xBE8, 0xBE9, 0xBEA, 0xBEB, 0xBEC, 0xBED, 0xBEE, 0xBEF, - 0xBF0, 0xBF1, 0xBF2, 0xBF3, 0xBF4, 0xBF5, 0xBF6, 0xBF7, - 0xBF8, 0xBF9, 0xBFA, 0xBFB, 0xBFC, 0xBFD, 0xBFE, 0xBFF, - 0xC00, 0xC01, 0xC02, 0xC03, 0xC04, 0xC05, 0xC06, 0xC07, - 0xC08, 0xC09, 0xC0A, 0xC0B, 0xC0C, 0xC0D, 0xC0E, 0xC0F, - 0xC10, 0xC11, 0xC12, 0xC13, 0xC14, 0xC15, 0xC16, 0xC17, - 0xC18, 0xC19, 0xC1A, 0xC1B, 0xC1C, 0xC1D, 0xC1E, 0xC1F, - 0xC20, 0xC21, 0xC22, 0xC23, 0xC24, 0xC25, 0xC26, 0xC27, - 0xC28, 0xC29, 0xC2A, 0xC2B, 0xC2C, 0xC2D, 0xC2E, 0xC2F, - 0xC30, 0xC31, 0xC32, 0xC33, 0xC34, 0xC35, 0xC36, 0xC37, - 0xC38, 0xC39, 0xC3A, 0xC3B, 0xC3C, 0xC3D, 0xC3E, 0xC3F, - 0xC40, 0xC41, 0xC42, 0xC43, 0xC44, 0xC45, 0xC46, 0xC47, - 0xC48, 0xC49, 0xC4A, 0xC4B, 0xC4C, 0xC4D, 0xC4E, 0xC4F, - 0xC50, 0xC51, 0xC52, 0xC53, 0xC54, 0xC55, 0xC56, 0xC57, - 0xC58, 0xC59, 0xC5A, 0xC5B, 0xC5C, 0xC5D, 0xC5E, 0xC5F, - 0xC60, 0xC61, 0xC62, 0xC63, 0xC64, 0xC65, 0xC66, 0xC67, - 0xC68, 0xC69, 0xC6A, 0xC6B, 0xC6C, 0xC6D, 0xC6E, 0xC6F, - 0xC70, 0xC71, 0xC72, 0xC73, 0xC74, 0xC75, 0xC76, 0xC77, - 0xC78, 0xC79, 0xC7A, 0xC7B, 0xC7C, 0xC7D, 0xC7E, 0xC7F, - 0xC80, 0xC81, 0xC82, 0xC83, 0xC84, 0xC85, 0xC86, 0xC87, - 0xC88, 0xC89, 0xC8A, 0xC8B, 0xC8C, 0xC8D, 0xC8E, 0xC8F, - 0xC90, 0xC91, 0xC92, 0xC93, 0xC94, 0xC95, 0xC96, 0xC97, - 0xC98, 0xC99, 0xC9A, 0xC9B, 0xC9C, 0xC9D, 0xC9E, 0xC9F, - 0xCA0, 0xCA1, 0xCA2, 0xCA3, 0xCA4, 0xCA5, 0xCA6, 0xCA7, - 0xCA8, 0xCA9, 0xCAA, 0xCAB, 0xCAC, 0xCAD, 0xCAE, 0xCAF, - 0xCB0, 0xCB1, 0xCB2, 0xCB3, 0xCB4, 0xCB5, 0xCB6, 0xCB7, - 0xCB8, 0xCB9, 0xCBA, 0xCBB, 0xCBC, 0xCBD, 0xCBE, 0xCBF, - 0xCC0, 0xCC1, 0xCC2, 0xCC3, 0xCC4, 0xCC5, 0xCC6, 0xCC7, - 0xCC8, 0xCC9, 0xCCA, 0xCCB, 0xCCC, 0xCCD, 0xCCE, 0xCCF, - 0xCD0, 0xCD1, 0xCD2, 0xCD3, 0xCD4, 0xCD5, 0xCD6, 0xCD7, - 0xCD8, 0xCD9, 0xCDA, 0xCDB, 0xCDC, 0xCDD, 0xCDE, 0xCDF, - 0xCE0, 0xCE1, 0xCE2, 0xCE3, 0xCE4, 0xCE5, 0xCE6, 0xCE7, - 0xCE8, 0xCE9, 0xCEA, 0xCEB, 0xCEC, 0xCED, 0xCEE, 0xCEF, - 0xCF0, 0xCF1, 0xCF2, 0xCF3, 0xCF4, 0xCF5, 0xCF6, 0xCF7, - 0xCF8, 0xCF9, 0xCFA, 0xCFB, 0xCFC, 0xCFD, 0xCFE, 0xCFF, - 0xD00, 0xD01, 0xD02, 0xD03, 0xD04, 0xD05, 0xD06, 0xD07, - 0xD08, 0xD09, 0xD0A, 0xD0B, 0xD0C, 0xD0D, 0xD0E, 0xD0F, - 0xD10, 0xD11, 0xD12, 0xD13, 0xD14, 0xD15, 0xD16, 0xD17, - 0xD18, 0xD19, 0xD1A, 0xD1B, 0xD1C, 0xD1D, 0xD1E, 0xD1F, - 0xD20, 0xD21, 0xD22, 0xD23, 0xD24, 0xD25, 0xD26, 0xD27, - 0xD28, 0xD29, 0xD2A, 0xD2B, 0xD2C, 0xD2D, 0xD2E, 0xD2F, - 0xD30, 0xD31, 0xD32, 0xD33, 0xD34, 0xD35, 0xD36, 0xD37, - 0xD38, 0xD39, 0xD3A, 0xD3B, 0xD3C, 0xD3D, 0xD3E, 0xD3F, - 0xD40, 0xD41, 0xD42, 0xD43, 0xD44, 0xD45, 0xD46, 0xD47, - 0xD48, 0xD49, 0xD4A, 0xD4B, 0xD4C, 0xD4D, 0xD4E, 0xD4F, - 0xD50, 0xD51, 0xD52, 0xD53, 0xD54, 0xD55, 0xD56, 0xD57, - 0xD58, 0xD59, 0xD5A, 0xD5B, 0xD5C, 0xD5D, 0xD5E, 0xD5F, - 0xD60, 0xD61, 0xD62, 0xD63, 0xD64, 0xD65, 0xD66, 0xD67, - 0xD68, 0xD69, 0xD6A, 0xD6B, 0xD6C, 0xD6D, 0xD6E, 0xD6F, - 0xD70, 0xD71, 0xD72, 0xD73, 0xD74, 0xD75, 0xD76, 0xD77, - 0xD78, 0xD79, 0xD7A, 0xD7B, 0xD7C, 0xD7D, 0xD7E, 0xD7F, - 0xD80, 0xD81, 0xD82, 0xD83, 0xD84, 0xD85, 0xD86, 0xD87, - 0xD88, 0xD89, 0xD8A, 0xD8B, 0xD8C, 0xD8D, 0xD8E, 0xD8F, - 0xD90, 0xD91, 0xD92, 0xD93, 0xD94, 0xD95, 0xD96, 0xD97, - 0xD98, 0xD99, 0xD9A, 0xD9B, 0xD9C, 0xD9D, 0xD9E, 0xD9F, - 0xDA0, 0xDA1, 0xDA2, 0xDA3, 0xDA4, 0xDA5, 0xDA6, 0xDA7, - 0xDA8, 0xDA9, 0xDAA, 0xDAB, 0xDAC, 0xDAD, 0xDAE, 0xDAF, - 0xDB0, 0xDB1, 0xDB2, 0xDB3, 0xDB4, 0xDB5, 0xDB6, 0xDB7, - 0xDB8, 0xDB9, 0xDBA, 0xDBB, 0xDBC, 0xDBD, 0xDBE, 0xDBF, - 0xDC0, 0xDC1, 0xDC2, 0xDC3, 0xDC4, 0xDC5, 0xDC6, 0xDC7, - 0xDC8, 0xDC9, 0xDCA, 0xDCB, 0xDCC, 0xDCD, 0xDCE, 0xDCF, - 0xDD0, 0xDD1, 0xDD2, 0xDD3, 0xDD4, 0xDD5, 0xDD6, 0xDD7, - 0xDD8, 0xDD9, 0xDDA, 0xDDB, 0xDDC, 0xDDD, 0xDDE, 0xDDF, - 0xDE0, 0xDE1, 0xDE2, 0xDE3, 0xDE4, 0xDE5, 0xDE6, 0xDE7, - 0xDE8, 0xDE9, 0xDEA, 0xDEB, 0xDEC, 0xDED, 0xDEE, 0xDEF, - 0xDF0, 0xDF1, 0xDF2, 0xDF3, 0xDF4, 0xDF5, 0xDF6, 0xDF7, - 0xDF8, 0xDF9, 0xDFA, 0xDFB, 0xDFC, 0xDFD, 0xDFE, 0xDFF, - 0xE00, 0xE01, 0xE02, 0xE03, 0xE04, 0xE05, 0xE06, 0xE07, - 0xE08, 0xE09, 0xE0A, 0xE0B, 0xE0C, 0xE0D, 0xE0E, 0xE0F, - 0xE10, 0xE11, 0xE12, 0xE13, 0xE14, 0xE15, 0xE16, 0xE17, - 0xE18, 0xE19, 0xE1A, 0xE1B, 0xE1C, 0xE1D, 0xE1E, 0xE1F, - 0xE20, 0xE21, 0xE22, 0xE23, 0xE24, 0xE25, 0xE26, 0xE27, - 0xE28, 0xE29, 0xE2A, 0xE2B, 0xE2C, 0xE2D, 0xE2E, 0xE2F, - 0xE30, 0xE31, 0xE32, 0xE33, 0xE34, 0xE35, 0xE36, 0xE37, - 0xE38, 0xE39, 0xE3A, 0xE3B, 0xE3C, 0xE3D, 0xE3E, 0xE3F, - 0xE40, 0xE41, 0xE42, 0xE43, 0xE44, 0xE45, 0xE46, 0xE47, - 0xE48, 0xE49, 0xE4A, 0xE4B, 0xE4C, 0xE4D, 0xE4E, 0xE4F, - 0xE50, 0xE51, 0xE52, 0xE53, 0xE54, 0xE55, 0xE56, 0xE57, - 0xE58, 0xE59, 0xE5A, 0xE5B, 0xE5C, 0xE5D, 0xE5E, 0xE5F, - 0xE60, 0xE61, 0xE62, 0xE63, 0xE64, 0xE65, 0xE66, 0xE67, - 0xE68, 0xE69, 0xE6A, 0xE6B, 0xE6C, 0xE6D, 0xE6E, 0xE6F, - 0xE70, 0xE71, 0xE72, 0xE73, 0xE74, 0xE75, 0xE76, 0xE77, - 0xE78, 0xE79, 0xE7A, 0xE7B, 0xE7C, 0xE7D, 0xE7E, 0xE7F, - 0xE80, 0xE81, 0xE82, 0xE83, 0xE84, 0xE85, 0xE86, 0xE87, - 0xE88, 0xE89, 0xE8A, 0xE8B, 0xE8C, 0xE8D, 0xE8E, 0xE8F, - 0xE90, 0xE91, 0xE92, 0xE93, 0xE94, 0xE95, 0xE96, 0xE97, - 0xE98, 0xE99, 0xE9A, 0xE9B, 0xE9C, 0xE9D, 0xE9E, 0xE9F, - 0xEA0, 0xEA1, 0xEA2, 0xEA3, 0xEA4, 0xEA5, 0xEA6, 0xEA7, - 0xEA8, 0xEA9, 0xEAA, 0xEAB, 0xEAC, 0xEAD, 0xEAE, 0xEAF, - 0xEB0, 0xEB1, 0xEB2, 0xEB3, 0xEB4, 0xEB5, 0xEB6, 0xEB7, - 0xEB8, 0xEB9, 0xEBA, 0xEBB, 0xEBC, 0xEBD, 0xEBE, 0xEBF, - 0xEC0, 0xEC1, 0xEC2, 0xEC3, 0xEC4, 0xEC5, 0xEC6, 0xEC7, - 0xEC8, 0xEC9, 0xECA, 0xECB, 0xECC, 0xECD, 0xECE, 0xECF, - 0xED0, 0xED1, 0xED2, 0xED3, 0xED4, 0xED5, 0xED6, 0xED7, - 0xED8, 0xED9, 0xEDA, 0xEDB, 0xEDC, 0xEDD, 0xEDE, 0xEDF, - 0xEE0, 0xEE1, 0xEE2, 0xEE3, 0xEE4, 0xEE5, 0xEE6, 0xEE7, - 0xEE8, 0xEE9, 0xEEA, 0xEEB, 0xEEC, 0xEED, 0xEEE, 0xEEF, - 0xEF0, 0xEF1, 0xEF2, 0xEF3, 0xEF4, 0xEF5, 0xEF6, 0xEF7, - 0xEF8, 0xEF9, 0xEFA, 0xEFB, 0xEFC, 0xEFD, 0xEFE, 0xEFF, - 0xF00, 0xF01, 0xF02, 0xF03, 0xF04, 0xF05, 0xF06, 0xF07, - 0xF08, 0xF09, 0xF0A, 0xF0B, 0xF0C, 0xF0D, 0xF0E, 0xF0F, - 0xF10, 0xF11, 0xF12, 0xF13, 0xF14, 0xF15, 0xF16, 0xF17, - 0xF18, 0xF19, 0xF1A, 0xF1B, 0xF1C, 0xF1D, 0xF1E, 0xF1F, - 0xF20, 0xF21, 0xF22, 0xF23, 0xF24, 0xF25, 0xF26, 0xF27, - 0xF28, 0xF29, 0xF2A, 0xF2B, 0xF2C, 0xF2D, 0xF2E, 0xF2F, - 0xF30, 0xF31, 0xF32, 0xF33, 0xF34, 0xF35, 0xF36, 0xF37, - 0xF38, 0xF39, 0xF3A, 0xF3B, 0xF3C, 0xF3D, 0xF3E, 0xF3F, - 0xF40, 0xF41, 0xF42, 0xF43, 0xF44, 0xF45, 0xF46, 0xF47, - 0xF48, 0xF49, 0xF4A, 0xF4B, 0xF4C, 0xF4D, 0xF4E, 0xF4F, - 0xF50, 0xF51, 0xF52, 0xF53, 0xF54, 0xF55, 0xF56, 0xF57, - 0xF58, 0xF59, 0xF5A, 0xF5B, 0xF5C, 0xF5D, 0xF5E, 0xF5F, - 0xF60, 0xF61, 0xF62, 0xF63, 0xF64, 0xF65, 0xF66, 0xF67, - 0xF68, 0xF69, 0xF6A, 0xF6B, 0xF6C, 0xF6D, 0xF6E, 0xF6F, - 0xF70, 0xF71, 0xF72, 0xF73, 0xF74, 0xF75, 0xF76, 0xF77, - 0xF78, 0xF79, 0xF7A, 0xF7B, 0xF7C, 0xF7D, 0xF7E, 0xF7F, - 0xF80, 0xF81, 0xF82, 0xF83, 0xF84, 0xF85, 0xF86, 0xF87, - 0xF88, 0xF89, 0xF8A, 0xF8B, 0xF8C, 0xF8D, 0xF8E, 0xF8F, - 0xF90, 0xF91, 0xF92, 0xF93, 0xF94, 0xF95, 0xF96, 0xF97, - 0xF98, 0xF99, 0xF9A, 0xF9B, 0xF9C, 0xF9D, 0xF9E, 0xF9F, - 0xFA0, 0xFA1, 0xFA2, 0xFA3, 0xFA4, 0xFA5, 0xFA6, 0xFA7, - 0xFA8, 0xFA9, 0xFAA, 0xFAB, 0xFAC, 0xFAD, 0xFAE, 0xFAF, - 0xFB0, 0xFB1, 0xFB2, 0xFB3, 0xFB4, 0xFB5, 0xFB6, 0xFB7, - 0xFB8, 0xFB9, 0xFBA, 0xFBB, 0xFBC, 0xFBD, 0xFBE, 0xFBF, - 0xFC0, 0xFC1, 0xFC2, 0xFC3, 0xFC4, 0xFC5, 0xFC6, 0xFC7, - 0xFC8, 0xFC9, 0xFCA, 0xFCB, 0xFCC, 0xFCD, 0xFCE, 0xFCF, - 0xFD0, 0xFD1, 0xFD2, 0xFD3, 0xFD4, 0xFD5, 0xFD6, 0xFD7, - 0xFD8, 0xFD9, 0xFDA, 0xFDB, 0xFDC, 0xFDD, 0xFDE, 0xFDF, - 0xFE0, 0xFE1, 0xFE2, 0xFE3, 0xFE4, 0xFE5, 0xFE6, 0xFE7, - 0xFE8, 0xFE9, 0xFEA, 0xFEB, 0xFEC, 0xFED, 0xFEE, 0xFEF, - 0xFF0, 0xFF1, 0xFF2, 0xFF3, 0xFF4, 0xFF5, 0xFF6, 0xFF7, - 0xFF8, 0xFF9, 0xFFA, 0xFFB, 0xFFC, 0xFFD, 0xFFE, 0xFFF - }, - new int[] { - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x070, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0C0, - 0x000, 0x0C0, 0x0C0, 0x0E0, 0x0E0, 0x0F0, 0x0F0, 0x0FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x040, 0x060, 0x060, 0x070, 0x0F0, 0x0FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x070, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x100, 0x100, 0x180, 0x180, 0x180, - 0x100, 0x180, 0x180, 0x180, 0x180, 0x1C0, 0x1C0, 0x1C0, - 0x1C0, 0x1C0, 0x1E0, 0x1E0, 0x1E0, 0x3F0, 0x3F8, 0x3FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x040, 0x060, 0x070, 0x070, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x0C0, 0x0C0, - 0x0C0, 0x0C0, 0x0C0, 0x1E0, 0x1E0, 0x1F0, 0x1F8, 0x1FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x040, 0x040, 0x0E0, 0x0E0, 0x0F0, 0x0F0, 0x0FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x020, 0x070, 0x070, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x200, 0x200, - 0x200, 0x200, 0x300, 0x300, 0x300, 0x300, 0x300, 0x31C, - 0x200, 0x300, 0x300, 0x300, 0x300, 0x300, 0x300, 0x300, - 0x300, 0x300, 0x380, 0x380, 0x380, 0x380, 0x380, 0x388, - 0x380, 0x380, 0x380, 0x3C0, 0x3C0, 0x3C0, 0x3C0, 0x7C0, - 0x3C0, 0x7C0, 0x7E0, 0x7E0, 0x7E0, 0x7F0, 0x7F8, 0x7FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x070, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0C0, - 0x000, 0x0C0, 0x0C0, 0x0E0, 0x0E0, 0x0F0, 0x0F0, 0x0FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x040, 0x060, 0x060, 0x070, 0x0F0, 0x0FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x060, 0x070, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x100, 0x100, 0x180, 0x180, 0x180, - 0x100, 0x180, 0x180, 0x180, 0x180, 0x1C0, 0x1C0, 0x1C0, - 0x1C0, 0x1C0, 0x1E0, 0x1E0, 0x1E0, 0x3F0, 0x3F8, 0x3FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x040, 0x060, 0x070, 0x070, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x080, 0x000, 0x080, 0x0C0, 0x0C0, - 0x0C0, 0x0C0, 0x0C0, 0x1E0, 0x1E0, 0x1F0, 0x1F8, 0x1FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x020, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x010, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x040, 0x040, 0x0E0, 0x0E0, 0x0F0, 0x0F0, 0x0FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x020, 0x070, 0x070, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x030, 0x03C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x200, 0x200, 0x200, - 0x200, 0x200, 0x300, 0x300, 0x300, 0x300, 0x300, 0x31C, - 0x200, 0x300, 0x300, 0x300, 0x300, 0x300, 0x300, 0x300, - 0x300, 0x300, 0x380, 0x380, 0x380, 0x380, 0x380, 0x388, - 0x380, 0x380, 0x380, 0x3C0, 0x3C0, 0x3C0, 0x3C0, 0x7C0, - 0x3C0, 0x7C0, 0x7E0, 0x7E0, 0x7E0, 0x7F0, 0x7F8, 0x7FC - }, - new int[] { - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, - 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF, 0xFFF - }, - new int[] { - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000 - }, - new int[] { - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x003, 0x000, 0x000, 0x00E, 0x07F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x06F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x077, - 0x000, 0x000, 0x000, 0x0FB, 0x000, 0x0FD, 0x1FE, 0x1FF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x02F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x077, - 0x000, 0x000, 0x000, 0x0FB, 0x000, 0x0FD, 0x0FE, 0x2FF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x037, - 0x000, 0x000, 0x000, 0x07B, 0x000, 0x07D, 0x17E, 0x37F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x017, - 0x000, 0x000, 0x000, 0x0BB, 0x000, 0x3BD, 0x3BE, 0x3BF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x107, - 0x000, 0x000, 0x000, 0x3DB, 0x000, 0x3DD, 0x3DE, 0x3DF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x3C3, - 0x000, 0x000, 0x000, 0x3E1, 0x000, 0x3E8, 0x3EC, 0x3EF, - 0x000, 0x000, 0x000, 0x3F0, 0x300, 0x3F0, 0x3F0, 0x3F7, - 0x380, 0x3F8, 0x3F8, 0x3FB, 0x3F8, 0x3FD, 0x3FE, 0x3FF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x03F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x003, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x037, - 0x000, 0x000, 0x000, 0x07B, 0x000, 0x0FD, 0x0FE, 0x4FF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x017, - 0x000, 0x000, 0x000, 0x03B, 0x000, 0x07D, 0x07E, 0x57F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x01B, 0x000, 0x4BD, 0x5BE, 0x5BF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x407, - 0x000, 0x000, 0x000, 0x503, 0x000, 0x5DD, 0x5DE, 0x5DF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x503, - 0x000, 0x000, 0x000, 0x5C0, 0x000, 0x5E0, 0x5EC, 0x5EF, - 0x000, 0x000, 0x400, 0x5E0, 0x400, 0x5F0, 0x5F0, 0x5F7, - 0x500, 0x5F0, 0x5F8, 0x5FB, 0x5F8, 0x5FD, 0x5FE, 0x5FF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x01B, 0x000, 0x43D, 0x47E, 0x67F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x00F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x407, - 0x000, 0x000, 0x000, 0x403, 0x000, 0x61D, 0x6BE, 0x6BF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x407, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x403, - 0x000, 0x000, 0x000, 0x601, 0x000, 0x680, 0x6DC, 0x6DF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x601, - 0x000, 0x000, 0x000, 0x680, 0x400, 0x6C0, 0x6E0, 0x6EF, - 0x000, 0x400, 0x400, 0x6C0, 0x600, 0x6E0, 0x6F0, 0x6F7, - 0x600, 0x6F0, 0x6F0, 0x6FB, 0x6F8, 0x6FD, 0x6FE, 0x6FF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x007, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x407, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x403, - 0x000, 0x000, 0x000, 0x603, 0x000, 0x600, 0x71E, 0x73F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x403, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x601, - 0x000, 0x000, 0x400, 0x700, 0x400, 0x700, 0x700, 0x75F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x700, - 0x000, 0x400, 0x400, 0x700, 0x600, 0x700, 0x740, 0x76F, - 0x000, 0x400, 0x600, 0x700, 0x600, 0x740, 0x760, 0x777, - 0x700, 0x760, 0x770, 0x77B, 0x770, 0x77D, 0x77E, 0x77F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x601, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x400, 0x400, 0x700, - 0x000, 0x400, 0x400, 0x700, 0x600, 0x780, 0x780, 0x79F, - 0x000, 0x000, 0x000, 0x400, 0x000, 0x400, 0x400, 0x700, - 0x000, 0x400, 0x600, 0x780, 0x600, 0x780, 0x780, 0x7AF, - 0x000, 0x600, 0x600, 0x780, 0x700, 0x780, 0x780, 0x7B7, - 0x700, 0x780, 0x7A0, 0x7BB, 0x7B0, 0x7BD, 0x7BE, 0x7BF, - 0x000, 0x000, 0x000, 0x400, 0x000, 0x600, 0x600, 0x700, - 0x400, 0x600, 0x600, 0x780, 0x700, 0x780, 0x7C0, 0x7CF, - 0x400, 0x600, 0x700, 0x780, 0x700, 0x7C0, 0x7C0, 0x7D7, - 0x700, 0x7C0, 0x7C0, 0x7DB, 0x7C0, 0x7DD, 0x7DE, 0x7DF, - 0x400, 0x700, 0x700, 0x7C0, 0x700, 0x7C0, 0x7C0, 0x7E7, - 0x780, 0x7C0, 0x7E0, 0x7EB, 0x7E0, 0x7ED, 0x7EE, 0x7EF, - 0x780, 0x7E0, 0x7E0, 0x7F3, 0x7E0, 0x7F5, 0x7F6, 0x7F7, - 0x7F0, 0x7F8, 0x7FA, 0x7FB, 0x7FC, 0x7FD, 0x7FE, 0x7FF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x807, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x803, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x801, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x83F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x803, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x801, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, - 0x000, 0x000, 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x837, - 0x800, 0x800, 0x800, 0x87B, 0x800, 0x8FD, 0x8FE, 0x8FF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x801, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, - 0x000, 0x000, 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x817, - 0x800, 0x800, 0x800, 0x83B, 0x800, 0x87D, 0x87E, 0x97F, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0x81B, 0x800, 0x9BD, 0x9BE, 0x9BF, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0x903, 0x800, 0x9DC, 0x9DE, 0x9DF, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x903, - 0x800, 0x800, 0x800, 0x9C0, 0x800, 0x9E0, 0x9E8, 0x9EF, - 0x800, 0x800, 0x800, 0x9E0, 0x800, 0x9F0, 0x9F0, 0x9F7, - 0x900, 0x9F0, 0x9F8, 0x9FB, 0x9F8, 0x9FD, 0x9FE, 0x9FF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, - 0x000, 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x801, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x81F, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0x81B, 0x800, 0x83D, 0xA7E, 0xA7F, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0xA03, 0x800, 0xA1D, 0xABE, 0xABF, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA03, - 0x800, 0x800, 0x800, 0xA01, 0x800, 0xA80, 0xADC, 0xADF, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA01, - 0x800, 0x800, 0x800, 0xA80, 0x800, 0xAC0, 0xAE0, 0xAEF, - 0x800, 0x800, 0xA00, 0xAC0, 0xA00, 0xAE0, 0xAF0, 0xAF7, - 0xA00, 0xAF0, 0xAF0, 0xAFB, 0xAF8, 0xAFD, 0xAFE, 0xAFF, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA03, - 0x800, 0x800, 0x800, 0xA01, 0x800, 0xB00, 0xB1C, 0xB3F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA03, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA01, - 0x800, 0x800, 0x800, 0xB00, 0x800, 0xB00, 0xB00, 0xB5F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xB00, - 0x800, 0x800, 0x800, 0xB00, 0xA00, 0xB00, 0xB40, 0xB6F, - 0x800, 0xA00, 0xA00, 0xB00, 0xA00, 0xB40, 0xB60, 0xB77, - 0xB00, 0xB60, 0xB70, 0xB7B, 0xB70, 0xB7D, 0xB7E, 0xB7F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA01, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xB00, - 0x800, 0x800, 0x800, 0xB00, 0xA00, 0xB80, 0xB80, 0xB9F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xA00, 0xB00, - 0x800, 0xA00, 0xA00, 0xB80, 0xA00, 0xB80, 0xB80, 0xBAF, - 0x800, 0xA00, 0xA00, 0xB80, 0xB00, 0xB80, 0xB80, 0xBB7, - 0xB00, 0xB80, 0xBA0, 0xBBB, 0xBB0, 0xBBD, 0xBBE, 0xBBF, - 0x800, 0x800, 0x800, 0xA00, 0x800, 0xA00, 0xA00, 0xB00, - 0x800, 0xA00, 0xA00, 0xB80, 0xB00, 0xB80, 0xBC0, 0xBCF, - 0x800, 0xA00, 0xB00, 0xB80, 0xB00, 0xBC0, 0xBC0, 0xBD7, - 0xB00, 0xBC0, 0xBC0, 0xBDB, 0xBC0, 0xBDD, 0xBDE, 0xBDF, - 0xA00, 0xB00, 0xB00, 0xBC0, 0xB00, 0xBC0, 0xBC0, 0xBE7, - 0xB80, 0xBC0, 0xBE0, 0xBEB, 0xBE0, 0xBED, 0xBEE, 0xBEF, - 0xB80, 0xBE0, 0xBE0, 0xBF3, 0xBE0, 0xBF5, 0xBF6, 0xBF7, - 0xBF0, 0xBF8, 0xBFA, 0xBFB, 0xBFC, 0xBFD, 0xBFE, 0xBFF, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x000, 0x000, 0x000, 0x800, 0x000, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x80F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC07, - 0x800, 0x800, 0x800, 0xC0B, 0x800, 0xC1D, 0xC3E, 0xC7F, - 0x000, 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x807, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC07, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03, - 0x800, 0x800, 0x800, 0xC03, 0x800, 0xC00, 0xC1E, 0xCBF, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC01, - 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xC00, 0xC00, 0xCDF, - 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC00, 0xC00, - 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xC80, 0xCC0, 0xCEF, - 0x800, 0xC00, 0xC00, 0xC80, 0xC00, 0xCC0, 0xCE0, 0xCF7, - 0xC00, 0xCE0, 0xCF0, 0xCFB, 0xCF0, 0xCFD, 0xCFE, 0xCFF, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC07, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03, - 0x800, 0x800, 0xC00, 0xC01, 0xC00, 0xC00, 0xC00, 0xD3F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC03, - 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC00, 0xC01, - 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xD00, 0xD00, 0xD5F, - 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xC00, - 0x800, 0xC00, 0xC00, 0xD00, 0xC00, 0xD00, 0xD00, 0xD6F, - 0xC00, 0xC00, 0xC00, 0xD00, 0xC00, 0xD00, 0xD40, 0xD77, - 0xC00, 0xD40, 0xD60, 0xD7B, 0xD70, 0xD7D, 0xD7E, 0xD7F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xC01, - 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xC00, - 0x800, 0xC00, 0xC00, 0xD00, 0xC00, 0xD00, 0xD00, 0xD9F, - 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xD00, - 0xC00, 0xC00, 0xC00, 0xD00, 0xC00, 0xD80, 0xD80, 0xDAF, - 0xC00, 0xC00, 0xC00, 0xD80, 0xC00, 0xD80, 0xD80, 0xDB7, - 0xD00, 0xD80, 0xD80, 0xDBB, 0xDA0, 0xDBD, 0xDBE, 0xDBF, - 0x800, 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xC00, 0xD00, - 0xC00, 0xC00, 0xC00, 0xD00, 0xC00, 0xD80, 0xD80, 0xDCF, - 0xC00, 0xC00, 0xC00, 0xD80, 0xD00, 0xD80, 0xDC0, 0xDD7, - 0xD00, 0xDC0, 0xDC0, 0xDDB, 0xDC0, 0xDDD, 0xDDE, 0xDDF, - 0xC00, 0xD00, 0xD00, 0xD80, 0xD00, 0xDC0, 0xDC0, 0xDE7, - 0xD00, 0xDC0, 0xDC0, 0xDEB, 0xDE0, 0xDED, 0xDEE, 0xDEF, - 0xD80, 0xDC0, 0xDE0, 0xDF3, 0xDE0, 0xDF5, 0xDF6, 0xDF7, - 0xDE0, 0xDF8, 0xDFA, 0xDFB, 0xDFC, 0xDFD, 0xDFE, 0xDFF, - 0x000, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC07, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC03, - 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC00, 0xE01, - 0x800, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xE3F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, - 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, 0xC00, 0xE01, - 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00, - 0x800, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xE5F, - 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00, - 0xC00, 0xC00, 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE6F, - 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE77, - 0xE00, 0xE00, 0xE40, 0xE7B, 0xE60, 0xE7D, 0xE7E, 0xE7F, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, - 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00, - 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00, - 0xC00, 0xC00, 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE9F, - 0x800, 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xE00, 0xE00, - 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE80, 0xEAF, - 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE80, 0xE80, 0xEB7, - 0xE00, 0xE80, 0xE80, 0xEBB, 0xE80, 0xEBD, 0xEBE, 0xEBF, - 0x800, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xE00, - 0xC00, 0xE00, 0xE00, 0xE00, 0xE00, 0xE80, 0xE80, 0xECF, - 0xC00, 0xE00, 0xE00, 0xE80, 0xE00, 0xE80, 0xE80, 0xED7, - 0xE00, 0xE80, 0xEC0, 0xEDB, 0xEC0, 0xEDD, 0xEDE, 0xEDF, - 0xE00, 0xE00, 0xE00, 0xE80, 0xE00, 0xE80, 0xEC0, 0xEE7, - 0xE00, 0xEC0, 0xEC0, 0xEEB, 0xEC0, 0xEED, 0xEEE, 0xEEF, - 0xE80, 0xEC0, 0xEC0, 0xEF3, 0xEE0, 0xEF4, 0xEF6, 0xEF7, - 0xEE0, 0xEF8, 0xEF8, 0xEFB, 0xEFC, 0xEFD, 0xEFE, 0xEFF, - 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0x800, 0xC00, - 0x800, 0x800, 0x800, 0xC00, 0x800, 0xC00, 0xC00, 0xE00, - 0x800, 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xC00, 0xE00, - 0xC00, 0xE00, 0xE00, 0xF00, 0xE00, 0xF00, 0xF00, 0xF1F, - 0x800, 0xC00, 0xC00, 0xC00, 0xC00, 0xE00, 0xE00, 0xF00, - 0xC00, 0xE00, 0xE00, 0xF00, 0xE00, 0xF00, 0xF00, 0xF2F, - 0xC00, 0xE00, 0xE00, 0xF00, 0xE00, 0xF00, 0xF00, 0xF37, - 0xF00, 0xF00, 0xF00, 0xF3B, 0xF00, 0xF3D, 0xF3E, 0xF3F, - 0x800, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xF00, - 0xC00, 0xE00, 0xE00, 0xF00, 0xE00, 0xF00, 0xF00, 0xF4F, - 0xE00, 0xE00, 0xE00, 0xF00, 0xF00, 0xF00, 0xF00, 0xF57, - 0xF00, 0xF00, 0xF00, 0xF5B, 0xF40, 0xF5D, 0xF5E, 0xF5F, - 0xE00, 0xF00, 0xF00, 0xF00, 0xF00, 0xF00, 0xF00, 0xF67, - 0xF00, 0xF00, 0xF40, 0xF6B, 0xF40, 0xF6D, 0xF6E, 0xF6F, - 0xF00, 0xF40, 0xF40, 0xF71, 0xF40, 0xF74, 0xF74, 0xF77, - 0xF60, 0xF78, 0xF78, 0xF7B, 0xF7C, 0xF7D, 0xF7E, 0xF7F, - 0xC00, 0xC00, 0xC00, 0xE00, 0xC00, 0xE00, 0xE00, 0xF00, - 0xE00, 0xE00, 0xE00, 0xF00, 0xF00, 0xF80, 0xF80, 0xF8F, - 0xE00, 0xE00, 0xF00, 0xF80, 0xF00, 0xF80, 0xF80, 0xF97, - 0xF00, 0xF80, 0xF80, 0xF9B, 0xF80, 0xF9D, 0xF9E, 0xF9F, - 0xE00, 0xF00, 0xF00, 0xF80, 0xF00, 0xF80, 0xF80, 0xFA7, - 0xF00, 0xF80, 0xF80, 0xFA9, 0xF80, 0xFAC, 0xFAC, 0xFAF, - 0xF80, 0xF80, 0xF80, 0xFB0, 0xF80, 0xFB0, 0xFB4, 0xFB7, - 0xF80, 0xFB8, 0xFB8, 0xFBB, 0xFBC, 0xFBD, 0xFBE, 0xFBF, - 0xE00, 0xF00, 0xF00, 0xF80, 0xF00, 0xF80, 0xF80, 0xFC1, - 0xF00, 0xF80, 0xFC0, 0xFC0, 0xFC0, 0xFC0, 0xFC8, 0xFCF, - 0xF80, 0xFC0, 0xFC0, 0xFD0, 0xFC0, 0xFD0, 0xFD0, 0xFD7, - 0xFC0, 0xFD0, 0xFD8, 0xFDB, 0xFD8, 0xFDD, 0xFDE, 0xFDF, - 0xF80, 0xFC0, 0xFC0, 0xFE0, 0xFC0, 0xFE0, 0xFE0, 0xFE7, - 0xFC0, 0xFE0, 0xFE8, 0xFEB, 0xFE8, 0xFED, 0xFEE, 0xFEF, - 0xFE0, 0xFF0, 0xFF0, 0xFF3, 0xFF0, 0xFF5, 0xFF6, 0xFF7, - 0xFF8, 0xFF9, 0xFFA, 0xFFB, 0xFFC, 0xFFD, 0xFFE, 0xFFF - }, - new int[] { - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x780, - 0x000, 0x000, 0x000, 0x7C0, 0x380, 0x7E0, 0x7F0, 0x7FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x018, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x0FC, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x07C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x01C, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x008, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, - 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x780, - 0x000, 0x000, 0x000, 0x7C0, 0x380, 0x7E0, 0x7F0, 0x7FC - } - }; - - static public Sid Create(int newSampleRate, int clockFrqNum, int clockFrqDen) - { - return new Sid(waveTable, (uint)newSampleRate, (uint)clockFrqNum, (uint)clockFrqDen); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOSPLA.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOSPLA.cs deleted file mode 100644 index 185fac7a66..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/MOSPLA.cs +++ /dev/null @@ -1,353 +0,0 @@ -using System; -using BizHawk.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // emulates the PLA - // which handles all bank switching - - sealed public class MOSPLA - { - // ------------------------------------ - - public Func PeekBasicRom; - public Func PeekCartridgeLo; - public Func PeekCartridgeHi; - public Func PeekCharRom; - public Func PeekCia0; - public Func PeekCia1; - public Func PeekColorRam; - public Func PeekExpansionLo; - public Func PeekExpansionHi; - public Func PeekKernalRom; - public Func PeekMemory; - public Func PeekSid; - public Func PeekVic; - public Action PokeCartridgeLo; - public Action PokeCartridgeHi; - public Action PokeCia0; - public Action PokeCia1; - public Action PokeColorRam; - public Action PokeExpansionLo; - public Action PokeExpansionHi; - public Action PokeMemory; - public Action PokeSid; - public Action PokeVic; - public Func ReadAEC; - public Func ReadBA; - public Func ReadBasicRom; - public Func ReadCartridgeLo; - public Func ReadCartridgeHi; - public Func ReadCharen; - public Func ReadCharRom; - public Func ReadCia0; - public Func ReadCia1; - public Func ReadColorRam; - public Func ReadExpansionLo; - public Func ReadExpansionHi; - public Func ReadExRom; - public Func ReadGame; - public Func ReadHiRam; - public Func ReadKernalRom; - public Func ReadLoRam; - public Func ReadMemory; - public Func ReadSid; - public Func ReadVic; - public Action WriteCartridgeLo; - public Action WriteCartridgeHi; - public Action WriteCia0; - public Action WriteCia1; - public Action WriteColorRam; - public Action WriteExpansionLo; - public Action WriteExpansionHi; - public Action WriteMemory; - public Action WriteSid; - public Action WriteVic; - - // ------------------------------------ - - enum PLABank - { - None, - RAM, - BasicROM, - KernalROM, - CharROM, - IO, - CartridgeLo, - CartridgeHi, - Vic, - Sid, - ColorRam, - Cia0, - Cia1, - Expansion0, - Expansion1 - } - - // ------------------------------------ - - bool p24; - bool p25; - bool p26; - bool p27; - bool p28; - bool loram; - bool hiram; - bool game; - bool exrom; - bool charen; - bool a15; - bool a14; - bool a13; - bool a12; - - private PLABank Bank(int addr, bool read) - { - loram = ReadLoRam(); - hiram = ReadHiRam(); - game = ReadGame(); - - a15 = (addr & 0x08000) != 0; - a14 = (addr & 0x04000) != 0; - a13 = (addr & 0x02000) != 0; - a12 = (addr & 0x01000) != 0; - - // upper memory regions 8000-FFFF - exrom = ReadExRom(); - if (a15) - { - // io/character access - if (a14 && !a13 && a12) - { - // character rom, banked in at D000-DFFF - charen = ReadCharen(); - if (read && !charen && (((hiram || loram) && game) || (hiram && !exrom && !game))) - return PLABank.CharROM; - - // io block, banked in at D000-DFFF - if ((charen && (hiram || loram)) || (exrom && !game)) - { - if (addr < 0xD400) - return PLABank.Vic; - if (addr < 0xD800) - return PLABank.Sid; - if (addr < 0xDC00) - return PLABank.ColorRam; - if (addr < 0xDD00) - return PLABank.Cia0; - if (addr < 0xDE00) - return PLABank.Cia1; - if (addr < 0xDF00) - return PLABank.Expansion0; - return PLABank.Expansion1; - } - } - - // cartridge high, banked either at A000-BFFF or E000-FFFF depending - if (a13 && !game && ((hiram && !a14 && read && !exrom) || (a14 && exrom))) - return PLABank.CartridgeHi; - - // cartridge low, banked at 8000-9FFF - if (!a14 && !a13 && ((loram && hiram && read && !exrom) || (exrom && !game))) - return PLABank.CartridgeLo; - - // kernal rom, banked at E000-FFFF - if (hiram && a14 && a13 && read && (game || (!exrom && !game))) - return PLABank.KernalROM; - - // basic rom, banked at A000-BFFF - if (loram && hiram && !a14 && a13 && read && game) - return PLABank.BasicROM; - } - - // ultimax mode ram exclusion - if (exrom && !game) - { - p24 = !a15 && !a14 && a12; //00x1 1000-1FFF, 3000-3FFF - p25 = !a15 && !a14 && a13; //001x 2000-3FFF - p26 = !a15 && a14; //01xx 4000-7FFF - p27 = a15 && !a14 && a13; //101x A000-BFFF - p28 = a15 && a14 && !a13 && !a12; //1100 C000-CFFF - if (p24 || p25 || p26 || p27 || p28) - return PLABank.None; - } - - return PLABank.RAM; - } - - public byte Peek(int addr) - { - switch (Bank(addr, true)) - { - case PLABank.BasicROM: - return PeekBasicRom(addr); - case PLABank.CartridgeHi: - return PeekCartridgeHi(addr); - case PLABank.CartridgeLo: - return PeekCartridgeLo(addr); - case PLABank.CharROM: - return PeekCharRom(addr); - case PLABank.Cia0: - return PeekCia0(addr); - case PLABank.Cia1: - return PeekCia1(addr); - case PLABank.ColorRam: - return PeekColorRam(addr); - case PLABank.Expansion0: - return PeekExpansionLo(addr); - case PLABank.Expansion1: - return PeekExpansionHi(addr); - case PLABank.KernalROM: - return PeekKernalRom(addr); - case PLABank.RAM: - return PeekMemory(addr); - case PLABank.Sid: - return PeekSid(addr); - case PLABank.Vic: - return PeekVic(addr); - } - return 0xFF; - } - - public void Poke(int addr, byte val) - { - switch (Bank(addr, false)) - { - case PLABank.CartridgeHi: - PokeCartridgeHi(addr, val); - break; - case PLABank.CartridgeLo: - PokeCartridgeLo(addr, val); - break; - case PLABank.Cia0: - PokeCia0(addr, val); - break; - case PLABank.Cia1: - PokeCia1(addr, val); - break; - case PLABank.ColorRam: - PokeColorRam(addr, val); - break; - case PLABank.Expansion0: - PokeExpansionLo(addr, val); - break; - case PLABank.Expansion1: - PokeExpansionHi(addr, val); - break; - case PLABank.RAM: - PokeMemory(addr, val); - break; - case PLABank.Sid: - PokeSid(addr, val); - break; - case PLABank.Vic: - PokeVic(addr, val); - break; - } - } - - public byte Read(int addr) - { - switch (Bank(addr, true)) - { - case PLABank.BasicROM: - return ReadBasicRom(addr); - case PLABank.CartridgeHi: - return ReadCartridgeHi(addr); - case PLABank.CartridgeLo: - return ReadCartridgeLo(addr); - case PLABank.CharROM: - return ReadCharRom(addr); - case PLABank.Cia0: - return ReadCia0(addr); - case PLABank.Cia1: - return ReadCia1(addr); - case PLABank.ColorRam: - return ReadColorRam(addr); - case PLABank.Expansion0: - return ReadExpansionLo(addr); - case PLABank.Expansion1: - return ReadExpansionHi(addr); - case PLABank.KernalROM: - return ReadKernalRom(addr); - case PLABank.RAM: - return ReadMemory(addr); - case PLABank.Sid: - return ReadSid(addr); - case PLABank.Vic: - return ReadVic(addr); - } - return 0xFF; - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - - public byte VicRead(int addr) - { - game = ReadGame(); - exrom = ReadExRom(); - a14 = (addr & 0x04000) == 0; - a13 = (addr & 0x02000) != 0; - a12 = (addr & 0x01000) != 0; - - // read char rom at 1000-1FFF and 9000-9FFF - if (a14 && !a13 && a12 && (game || !exrom)) - return ReadCharRom(addr); - - // read cartridge rom in ultimax mode - if (a13 && a12 && exrom && !game) - return ReadCartridgeHi(addr); - - return ReadMemory(addr); - } - - public void Write(int addr, byte val) - { - switch (Bank(addr, false)) - { - case PLABank.CartridgeHi: - WriteCartridgeHi(addr, val); - if (ReadGame() || !ReadExRom()) - { - WriteMemory(addr, val); - } - break; - case PLABank.CartridgeLo: - WriteCartridgeLo(addr, val); - if (ReadGame() || !ReadExRom()) - { - WriteMemory(addr, val); - } - break; - case PLABank.Cia0: - WriteCia0(addr, val); - break; - case PLABank.Cia1: - WriteCia1(addr, val); - break; - case PLABank.ColorRam: - WriteColorRam(addr, val); - break; - case PLABank.Expansion0: - WriteExpansionLo(addr, val); - return; - case PLABank.Expansion1: - WriteExpansionHi(addr, val); - return; - case PLABank.RAM: - WriteMemory(addr, val); - break; - case PLABank.Sid: - WriteSid(addr, val); - break; - case PLABank.Vic: - WriteVic(addr, val); - break; - } - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/SerialPort.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/SerialPort.cs deleted file mode 100644 index 004e78b09b..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/SerialPort.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using BizHawk.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - // the functions on this port are at the point of - // view of an external device. - - sealed public class SerialPort - { - public Func ReadAtnOut; - public Func ReadClockOut; - public Func ReadDataOut; - - public SerialPort() - { - } - - public void HardReset() - { - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - - public bool WriteClockIn() - { - return true; - } - - public bool WriteDataIn() - { - return true; - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Envelope.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Envelope.cs index 0dcdcdd553..01ef5e5d92 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Envelope.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Envelope.cs @@ -7,48 +7,44 @@ using BizHawk.Common; namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Sid + public sealed partial class Sid { - sealed class Envelope + private sealed class Envelope { - const int stateAttack = 0; - const int stateDecay = 1; - const int stateRelease = 2; + [SaveState.DoNotSave] private const int StateAttack = 0; + [SaveState.DoNotSave] private const int StateDecay = 1; + [SaveState.DoNotSave] private const int StateRelease = 2; - int attack; - int decay; - bool delay; - int envCounter; - int expCounter; - int expPeriod; - bool freeze; - int lfsr; - bool gate; - int rate; - int release; - int state; - int sustain; + private int _attack; + private int _decay; + private bool _delay; + private int _envCounter; + private int _expCounter; + private int _expPeriod; + private bool _freeze; + private int _lfsr; + private bool _gate; + private int _rate; + private int _release; + private int _state; + private int _sustain; - static int[] adsrTable = new int[] - { + private static readonly int[] AdsrTable = { 0x7F00, 0x0006, 0x003C, 0x0330, 0x20C0, 0x6755, 0x3800, 0x500E, 0x1212, 0x0222, 0x1848, 0x59B8, 0x3840, 0x77E2, 0x7625, 0x0A93 }; - static int[] expCounterTable = new int[] - { + private static readonly int[] ExpCounterTable = { 0xFF, 0x5D, 0x36, 0x1A, 0x0E, 0x06, 0x00 }; - static int[] expPeriodTable = new int[] - { + private static readonly int[] ExpPeriodTable = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x1E, 0x01 }; - static int[] sustainTable = new int[] - { + private static readonly int[] SustainTable = { 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF }; @@ -60,94 +56,93 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS public void ExecutePhase2() { - + if (!_delay) { - if (!delay) - { - envCounter--; - delay = true; - UpdateExpCounter(); - } - - if (lfsr != rate) - { - int feedback = ((lfsr >> 14) ^ (lfsr >> 13)) & 0x1; - lfsr = ((lfsr << 1) & 0x7FFF) | feedback; - return; - } - lfsr = 0x7FFF; - - if (state == stateAttack || ++expCounter == expPeriod) - { - expCounter = 0; - if (freeze) - return; - - switch (state) - { - case stateAttack: - envCounter++; - if (envCounter == 0xFF) - { - state = stateDecay; - rate = adsrTable[decay]; - } - break; - case stateDecay: - if (envCounter == sustainTable[sustain]) - { - return; - } - if (expPeriod != 1) - { - delay = false; - return; - } - envCounter--; - break; - case stateRelease: - if (expPeriod != 1) - { - delay = false; - return; - } - envCounter--; - break; - } - envCounter &= 0xFF; - UpdateExpCounter(); - } + _envCounter--; + _delay = true; + UpdateExpCounter(); } + + if (_lfsr != _rate) + { + var feedback = ((_lfsr >> 14) ^ (_lfsr >> 13)) & 0x1; + _lfsr = ((_lfsr << 1) & 0x7FFF) | feedback; + return; + } + _lfsr = 0x7FFF; + + if (_state != StateAttack && ++_expCounter != _expPeriod) + { + return; + } + + _expCounter = 0; + if (_freeze) + return; + + switch (_state) + { + case StateAttack: + _envCounter++; + if (_envCounter == 0xFF) + { + _state = StateDecay; + _rate = AdsrTable[_decay]; + } + break; + case StateDecay: + if (_envCounter == SustainTable[_sustain]) + { + return; + } + if (_expPeriod != 1) + { + _delay = false; + return; + } + _envCounter--; + break; + case StateRelease: + if (_expPeriod != 1) + { + _delay = false; + return; + } + _envCounter--; + break; + } + _envCounter &= 0xFF; + UpdateExpCounter(); } public void HardReset() { - attack = 0; - decay = 0; - delay = true; - envCounter = 0; - expCounter = 0; - expPeriod = expPeriodTable[0]; - freeze = false; - gate = false; - lfsr = 0x7FFF; - rate = adsrTable[release]; - release = 0; - state = stateRelease; - sustain = 0; + _attack = 0; + _decay = 0; + _delay = true; + _envCounter = 0; + _expCounter = 0; + _expPeriod = ExpPeriodTable[0]; + _freeze = false; + _gate = false; + _lfsr = 0x7FFF; + _rate = AdsrTable[_release]; + _release = 0; + _state = StateRelease; + _sustain = 0; } private void UpdateExpCounter() { { - for (int i = 0; i < 7; i++) + for (var i = 0; i < 7; i++) { - if (envCounter == expCounterTable[i]) - expPeriod = expPeriodTable[i]; + if (_envCounter == ExpCounterTable[i]) + _expPeriod = ExpPeriodTable[i]; } - if (envCounter == 0) - freeze = true; + if (_envCounter == 0) + _freeze = true; } } @@ -157,13 +152,13 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return attack; + return _attack; } set { - attack = (value & 0xF); - if (state == stateAttack) - rate = adsrTable[attack]; + _attack = value & 0xF; + if (_state == StateAttack) + _rate = AdsrTable[_attack]; } } @@ -171,13 +166,13 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return decay; + return _decay; } set { - decay = (value & 0xF); - if (state == stateDecay) - rate = adsrTable[decay]; + _decay = value & 0xF; + if (_state == StateDecay) + _rate = AdsrTable[_decay]; } } @@ -185,24 +180,24 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return gate; + return _gate; } set { - bool nextGate = value; - if (nextGate && !gate) + var nextGate = value; + if (nextGate && !_gate) { - state = stateAttack; - rate = adsrTable[attack]; - delay = true; - freeze = false; + _state = StateAttack; + _rate = AdsrTable[_attack]; + _delay = true; + _freeze = false; } - else if (!nextGate && gate) + else if (!nextGate && _gate) { - state = stateRelease; - rate = adsrTable[release]; + _state = StateRelease; + _rate = AdsrTable[_release]; } - gate = nextGate; + _gate = nextGate; } } @@ -210,7 +205,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return envCounter; + return _envCounter; } } @@ -218,13 +213,13 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return release; + return _release; } set { - release = (value & 0xF); - if (state == stateRelease) - rate = adsrTable[release]; + _release = value & 0xF; + if (_state == StateRelease) + _rate = AdsrTable[_release]; } } @@ -232,11 +227,11 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return sustain; + return _sustain; } set { - sustain = (value & 0xF); + _sustain = value & 0xF; } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Registers.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Registers.cs index f6ebe11cfb..1becea515c 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Registers.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Registers.cs @@ -5,32 +5,22 @@ using System.Text; namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Sid + public sealed partial class Sid { - public byte Peek(long addr) + public int Peek(int addr) { - return ReadRegister((int)(addr & 0x1F)); + return ReadRegister(addr & 0x1F); } - public void Poke(long addr, byte val) + public void Poke(int addr, int val) { - WriteRegister((int)(addr & 0x1F), val); + WriteRegister(addr & 0x1F, val); } - public byte Peek(int addr) - { - return ReadRegister((int)(addr & 0x1F)); - } - - public void Poke(int addr, byte val) - { - WriteRegister((int)(addr & 0x1F), val); - } - - public byte Read(int addr) + public int Read(int addr) { addr &= 0x1F; - byte result = 0x00; + var result = 0x00; switch (addr) { case 0x19: @@ -44,116 +34,94 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS return result; } - private byte ReadRegister(int addr) + private int ReadRegister(int addr) { - byte result = 0x00; + var result = 0x00; switch (addr) { - case 0x00: result = (byte)voices[0].FrequencyLo; break; - case 0x01: result = (byte)voices[0].FrequencyHi; break; - case 0x02: result = (byte)voices[0].PulseWidthLo; break; - case 0x03: result = (byte)voices[0].PulseWidthHi; break; + case 0x00: result = _voice0.FrequencyLo; break; + case 0x01: result = _voice0.FrequencyHi; break; + case 0x02: result = _voice0.PulseWidthLo; break; + case 0x03: result = _voice0.PulseWidthHi; break; case 0x04: - result = (byte)( - (envelopes[0].Gate ? 0x01 : 0x00) | - (voices[0].Sync ? 0x02 : 0x00) | - (voices[0].RingMod ? 0x04 : 0x00) | - (voices[0].Test ? 0x08 : 0x00) | - (byte)(voices[0].Waveform << 4) - ); + result = (_envelope0.Gate ? 0x01 : 0x00) | + (_voice0.Sync ? 0x02 : 0x00) | + (_voice0.RingMod ? 0x04 : 0x00) | + (_voice0.Test ? 0x08 : 0x00) | + (_voice0.Waveform << 4); break; case 0x05: - result = (byte)( - (envelopes[0].Attack << 4) | - (envelopes[0].Decay) - ); + result = (_envelope0.Attack << 4) | + _envelope0.Decay; break; case 0x06: - result = (byte)( - (envelopes[0].Sustain << 4) | - (envelopes[0].Release) - ); + result = (_envelope0.Sustain << 4) | + _envelope0.Release; break; - case 0x07: result = (byte)voices[1].FrequencyLo; break; - case 0x08: result = (byte)voices[1].FrequencyHi; break; - case 0x09: result = (byte)voices[1].PulseWidthLo; break; - case 0x0A: result = (byte)voices[1].PulseWidthHi; break; + case 0x07: result = _voice1.FrequencyLo; break; + case 0x08: result = _voice1.FrequencyHi; break; + case 0x09: result = _voice1.PulseWidthLo; break; + case 0x0A: result = _voice1.PulseWidthHi; break; case 0x0B: - result = (byte)( - (envelopes[1].Gate ? 0x01 : 0x00) | - (voices[1].Sync ? 0x02 : 0x00) | - (voices[1].RingMod ? 0x04 : 0x00) | - (voices[1].Test ? 0x08 : 0x00) | - (byte)(voices[1].Waveform << 4) - ); + result = (_envelope1.Gate ? 0x01 : 0x00) | + (_voice1.Sync ? 0x02 : 0x00) | + (_voice1.RingMod ? 0x04 : 0x00) | + (_voice1.Test ? 0x08 : 0x00) | + (_voice1.Waveform << 4); break; case 0x0C: - result = (byte)( - (envelopes[1].Attack << 4) | - (envelopes[1].Decay) - ); + result = (_envelope1.Attack << 4) | + _envelope1.Decay; break; case 0x0D: - result = (byte)( - (envelopes[1].Sustain << 4) | - (envelopes[1].Release) - ); + result = (_envelope1.Sustain << 4) | + _envelope1.Release; break; - case 0x0E: result = (byte)voices[2].FrequencyLo; break; - case 0x0F: result = (byte)voices[2].FrequencyHi; break; - case 0x10: result = (byte)voices[2].PulseWidthLo; break; - case 0x11: result = (byte)voices[2].PulseWidthHi; break; + case 0x0E: result = _voice2.FrequencyLo; break; + case 0x0F: result = _voice2.FrequencyHi; break; + case 0x10: result = _voice2.PulseWidthLo; break; + case 0x11: result = _voice2.PulseWidthHi; break; case 0x12: - result = (byte)( - (envelopes[2].Gate ? 0x01 : 0x00) | - (voices[2].Sync ? 0x02 : 0x00) | - (voices[2].RingMod ? 0x04 : 0x00) | - (voices[2].Test ? 0x08 : 0x00) | - (byte)(voices[2].Waveform << 4) - ); + result = (_envelope2.Gate ? 0x01 : 0x00) | + (_voice2.Sync ? 0x02 : 0x00) | + (_voice2.RingMod ? 0x04 : 0x00) | + (_voice2.Test ? 0x08 : 0x00) | + (_voice2.Waveform << 4); break; case 0x13: - result = (byte)( - (envelopes[2].Attack << 4) | - (envelopes[2].Decay) - ); + result = (_envelope2.Attack << 4) | + _envelope2.Decay; break; case 0x14: - result = (byte)( - (envelopes[2].Sustain << 4) | - (envelopes[2].Release) - ); + result = (_envelope2.Sustain << 4) | + _envelope2.Release; break; - case 0x15: result = (byte)(filterFrequency & 0x7); break; - case 0x16: result = (byte)((filterFrequency >> 3) & 0xFF); break; + case 0x15: result = _filterFrequency & 0x7; break; + case 0x16: result = (_filterFrequency >> 3) & 0xFF; break; case 0x17: - result = (byte)( - (filterEnable[0] ? 0x01 : 0x00) | - (filterEnable[1] ? 0x02 : 0x00) | - (filterEnable[2] ? 0x04 : 0x00) | - (byte)(filterResonance << 4) - ); + result = (_filterEnable[0] ? 0x01 : 0x00) | + (_filterEnable[1] ? 0x02 : 0x00) | + (_filterEnable[2] ? 0x04 : 0x00) | + (_filterResonance << 4); break; case 0x18: - result = (byte)( - (byte)volume | - (filterSelectLoPass ? 0x10 : 0x00) | - (filterSelectBandPass ? 0x20 : 0x00) | - (filterSelectHiPass ? 0x40 : 0x00) | - (disableVoice3 ? 0x80 : 0x00) - ); + result = _volume | + (_filterSelectLoPass ? 0x10 : 0x00) | + (_filterSelectBandPass ? 0x20 : 0x00) | + (_filterSelectHiPass ? 0x40 : 0x00) | + (_disableVoice3 ? 0x80 : 0x00); break; - case 0x19: result = (byte)potX; break; - case 0x1A: result = (byte)potY; break; - case 0x1B: result = (byte)(voiceOutput[2] >> 4); break; - case 0x1C: result = (byte)(envelopeOutput[2]); break; + case 0x19: result = _potX; break; + case 0x1A: result = _potY; break; + case 0x1B: result = _voiceOutput2 >> 4; break; + case 0x1C: result = _envelopeOutput2; break; } return result; } - public void Write(int addr, byte val) + public void Write(int addr, int val) { addr &= 0x1F; switch (addr) @@ -174,51 +142,51 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS } } - private void WriteRegister(int addr, byte val) + private void WriteRegister(int addr, int val) { switch (addr) { - case 0x00: voices[0].FrequencyLo = val; break; - case 0x01: voices[0].FrequencyHi = val; break; - case 0x02: voices[0].PulseWidthLo = val; break; - case 0x03: voices[0].PulseWidthHi = val; break; - case 0x04: voices[0].Control = val; envelopes[0].Gate = ((val & 0x01) != 0); break; - case 0x05: envelopes[0].Attack = (val >> 4); envelopes[0].Decay = (val & 0xF); break; - case 0x06: envelopes[0].Sustain = (val >> 4); envelopes[0].Release = (val & 0xF); break; - case 0x07: voices[1].FrequencyLo = val; break; - case 0x08: voices[1].FrequencyHi = val; break; - case 0x09: voices[1].PulseWidthLo = val; break; - case 0x0A: voices[1].PulseWidthHi = val; break; - case 0x0B: voices[1].Control = val; envelopes[1].Gate = ((val & 0x01) != 0); break; - case 0x0C: envelopes[1].Attack = (val >> 4); envelopes[1].Decay = (val & 0xF); break; - case 0x0D: envelopes[1].Sustain = (val >> 4); envelopes[1].Release = (val & 0xF); break; - case 0x0E: voices[2].FrequencyLo = val; break; - case 0x0F: voices[2].FrequencyHi = val; break; - case 0x10: voices[2].PulseWidthLo = val; break; - case 0x11: voices[2].PulseWidthHi = val; break; - case 0x12: voices[2].Control = val; envelopes[2].Gate = ((val & 0x01) != 0); break; - case 0x13: envelopes[2].Attack = (val >> 4); envelopes[2].Decay = (val & 0xF); break; - case 0x14: envelopes[2].Sustain = (val >> 4); envelopes[2].Release = (val & 0xF); break; - case 0x15: filterFrequency &= 0x3FF; filterFrequency |= (val & 0x7); break; - case 0x16: filterFrequency &= 0x7; filterFrequency |= val << 3; break; + case 0x00: _voice0.FrequencyLo = val; break; + case 0x01: _voice0.FrequencyHi = val; break; + case 0x02: _voice0.PulseWidthLo = val; break; + case 0x03: _voice0.PulseWidthHi = val; break; + case 0x04: _voice0.Control = val; _envelope0.Gate = (val & 0x01) != 0; break; + case 0x05: _envelope0.Attack = val >> 4; _envelope0.Decay = val & 0xF; break; + case 0x06: _envelope0.Sustain = val >> 4; _envelope0.Release = val & 0xF; break; + case 0x07: _voice1.FrequencyLo = val; break; + case 0x08: _voice1.FrequencyHi = val; break; + case 0x09: _voice1.PulseWidthLo = val; break; + case 0x0A: _voice1.PulseWidthHi = val; break; + case 0x0B: _voice1.Control = val; _envelope1.Gate = (val & 0x01) != 0; break; + case 0x0C: _envelope1.Attack = val >> 4; _envelope1.Decay = val & 0xF; break; + case 0x0D: _envelope1.Sustain = val >> 4; _envelope1.Release = val & 0xF; break; + case 0x0E: _voice2.FrequencyLo = val; break; + case 0x0F: _voice2.FrequencyHi = val; break; + case 0x10: _voice2.PulseWidthLo = val; break; + case 0x11: _voice2.PulseWidthHi = val; break; + case 0x12: _voice2.Control = val; _envelope2.Gate = (val & 0x01) != 0; break; + case 0x13: _envelope2.Attack = val >> 4; _envelope2.Decay = val & 0xF; break; + case 0x14: _envelope2.Sustain = val >> 4; _envelope2.Release = val & 0xF; break; + case 0x15: _filterFrequency &= 0x3FF; _filterFrequency |= val & 0x7; break; + case 0x16: _filterFrequency &= 0x7; _filterFrequency |= val << 3; break; case 0x17: - filterEnable[0] = ((val & 0x1) != 0); - filterEnable[1] = ((val & 0x2) != 0); - filterEnable[2] = ((val & 0x4) != 0); - filterResonance = val >> 4; + _filterEnable[0] = (val & 0x1) != 0; + _filterEnable[1] = (val & 0x2) != 0; + _filterEnable[2] = (val & 0x4) != 0; + _filterResonance = val >> 4; break; case 0x18: - volume = (val & 0xF); - filterSelectLoPass = ((val & 0x10) != 0); - filterSelectBandPass = ((val & 0x20) != 0); - filterSelectHiPass = ((val & 0x40) != 0); - disableVoice3 = ((val & 0x40) != 0); + _volume = val & 0xF; + _filterSelectLoPass = (val & 0x10) != 0; + _filterSelectBandPass = (val & 0x20) != 0; + _filterSelectHiPass = (val & 0x40) != 0; + _disableVoice3 = (val & 0x40) != 0; break; case 0x19: - potX = val; + _potX = val; break; case 0x1A: - potY = val; + _potY = val; break; } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.SoundProvider.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.SoundProvider.cs new file mode 100644 index 0000000000..23aff2a84f --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.SoundProvider.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Sid : ISoundProvider, ISyncSoundProvider + { + public int MaxVolume + { + get { return short.MaxValue; } + set { } + } + + public void DiscardSamples() + { + _outputBufferIndex = 0; + } + + public void GetSamples(short[] samples) + { + Flush(); + var length = Math.Min(samples.Length, _outputBufferIndex); + for (var i = 0; i < length; i++) + { + samples[i] = _outputBuffer[i]; + } + _outputBufferIndex = 0; + } + + public void GetSamples(out short[] samples, out int nsamp) + { + Flush(); + samples = _outputBuffer; + nsamp = _outputBufferIndex >> 1; + _outputBufferIndex = 0; + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Voice.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Voice.cs index f72f07f430..2f31017eea 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Voice.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.Voice.cs @@ -7,60 +7,60 @@ using BizHawk.Common; namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Sid + public sealed partial class Sid { - sealed class Voice + private sealed class Voice { - int accBits; - int accNext; - int accumulator; - bool controlTestPrev; - int controlWavePrev; - int delay; - int floatOutputTTL; - int frequency; - bool msbRising; - int noise; - int noNoise; - int noNoiseOrNoise; - int noPulse; - int output; - int pulse; - int pulseWidth; - bool ringMod; - int ringMsbMask; - int shiftRegister; - int shiftRegisterReset; - bool sync; - bool test; - int[] wave; - int waveform; - int waveformIndex; - int[][] waveTable; + private int _accBits; + private int _accNext; + private int _accumulator; + private bool _controlTestPrev; + private int _controlWavePrev; + private int _delay; + private int _floatOutputTtl; + private int _frequency; + private bool _msbRising; + private int _noise; + private int _noNoise; + private int _noNoiseOrNoise; + private int _noPulse; + private int _output; + private int _pulse; + private int _pulseWidth; + private bool _ringMod; + private int _ringMsbMask; + private int _shiftRegister; + private int _shiftRegisterReset; + private bool _sync; + private bool _test; + [SaveState.DoNotSave] private int[] _wave; + private int _waveform; + private int _waveformIndex; + [SaveState.DoNotSave] private readonly int[][] _waveTable; public Voice(int[][] newWaveTable) { - waveTable = newWaveTable; + _waveTable = newWaveTable; HardReset(); } public void HardReset() { - accumulator = 0; - delay = 0; - floatOutputTTL = 0; - frequency = 0; - msbRising = false; - noNoise = 0xFFF; - noPulse = 0xFFF; - output = 0x000; - pulse = 0xFFF; - pulseWidth = 0; - ringMsbMask = 0; - sync = false; - test = false; - wave = waveTable[0]; - waveform = 0; + _accumulator = 0; + _delay = 0; + _floatOutputTtl = 0; + _frequency = 0; + _msbRising = false; + _noNoise = 0xFFF; + _noPulse = 0xFFF; + _output = 0x000; + _pulse = 0xFFF; + _pulseWidth = 0; + _ringMsbMask = 0; + _sync = false; + _test = false; + _wave = _waveTable[0]; + _waveform = 0; ResetShiftReg(); } @@ -69,24 +69,24 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { { - if (test) + if (_test) { - if (shiftRegisterReset != 0 && --shiftRegisterReset == 0) + if (_shiftRegisterReset != 0 && --_shiftRegisterReset == 0) { ResetShiftReg(); } - pulse = 0xFFF; + _pulse = 0xFFF; } else { - accNext = (accumulator + frequency) & 0xFFFFFF; - accBits = ~accumulator & accNext; - accumulator = accNext; - msbRising = ((accBits & 0x800000) != 0); + _accNext = (_accumulator + _frequency) & 0xFFFFFF; + _accBits = ~_accumulator & _accNext; + _accumulator = _accNext; + _msbRising = (_accBits & 0x800000) != 0; - if ((accBits & 0x080000) != 0) - delay = 2; - else if (delay != 0 && --delay == 0) + if ((_accBits & 0x080000) != 0) + _delay = 2; + else if (_delay != 0 && --_delay == 0) ClockShiftReg(); } } @@ -98,8 +98,8 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { { - shiftRegister = ((shiftRegister << 1) | - (((shiftRegister >> 22) ^ (shiftRegister >> 17)) & 0x1) + _shiftRegister = ((_shiftRegister << 1) | + (((_shiftRegister >> 22) ^ (_shiftRegister >> 17)) & 0x1) ) & 0x7FFFFF; SetNoise(); } @@ -109,8 +109,8 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { { - shiftRegister = 0x7FFFFF; - shiftRegisterReset = 0; + _shiftRegister = 0x7FFFFF; + _shiftRegisterReset = 0; SetNoise(); } } @@ -119,16 +119,16 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { { - noise = - ((shiftRegister & 0x100000) >> 9) | - ((shiftRegister & 0x040000) >> 8) | - ((shiftRegister & 0x004000) >> 5) | - ((shiftRegister & 0x000800) >> 3) | - ((shiftRegister & 0x000200) >> 2) | - ((shiftRegister & 0x000020) << 1) | - ((shiftRegister & 0x000004) << 3) | - ((shiftRegister & 0x000001) << 4); - noNoiseOrNoise = noNoise | noise; + _noise = + ((_shiftRegister & 0x100000) >> 9) | + ((_shiftRegister & 0x040000) >> 8) | + ((_shiftRegister & 0x004000) >> 5) | + ((_shiftRegister & 0x000800) >> 3) | + ((_shiftRegister & 0x000200) >> 2) | + ((_shiftRegister & 0x000020) << 1) | + ((_shiftRegister & 0x000004) << 3) | + ((_shiftRegister & 0x000001) << 4); + _noNoiseOrNoise = _noNoise | _noise; } } @@ -136,17 +136,17 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { { - output &= + _output &= 0xBB5DA | - ((output & 0x800) << 9) | - ((output & 0x400) << 8) | - ((output & 0x200) << 5) | - ((output & 0x100) << 3) | - ((output & 0x040) >> 1) | - ((output & 0x020) >> 3) | - ((output & 0x010) >> 4); - noise &= output; - noNoiseOrNoise = noNoise | noise; + ((_output & 0x800) << 9) | + ((_output & 0x400) << 8) | + ((_output & 0x200) << 5) | + ((_output & 0x100) << 3) | + ((_output & 0x040) >> 1) | + ((_output & 0x020) >> 3) | + ((_output & 0x010) >> 4); + _noise &= _output; + _noNoiseOrNoise = _noNoise | _noise; } } @@ -156,47 +156,35 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { set { - controlWavePrev = waveform; - controlTestPrev = test; + _controlWavePrev = _waveform; + _controlTestPrev = _test; - sync = ((value & 0x02) != 0); - ringMod = ((value & 0x04) != 0); - test = ((value & 0x08) != 0); - waveform = (value >> 4) & 0x0F; - wave = waveTable[waveform & 0x07]; - ringMsbMask = ((~value >> 5) & (value >> 2) & 0x1) << 23; - noNoise = ((waveform & 0x8) != 0) ? 0x000 : 0xFFF; - noNoiseOrNoise = noNoise | noise; - noPulse = ((waveform & 0x4) != 0) ? 0x000 : 0xFFF; + _sync = (value & 0x02) != 0; + _ringMod = (value & 0x04) != 0; + _test = (value & 0x08) != 0; + _waveform = (value >> 4) & 0x0F; + _wave = _waveTable[_waveform & 0x07]; + _ringMsbMask = ((~value >> 5) & (value >> 2) & 0x1) << 23; + _noNoise = (_waveform & 0x8) != 0 ? 0x000 : 0xFFF; + _noNoiseOrNoise = _noNoise | _noise; + _noPulse = (_waveform & 0x4) != 0 ? 0x000 : 0xFFF; - if (!controlTestPrev && test) + if (!_controlTestPrev && _test) { - accumulator = 0; - delay = 0; - shiftRegisterReset = 0x8000; + _accumulator = 0; + _delay = 0; + _shiftRegisterReset = 0x8000; } - else if (controlTestPrev && !test) + else if (_controlTestPrev && !_test) { - shiftRegister = ((shiftRegister << 1) | - ((~shiftRegister >> 17) & 0x1) + _shiftRegister = ((_shiftRegister << 1) | + ((~_shiftRegister >> 17) & 0x1) ) & 0x7FFFFF; SetNoise(); } - if (waveform == 0 && controlWavePrev != 0) - floatOutputTTL = 0x28000; - } - } - - public int Frequency - { - get - { - return frequency; - } - set - { - frequency = value; + if (_waveform == 0 && _controlWavePrev != 0) + _floatOutputTtl = 0x28000; } } @@ -204,12 +192,12 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return (frequency & 0xFF); + return _frequency & 0xFF; } set { - frequency &= 0xFF00; - frequency |= value & 0x00FF; + _frequency &= 0xFF00; + _frequency |= value & 0x00FF; } } @@ -217,20 +205,12 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return (frequency >> 8); + return _frequency >> 8; } set { - frequency &= 0x00FF; - frequency |= (value & 0x00FF) << 8; - } - } - - public int Oscillator - { - get - { - return output; + _frequency &= 0x00FF; + _frequency |= (value & 0x00FF) << 8; } } @@ -238,32 +218,20 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { { - if (waveform != 0) + if (_waveform != 0) { - waveformIndex = (accumulator ^ (ringModSource.accumulator & ringMsbMask)) >> 12; - output = wave[waveformIndex] & (noPulse | pulse) & noNoiseOrNoise; - if (waveform > 8) + _waveformIndex = (_accumulator ^ (ringModSource._accumulator & _ringMsbMask)) >> 12; + _output = _wave[_waveformIndex] & (_noPulse | _pulse) & _noNoiseOrNoise; + if (_waveform > 8) WriteShiftReg(); } else { - if (floatOutputTTL != 0 && --floatOutputTTL == 0) - output = 0x000; + if (_floatOutputTtl != 0 && --_floatOutputTtl == 0) + _output = 0x000; } - pulse = ((accumulator >> 12) >= pulseWidth) ? 0xFFF : 0x000; - return output; - } - } - - public int PulseWidth - { - get - { - return pulseWidth; - } - set - { - pulseWidth = value; + _pulse = _accumulator >> 12 >= _pulseWidth ? 0xFFF : 0x000; + return _output; } } @@ -271,12 +239,12 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return (pulseWidth & 0xFF); + return _pulseWidth & 0xFF; } set { - pulseWidth &= 0x0F00; - pulseWidth |= value & 0x00FF; + _pulseWidth &= 0x0F00; + _pulseWidth |= value & 0x00FF; } } @@ -284,12 +252,12 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return (pulseWidth >> 8); + return _pulseWidth >> 8; } set { - pulseWidth &= 0x00FF; - pulseWidth |= (value & 0x000F) << 8; + _pulseWidth &= 0x00FF; + _pulseWidth |= (value & 0x000F) << 8; } } @@ -297,7 +265,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return ringMod; + return _ringMod; } } @@ -305,21 +273,21 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return sync; + return _sync; } } public void Synchronize(Voice target, Voice source) { - if (msbRising && target.sync && !(sync && source.msbRising)) - target.accumulator = 0; + if (_msbRising && target._sync && !(_sync && source._msbRising)) + target._accumulator = 0; } public bool Test { get { - return test; + return _test; } } @@ -327,7 +295,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return waveform; + return _waveform; } } @@ -336,7 +304,8 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS public void SyncState(Serializer ser) { SaveState.SyncObject(ser, this); - } + _wave = _waveTable[_waveform & 0x07]; + } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.cs index 873dcfacb5..96ce18cadd 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Sid.cs @@ -3,164 +3,182 @@ using BizHawk.Common; using BizHawk.Emulation.Common; -#pragma warning disable 649 //adelikat: Disable dumb warnings until this file is complete -#pragma warning disable 169 //adelikat: Disable dumb warnings until this file is complete -#pragma warning disable 219 //adelikat: Disable dumb warnings until this file is complete - namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Sid + public sealed partial class Sid { + /* + Commodore SID 6581/8580 core. - // ------------------------------------ + Many thanks to: + - Michael Huth for die shots of the 6569R3 chip (to get ideas how to implement) + http://mail.lipsia.de/~enigma/neu/6581.html + - Kevtris for figuring out ADSR tables + http://blog.kevtris.org/?p=13 + - Mixer for a lot of useful SID info + http://www.sid.fi/sidwiki/doku.php?id=sid-knowledge + - Documentation collected by the libsidplayfp team + https://sourceforge.net/projects/sidplay-residfp/ + */ - public SpeexResampler resampler; + // ------------------------------------ - static int[] syncNextTable = new int[] { 1, 2, 0 }; - static int[] syncPrevTable = new int[] { 2, 0, 1 }; + private int _cachedCycles; + private bool _disableVoice3; + private int _envelopeOutput0; + private int _envelopeOutput1; + private int _envelopeOutput2; + private readonly Envelope[] _envelopes; + [SaveState.DoNotSave] private readonly Envelope _envelope0; + [SaveState.DoNotSave] private readonly Envelope _envelope1; + [SaveState.DoNotSave] private readonly Envelope _envelope2; + private readonly bool[] _filterEnable; + private int _filterFrequency; + private int _filterResonance; + private bool _filterSelectBandPass; + private bool _filterSelectLoPass; + private bool _filterSelectHiPass; + private int _mixer; + [SaveState.DoNotSave] private readonly short[] _outputBuffer; + [SaveState.DoNotSave] private int _outputBufferIndex; + private int _potCounter; + private int _potX; + private int _potY; + private short _sample; + private int _voiceOutput0; + private int _voiceOutput1; + private int _voiceOutput2; + private readonly Voice[] _voices; + [SaveState.DoNotSave] private readonly Voice _voice0; + [SaveState.DoNotSave] private readonly Voice _voice1; + [SaveState.DoNotSave] private readonly Voice _voice2; + private int _volume; - int cachedCycles; - bool disableVoice3; - int[] envelopeOutput; - Envelope[] envelopes; - bool[] filterEnable; - int filterFrequency; - int filterResonance; - bool filterSelectBandPass; - bool filterSelectLoPass; - bool filterSelectHiPass; - int mixer; - int potCounter; - int potX; - int potY; - short sample; - int[] voiceOutput; - Voice[] voices; - int volume; - int[][] waveformTable; + public Func ReadPotX; + public Func ReadPotY; - public Func ReadPotX; - public Func ReadPotY; + [SaveState.DoNotSave] private readonly int _cpuCyclesNum; + [SaveState.DoNotSave] private int _sampleCyclesNum; + [SaveState.DoNotSave] private readonly int _sampleCyclesDen; + [SaveState.DoNotSave] private readonly int _sampleRate; - public Sid(int[][] newWaveformTable, uint sampleRate, uint cyclesNum, uint cyclesDen) - { - waveformTable = newWaveformTable; + public Sid(int[][] newWaveformTable, int sampleRate, int cyclesNum, int cyclesDen) + { + _sampleRate = sampleRate; + _cpuCyclesNum = cyclesNum; + _sampleCyclesDen = cyclesDen*sampleRate; - envelopes = new Envelope[3]; - for (int i = 0; i < 3; i++) - envelopes[i] = new Envelope(); - envelopeOutput = new int[3]; + _envelopes = new Envelope[3]; + for (var i = 0; i < 3; i++) + _envelopes[i] = new Envelope(); + _envelope0 = _envelopes[0]; + _envelope1 = _envelopes[1]; + _envelope2 = _envelopes[2]; - voices = new Voice[3]; - for (int i = 0; i < 3; i++) - voices[i] = new Voice(newWaveformTable); - voiceOutput = new int[3]; + _voices = new Voice[3]; + for (var i = 0; i < 3; i++) + _voices[i] = new Voice(newWaveformTable); + _voice0 = _voices[0]; + _voice1 = _voices[1]; + _voice2 = _voices[2]; - filterEnable = new bool[3]; - for (int i = 0; i < 3; i++) - filterEnable[i] = false; + _filterEnable = new bool[3]; + for (var i = 0; i < 3; i++) + _filterEnable[i] = false; - resampler = new SpeexResampler(0, cyclesNum, sampleRate * cyclesDen, cyclesNum, sampleRate * cyclesDen, null, null); - } - - public void Dispose() - { - if (resampler != null) - { - resampler.Dispose(); - resampler = null; - } + _outputBuffer = new short[sampleRate]; } // ------------------------------------ public void HardReset() { - for (int i = 0; i < 3; i++) + for (var i = 0; i < 3; i++) { - envelopes[i].HardReset(); - voices[i].HardReset(); + _envelopes[i].HardReset(); + _voices[i].HardReset(); } - potCounter = 0; - potX = 0; - potY = 0; + _potCounter = 0; + _potX = 0; + _potY = 0; } // ------------------------------------ - public void ExecutePhase2() + public void ExecutePhase() { - cachedCycles++; + _cachedCycles++; // potentiometer values refresh every 512 cycles - if (potCounter == 0) + if (_potCounter == 0) { - potCounter = 512; - potX = ReadPotX(); - potY = ReadPotY(); - Flush(); //this is here unrelated to the pots, just to keep the buffer somewhat loaded + _potCounter = 512; + _potX = ReadPotX(); + _potY = ReadPotY(); } - potCounter--; + _potCounter--; } public void Flush() { - while (cachedCycles > 0) - { + while (_cachedCycles > 0) + { + _cachedCycles--; + // process voices and envelopes - voices[0].ExecutePhase2(); - voices[1].ExecutePhase2(); - voices[2].ExecutePhase2(); - envelopes[0].ExecutePhase2(); - envelopes[1].ExecutePhase2(); - envelopes[2].ExecutePhase2(); + _voice0.ExecutePhase2(); + _voice1.ExecutePhase2(); + _voice2.ExecutePhase2(); + _envelope0.ExecutePhase2(); + _envelope1.ExecutePhase2(); + _envelope2.ExecutePhase2(); - // process sync - for (int i = 0; i < 3; i++) - voices[i].Synchronize(voices[syncNextTable[i]], voices[syncPrevTable[i]]); + _voice0.Synchronize(_voice1, _voice2); + _voice1.Synchronize(_voice2, _voice0); + _voice2.Synchronize(_voice0, _voice1); - // get output - voiceOutput[0] = voices[0].Output(voices[2]); - voiceOutput[1] = voices[1].Output(voices[0]); - voiceOutput[2] = voices[2].Output(voices[1]); - envelopeOutput[0] = envelopes[0].Level; - envelopeOutput[1] = envelopes[1].Level; - envelopeOutput[2] = envelopes[2].Level; + // get output + _voiceOutput0 = _voice0.Output(_voice2); + _voiceOutput1 = _voice1.Output(_voice0); + _voiceOutput2 = _voice2.Output(_voice1); + _envelopeOutput0 = _envelope0.Level; + _envelopeOutput1 = _envelope1.Level; + _envelopeOutput2 = _envelope2.Level; - mixer = ((voiceOutput[0] * envelopeOutput[0]) >> 7); - mixer += ((voiceOutput[1] * envelopeOutput[1]) >> 7); - mixer += ((voiceOutput[2] * envelopeOutput[2]) >> 7); - mixer = (mixer * volume) >> 4; + _sampleCyclesNum += _sampleCyclesDen; + if (_sampleCyclesNum >= _cpuCyclesNum) + { + _sampleCyclesNum -= _cpuCyclesNum; + _mixer = (_voiceOutput0 * _envelopeOutput0) >> 7; + _mixer += (_voiceOutput1 * _envelopeOutput1) >> 7; + _mixer += (_voiceOutput2 * _envelopeOutput2) >> 7; + _mixer = (_mixer * _volume) >> 4; + _mixer -= _volume << 8; - sample = (short)mixer; - resampler.EnqueueSample(sample, sample); - cachedCycles--; - } - } + if (_mixer > 0x7FFF) + { + _mixer = 0x7FFF; + } + if (_mixer < -0x8000) + { + _mixer = -0x8000; + } - // ---------------------------------- + _sample = unchecked((short)_mixer); + if (_outputBufferIndex < _sampleRate) + { + _outputBuffer[_outputBufferIndex++] = _sample; + _outputBuffer[_outputBufferIndex++] = _sample; + } + } + } + } - public void SyncState(Serializer ser) + // ---------------------------------- + + public void SyncState(Serializer ser) { SaveState.SyncObject(ser, this); - ser.BeginSection("env0"); - envelopes[0].SyncState(ser); - ser.EndSection(); - ser.BeginSection("wav0"); - voices[0].SyncState(ser); - ser.EndSection(); - ser.BeginSection("env1"); - envelopes[1].SyncState(ser); - ser.EndSection(); - ser.BeginSection("wav1"); - voices[1].SyncState(ser); - ser.EndSection(); - ser.BeginSection("env2"); - envelopes[2].SyncState(ser); - ser.EndSection(); - ser.BeginSection("wav2"); - voices[2].SyncState(ser); - ser.EndSection(); } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/UserPort.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/UserPort.cs deleted file mode 100644 index 88effc10b6..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/UserPort.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using BizHawk.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS -{ - public class UserPort - { - public Func ReadCounter1; - public Func ReadCounter2; - public Func ReadHandshake; - public Func ReadSerial1; - public Func ReadSerial2; - - public UserPort() - { - } - - virtual public void HardReset() - { - // note: this will not disconnect any attached media - } - - virtual public bool ReadAtn() - { - return true; - } - - virtual public bool ReadCounter1Buffer() - { - return true; - } - - virtual public bool ReadCounter2Buffer() - { - return true; - } - - virtual public byte ReadData() - { - return 0xFF; - } - - virtual public bool ReadFlag2() - { - return true; - } - - virtual public bool ReadPA2() - { - return true; - } - - virtual public bool ReadReset() - { - return true; - } - - virtual public bool ReadSerial1Buffer() - { - return true; - } - - virtual public bool ReadSerial2Buffer() - { - return true; - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.Port.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.Port.cs new file mode 100644 index 0000000000..bd5406a2be --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.Port.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Common; +using BizHawk.Emulation.Cores.Computers.Commodore64.Media; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Via + { + private abstract class Port + { + public abstract int ReadPra(int pra, int ddra); + public abstract int ReadPrb(int prb, int ddrb); + public abstract int ReadExternalPra(); + public abstract int ReadExternalPrb(); + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } + + private sealed class DisconnectedPort : Port + { + public override int ReadPra(int pra, int ddra) + { + return (pra | ~ddra) & 0xFF; + } + + public override int ReadPrb(int prb, int ddrb) + { + return (prb | ~ddrb) & 0xFF; + } + + public override int ReadExternalPra() + { + return 0xFF; + } + + public override int ReadExternalPrb() + { + return 0xFF; + } + } + + private sealed class DriverPort : Port + { + private readonly Func _readPrA; + private readonly Func _readPrB; + + public DriverPort(Func readPrA, Func readPrB) + { + _readPrA = readPrA; + _readPrB = readPrB; + } + + public override int ReadPra(int pra, int ddra) + { + return _readPrA(); + } + + public override int ReadPrb(int prb, int ddrb) + { + return (prb & ddrb) | (_readPrB() & ~ddrb); + } + + public override int ReadExternalPra() + { + return _readPrA(); + } + + public override int ReadExternalPrb() + { + return _readPrB(); + } + } + + private sealed class IecPort : Port + { + private readonly Func _readClock; + private readonly Func _readData; + private readonly Func _readAtn; + private readonly int _driveNumber; + + public IecPort(Func readClock, Func readData, Func readAtn, int driveNumber) + { + _readClock = readClock; + _readData = readData; + _readAtn = readAtn; + _driveNumber = (driveNumber & 0x3) << 5; + } + + public override int ReadPra(int pra, int ddra) + { + return (pra | ~ddra) & 0xFF; + } + + public override int ReadPrb(int prb, int ddrb) + { + return (prb & ddrb) | + (~ddrb & 0xE5 & ( + (_readClock() ? 0x04 : 0x00) | + (_readData() ? 0x01 : 0x00) | + (_readAtn() ? 0x80 : 0x00) | + _driveNumber) + ); + } + + public override int ReadExternalPra() + { + return 0xFF; + } + + public override int ReadExternalPrb() + { + return + (_readClock() ? 0x04 : 0x00) | + (_readData() ? 0x01 : 0x00) | + (_readAtn() ? 0x80 : 0x00) | + _driveNumber; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.Registers.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.Registers.cs new file mode 100644 index 0000000000..be694fc3d0 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.Registers.cs @@ -0,0 +1,261 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Via + { + public int Peek(int addr) + { + return ReadRegister(addr & 0xF); + } + + public void Poke(int addr, int val) + { + WriteRegister(addr & 0xF, val); + } + + public int Read(int addr) + { + addr &= 0xF; + switch (addr) + { + case 0x0: + _ifr &= 0xE7; + if (_acrPbLatchEnable) + { + return _pbLatch; + } + break; + case 0x1: + _ifr &= 0xFC; + if (_acrPaLatchEnable) + { + return _paLatch; + } + break; + case 0x4: + _ifr &= 0xBF; + break; + case 0x8: + _ifr &= 0xDF; + break; + case 0xA: + _ifr &= 0xFB; + break; + case 0xF: + if (_acrPaLatchEnable) + { + return _paLatch; + } + break; + } + return ReadRegister(addr); + } + + private int ReadRegister(int addr) + { + switch (addr) + { + case 0x0: + return _port.ReadPrb(_prb, _ddrb); + case 0x1: + return _port.ReadPra(_pra, _ddra); + case 0x2: + return _ddrb; + case 0x3: + return _ddra; + case 0x4: + return _t1C & 0xFF; + case 0x5: + return (_t1C >> 8) & 0xFF; + case 0x6: + return _t1L & 0xFF; + case 0x7: + return (_t1L >> 8) & 0xFF; + case 0x8: + return _t2C & 0xFF; + case 0x9: + return (_t2C >> 8) & 0xFF; + case 0xA: + return _sr; + case 0xB: + return _acr; + case 0xC: + return _pcr; + case 0xD: + return _ifr; + case 0xE: + return _ier | 0x80; + case 0xF: + return _port.ReadPra(_pra, _ddra); + } + return 0xFF; + } + + public void Write(int addr, int val) + { + addr &= 0xF; + switch (addr) + { + case 0x0: + _ifr &= 0xE7; + WriteRegister(addr, val); + break; + case 0x1: + _ifr &= 0xFC; + WriteRegister(addr, val); + break; + case 0x4: + case 0x6: + _t1L = (_t1L & 0xFF00) | (val & 0xFF); + break; + case 0x5: + _t1L = (_t1L & 0xFF) | ((val & 0xFF) << 8); + _ifr &= 0xBF; + _t1C = _t1L; + break; + case 0x7: + _t1L = (_t1L & 0xFF) | ((val & 0xFF) << 8); + break; + case 0x8: + _t2L = (_t2L & 0xFF00) | (val & 0xFF); + break; + case 0x9: + _t2L = (_t2L & 0xFF) | ((val & 0xFF) << 8); + _ifr &= 0xDF; + _t2C = _t2L; + break; + case 0xA: + _ifr &= 0xFB; + WriteRegister(addr, val); + break; + case 0xD: + _ifr &= ~val; + break; + case 0xE: + if ((val & 0x80) != 0) + _ier |= val & 0x7F; + else + _ier &= ~val; + break; + default: + WriteRegister(addr, val); + break; + } + } + + private void WriteRegister(int addr, int val) + { + addr &= 0xF; + switch (addr) + { + case 0x0: + _prb = val & 0xFF; + break; + case 0x1: + case 0xF: + _pra = val & 0xFF; + break; + case 0x2: + _ddrb = val & 0xFF; + break; + case 0x3: + _ddra = val & 0xFF; + break; + case 0x4: + _t1C = (_t1C & 0xFF00) | (val & 0xFF); + break; + case 0x5: + _t1C = (_t1C & 0xFF) | ((val & 0xFF) << 8); + break; + case 0x6: + _t1L = (_t1L & 0xFF00) | (val & 0xFF); + break; + case 0x7: + _t1L = (_t1L & 0xFF) | ((val & 0xFF) << 8); + break; + case 0x8: + _t2C = (_t2C & 0xFF00) | (val & 0xFF); + break; + case 0x9: + _t2C = (_t2C & 0xFF) | ((val & 0xFF) << 8); + break; + case 0xA: + _sr = val & 0xFF; + break; + case 0xB: + _acr = val & 0xFF; + _acrPaLatchEnable = (val & 0x01) != 0; + _acrPbLatchEnable = (val & 0x02) != 0; + _acrSrControl = (val & 0x1C); + _acrT2Control = (val & 0x20); + _acrT1Control = (val & 0xC0); + break; + case 0xC: + _pcr = val & 0xFF; + _pcrCa1IntControl = _pcr & 0x01; + _pcrCa2Control = _pcr & 0x0E; + _pcrCb1IntControl = (_pcr & 0x10) >> 4; + _pcrCb2Control = (_pcr & 0xE0) >> 4; + break; + case 0xD: + _ifr = val & 0xFF; + break; + case 0xE: + _ier = val & 0xFF; + break; + } + } + + [SaveState.DoNotSave] + public int DdrA + { + get { return _ddra; } + } + + [SaveState.DoNotSave] + public int DdrB + { + get { return _ddrb; } + } + + [SaveState.DoNotSave] + public int PrA + { + get { return _pra; } + } + + [SaveState.DoNotSave] + public int PrB + { + get { return _prb; } + } + + [SaveState.DoNotSave] + public int EffectivePrA + { + get { return _pra | ~_ddra; } + } + + [SaveState.DoNotSave] + public int EffectivePrB + { + get { return _prb | ~_ddrb; } + } + + [SaveState.DoNotSave] + public int ActualPrA + { + get { return _acrPaLatchEnable ? _paLatch : _port.ReadPra(_pra, _ddra); } + } + + [SaveState.DoNotSave] + public int ActualPrB + { + get { return _acrPbLatchEnable ? _pbLatch : _port.ReadPrb(_prb, _ddrb); } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.cs new file mode 100644 index 0000000000..b9cc6f4eb3 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Via.cs @@ -0,0 +1,248 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Common; +using BizHawk.Emulation.Cores.Computers.Commodore64.Media; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +{ + public sealed partial class Via + { + private const int PCR_INT_CONTROL_NEGATIVE_EDGE = 0x00; + private const int PCR_INT_CONTROL_POSITIVE_EDGE = 0x01; + private const int PCR_CONTROL_INPUT_NEGATIVE_ACTIVE_EDGE = 0x00; + private const int PCR_CONTROL_INDEPENDENT_INTERRUPT_INPUT_NEGATIVE_EDGE = 0x02; + private const int PCR_CONTROL_INPUT_POSITIVE_ACTIVE_EDGE = 0x04; + private const int PCR_CONTROL_INDEPENDENT_INTERRUPT_INPUT_POSITIVE_EDGE = 0x06; + private const int PCR_CONTROL_HANDSHAKE_OUTPUT = 0x08; + private const int PCR_CONTROL_PULSE_OUTPUT = 0x0A; + private const int PCR_CONTROL_LOW_OUTPUT = 0x0C; + private const int PCR_CONTROL_HIGH_OUTPUT = 0x0E; + private const int ACR_SR_CONTROL_DISABLED = 0x00; + private const int ACR_SR_CONTROL_SHIFT_IN_T2_ONCE = 0x04; + private const int ACR_SR_CONTROL_SHIFT_IN_PHI2 = 0x08; + private const int ACR_SR_CONTROL_SHIFT_IN_CLOCK = 0x0C; + private const int ACR_SR_CONTROL_SHIFT_OUT_T2 = 0x10; + private const int ACR_SR_CONTROL_SHIFT_OUT_T2_ONCE = 0x14; + private const int ACR_SR_CONTROL_SHIFT_OUT_PHI2 = 0x18; + private const int ACR_SR_CONTROL_SHIFT_OUT_CLOCK = 0x1C; + private const int ACR_T2_CONTROL_TIMED = 0x00; + private const int ACR_T2_CONTROL_COUNT_ON_PB6 = 0x20; + private const int ACR_T1_CONTROL_INTERRUPT_ON_LOAD = 0x00; + private const int ACR_T1_CONTROL_CONTINUOUS_INTERRUPTS = 0x40; + private const int ACR_T1_CONTROL_INTERRUPT_ON_LOAD_AND_ONESHOT_PB7 = 0x80; + private const int ACR_T1_CONTROL_CONTINUOUS_INTERRUPTS_AND_OUTPUT_ON_PB7 = 0xC0; + + private int _pra; + private int _ddra; + private int _prb; + private int _ddrb; + private int _t1C; + private int _t1L; + private int _t2C; + private int _t2L; + private int _sr; + private int _acr; + private int _pcr; + private int _ifr; + private int _ier; + private readonly Port _port; + + private int _paLatch; + private int _pbLatch; + + private int _pcrCa1IntControl; + private int _pcrCa2Control; + private int _pcrCb1IntControl; + private int _pcrCb2Control; + private bool _acrPaLatchEnable; + private bool _acrPbLatchEnable; + private int _acrSrControl; + private int _acrT1Control; + private int _acrT2Control; + + private bool _ca1L; + private bool _ca2L; + private bool _cb1L; + private bool _cb2L; + + private int _shiftCount; + + public bool Ca1; + public bool Ca2; + public bool Cb1; + public bool Cb2; + + public Via() + { + _port = new DisconnectedPort(); + } + + public Via(Func readPrA, Func readPrB) + { + _port = new DriverPort(readPrA, readPrB); + } + + public Via(Func readClock, Func readData, Func readAtn, int driveNumber) + { + _port = new IecPort(readClock, readData, readAtn, driveNumber); + _ca1L = true; + } + + [SaveState.DoNotSave] + public bool Irq + { + get { return (_ifr & 0x80) == 0; } + } + + public void HardReset() + { + _pra = 0; + _prb = 0; + _ddra = 0; + _ddrb = 0; + _t1C = 0; + _t1L = 0; + _t2C = 0; + _t2L = 0; + _sr = 0; + _acr = 0; + _pcr = 0; + _ifr = 0; + _ier = 0; + _paLatch = 0; + _pbLatch = 0; + _pcrCa1IntControl = 0; + _pcrCa2Control = 0; + _pcrCb1IntControl = 0; + _pcrCb2Control = 0; + _acrPaLatchEnable = false; + _acrPbLatchEnable = false; + _acrSrControl = 0; + _acrT1Control = 0; + _acrT2Control = 0; + _ca1L = false; + _cb1L = false; + Ca1 = false; + Ca2 = false; + Cb1 = false; + Cb2 = false; + } + + private bool ProcessC2(bool c2, int control) + { + switch (control) + { + case PCR_CONTROL_INPUT_NEGATIVE_ACTIVE_EDGE: + return c2; + case PCR_CONTROL_INDEPENDENT_INTERRUPT_INPUT_NEGATIVE_EDGE: + return c2; + case PCR_CONTROL_INPUT_POSITIVE_ACTIVE_EDGE: + return c2; + case PCR_CONTROL_INDEPENDENT_INTERRUPT_INPUT_POSITIVE_EDGE: + return c2; + case PCR_CONTROL_HANDSHAKE_OUTPUT: + return c2; + case PCR_CONTROL_PULSE_OUTPUT: + return c2; + case PCR_CONTROL_LOW_OUTPUT: + return false; + case PCR_CONTROL_HIGH_OUTPUT: + return true; + } + return c2; + } + + public void ExecutePhase() + { + _t1C--; + if (_t1C < 0) + { + if (_acrT1Control == ACR_T1_CONTROL_CONTINUOUS_INTERRUPTS || + _acrT1Control == ACR_T1_CONTROL_CONTINUOUS_INTERRUPTS_AND_OUTPUT_ON_PB7) + { + _t1C = _t1L; + } + _ifr |= 0x40; + } + + if (_acrT2Control == ACR_T2_CONTROL_TIMED) + { + _t2C--; + if (_t2C < 0) + { + _ifr |= 0x20; + _t2C = _t2L; + } + } + + Ca2 = ProcessC2(Ca2, _pcrCa2Control); + Cb2 = ProcessC2(Cb2, _pcrCb2Control); + + // unknown behavior + + if (_acrT1Control != ACR_T1_CONTROL_CONTINUOUS_INTERRUPTS && + _acrT1Control != ACR_T1_CONTROL_CONTINUOUS_INTERRUPTS_AND_OUTPUT_ON_PB7) + { + // unknown ACR T1 control + } + + if (_acrT2Control != ACR_T2_CONTROL_TIMED) + { + // unknown ACR T2 control + } + + + // interrupt generation + + if ((_pcrCb1IntControl == PCR_INT_CONTROL_POSITIVE_EDGE && Cb1 && !_cb1L) || + (_pcrCb1IntControl == PCR_INT_CONTROL_NEGATIVE_EDGE && !Cb1 && _cb1L)) + { + _ifr |= 0x01; + if (_acrPbLatchEnable) + { + _pbLatch = _port.ReadExternalPrb(); + } + } + + if ((_pcrCa1IntControl == PCR_INT_CONTROL_POSITIVE_EDGE && Ca1 && !_ca1L) || + (_pcrCa1IntControl == PCR_INT_CONTROL_NEGATIVE_EDGE && !Ca1 && _ca1L)) + { + _ifr |= 0x02; + if (_acrPaLatchEnable) + { + _paLatch = _port.ReadExternalPra(); + } + } + + switch (_acrSrControl) + { + case ACR_SR_CONTROL_DISABLED: + _ifr &= 0xFB; + break; + default: + break; + } + + if ((_ifr & _ier & 0x7F) != 0) + { + _ifr |= 0x80; + } + else + { + _ifr &= 0x7F; + } + + _ca1L = Ca1; + _ca2L = Ca2; + _cb1L = Cb1; + _cb2L = Cb2; + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Parse.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Parse.cs index ac5d441678..9f73085c08 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Parse.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Parse.cs @@ -1,259 +1,259 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Vic + public sealed partial class Vic { - const int baResetCounter = 7; - const int pipelineUpdateVc = 1; - const int pipelineChkSprCrunch = 2; - const int pipelineUpdateMcBase = 4; - const int pipelineChkBrdL1 = 8; - const int pipelineChkBrdL0 = 16; - const int pipelineChkSprDma = 32; - const int pipelineChkBrdR0 = 64; - const int pipelineChkSprExp = 128; - const int pipelineChkBrdR1 = 256; - const int pipelineChkSprDisp = 512; - const int pipelineUpdateRc = 1024; - const int pipelineHBlankL = 0x10000000; - const int pipelineHBlankR = 0x20000000; - const int pipelineHoldX = 0x40000000; - const int rasterIrqLine0Cycle = 1; - const int rasterIrqLineXCycle = 0; + private const int BaResetCounter = 4; + private const int PipelineUpdateVc = 0x00000001; // vc/rc rule 2 + private const int PipelineSpriteCrunch = 0x00000002; + private const int PipelineUpdateMcBase = 0x00000004; + private const int PipelineBorderLeft1 = 0x00000008; + private const int PipelineBorderLeft0 = 0x00000010; + private const int PipelineSpriteDma = 0x00000020; // sprite rule 3 + private const int PipelineBorderRight0 = 0x00000040; + private const int PipelineSpriteExpansion = 0x00000080; // sprite rule 2 + private const int PipelineBorderRight1 = 0x00000100; + private const int PipelineSpriteDisplay = 0x00000200; // sprite rule 4 + private const int PipelineUpdateRc = 0x00000400; // vc/rc rule 5 + private const int PipelineHoldX = 0x40000000; + private const int RasterIrqLine0Cycle = 2; + private const int RasterIrqLineXCycle = 1; + private const int FetchTypeSprite = 0x0000; + private const int FetchTypeRefresh = 0x0100; + private const int FetchTypeColor = 0x0200; + private const int FetchTypeGraphics = 0x0300; + private const int FetchTypeIdle = 0x0400; + private const int FetchTypeNone = 0x0500; + private const int BaTypeNone = 0x0888; + private const int BaTypeCharacter = 0x1000; + private const int BaTypeMaskSprite0 = 0x000F; + private const int BaTypeMaskSprite1 = 0x00F0; + private const int BaTypeMaskSprite2 = 0x0F00; + private const int AddressMask = 0x3FFF; + private const int AddressMaskEc = 0x39FF; + private const int AddressMaskRefresh = 0x3F00; - private int parseaddr; - private int parsecycleBAsprite0; - private int parsecycleBAsprite1; - private int parsecycleBAsprite2; - private int parsecycleFetchSpriteIndex; - private int parsefetch; - private int parsefetchType; - private int parseba; - private int parseact; + [SaveState.DoNotSave] private int _parseAddr; + [SaveState.DoNotSave] private int _parseCycleBaSprite0; + [SaveState.DoNotSave] private int _parseCycleBaSprite1; + [SaveState.DoNotSave] private int _parseCycleBaSprite2; + [SaveState.DoNotSave] private int _parseCycleFetchSpriteIndex; + [SaveState.DoNotSave] private int _parseFetch; + [SaveState.DoNotSave] private int _parseFetchType; + [SaveState.DoNotSave] private int _parseBa; + [SaveState.DoNotSave] private int _parseAct; + private bool _parseIsSprCrunch; private void ParseCycle() { - parseaddr = 0x3FFF; - parsefetch = pipeline[1][cycleIndex]; - parseba = pipeline[2][cycleIndex]; - parseact = pipeline[3][cycleIndex]; + // initialization + _parseAddr = AddressMask; + _parseFetch = _fetchPipeline[_cycleIndex]; + _parseBa = _baPipeline[_cycleIndex]; + _parseAct = _actPipeline[_cycleIndex]; // apply X location - rasterX = pipeline[0][cycleIndex]; - rasterXHold = ((parseact & pipelineHoldX) != 0); + _rasterX = _rasterXPipeline[_cycleIndex]; + _rasterXHold = (_parseAct & PipelineHoldX) != 0; // perform fetch - parsefetchType = parsefetch & 0xFF00; - if (parsefetchType == 0x100) + _parseFetchType = _parseFetch & 0xFF00; + switch (_parseFetchType) { - // fetch R - refreshCounter = (refreshCounter - 1) & 0xFF; - parseaddr = (0x3F00 | refreshCounter); - ReadMemory(parseaddr); - } - else if (parsefetchType == 0x200) - { - delayC = xScroll; - if (!idle) - { - if (badline) - { - parseaddr = (pointerVM | vc); - dataC = ReadMemory(parseaddr); - dataC |= ((int)ReadColorRam(parseaddr) & 0xF) << 8; - bufferC[vmli] = dataC; - } - else - { - dataC = bufferC[vmli]; - } - } - else - { - dataC = 0; - bufferC[vmli] = dataC; - } - srC <<= 12; - srC |= dataC; - } - else if (parsefetchType == 0x300) - { - // fetch G - if (idle) - parseaddr = 0x3FFF; - else - { - if (bitmapMode) - parseaddr = (rc | (vc << 3) | ((pointerCB & 0x4) << 11)); - else - parseaddr = (rc | ((dataC & 0xFF) << 3) | (pointerCB << 11)); - } - if (extraColorMode) - parseaddr &= 0x39FF; - dataG = ReadMemory(parseaddr); - sr |= dataG << (7 - xScroll); - srSync |= 0xAA << (7 - xScroll); - if (!idle) - { - bufferG[vmli] = dataG; - vmli = (vmli + 1) & 0x3F; - vc = (vc + 1) & 0x3FF; - } - } - else if (parsefetchType == 0x400) - { - // fetch I - parseaddr = (extraColorMode ? 0x39FF : 0x3FFF); - dataG = ReadMemory(parseaddr); - } - else if (parsefetchType == 0x500) - { - // fetch none - } - else - { - parsecycleFetchSpriteIndex = (parsefetch & 0x7); - if ((parsefetch & 0xF0) == 0) // sprite rule 5 - { - // fetch P - parseaddr = (0x3F8 | pointerVM | parsecycleFetchSpriteIndex); - sprites[parsecycleFetchSpriteIndex].pointer = ReadMemory(parseaddr); - sprites[parsecycleFetchSpriteIndex].shiftEnable = false; - } - else - { - // fetch S - var spr = sprites[parsecycleFetchSpriteIndex]; - if (spr.dma) + case FetchTypeColor: + // fetch C + if (!_idle) + { + if (_badline) + { + _parseAddr = _pointerVm | _vc; + _dataC = ReadMemory(_parseAddr); + _dataC |= (ReadColorRam(_parseAddr) & 0xF) << 8; + _bufferC[_vmli] = _dataC; + } + else + { + _dataC = _bufferC[_vmli]; + } + } + else + { + _dataC = 0; + _bufferC[_vmli] = _dataC; + } + _srColorSync |= 0x01 << (7 - _xScroll); + break; + case FetchTypeGraphics: + // fetch G + if (!_idle) + { + if (_bitmapMode) + _parseAddr = _rc | (_vc << 3) | ((_pointerCb & 0x4) << 11); + else + _parseAddr = _rc | ((_dataC & 0xFF) << 3) | (_pointerCb << 11); + } + if (_extraColorModeBuffer) + _parseAddr &= AddressMaskEc; + _dataG = ReadMemory(_parseAddr); + _sr |= _dataG << (7 - _xScroll); + _srSync |= 0xAA << (7 - _xScroll); + if (!_idle) { - parseaddr = (spr.mc | (spr.pointer << 6)); - spr.sr |= (int)(ReadMemory(parseaddr)) << ((0x30 - (parsefetch & 0x30)) >> 1); - spr.mc++; - spr.loaded |= 0x800000; + _bufferG[_vmli] = _dataG; + _vmli = (_vmli + 1) & 0x3F; + _vc = (_vc + 1) & 0x3FF; + } + break; + case FetchTypeNone: + // fetch none + break; + case FetchTypeRefresh: + // fetch R + _refreshCounter = (_refreshCounter - 1) & 0xFF; + _parseAddr = AddressMaskRefresh | _refreshCounter; + ReadMemory(_parseAddr); + break; + case FetchTypeIdle: + // fetch I + ReadMemory(AddressMask); + break; + default: + _parseCycleFetchSpriteIndex = _parseFetch & 0x7; + if ((_parseFetch & 0xF0) == 0) // sprite rule 5 + { + // fetch P + _parseAddr = 0x3F8 | _pointerVm | _parseCycleFetchSpriteIndex; + _sprites[_parseCycleFetchSpriteIndex].Pointer = ReadMemory(_parseAddr); + _sprites[_parseCycleFetchSpriteIndex].ShiftEnable = false; + } + else + { + // fetch S + var spr = _sprites[_parseCycleFetchSpriteIndex]; + if (spr.Dma) + { + _parseAddr = spr.Mc | (spr.Pointer << 6); + spr.Sr |= ReadMemory(_parseAddr) << ((0x30 - (_parseFetch & 0x30)) >> 1); + spr.Mc++; + spr.Loaded |= 0x800000; + } + else if ((_parseFetch & 0xF0) == 0x20) + { + ReadMemory(AddressMask); + } } - } - } - - // perform BA flag manipulation - if (parseba == 0x0000) - { - pinBA = true; - } - else if (parseba == 0x1000) - { - pinBA = !badline; - } - else - { - parsecycleBAsprite0 = (parseba & 0x000F); - parsecycleBAsprite1 = (parseba & 0x00F0) >> 4; - parsecycleBAsprite2 = (parseba & 0x0F00) >> 8; - if ((parsecycleBAsprite0 < 8 && sprites[parsecycleBAsprite0].dma) || - (parsecycleBAsprite1 < 8 && sprites[parsecycleBAsprite1].dma) || - (parsecycleBAsprite2 < 8 && sprites[parsecycleBAsprite2].dma)) - pinBA = false; - else - pinBA = true; + break; } // perform actions - borderCheckLEnable = ((parseact & (pipelineChkBrdL0 | pipelineChkBrdL1)) != 0); - borderCheckREnable = ((parseact & (pipelineChkBrdR0 | pipelineChkBrdR1)) != 0); - hblankCheckEnableL = ((parseact & pipelineHBlankL) != 0); - hblankCheckEnableR = ((parseact & pipelineHBlankR) != 0); + _borderCheckLEnable = (_parseAct & (PipelineBorderLeft0 | PipelineBorderLeft1)) != 0; + _borderCheckREnable = (_parseAct & (PipelineBorderRight0 | PipelineBorderRight1)) != 0; - foreach (var spr in sprites) + foreach (var spr in _sprites) // sprite rule 1 { - if (!spr.yExpand) - spr.yCrunch = true; + if (!spr.YExpand) + spr.YCrunch = true; } - if ((parseact & pipelineChkSprExp) != 0) - { - foreach (var spr in sprites) - { - if (spr.yExpand) - spr.yCrunch ^= true; - } - } - - if ((parseact & pipelineChkSprDma) != 0) - { - foreach (var spr in sprites) - { - if (spr.enable && spr.y == (rasterLine & 0xFF) && !spr.dma) - { - spr.dma = true; - spr.mcbase = 0; - spr.yCrunch = !spr.yExpand; - } - } - } - - if ((parseact & pipelineChkSprDisp) != 0) - { - foreach (var spr in sprites) - { - spr.mc = spr.mcbase; - if (spr.dma && spr.y == (rasterLine & 0xFF)) - { - spr.display = true; - } - else if (!spr.dma) - { - spr.display = false; - } - } - } - - if ((parseact & pipelineChkSprCrunch) != 0) - { - // not sure if anything has to go here, - // some sources say yes, some say no... - } - - if ((parseact & pipelineUpdateMcBase) != 0) - { - foreach (var spr in sprites) - { - if (spr.yCrunch) - { - spr.mcbase = spr.mc; - if (spr.mcbase == 63) - { - if (!spr.yCrunch) - { - } - spr.dma = false; - } - } + if ((_parseAct & PipelineUpdateMcBase) != 0) // VIC addendum sprite rule 7 + { + foreach (var spr in _sprites) + { + if (spr.YCrunch) + { + spr.Mcbase = spr.Mc; + if (spr.Mcbase == 63) + { + spr.Dma = false; + } + } } - } + } - if ((parseact & pipelineUpdateRc) != 0) // VC/RC rule 5 + if ((_parseAct & PipelineSpriteDma) != 0) // sprite rule 3 { - if (rc == 7) + foreach (var spr in _sprites) { - idle = true; - vcbase = vc; + if (spr.Enable && spr.Y == (_rasterLine & 0xFF) && !spr.Dma) + { + spr.Dma = true; + spr.Mcbase = 0; + spr.YCrunch = true; + } } - if (!idle) - rc = (rc + 1) & 0x7; } - if ((parseact & pipelineUpdateVc) != 0) // VC/RC rule 2 + if ((_parseAct & PipelineSpriteExpansion) != 0) // sprite rule 2 + { + foreach (var spr in _sprites) + { + if (spr.Dma && spr.YExpand) + spr.YCrunch ^= true; + } + } + + if ((_parseAct & PipelineSpriteDisplay) != 0) // VIC addendum on sprite rule 4 { - vc = vcbase; - vmli = 0; - if (badline) - rc = 0; + foreach (var spr in _sprites) + { + spr.Mc = spr.Mcbase; + if (spr.Dma) + { + if (spr.Enable && spr.Y == (_rasterLine & 0xFF)) + spr.Display = true; + } + else + { + spr.Display = false; + } + } } - cycleIndex++; + _parseIsSprCrunch = (_parseAct & PipelineSpriteCrunch) != 0; // VIC addendum sprite rule 7 + + if ((_parseAct & PipelineUpdateVc) != 0) // VC/RC rule 2 + { + _vc = _vcbase; + _srColorIndexLatch = 0; + _vmli = 0; + if (_badline) + _rc = 0; + } + + if ((_parseAct & PipelineUpdateRc) != 0) // VC/RC rule 5 + { + if (_rc == 7) + { + _idle = true; + _vcbase = _vc; + } + if (!_idle || _badline) + { + _rc = (_rc + 1) & 0x7; + _idle = false; + } + } + + // perform BA flag manipulation + _pinBa = true; + switch (_parseBa) + { + case BaTypeNone: + break; + case BaTypeCharacter: + _pinBa = !_badline; + break; + default: + _parseCycleBaSprite0 = _parseBa & BaTypeMaskSprite0; + _parseCycleBaSprite1 = (_parseBa & BaTypeMaskSprite1) >> 4; + _parseCycleBaSprite2 = (_parseBa & BaTypeMaskSprite2) >> 8; + if ((_parseCycleBaSprite0 < 8 && _sprites[_parseCycleBaSprite0].Dma) || + (_parseCycleBaSprite1 < 8 && _sprites[_parseCycleBaSprite1].Dma) || + (_parseCycleBaSprite2 < 8 && _sprites[_parseCycleBaSprite2].Dma)) + _pinBa = false; + break; + } + + _cycleIndex++; } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Registers.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Registers.cs index ad7a9740de..dbbbf4318e 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Registers.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Registers.cs @@ -1,56 +1,36 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Vic + public sealed partial class Vic { - public byte Peek(long addr) + public int Peek(int addr) { - return ReadRegister((int)(addr & 0x3F)); + return ReadRegister(addr & 0x3F); } - public void Poke(long addr, byte val) + public void Poke(int addr, int val) { - WriteRegister((int)(addr & 0x3F), val); + WriteRegister(addr & 0x3F, val); } - public byte Peek(int addr) + public int Read(int addr) { - return ReadRegister((int)(addr & 0x3F)); - } - - public void Poke(int addr, byte val) - { - WriteRegister((int)(addr & 0x3F), val); - } - - public byte Read(int addr) - { - byte result; addr &= 0x3F; switch (addr) { case 0x1E: - case 0x1F: - // reading clears these - result = ReadRegister(addr); - WriteRegister(addr, 0); - break; + _spriteSpriteCollisionClearPending = true; + return ReadRegister(addr); + case 0x1F: + _spriteBackgroundCollisionClearPending = true; + return ReadRegister(addr); default: - result = ReadRegister((addr & 0x3F)); - break; + return ReadRegister(addr); } - return result; } - private byte ReadRegister(int addr) + private int ReadRegister(int addr) { - byte result = 0xFF; //unused bit value - switch (addr) { case 0x00: @@ -61,8 +41,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS case 0x0A: case 0x0C: case 0x0E: - result = (byte)(sprites[addr >> 1].x & 0xFF); - break; + return _sprites[addr >> 1].X & 0xFF; case 0x01: case 0x03: case 0x05: @@ -71,185 +50,124 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS case 0x0B: case 0x0D: case 0x0F: - result = (byte)(sprites[addr >> 1].y & 0xFF); - break; + return _sprites[addr >> 1].Y & 0xFF; case 0x10: - result = (byte)( - ((sprites[0].x >> 8) & 0x01) | - ((sprites[1].x >> 7) & 0x02) | - ((sprites[2].x >> 6) & 0x04) | - ((sprites[3].x >> 5) & 0x08) | - ((sprites[4].x >> 4) & 0x10) | - ((sprites[5].x >> 3) & 0x20) | - ((sprites[6].x >> 2) & 0x40) | - ((sprites[7].x >> 1) & 0x80) - ); - break; + return ((_sprite0.X >> 8) & 0x01) | + ((_sprite1.X >> 7) & 0x02) | + ((_sprite2.X >> 6) & 0x04) | + ((_sprite3.X >> 5) & 0x08) | + ((_sprite4.X >> 4) & 0x10) | + ((_sprite5.X >> 3) & 0x20) | + ((_sprite6.X >> 2) & 0x40) | + ((_sprite7.X >> 1) & 0x80); case 0x11: - result = (byte)( - (yScroll & 0x7) | - (rowSelect ? 0x08 : 0x00) | - (displayEnable ? 0x10 : 0x00) | - (bitmapMode ? 0x20 : 0x00) | - (extraColorMode ? 0x40 : 0x00) | - ((rasterLine & 0x100) >> 1) - ); - break; + return (_yScroll & 0x7) | + (_rowSelect ? 0x08 : 0x00) | + (_displayEnable ? 0x10 : 0x00) | + (_bitmapMode ? 0x20 : 0x00) | + (_extraColorMode ? 0x40 : 0x00) | + ((_rasterLine & 0x100) >> 1); case 0x12: - result = (byte)(rasterLine & 0xFF); - break; + return _rasterLine & 0xFF; case 0x13: - result = (byte)(lightPenX & 0xFF); - break; + return _lightPenX & 0xFF; case 0x14: - result = (byte)(lightPenY & 0xFF); - break; + return _lightPenY & 0xFF; case 0x15: - result = (byte)( - (sprites[0].enable ? 0x01 : 0x00) | - (sprites[1].enable ? 0x02 : 0x00) | - (sprites[2].enable ? 0x04 : 0x00) | - (sprites[3].enable ? 0x08 : 0x00) | - (sprites[4].enable ? 0x10 : 0x00) | - (sprites[5].enable ? 0x20 : 0x00) | - (sprites[6].enable ? 0x40 : 0x00) | - (sprites[7].enable ? 0x80 : 0x00) - ); - break; + return (_sprite0.Enable ? 0x01 : 0x00) | + (_sprite1.Enable ? 0x02 : 0x00) | + (_sprite2.Enable ? 0x04 : 0x00) | + (_sprite3.Enable ? 0x08 : 0x00) | + (_sprite4.Enable ? 0x10 : 0x00) | + (_sprite5.Enable ? 0x20 : 0x00) | + (_sprite6.Enable ? 0x40 : 0x00) | + (_sprite7.Enable ? 0x80 : 0x00); case 0x16: - result &= 0xC0; - result |= (byte)( - (xScroll & 0x7) | - (columnSelect ? 0x08 : 0x00) | - (multicolorMode ? 0x10 : 0x00) - ); - break; + return 0xC0 | (_xScroll & 0x7) | + (_columnSelect ? 0x08 : 0x00) | + (_multicolorMode ? 0x10 : 0x00); case 0x17: - result = (byte)( - (sprites[0].yExpand ? 0x01 : 0x00) | - (sprites[1].yExpand ? 0x02 : 0x00) | - (sprites[2].yExpand ? 0x04 : 0x00) | - (sprites[3].yExpand ? 0x08 : 0x00) | - (sprites[4].yExpand ? 0x10 : 0x00) | - (sprites[5].yExpand ? 0x20 : 0x00) | - (sprites[6].yExpand ? 0x40 : 0x00) | - (sprites[7].yExpand ? 0x80 : 0x00) - ); - break; + return (_sprite0.YExpand ? 0x01 : 0x00) | + (_sprite1.YExpand ? 0x02 : 0x00) | + (_sprite2.YExpand ? 0x04 : 0x00) | + (_sprite3.YExpand ? 0x08 : 0x00) | + (_sprite4.YExpand ? 0x10 : 0x00) | + (_sprite5.YExpand ? 0x20 : 0x00) | + (_sprite6.YExpand ? 0x40 : 0x00) | + (_sprite7.YExpand ? 0x80 : 0x00); case 0x18: - result &= 0x01; - result |= (byte)( - ((pointerVM & 0x3C00) >> 6) | - ((pointerCB & 0x7) << 1) - ); - break; + return 0x01 | ((_pointerVm & 0x3C00) >> 6) | + ((_pointerCb & 0x7) << 1); case 0x19: - result &= 0x70; - result |= (byte)( - (intRaster ? 0x01 : 0x00) | - (intSpriteDataCollision ? 0x02 : 0x00) | - (intSpriteCollision ? 0x04 : 0x00) | - (intLightPen ? 0x08 : 0x00) | - (pinIRQ ? 0x00 : 0x80) - ); - break; + return 0x70 | (_intRaster ? 0x01 : 0x00) | + (_intSpriteDataCollision ? 0x02 : 0x00) | + (_intSpriteCollision ? 0x04 : 0x00) | + (_intLightPen ? 0x08 : 0x00) | + (_pinIrq ? 0x00 : 0x80); case 0x1A: - result &= 0xF0; - result |= (byte)( - (enableIntRaster ? 0x01 : 0x00) | - (enableIntSpriteDataCollision ? 0x02 : 0x00) | - (enableIntSpriteCollision ? 0x04 : 0x00) | - (enableIntLightPen ? 0x08 : 0x00) - ); - break; + return 0xF0 | (_enableIntRaster ? 0x01 : 0x00) | + (_enableIntSpriteDataCollision ? 0x02 : 0x00) | + (_enableIntSpriteCollision ? 0x04 : 0x00) | + (_enableIntLightPen ? 0x08 : 0x00); case 0x1B: - result = (byte)( - (sprites[0].priority ? 0x01 : 0x00) | - (sprites[1].priority ? 0x02 : 0x00) | - (sprites[2].priority ? 0x04 : 0x00) | - (sprites[3].priority ? 0x08 : 0x00) | - (sprites[4].priority ? 0x10 : 0x00) | - (sprites[5].priority ? 0x20 : 0x00) | - (sprites[6].priority ? 0x40 : 0x00) | - (sprites[7].priority ? 0x80 : 0x00) - ); - break; + return (_sprite0.Priority ? 0x01 : 0x00) | + (_sprite1.Priority ? 0x02 : 0x00) | + (_sprite2.Priority ? 0x04 : 0x00) | + (_sprite3.Priority ? 0x08 : 0x00) | + (_sprite4.Priority ? 0x10 : 0x00) | + (_sprite5.Priority ? 0x20 : 0x00) | + (_sprite6.Priority ? 0x40 : 0x00) | + (_sprite7.Priority ? 0x80 : 0x00); case 0x1C: - result = (byte)( - (sprites[0].multicolor ? 0x01 : 0x00) | - (sprites[1].multicolor ? 0x02 : 0x00) | - (sprites[2].multicolor ? 0x04 : 0x00) | - (sprites[3].multicolor ? 0x08 : 0x00) | - (sprites[4].multicolor ? 0x10 : 0x00) | - (sprites[5].multicolor ? 0x20 : 0x00) | - (sprites[6].multicolor ? 0x40 : 0x00) | - (sprites[7].multicolor ? 0x80 : 0x00) - ); - break; + return (_sprite0.Multicolor ? 0x01 : 0x00) | + (_sprite1.Multicolor ? 0x02 : 0x00) | + (_sprite2.Multicolor ? 0x04 : 0x00) | + (_sprite3.Multicolor ? 0x08 : 0x00) | + (_sprite4.Multicolor ? 0x10 : 0x00) | + (_sprite5.Multicolor ? 0x20 : 0x00) | + (_sprite6.Multicolor ? 0x40 : 0x00) | + (_sprite7.Multicolor ? 0x80 : 0x00); case 0x1D: - result = (byte)( - (sprites[0].xExpand ? 0x01 : 0x00) | - (sprites[1].xExpand ? 0x02 : 0x00) | - (sprites[2].xExpand ? 0x04 : 0x00) | - (sprites[3].xExpand ? 0x08 : 0x00) | - (sprites[4].xExpand ? 0x10 : 0x00) | - (sprites[5].xExpand ? 0x20 : 0x00) | - (sprites[6].xExpand ? 0x40 : 0x00) | - (sprites[7].xExpand ? 0x80 : 0x00) - ); - break; + return (_sprite0.XExpand ? 0x01 : 0x00) | + (_sprite1.XExpand ? 0x02 : 0x00) | + (_sprite2.XExpand ? 0x04 : 0x00) | + (_sprite3.XExpand ? 0x08 : 0x00) | + (_sprite4.XExpand ? 0x10 : 0x00) | + (_sprite5.XExpand ? 0x20 : 0x00) | + (_sprite6.XExpand ? 0x40 : 0x00) | + (_sprite7.XExpand ? 0x80 : 0x00); case 0x1E: - result = (byte)( - (sprites[0].collideSprite ? 0x01 : 0x00) | - (sprites[1].collideSprite ? 0x02 : 0x00) | - (sprites[2].collideSprite ? 0x04 : 0x00) | - (sprites[3].collideSprite ? 0x08 : 0x00) | - (sprites[4].collideSprite ? 0x10 : 0x00) | - (sprites[5].collideSprite ? 0x20 : 0x00) | - (sprites[6].collideSprite ? 0x40 : 0x00) | - (sprites[7].collideSprite ? 0x80 : 0x00) - ); - break; + return (_sprite0.CollideSprite ? 0x01 : 0x00) | + (_sprite1.CollideSprite ? 0x02 : 0x00) | + (_sprite2.CollideSprite ? 0x04 : 0x00) | + (_sprite3.CollideSprite ? 0x08 : 0x00) | + (_sprite4.CollideSprite ? 0x10 : 0x00) | + (_sprite5.CollideSprite ? 0x20 : 0x00) | + (_sprite6.CollideSprite ? 0x40 : 0x00) | + (_sprite7.CollideSprite ? 0x80 : 0x00); case 0x1F: - result = (byte)( - (sprites[0].collideData ? 0x01 : 0x00) | - (sprites[1].collideData ? 0x02 : 0x00) | - (sprites[2].collideData ? 0x04 : 0x00) | - (sprites[3].collideData ? 0x08 : 0x00) | - (sprites[4].collideData ? 0x10 : 0x00) | - (sprites[5].collideData ? 0x20 : 0x00) | - (sprites[6].collideData ? 0x40 : 0x00) | - (sprites[7].collideData ? 0x80 : 0x00) - ); - break; + return (_sprite0.CollideData ? 0x01 : 0x00) | + (_sprite1.CollideData ? 0x02 : 0x00) | + (_sprite2.CollideData ? 0x04 : 0x00) | + (_sprite3.CollideData ? 0x08 : 0x00) | + (_sprite4.CollideData ? 0x10 : 0x00) | + (_sprite5.CollideData ? 0x20 : 0x00) | + (_sprite6.CollideData ? 0x40 : 0x00) | + (_sprite7.CollideData ? 0x80 : 0x00); case 0x20: - result &= 0xF0; - result |= (byte)(borderColor & 0x0F); - break; + return 0xF0 | _borderColor & 0x0F; case 0x21: - result &= 0xF0; - result |= (byte)(backgroundColor0 & 0x0F); - break; + return 0xF0 | _backgroundColor0 & 0x0F; case 0x22: - result &= 0xF0; - result |= (byte)(backgroundColor1 & 0x0F); - break; + return 0xF0 | _backgroundColor1 & 0x0F; case 0x23: - result &= 0xF0; - result |= (byte)(backgroundColor2 & 0x0F); - break; + return 0xF0 | _backgroundColor2 & 0x0F; case 0x24: - result &= 0xF0; - result |= (byte)(backgroundColor3 & 0x0F); - break; + return 0xF0 | _backgroundColor3 & 0x0F; case 0x25: - result &= 0xF0; - result |= (byte)(spriteMulticolor0 & 0x0F); - break; + return 0xF0 | _spriteMulticolor0 & 0x0F; case 0x26: - result &= 0xF0; - result |= (byte)(spriteMulticolor1 & 0x0F); - break; + return 0xF0 | _spriteMulticolor1 & 0x0F; case 0x27: case 0x28: case 0x29: @@ -258,37 +176,44 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS case 0x2C: case 0x2D: case 0x2E: - result &= 0xF0; - result |= (byte)(sprites[addr - 0x27].color & 0xF); - break; - default: - // not connected - break; + return 0xF0 | _sprites[addr - 0x27].Color & 0xF; + default: + return 0xFF; } - - return result; } - public void Write(int addr, byte val) + public void Write(int addr, int val) { addr &= 0x3F; switch (addr) { + case 0x17: + // vic-ii addendum rule 7 + foreach (var spr in _sprites) + { + if ((val & 1) == 0 && !spr.YCrunch) + { + if (_parseIsSprCrunch) + { + spr.Mc = (0x2a & spr.Mcbase & spr.Mc) | (0x15 & (spr.Mcbase | spr.Mc)); + } + spr.YCrunch = true; + } + } + WriteRegister(addr, val); + break; case 0x19: // interrupts are cleared by writing a 1 if ((val & 0x01) != 0) - intRaster = false; + _intRaster = false; if ((val & 0x02) != 0) - intSpriteDataCollision = false; + _intSpriteDataCollision = false; if ((val & 0x04) != 0) - intSpriteCollision = false; + _intSpriteCollision = false; if ((val & 0x08) != 0) - intLightPen = false; + _intLightPen = false; UpdatePins(); break; - case 0x1A: - WriteRegister(addr, val); - break; case 0x1E: case 0x1F: // can't write to these @@ -318,7 +243,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS } } - private void WriteRegister(int addr, byte val) + private void WriteRegister(int addr, int val) { switch (addr) { @@ -330,8 +255,8 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS case 0x0A: case 0x0C: case 0x0E: - sprites[addr >> 1].x &= 0x100; - sprites[addr >> 1].x |= val; + _sprites[addr >> 1].X &= 0x100; + _sprites[addr >> 1].X |= val; break; case 0x01: case 0x03: @@ -341,154 +266,154 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS case 0x0B: case 0x0D: case 0x0F: - sprites[addr >> 1].y = val; + _sprites[addr >> 1].Y = val; break; case 0x10: - sprites[0].x = (sprites[0].x & 0xFF) | ((val & 0x01) << 8); - sprites[1].x = (sprites[1].x & 0xFF) | ((val & 0x02) << 7); - sprites[2].x = (sprites[2].x & 0xFF) | ((val & 0x04) << 6); - sprites[3].x = (sprites[3].x & 0xFF) | ((val & 0x08) << 5); - sprites[4].x = (sprites[4].x & 0xFF) | ((val & 0x10) << 4); - sprites[5].x = (sprites[5].x & 0xFF) | ((val & 0x20) << 3); - sprites[6].x = (sprites[6].x & 0xFF) | ((val & 0x40) << 2); - sprites[7].x = (sprites[7].x & 0xFF) | ((val & 0x80) << 1); + _sprite0.X = (_sprite0.X & 0xFF) | ((val & 0x01) << 8); + _sprite1.X = (_sprite1.X & 0xFF) | ((val & 0x02) << 7); + _sprite2.X = (_sprite2.X & 0xFF) | ((val & 0x04) << 6); + _sprite3.X = (_sprite3.X & 0xFF) | ((val & 0x08) << 5); + _sprite4.X = (_sprite4.X & 0xFF) | ((val & 0x10) << 4); + _sprite5.X = (_sprite5.X & 0xFF) | ((val & 0x20) << 3); + _sprite6.X = (_sprite6.X & 0xFF) | ((val & 0x40) << 2); + _sprite7.X = (_sprite7.X & 0xFF) | ((val & 0x80) << 1); break; case 0x11: - yScroll = (val & 0x07); - rowSelect = ((val & 0x08) != 0); - displayEnable = ((val & 0x10) != 0); - bitmapMode = ((val & 0x20) != 0); - extraColorMode = ((val & 0x40) != 0); - rasterInterruptLine &= 0xFF; - rasterInterruptLine |= (val & 0x80) << 1; + _yScroll = val & 0x07; + _rowSelect = (val & 0x08) != 0; + _displayEnable = (val & 0x10) != 0; + _bitmapMode = (val & 0x20) != 0; + _extraColorMode = (val & 0x40) != 0; + _rasterInterruptLine &= 0xFF; + _rasterInterruptLine |= (val & 0x80) << 1; UpdateBorder(); UpdateVideoMode(); break; case 0x12: - rasterInterruptLine &= 0x100; - rasterInterruptLine |= val; + _rasterInterruptLine &= 0x100; + _rasterInterruptLine |= val; break; case 0x13: - lightPenX = val; + _lightPenX = val; break; case 0x14: - lightPenY = val; + _lightPenY = val; break; case 0x15: - sprites[0].enable = ((val & 0x01) != 0); - sprites[1].enable = ((val & 0x02) != 0); - sprites[2].enable = ((val & 0x04) != 0); - sprites[3].enable = ((val & 0x08) != 0); - sprites[4].enable = ((val & 0x10) != 0); - sprites[5].enable = ((val & 0x20) != 0); - sprites[6].enable = ((val & 0x40) != 0); - sprites[7].enable = ((val & 0x80) != 0); + _sprite0.Enable = (val & 0x01) != 0; + _sprite1.Enable = (val & 0x02) != 0; + _sprite2.Enable = (val & 0x04) != 0; + _sprite3.Enable = (val & 0x08) != 0; + _sprite4.Enable = (val & 0x10) != 0; + _sprite5.Enable = (val & 0x20) != 0; + _sprite6.Enable = (val & 0x40) != 0; + _sprite7.Enable = (val & 0x80) != 0; break; case 0x16: - xScroll = (val & 0x07); - columnSelect = ((val & 0x08) != 0); - multicolorMode = ((val & 0x10) != 0); + _xScroll = val & 0x07; + _columnSelect = (val & 0x08) != 0; + _multicolorMode = (val & 0x10) != 0; UpdateBorder(); UpdateVideoMode(); break; case 0x17: - sprites[0].yExpand = ((val & 0x01) != 0); - sprites[1].yExpand = ((val & 0x02) != 0); - sprites[2].yExpand = ((val & 0x04) != 0); - sprites[3].yExpand = ((val & 0x08) != 0); - sprites[4].yExpand = ((val & 0x10) != 0); - sprites[5].yExpand = ((val & 0x20) != 0); - sprites[6].yExpand = ((val & 0x40) != 0); - sprites[7].yExpand = ((val & 0x80) != 0); + _sprite0.YExpand = (val & 0x01) != 0; + _sprite1.YExpand = (val & 0x02) != 0; + _sprite2.YExpand = (val & 0x04) != 0; + _sprite3.YExpand = (val & 0x08) != 0; + _sprite4.YExpand = (val & 0x10) != 0; + _sprite5.YExpand = (val & 0x20) != 0; + _sprite6.YExpand = (val & 0x40) != 0; + _sprite7.YExpand = (val & 0x80) != 0; break; case 0x18: - pointerVM = ((val << 6) & 0x3C00); - pointerCB = ((val >> 1) & 0x7); + _pointerVm = (val << 6) & 0x3C00; + _pointerCb = (val >> 1) & 0x7; break; case 0x19: - intRaster = ((val & 0x01) != 0); - intSpriteDataCollision = ((val & 0x02) != 0); - intSpriteCollision = ((val & 0x04) != 0); - intLightPen = ((val & 0x08) != 0); + _intRaster = (val & 0x01) != 0; + _intSpriteDataCollision = (val & 0x02) != 0; + _intSpriteCollision = (val & 0x04) != 0; + _intLightPen = (val & 0x08) != 0; UpdatePins(); break; case 0x1A: - enableIntRaster = ((val & 0x01) != 0); - enableIntSpriteDataCollision = ((val & 0x02) != 0); - enableIntSpriteCollision = ((val & 0x04) != 0); - enableIntLightPen = ((val & 0x08) != 0); + _enableIntRaster = (val & 0x01) != 0; + _enableIntSpriteDataCollision = (val & 0x02) != 0; + _enableIntSpriteCollision = (val & 0x04) != 0; + _enableIntLightPen = (val & 0x08) != 0; UpdatePins(); break; case 0x1B: - sprites[0].priority = ((val & 0x01) != 0); - sprites[1].priority = ((val & 0x02) != 0); - sprites[2].priority = ((val & 0x04) != 0); - sprites[3].priority = ((val & 0x08) != 0); - sprites[4].priority = ((val & 0x10) != 0); - sprites[5].priority = ((val & 0x20) != 0); - sprites[6].priority = ((val & 0x40) != 0); - sprites[7].priority = ((val & 0x80) != 0); + _sprite0.Priority = (val & 0x01) != 0; + _sprite1.Priority = (val & 0x02) != 0; + _sprite2.Priority = (val & 0x04) != 0; + _sprite3.Priority = (val & 0x08) != 0; + _sprite4.Priority = (val & 0x10) != 0; + _sprite5.Priority = (val & 0x20) != 0; + _sprite6.Priority = (val & 0x40) != 0; + _sprite7.Priority = (val & 0x80) != 0; break; case 0x1C: - sprites[0].multicolor = ((val & 0x01) != 0); - sprites[1].multicolor = ((val & 0x02) != 0); - sprites[2].multicolor = ((val & 0x04) != 0); - sprites[3].multicolor = ((val & 0x08) != 0); - sprites[4].multicolor = ((val & 0x10) != 0); - sprites[5].multicolor = ((val & 0x20) != 0); - sprites[6].multicolor = ((val & 0x40) != 0); - sprites[7].multicolor = ((val & 0x80) != 0); + _sprite0.Multicolor = (val & 0x01) != 0; + _sprite1.Multicolor = (val & 0x02) != 0; + _sprite2.Multicolor = (val & 0x04) != 0; + _sprite3.Multicolor = (val & 0x08) != 0; + _sprite4.Multicolor = (val & 0x10) != 0; + _sprite5.Multicolor = (val & 0x20) != 0; + _sprite6.Multicolor = (val & 0x40) != 0; + _sprite7.Multicolor = (val & 0x80) != 0; break; case 0x1D: - sprites[0].xExpand = ((val & 0x01) != 0); - sprites[1].xExpand = ((val & 0x02) != 0); - sprites[2].xExpand = ((val & 0x04) != 0); - sprites[3].xExpand = ((val & 0x08) != 0); - sprites[4].xExpand = ((val & 0x10) != 0); - sprites[5].xExpand = ((val & 0x20) != 0); - sprites[6].xExpand = ((val & 0x40) != 0); - sprites[7].xExpand = ((val & 0x80) != 0); + _sprite0.XExpand = (val & 0x01) != 0; + _sprite1.XExpand = (val & 0x02) != 0; + _sprite2.XExpand = (val & 0x04) != 0; + _sprite3.XExpand = (val & 0x08) != 0; + _sprite4.XExpand = (val & 0x10) != 0; + _sprite5.XExpand = (val & 0x20) != 0; + _sprite6.XExpand = (val & 0x40) != 0; + _sprite7.XExpand = (val & 0x80) != 0; break; case 0x1E: - sprites[0].collideSprite = ((val & 0x01) != 0); - sprites[1].collideSprite = ((val & 0x02) != 0); - sprites[2].collideSprite = ((val & 0x04) != 0); - sprites[3].collideSprite = ((val & 0x08) != 0); - sprites[4].collideSprite = ((val & 0x10) != 0); - sprites[5].collideSprite = ((val & 0x20) != 0); - sprites[6].collideSprite = ((val & 0x40) != 0); - sprites[7].collideSprite = ((val & 0x80) != 0); + _sprite0.CollideSprite = (val & 0x01) != 0; + _sprite1.CollideSprite = (val & 0x02) != 0; + _sprite2.CollideSprite = (val & 0x04) != 0; + _sprite3.CollideSprite = (val & 0x08) != 0; + _sprite4.CollideSprite = (val & 0x10) != 0; + _sprite5.CollideSprite = (val & 0x20) != 0; + _sprite6.CollideSprite = (val & 0x40) != 0; + _sprite7.CollideSprite = (val & 0x80) != 0; break; case 0x1F: - sprites[0].collideData = ((val & 0x01) != 0); - sprites[1].collideData = ((val & 0x02) != 0); - sprites[2].collideData = ((val & 0x04) != 0); - sprites[3].collideData = ((val & 0x08) != 0); - sprites[4].collideData = ((val & 0x10) != 0); - sprites[5].collideData = ((val & 0x20) != 0); - sprites[6].collideData = ((val & 0x40) != 0); - sprites[7].collideData = ((val & 0x80) != 0); + _sprite0.CollideData = (val & 0x01) != 0; + _sprite1.CollideData = (val & 0x02) != 0; + _sprite2.CollideData = (val & 0x04) != 0; + _sprite3.CollideData = (val & 0x08) != 0; + _sprite4.CollideData = (val & 0x10) != 0; + _sprite5.CollideData = (val & 0x20) != 0; + _sprite6.CollideData = (val & 0x40) != 0; + _sprite7.CollideData = (val & 0x80) != 0; break; case 0x20: - borderColor = (val & 0xF); + _borderColor = val & 0xF; break; case 0x21: - backgroundColor0 = (val & 0xF); + _backgroundColor0 = val & 0xF; break; case 0x22: - backgroundColor1 = (val & 0xF); + _backgroundColor1 = val & 0xF; break; case 0x23: - backgroundColor2 = (val & 0xF); + _backgroundColor2 = val & 0xF; break; case 0x24: - backgroundColor3 = (val & 0xF); + _backgroundColor3 = val & 0xF; break; case 0x25: - spriteMulticolor0 = (val & 0xF); + _spriteMulticolor0 = val & 0xF; break; case 0x26: - spriteMulticolor1 = (val & 0xF); + _spriteMulticolor1 = val & 0xF; break; case 0x27: case 0x28: @@ -498,9 +423,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS case 0x2C: case 0x2D: case 0x2E: - sprites[addr - 0x27].color = (val & 0xF); - break; - default: + _sprites[addr - 0x27].Color = val & 0xF; break; } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Render.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Render.cs index d8093aa33e..148c18f5d8 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Render.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Render.cs @@ -1,261 +1,308 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS +namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Vic + public sealed partial class Vic { - private int delayC; - private int ecmPixel; - private int pixel; - private int pixelCounter; - private int pixelData; - private int pixelOwner; - private int sprData; - private int sprIndex; - private int sprPixel; - private int srC = 0; - private int srSync = 0; - private int videoMode; + [SaveState.DoNotSave] private int _borderPixel; + [SaveState.DoNotSave] private int _bufferPixel; + [SaveState.DoNotSave] private int _ecmPixel; + [SaveState.DoNotSave] private int _pixel; + [SaveState.DoNotSave] private int _pixelCounter; + [SaveState.DoNotSave] private int _pixelData; + [SaveState.DoNotSave] private int _pixelOwner; + [SaveState.DoNotSave] private int _sprData; + [SaveState.DoNotSave] private int _sprIndex; + [SaveState.DoNotSave] private int _sprPixel; + private int _srSync; + private int _srColorSync; + private int _srColorIndexLatch; + private int _videoMode; + private int _borderOnShiftReg; - private void Render() + [SaveState.DoNotSave] private const int VideoMode000 = 0; + [SaveState.DoNotSave] private const int VideoMode001 = 1; + [SaveState.DoNotSave] private const int VideoMode010 = 2; + [SaveState.DoNotSave] private const int VideoMode011 = 3; + [SaveState.DoNotSave] private const int VideoMode100 = 4; + [SaveState.DoNotSave] private const int VideoModeInvalid = -1; + + [SaveState.DoNotSave] private const int SrMask1 = 0x20000; + [SaveState.DoNotSave] private const int SrMask2 = SrMask1 << 1; + [SaveState.DoNotSave] private const int SrMask3 = SrMask1 | SrMask2; + [SaveState.DoNotSave] private const int SrColorMask = 0x8000; + [SaveState.DoNotSave] private const int SrSpriteMask = SrSpriteMask2; + [SaveState.DoNotSave] private const int SrSpriteMask1 = 0x400000; + [SaveState.DoNotSave] private const int SrSpriteMask2 = SrSpriteMask1 << 1; + [SaveState.DoNotSave] private const int SrSpriteMask3 = SrSpriteMask1 | SrSpriteMask2; + [SaveState.DoNotSave] private const int SrSpriteMaskMc = SrSpriteMask3; + + private void Render() { - if (hblankCheckEnableL) - { - if (rasterX == hblankEnd) - hblank = false; - } - else if (hblankCheckEnableR) - { - if (rasterX == hblankStart) - hblank = true; - } + if (_rasterX == _hblankEndCheckXRaster) + _hblank = false; + if (_rasterX == _hblankStartCheckXRaster) + _hblank = true; - renderEnabled = (!hblank && !vblank); - pixelCounter = -1; - while (pixelCounter++ < 3) + _renderEnabled = !_hblank && !_vblank; + _pixelCounter = -1; + while (_pixelCounter++ < 3) { - if (delayC > 0) - delayC--; - else - displayC = (srC >> 12) & 0xFFF; + if ((_srColorSync & SrColorMask) != 0) + { + _displayC = _bufferC[_srColorIndexLatch]; + _srColorIndexLatch = (_srColorIndexLatch + 1) & 0x3F; + } + #region PRE-RENDER BORDER - #region PRE-RENDER BORDER - if (borderCheckLEnable && (rasterX == borderL)) + // check left border + if (_borderCheckLEnable && (_rasterX == _borderL)) { - if (rasterLine == borderB) - borderOnVertical = true; - if (rasterLine == borderT && displayEnable) - borderOnVertical = false; - if (!borderOnVertical) - borderOnMain = false; + if (_rasterLine == _borderB) + _borderOnVertical = true; + if (_cycle == _totalCycles && _rasterLine == _borderT && _displayEnable) + _borderOnVertical = false; + if (!_borderOnVertical) + _borderOnMain = false; } - #endregion - #region CHARACTER GRAPHICS - switch (videoMode) + // check right border + if (_borderCheckREnable && (_rasterX == _borderR)) + _borderOnMain = true; + + #endregion + + #region CHARACTER GRAPHICS + switch (_videoMode) { - case 0: - pixelData = sr & srMask2; - pixel = (pixelData != 0) ? (displayC >> 8) : backgroundColor0; + case VideoMode000: + _pixelData = _sr & SrMask2; + _pixel = _pixelData != 0 ? _displayC >> 8 : _backgroundColor0; break; - case 1: - if ((displayC & 0x800) != 0) + case VideoMode001: + if ((_displayC & 0x800) != 0) { - // multicolor 001 - if ((srSync & srMask2) != 0) - pixelData = sr & srMask3; + // multicolor 001 + if ((_srSync & SrMask2) != 0) + _pixelData = _sr & SrMask3; - if (pixelData == 0) - pixel = backgroundColor0; - else if (pixelData == srMask1) - pixel = backgroundColor1; - else if (pixelData == srMask2) - pixel = backgroundColor2; - else - pixel = (displayC & 0x700) >> 8; + switch (_pixelData) + { + case 0: + _pixel = _backgroundColor0; + break; + case SrMask1: + _pixel = _backgroundColor1; + break; + case SrMask2: + _pixel = _backgroundColor2; + break; + default: + _pixel = (_displayC & 0x700) >> 8; + break; + } } else { // standard 001 - pixelData = sr & srMask2; - pixel = (pixelData != 0) ? (displayC >> 8) : backgroundColor0; + _pixelData = _sr & SrMask2; + _pixel = _pixelData != 0 ? _displayC >> 8 : _backgroundColor0; } break; - case 2: - pixelData = sr & srMask2; - pixel = (pixelData != 0) ? (displayC >> 4) : (displayC); + case VideoMode010: + _pixelData = _sr & SrMask2; + _pixel = _pixelData != 0 ? _displayC >> 4 : _displayC; break; - case 3: - if ((srSync & srMask2) != 0) - pixelData = sr & srMask3; + case VideoMode011: + if ((_srSync & SrMask2) != 0) + _pixelData = _sr & SrMask3; - if (pixelData == 0) - pixel = backgroundColor0; - else if (pixelData == srMask1) - pixel = (displayC >> 4); - else if (pixelData == srMask2) - pixel = displayC; - else - pixel = (displayC >> 8); - break; - case 4: - pixelData = sr & srMask2; - if (pixelData != 0) + switch (_pixelData) { - pixel = displayC >> 8; + case 0: + _pixel = _backgroundColor0; + break; + case SrMask1: + _pixel = _displayC >> 4; + break; + case SrMask2: + _pixel = _displayC; + break; + default: + _pixel = _displayC >> 8; + break; + } + break; + case VideoMode100: + _pixelData = _sr & SrMask2; + if (_pixelData != 0) + { + _pixel = _displayC >> 8; } else { - ecmPixel = (displayC) & 0xC0; - if (ecmPixel == 0x00) - pixel = backgroundColor0; - else if (ecmPixel == 0x40) - pixel = backgroundColor1; - else if (ecmPixel == 0x80) - pixel = backgroundColor2; - else - pixel = backgroundColor3; + _ecmPixel = (_displayC & 0xC0) >> 6; + switch (_ecmPixel) + { + case 0: + _pixel = _backgroundColor0; + break; + case 1: + _pixel = _backgroundColor1; + break; + case 2: + _pixel = _backgroundColor2; + break; + default: + _pixel = _backgroundColor3; + break; + } } - break; + break; default: - pixelData = 0; - pixel = 0; + _pixelData = 0; + _pixel = 0; break; } - pixel &= 0xF; - sr <<= 1; - srSync <<= 1; -#endregion + _pixel &= 0xF; + _sr <<= 1; + _srSync <<= 1; + _srColorSync <<= 1; + #endregion - #region SPRITES - // render sprites - pixelOwner = -1; - sprIndex = 0; - foreach (var spr in sprites) + #region SPRITES + // render sprites + _pixelOwner = -1; + _sprIndex = 0; + foreach (var spr in _sprites) { - sprData = 0; - sprPixel = pixel; + _sprData = 0; + _sprPixel = _pixel; - if (spr.x == rasterX) + if (spr.X == _rasterX) { - spr.shiftEnable = spr.display; - spr.xCrunch = !spr.xExpand; - spr.multicolorCrunch = false; + spr.ShiftEnable = spr.Display; + spr.XCrunch = !spr.XExpand; + spr.MulticolorCrunch = false; } else { - spr.xCrunch |= !spr.xExpand; + spr.XCrunch |= !spr.XExpand; } - if (spr.shiftEnable) // sprite rule 6 + if (spr.ShiftEnable) // sprite rule 6 { - if (spr.multicolor) + if (spr.Multicolor) { - sprData = (spr.sr & srSpriteMaskMC); - if (spr.multicolorCrunch && spr.xCrunch && !rasterXHold) + _sprData = spr.Sr & SrSpriteMaskMc; + if (spr.MulticolorCrunch && spr.XCrunch && !_rasterXHold) { - if (spr.loaded == 0) + if (spr.Loaded == 0) { - spr.shiftEnable = false; + spr.ShiftEnable = false; } - spr.sr <<= 2; - spr.loaded >>= 2; + spr.Sr <<= 2; + spr.Loaded >>= 2; } - spr.multicolorCrunch ^= spr.xCrunch; + spr.MulticolorCrunch ^= spr.XCrunch; } else { - sprData = (spr.sr & srSpriteMask); - if (spr.xCrunch && !rasterXHold) + _sprData = spr.Sr & SrSpriteMask; + if (spr.XCrunch && !_rasterXHold) { - if (spr.loaded == 0) + if (spr.Loaded == 0) { - spr.shiftEnable = false; + spr.ShiftEnable = false; } - spr.sr <<= 1; - spr.loaded >>= 1; + spr.Sr <<= 1; + spr.Loaded >>= 1; } } - spr.xCrunch ^= spr.xExpand; + spr.XCrunch ^= spr.XExpand; - if (sprData != 0) + if (_sprData != 0) { // sprite-sprite collision - if (pixelOwner < 0) + if (_pixelOwner < 0) { - if (sprData == srSpriteMask1) - sprPixel = spriteMulticolor0; - else if (sprData == srSpriteMask2) - sprPixel = spr.color; - else if (sprData == srSpriteMask3) - sprPixel = spriteMulticolor1; - pixelOwner = sprIndex; + switch (_sprData) + { + case SrSpriteMask1: + _sprPixel = _spriteMulticolor0; + break; + case SrSpriteMask2: + _sprPixel = spr.Color; + break; + case SrSpriteMask3: + _sprPixel = _spriteMulticolor1; + break; + } + _pixelOwner = _sprIndex; } else { - if (!borderOnVertical) + if (!_borderOnVertical) { - spr.collideSprite = true; - sprites[pixelOwner].collideSprite = true; + spr.CollideSprite = true; + _sprites[_pixelOwner].CollideSprite = true; } } // sprite-data collision - if (!borderOnVertical && (pixelData >= srMask2)) + if (!_borderOnVertical && (_pixelData >= SrMask2)) { - spr.collideData = true; + spr.CollideData = true; } // sprite priority logic - if (spr.priority) + if (spr.Priority) { - pixel = (pixelData >= srMask2) ? pixel : sprPixel; + _pixel = _pixelData >= SrMask2 ? _pixel : _sprPixel; } else { - pixel = sprPixel; + _pixel = _sprPixel; } } } - sprIndex++; + _sprIndex++; } -#endregion + #endregion - #region POST-RENDER BORDER - if (borderCheckREnable && (rasterX == borderR)) - borderOnMain = true; + #region POST-RENDER BORDER - // border doesn't work with the background buffer - if (borderOnMain || borderOnVertical) - pixel = borderColor; + // border doesn't work with the background buffer + _borderPixel = _pixBorderBuffer[_pixBufferBorderIndex]; + _pixBorderBuffer[_pixBufferBorderIndex] = _borderColor; #endregion // plot pixel if within viewing area - if (renderEnabled) + if (_renderEnabled) { - buf[bufOffset] = palette[pixBuffer[pixBufferIndex]]; - bufOffset++; - if (bufOffset == bufLength) - bufOffset = 0; + _bufferPixel = (_borderOnShiftReg & 0x80000) != 0 ? _borderPixel : _pixBuffer[_pixBufferIndex]; + _buf[_bufOffset] = Palette[_bufferPixel]; + _bufOffset++; + if (_bufOffset == _bufLength) + _bufOffset = 0; } - pixBuffer[pixBufferIndex] = pixel; - pixBufferIndex++; + _borderOnShiftReg <<= 1; + _borderOnShiftReg |= (_borderOnVertical || _borderOnMain) ? 1 : 0; + _pixBuffer[_pixBufferIndex] = _pixel; + _pixBufferIndex++; + _pixBufferBorderIndex++; - if (!rasterXHold) - rasterX++; - bitmapColumn++; + if (!_rasterXHold) + _rasterX++; } - if (pixBufferIndex >= pixBufferSize) - pixBufferIndex = 0; + if (_pixBufferBorderIndex >= PixBorderBufferSize) + _pixBufferBorderIndex = 0; + if (_pixBufferIndex >= PixBufferSize) + _pixBufferIndex = 0; } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Sprite.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Sprite.cs index be30e83193..70665c9ae4 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Sprite.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.Sprite.cs @@ -7,54 +7,54 @@ using BizHawk.Common; namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Vic + public sealed partial class Vic { - sealed class Sprite + private sealed class Sprite { - public bool collideData; - public bool collideSprite; - public int color; - public bool display; - public bool dma; - public bool enable; - public int loaded; - public int mc; - public int mcbase; - public bool multicolor; - public bool multicolorCrunch; - public int pointer; - public bool priority; - public bool shiftEnable; - public int sr; - public int x; - public bool xCrunch; - public bool xExpand; - public int y; - public bool yCrunch; - public bool yExpand; + public bool CollideData; + public bool CollideSprite; + public int Color; + public bool Display; + public bool Dma; + public bool Enable; + public int Loaded; + public int Mc; + public int Mcbase; + public bool Multicolor; + public bool MulticolorCrunch; + public int Pointer; + public bool Priority; + public bool ShiftEnable; + public int Sr; + public int X; + public bool XCrunch; + public bool XExpand; + public int Y; + public bool YCrunch; + public bool YExpand; public void HardReset() { - collideData = false; - collideSprite = false; - color = 0; - display = false; - dma = false; - enable = false; - mc = 0; - mcbase = 0; - multicolor = false; - multicolorCrunch = false; - pointer = 0; - priority = false; - shiftEnable = false; - sr = 0; - x = 0; - xCrunch = false; - xExpand = false; - y = 0; - yCrunch = false; - yExpand = false; + CollideData = false; + CollideSprite = false; + Color = 0; + Display = false; + Dma = false; + Enable = false; + Mc = 0; + Mcbase = 0; + Multicolor = false; + MulticolorCrunch = false; + Pointer = 0; + Priority = false; + ShiftEnable = false; + Sr = 0; + X = 0; + XCrunch = false; + XExpand = false; + Y = 0; + YCrunch = false; + YExpand = false; } public void SyncState(Serializer ser) diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.State.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.State.cs index e013f51d6f..21b11500c6 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.State.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.State.cs @@ -8,182 +8,169 @@ using BizHawk.Common; namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Vic + public sealed partial class Vic { - private int backgroundColor0; - private int backgroundColor1; - private int backgroundColor2; - private int backgroundColor3; - private int baCount; - private bool badline; - private bool badlineEnable; - private int bitmapColumn; - private bool bitmapMode; - private int borderB; - private bool borderCheckLEnable; - private bool borderCheckREnable; - private int borderColor; - private int borderL; - private bool borderOnMain; - private bool borderOnVertical; - private int borderR; - private int borderT; - private int[] bufferC; - private int[] bufferG; - private int cycle; - private int cycleIndex; - private bool columnSelect; - private int dataC; - private int dataG; - private bool displayEnable; - private int displayC; - private bool enableIntLightPen; - private bool enableIntRaster; - private bool enableIntSpriteCollision; - private bool enableIntSpriteDataCollision; - private bool extraColorMode; - private bool hblank; - private bool idle; - private bool intLightPen; - private bool intRaster; - private bool intSpriteCollision; - private bool intSpriteDataCollision; - private int hblankEnd; - private int hblankStart; - private bool hblankCheckEnableL; - private bool hblankCheckEnableR; - private int lastRasterLine; - private int lightPenX; - private int lightPenY; - private bool multicolorMode; - private bool pinAEC = true; - private bool pinBA = true; - private bool pinIRQ = true; - private int pointerCB; - private int pointerVM; - private int rasterInterruptLine; - private int rasterLine; - private int rasterX; - private bool rasterXHold; - private int rc; - private int refreshCounter; - private bool renderEnabled; - private bool rowSelect; - private int spriteMulticolor0; - private int spriteMulticolor1; - private Sprite[] sprites; - private int sr; - private int srMask; - private int srMask1; - private int srMask2; - private int srMask3; - private int srMaskMC; - private int srSpriteMask; - private int srSpriteMask1; - private int srSpriteMask2; - private int srSpriteMask3; - private int srSpriteMaskMC; - private bool vblank; - private int vblankEnd; - private int vblankStart; - private int vc; - private int vcbase; - private int vmli; - private int xScroll; - private int yScroll; + private int _backgroundColor0; + private int _backgroundColor1; + private int _backgroundColor2; + private int _backgroundColor3; + private int _baCount; + private bool _badline; + private bool _badlineEnable; + private bool _bitmapMode; + private int _borderB; + private bool _borderCheckLEnable; + private bool _borderCheckREnable; + private int _borderColor; + private int _borderL; + private bool _borderOnMain; + private bool _borderOnVertical; + private int _borderR; + private int _borderT; + private readonly int[] _bufferC; + private readonly int[] _bufferG; + private int _cycle; + private int _cycleIndex; + private bool _columnSelect; + private int _dataC; + private int _dataG; + private bool _displayEnable; + private int _displayC; + private bool _enableIntLightPen; + private bool _enableIntRaster; + private bool _enableIntSpriteCollision; + private bool _enableIntSpriteDataCollision; + private bool _extraColorMode; + private bool _extraColorModeBuffer; + [SaveState.DoNotSave] private bool _hblank; + private bool _idle; + private bool _intLightPen; + private bool _intRaster; + private bool _intSpriteCollision; + private bool _intSpriteDataCollision; + private int _lightPenX; + private int _lightPenY; + private bool _multicolorMode; + private bool _pinAec = true; + private bool _pinBa = true; + private bool _pinIrq = true; + private int _pointerCb; + private int _pointerVm; + private int _rasterInterruptLine; + private bool _rasterInterruptTriggered; + private int _rasterLine; + private int _rasterX; + private bool _rasterXHold; + private int _rc; + private int _refreshCounter; + private bool _renderEnabled; + private bool _rowSelect; + private bool _spriteBackgroundCollisionClearPending; + private bool _spriteSpriteCollisionClearPending; + private int _spriteMulticolor0; + private int _spriteMulticolor1; + [SaveState.DoNotSave] private readonly Sprite _sprite0; + [SaveState.DoNotSave] private readonly Sprite _sprite1; + [SaveState.DoNotSave] private readonly Sprite _sprite2; + [SaveState.DoNotSave] private readonly Sprite _sprite3; + [SaveState.DoNotSave] private readonly Sprite _sprite4; + [SaveState.DoNotSave] private readonly Sprite _sprite5; + [SaveState.DoNotSave] private readonly Sprite _sprite6; + [SaveState.DoNotSave] private readonly Sprite _sprite7; + private readonly Sprite[] _sprites; + private int _sr; + [SaveState.DoNotSave] private bool _vblank; + [SaveState.DoNotSave] private int _vblankEnd; + [SaveState.DoNotSave] private int _vblankStart; + private int _vc; + private int _vcbase; + private int _vmli; + private int _xScroll; + private int _yScroll; public void HardReset() { - // *** SHIFT REGISTER BITMASKS *** - srMask1 = 0x20000; - srMask2 = srMask1 << 1; - srMask3 = srMask1 | srMask2; - srMask = srMask2; - srMaskMC = srMask3; - srSpriteMask1 = 0x400000; - srSpriteMask2 = srSpriteMask1 << 1; - srSpriteMask3 = srSpriteMask1 | srSpriteMask2; - srSpriteMask = srSpriteMask2; - srSpriteMaskMC = srSpriteMask3; + _pinAec = true; + _pinBa = true; + _pinIrq = true; - pinAEC = true; - pinBA = true; - pinIRQ = true; + _bufOffset = 0; - bufOffset = 0; - - backgroundColor0 = 0; - backgroundColor1 = 0; - backgroundColor2 = 0; - backgroundColor3 = 0; - baCount = baResetCounter; - badline = false; - badlineEnable = false; - bitmapMode = false; - borderCheckLEnable = false; - borderCheckREnable = false; - borderColor = 0; - borderOnMain = true; - borderOnVertical = true; - columnSelect = false; - displayEnable = false; - enableIntLightPen = false; - enableIntRaster = false; - enableIntSpriteCollision = false; - enableIntSpriteDataCollision = false; - extraColorMode = false; - hblank = true; - idle = true; - intLightPen = false; - intRaster = false; - intSpriteCollision = false; - intSpriteDataCollision = false; - lastRasterLine = 0; - lightPenX = 0; - lightPenY = 0; - multicolorMode = false; - pointerCB = 0; - pointerVM = 0; - rasterInterruptLine = 0; - rasterLine = 0; - rasterX = 0; - rc = 7; - refreshCounter = 0xFF; - rowSelect = false; - spriteMulticolor0 = 0; - spriteMulticolor1 = 0; - sr = 0; - vblank = true; - vc = 0; - vcbase = 0; - vmli = 0; - xScroll = 0; - yScroll = 0; + _backgroundColor0 = 0; + _backgroundColor1 = 0; + _backgroundColor2 = 0; + _backgroundColor3 = 0; + _baCount = BaResetCounter; + _badline = false; + _badlineEnable = false; + _bitmapMode = false; + _borderCheckLEnable = false; + _borderCheckREnable = false; + _borderColor = 0; + _borderOnMain = true; + _borderOnVertical = true; + _columnSelect = false; + _displayEnable = false; + _enableIntLightPen = false; + _enableIntRaster = false; + _enableIntSpriteCollision = false; + _enableIntSpriteDataCollision = false; + _extraColorMode = false; + _idle = true; + _intLightPen = false; + _intRaster = false; + _intSpriteCollision = false; + _intSpriteDataCollision = false; + _lightPenX = 0; + _lightPenY = 0; + _multicolorMode = false; + _pointerCb = 0; + _pointerVm = 0; + _rasterInterruptLine = 0; + _rasterLine = 0; + _rasterX = 0; + _rc = 7; + _refreshCounter = 0xFF; + _rowSelect = false; + _spriteBackgroundCollisionClearPending = false; + _spriteSpriteCollisionClearPending = false; + _spriteMulticolor0 = 0; + _spriteMulticolor1 = 0; + _sr = 0; + _vc = 0; + _vcbase = 0; + _vmli = 0; + _xScroll = 0; + _yScroll = 0; + _cycle = 0; // reset sprites - for (int i = 0; i < 8; i++) - sprites[i].HardReset(); + for (var i = 0; i < 8; i++) + _sprites[i].HardReset(); // clear C buffer - for (int i = 0; i < 40; i++) + for (var i = 0; i < 40; i++) { - bufferC[i] = 0; - bufferG[i] = 0; + _bufferC[i] = 0; + _bufferG[i] = 0; } - pixBuffer = new int[pixBufferSize]; - UpdateBorder(); + _pixBuffer = new int[PixBufferSize]; + _pixBorderBuffer = new int[PixBorderBufferSize]; + _pixBufferIndex = 0; + _pixBufferBorderIndex = 0; + UpdateBorder(); } public void SyncState(Serializer ser) { SaveState.SyncObject(ser, this); - for (int i = 0; i < 8; i++) - { - ser.BeginSection("sprite" + i.ToString()); - SaveState.SyncObject(ser, sprites[i]); - ser.EndSection(); - } - } + if (ser.IsReader) + { + UpdateBorder(); + UpdatePins(); + UpdateVideoMode(); + } + } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.TimingBuilder.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.TimingBuilder.cs index a8988ea487..993e06bfaf 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.TimingBuilder.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.TimingBuilder.cs @@ -1,126 +1,131 @@ using System; using System.Collections.Generic; +using System.Diagnostics; using System.Linq; using System.Text; namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Vic + public sealed partial class Vic { - const int BORDER_LEFT_38 = 0x01F; - const int BORDER_LEFT_40 = 0x018; - const int BORDER_RIGHT_38 = 0x14F; - const int BORDER_RIGHT_40 = 0x158; + [SaveState.DoNotSave] private const int BorderLeft38 = 0x023; + [SaveState.DoNotSave] private const int BorderLeft40 = 0x01C; + [SaveState.DoNotSave] private const int BorderRight38 = 0x153; + [SaveState.DoNotSave] private const int BorderRight40 = 0x15C; + [SaveState.DoNotSave] private const int BorderTop25 = 0x033; + [SaveState.DoNotSave] private const int BorderTop24 = 0x037; + [SaveState.DoNotSave] private const int BorderBottom25 = 0x0FB; + [SaveState.DoNotSave] private const int BorderBottom24 = 0x0F7; + [SaveState.DoNotSave] private const int FirstDmaLine = 0x030; + [SaveState.DoNotSave] private const int LastDmaLine = 0x0F7; - // The special actions taken by the Vic are in the same order and interval on all chips, just different offsets. - static private int[] TimingBuilder_Cycle14Act = new int[] - { - pipelineUpdateVc, 0, - pipelineChkSprCrunch, 0, - pipelineUpdateMcBase, 0, - }; - static private int[] TimingBuilder_Cycle55Act = new int[] - { - pipelineChkSprDma, 0, - pipelineChkSprDma | pipelineChkSprExp, 0, - 0, 0, - pipelineChkSprDisp, pipelineUpdateRc + // The special actions taken by the Vic are in the same order and interval on all chips, just different offsets. + [SaveState.DoNotSave] + private static readonly int[] TimingBuilderCycle14Act = { + PipelineUpdateVc, 0, + PipelineSpriteCrunch, 0, + PipelineUpdateMcBase, 0, }; // This builds a table of special actions to take on each half-cycle. Cycle14 is the X-raster position where // pre-display operations happen, and Cycle55 is the X-raster position where post-display operations happen. - static public int[] TimingBuilder_Act(int[] timing, int cycle14, int cycle55, int hblankStart, int hblankEnd) + public static int[] TimingBuilder_Act(int[] timing, int cycle14, int sprite0Ba, int sprDisp) { - List result = new List(); + var result = new List(); - int length = timing.Length; - for (int i = 0; i < length; i++) + var length = timing.Length; + for (var i = 0; i < length; i++) { while (i < result.Count) i++; if (timing[i] == cycle14) - result.AddRange(TimingBuilder_Cycle14Act); - else if (timing[i] == cycle55) - result.AddRange(TimingBuilder_Cycle55Act); + result.AddRange(TimingBuilderCycle14Act); else result.Add(0); } - for (int i = 0; i < length; i++) + for (var i = 0; i < length; i++) { // pipeline raster X delay if (timing[(i + 1) % length] == timing[i]) - result[i] |= pipelineHoldX; + result[i] |= PipelineHoldX; // pipeline border checks - if (timing[i] == (BORDER_LEFT_40 & 0xFFC)) - result[i] |= pipelineChkBrdL1; - if (timing[i] == (BORDER_LEFT_38 & 0xFFC)) - result[i] |= pipelineChkBrdL0; - if (timing[i] == (BORDER_RIGHT_38 & 0xFFC)) - result[i] |= pipelineChkBrdR0; - if (timing[i] == (BORDER_RIGHT_40 & 0xFFC)) - result[i] |= pipelineChkBrdR1; - if (timing[i] == (hblankStart & 0xFFC)) - result[i] |= pipelineHBlankR; - if (timing[i] == (hblankEnd & 0xFFC)) - result[i] |= pipelineHBlankL; + if (timing[i] == (BorderLeft40 & 0xFFC)) + result[i] |= PipelineBorderLeft1; + if (timing[i] == (BorderLeft38 & 0xFFC)) + result[i] |= PipelineBorderLeft0; + if (timing[i] == (BorderRight38 & 0xFFC)) + result[i] |= PipelineBorderRight0; + if (timing[i] == (BorderRight40 & 0xFFC)) + result[i] |= PipelineBorderRight1; + + // right side timing + if (timing[i] == 0x0158) + result[i] |= PipelineSpriteExpansion; + if (timing[i] == 0x0168) + result[i] |= PipelineUpdateRc; + if (timing[i] == sprite0Ba || timing[i] == sprite0Ba + 8) + result[i] |= PipelineSpriteDma; + if (timing[i] == sprDisp) + result[i] |= PipelineSpriteDisplay; + } return result.ToArray(); } // This builds a table of how the BA pin is supposed to act on each half-cycle. - static public int[] TimingBuilder_BA(int[] fetch) + public static int[] TimingBuilder_BA(int[] fetch) { - int baRestart = 7; - int start = 0; - int length = fetch.Length; - int[] result = new int[length]; - int[] spriteBA = new int[8]; - int charBA = 0; + const int baRestart = 7; + var start = 0; + var length = fetch.Length; + var result = new int[length]; + var spriteBa = new int[8]; + var charBa = 0; while (true) { - if (fetch[start] == 0) + if (fetch[start] == FetchTypeSprite) break; start++; } while (true) { - if (fetch[start] == 0x200) + if (fetch[start] == FetchTypeColor) break; start--; } if (start < 0) start += length; - int offset = start; + var offset = start; while (true) { - int ba = 0x0888; + var ba = BaTypeNone; - if (fetch[offset] == 0x200) - charBA = baRestart; - else if ((fetch[offset] & 0xFF00) == 0x0000) - spriteBA[fetch[offset] & 0x007] = baRestart; + if (fetch[offset] == FetchTypeColor) + charBa = baRestart; + else if ((fetch[offset] & 0xFF00) == FetchTypeSprite) + spriteBa[fetch[offset] & 0x007] = baRestart; - for (int i = 0; i < 8; i++) + for (var i = 0; i < 8; i++) { - if (spriteBA[i] > 0) + if (spriteBa[i] > 0) { ba <<= 4; ba |= i; - spriteBA[i]--; + spriteBa[i]--; } } ba &= 0x0FFF; - if (charBA > 0) + if (charBa > 0) { - ba = 0x1000; - charBA--; + ba = BaTypeCharacter; + charBa--; } result[offset] = ba; @@ -133,7 +138,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS break; } - for (int i = 0; i < length; i += 2) + for (var i = 0; i < length; i += 2) { result[i] = result[i + 1]; } @@ -142,34 +147,33 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS } // This builds a table of the fetch operations to take on each half-cycle. - static public int[] TimingBuilder_Fetch(int[] timing, int sprite) + public static int[] TimingBuilder_Fetch(int[] timing, int sprite) { - int length = timing.Length; - int[] result = new int[length]; - int offset; - int index = -1; - int refreshCounter = 0; - bool spriteActive = false; - int spriteIndex = 0; - int spritePhase = 0; - int charCounter = 0; + var length = timing.Length; + var result = new int[length]; + var index = -1; + var refreshCounter = 0; + var spriteActive = false; + var spriteIndex = 0; + var spritePhase = 0; + var charCounter = 0; - for (int i = 0; i < length; i++) + for (var i = 0; i < length; i++) { - result[i++] = 0x500; - result[i] = 0x100; - } + result[i++] = FetchTypeIdle; + result[i] = FetchTypeNone; + } - while (true) + while (true) { index++; if (index >= length) index -= length; - offset = timing[index]; + var offset = timing[index]; if (charCounter > 0) { - result[index] = (charCounter & 1) == 0 ? 0x200 : 0x300; + result[index] = (charCounter & 1) == 0 ? FetchTypeColor : FetchTypeGraphics; charCounter--; if (charCounter == 0) break; @@ -177,7 +181,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS if (refreshCounter > 0) { - result[index] = (refreshCounter & 1) == 0 ? 0x500 : 0x100; + result[index] = (refreshCounter & 1) == 0 ? FetchTypeNone : FetchTypeRefresh; refreshCounter--; if (refreshCounter == 0) charCounter = 80; @@ -209,10 +213,15 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS } // This uses the vBlank values to determine the height of the visible screen. - static public int TimingBuilder_ScreenHeight(int vblankStart, int vblankEnd, int lines) + private static int TimingBuilder_ScreenHeight(int vblankStart, int vblankEnd, int lines) { - int offset = vblankEnd; - int result = 0; + if (vblankStart < 0 || vblankEnd < 0) + { + return lines; + } + + var offset = vblankEnd; + var result = 0; while (true) { if (offset >= lines) @@ -225,11 +234,16 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS } // This uses the hBlank values to determine the width of the visible screen. - static public int TimingBuilder_ScreenWidth(int[] timing, int hblankStart, int hblankEnd) + private static int TimingBuilder_ScreenWidth(IList timing, int hblankStart, int hblankEnd) { - int length = timing.Length; - int result = 0; - int offset = 0; + if (hblankStart < 0 || hblankEnd < 0) + { + return timing.Count * 4; + } + + var length = timing.Count; + var result = 0; + var offset = 0; while (timing[offset] != hblankEnd) { offset = (offset + 1) % length; } while (timing[offset] != hblankStart) { offset = (offset + 1) % length; result++; } @@ -241,15 +255,15 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS // Y-raster is incremented. Width is the position where the X-raster is reset to zero. Count // is the width of a rasterline in pixels. DelayOffset is the X-raster position where lag begins // (specifically on an NTSC 6567R8) and DelayAmount is the number of positions to lag. - static public int[] TimingBuilder_XRaster(int start, int width, int count, int delayOffset, int delayAmount) + public static int[] TimingBuilder_XRaster(int start, int width, int count, int delayOffset, int delayAmount) { - List result = new List(); - int rasterX = start; - bool delayed = false; + var result = new List(); + var rasterX = start; + var delayed = false; count >>= 2; delayAmount >>= 2; - for (int i = 0; i < count; i++) + for (var i = 0; i < count; i++) { result.Add(rasterX); diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.VideoProvider.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.VideoProvider.cs index e543bcfdf1..06d442d71c 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.VideoProvider.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.VideoProvider.cs @@ -5,19 +5,24 @@ using BizHawk.Emulation.Common; namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Vic : IVideoProvider + public sealed partial class Vic : IVideoProvider { - private int[] buf; - private int bufHeight; - private int bufLength; - private int bufOffset; - private int bufWidth; - private int pixBufferSize = 12; - private int[] pixBuffer; - private int pixBufferIndex; + [SaveState.DoNotSave] private static readonly int BgColor = Colors.ARGB(0, 0, 0); + [SaveState.DoNotSave] private int[] _buf; + [SaveState.DoNotSave] private int _bufHeight; + [SaveState.DoNotSave] private int _bufLength; + private int _bufOffset; + [SaveState.DoNotSave] private int _bufWidth; + [SaveState.DoNotSave] private const int PixBufferSize = 24; + [SaveState.DoNotSave] private const int PixBorderBufferSize = 12; + private int[] _pixBuffer; + private int _pixBufferIndex; + private int[] _pixBorderBuffer; + private int _pixBufferBorderIndex; - // palette - private int[] palette = + // palette + [SaveState.DoNotSave] + private static readonly int[] Palette = { Colors.ARGB(0x00, 0x00, 0x00), Colors.ARGB(0xFF, 0xFF, 0xFF), @@ -37,34 +42,33 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS Colors.ARGB(0x95, 0x95, 0x95) }; - public int BackgroundColor + [SaveState.DoNotSave] + public int BackgroundColor { - get { return Colors.ARGB(0, 0, 0); } + get { return BgColor; } } - public int BufferHeight + [SaveState.DoNotSave] + public int BufferHeight { - get { return bufHeight; } + get { return _bufHeight; } } - public int BufferWidth + [SaveState.DoNotSave] + public int BufferWidth { - get { return bufWidth; } + get { return _bufWidth; } } public int[] GetVideoBuffer() { - return buf; + return _buf; } - public int VirtualWidth - { - get { return bufWidth; } - } + [SaveState.DoNotSave] + public int VirtualWidth { get; private set; } - public int VirtualHeight - { - get { return bufHeight; } - } + [SaveState.DoNotSave] + public int VirtualHeight { get; private set; } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.cs index c1bbf6a699..3fd4e1ba92 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/MOS/Vic.cs @@ -1,56 +1,178 @@ using System; +using System.Collections.Generic; +using System.Diagnostics; using System.Drawing; +using System.Linq; + namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { - sealed public partial class Vic + public sealed partial class Vic { - public Func ReadColorRam; - public Func ReadMemory; + /* + Commodore VIC-II 6567/6569/6572 core. - public bool ReadAECBuffer() { return pinAEC; } - public bool ReadBABuffer() { return pinBA; } - public bool ReadIRQBuffer() { return pinIRQ; } + Many thanks to: + - Christian Bauer for the VIC-II document. + http://www.zimmers.net/cbmpics/cbm/c64/vic-ii.txt + - VICE team for the addendum to the above document. + http://vice-emu.sourceforge.net/plain/VIC-Addendum.txt + - Whoever scanned the CSG 6567 preliminary datasheet. + http://www.classiccmp.org/cini/pdf/Commodore/ds_6567.pdf + - Michael Huth for die shots of the 6569R3 chip (to get ideas how to implement) + http://mail.lipsia.de/~enigma/neu/6581.html + */ - private int cyclesPerSec; - private int irqShift; - private int[][] pipeline; - private int totalCycles; - private int totalLines; + public Func ReadColorRam; + public Func ReadMemory; - public Vic(int newCycles, int newLines, int[][] newPipeline, int newCyclesPerSec, int hblankStart, int hblankEnd, int vblankStart, int vblankEnd) + public bool ReadAec() { return _pinAec; } + public bool ReadBa() { return _pinBa; } + public bool ReadIrq() { return _pinIrq; } + + [SaveState.DoNotSave] private readonly int _cyclesPerSec; + [SaveState.DoNotSave] private readonly int[] _rasterXPipeline; + [SaveState.DoNotSave] private readonly int[] _fetchPipeline; + [SaveState.DoNotSave] private readonly int[] _baPipeline; + [SaveState.DoNotSave] private readonly int[] _actPipeline; + [SaveState.DoNotSave] private readonly int _totalCycles; + [SaveState.DoNotSave] private readonly int _totalLines; + + private int _cyclesExecuted; + [SaveState.DoNotSave] private int _hblankStartCheckXRaster; + [SaveState.DoNotSave] private int _hblankEndCheckXRaster; + + [SaveState.DoNotSave] private int _pixelRatioNum; + [SaveState.DoNotSave] private int _pixelRatioDen; + + public Vic(int newCycles, int newLines, IList newPipeline, int newCyclesPerSec, int hblankStart, int hblankEnd, int vblankStart, int vblankEnd, C64.BorderType borderType, int pixelRatioNum, int pixelRatioDen) { - { - this.hblankStart = hblankStart; - this.hblankEnd = hblankEnd; - this.vblankStart = vblankStart; - this.vblankEnd = vblankEnd; + Debug.WriteLine("C64 VIC timings:"); + Debug.WriteLine("RX FTCH BA ACT"); + for (var i = 0; i < newPipeline[0].Length; i++) + { + Debug.WriteLine("{0:x4} {1:x4} {2:x4} {3:x8}", newPipeline[0][i], newPipeline[1][i], newPipeline[2][i], newPipeline[3][i]); + } - totalCycles = newCycles; - totalLines = newLines; - pipeline = newPipeline; - cyclesPerSec = newCyclesPerSec; + _pixelRatioNum = pixelRatioNum; + _pixelRatioDen = pixelRatioDen; - bufWidth = TimingBuilder_ScreenWidth(pipeline[0], hblankStart, hblankEnd); - bufHeight = TimingBuilder_ScreenHeight(vblankStart, vblankEnd, newLines); + _rasterXPipeline = newPipeline[0]; + _fetchPipeline = newPipeline[1]; + _baPipeline = newPipeline[2]; + _actPipeline = newPipeline[3]; + _totalCycles = newCycles; + _totalLines = newLines; + _cyclesPerSec = newCyclesPerSec; - buf = new int[bufWidth * bufHeight]; - bufLength = buf.Length; + ConfigureBlanking(newLines, hblankStart, hblankEnd, vblankStart, vblankEnd, borderType); - sprites = new Sprite[8]; - for (int i = 0; i < 8; i++) - sprites[i] = new Sprite(); + _sprites = new Sprite[8]; + for (var i = 0; i < 8; i++) + _sprites[i] = new Sprite(); + _sprite0 = _sprites[0]; + _sprite1 = _sprites[1]; + _sprite2 = _sprites[2]; + _sprite3 = _sprites[3]; + _sprite4 = _sprites[4]; + _sprite5 = _sprites[5]; + _sprite6 = _sprites[6]; + _sprite7 = _sprites[7]; - bufferC = new int[40]; - bufferG = new int[40]; - } - } + _bufferC = new int[40]; + _bufferG = new int[40]; + } - public int CyclesPerFrame + private void ConfigureBlanking(int lines, int hblankStart, int hblankEnd, int vblankStart, int vblankEnd, + C64.BorderType borderType) + { + var newHblankStart = hblankStart; + var newHblankEnd = hblankEnd; + var newVblankStart = vblankStart; + var newVblankEnd = vblankEnd; + var hBorderSize = 16; // must be a multiple of 4 + var vBorderSize = hBorderSize*_pixelRatioNum/_pixelRatioDen; // to keep top and bottom in proportion + var maxWidth = _rasterXPipeline.Max(); + + switch (borderType) + { + case C64.BorderType.Full: + newHblankStart = -1; + newHblankEnd = -1; + _hblank = false; + newVblankStart = -1; + newVblankEnd = -1; + _vblank = false; + break; + case C64.BorderType.Normal: + newHblankStart = hblankStart; + newHblankEnd = hblankEnd; + newVblankStart = vblankStart; + newVblankEnd = vblankEnd; + _vblank = true; + _hblank = true; + break; + case C64.BorderType.SmallProportional: + _vblank = true; + _hblank = true; + newHblankStart = 0x158 + PixBufferSize + hBorderSize; + newHblankEnd = 0x018 + PixBufferSize - hBorderSize; + newVblankStart = 0xFA + vBorderSize; + newVblankEnd = 0x32 - vBorderSize; + break; + case C64.BorderType.SmallFixed: + _vblank = true; + _hblank = true; + newHblankStart = 0x158 + PixBufferSize + hBorderSize; + newHblankEnd = 0x018 + PixBufferSize - hBorderSize; + newVblankStart = 0xFA + hBorderSize; + newVblankEnd = 0x32 - hBorderSize; + break; + } + + // wrap values + newHblankStart = WrapValue(0, maxWidth, newHblankStart); + newHblankEnd = WrapValue(0, maxWidth, newHblankEnd); + newVblankStart = WrapValue(0, lines, newVblankStart); + newVblankEnd = WrapValue(0, lines, newVblankEnd); + + // calculate output dimensions + _hblankStartCheckXRaster = newHblankStart & 0xFFC; + _hblankEndCheckXRaster = newHblankEnd & 0xFFC; + _vblankStart = newVblankStart; + _vblankEnd = newVblankEnd; + _bufWidth = TimingBuilder_ScreenWidth(_rasterXPipeline, newHblankStart, newHblankEnd); + _bufHeight = TimingBuilder_ScreenHeight(newVblankStart, newVblankEnd, lines); + _buf = new int[_bufWidth * _bufHeight]; + _bufLength = _buf.Length; + VirtualWidth = _bufWidth*_pixelRatioNum/_pixelRatioDen; + VirtualHeight = _bufHeight; + } + + private int WrapValue(int min, int max, int val) + { + if (min == max) + { + return min; + } + + var width = Math.Abs(min - max); + while (val > max) + { + val -= width; + } + while (val < min) + { + val += width; + } + return val; + } + + public int CyclesPerFrame { get { - return (totalCycles * totalLines); + return _totalCycles * _totalLines; } } @@ -58,155 +180,193 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64.MOS { get { - return cyclesPerSec; + return _cyclesPerSec; } } - public void ExecutePhase1() + public void ExecutePhase() { - { - // raster IRQ compare - if ((cycle == rasterIrqLineXCycle && rasterLine > 0) || (cycle == rasterIrqLine0Cycle && rasterLine == 0)) - { - if (rasterLine != lastRasterLine) - if (rasterLine == rasterInterruptLine) - intRaster = true; - lastRasterLine = rasterLine; - } + // phi1 - // display enable compare - if (rasterLine == 0) - badlineEnable = false; + // advance cycle and optionally raster line + _cycle++; + if (_cycle > _totalCycles) + { + // border check + if (_rasterLine == _borderB) + _borderOnVertical = true; + if (_rasterLine == _borderT && _displayEnable) + _borderOnVertical = false; - if (rasterLine == 0x030) - badlineEnable |= displayEnable; + // vblank check + if (_rasterLine == _vblankStart) + _vblank = true; + if (_rasterLine == _vblankEnd) + _vblank = false; - // badline compare - if (badlineEnable && rasterLine >= 0x030 && rasterLine < 0x0F7 && ((rasterLine & 0x7) == yScroll)) - { - badline = true; - } - else - { - badline = false; - } + // reset to beginning of rasterline + _cycleIndex = 0; + _cycle = 1; + _rasterLine++; - // go into display state on a badline - if (badline) - idle = false; + if (_rasterLine == _totalLines) + { + // reset to rasterline 0 + _rasterLine = 0; + _vcbase = 0; + _vc = 0; + _badlineEnable = false; + _refreshCounter = 0xFF; + _cyclesExecuted = 0; + } + } - ParseCycle(); + // bg collision clear + if (_spriteBackgroundCollisionClearPending) + { + foreach (var spr in _sprites) + { + spr.CollideData = false; + } + _spriteBackgroundCollisionClearPending = false; + } - Render(); + // sprite collision clear + if (_spriteSpriteCollisionClearPending) + { + foreach (var spr in _sprites) + { + spr.CollideSprite = false; + } + _spriteSpriteCollisionClearPending = false; + } - // if the BA counter is nonzero, allow CPU bus access - UpdateBA(); - pinAEC = false; + // phi2 - // must always come last - //UpdatePins(); - } - } + // start of rasterline + if ((_cycle == RasterIrqLineXCycle && _rasterLine > 0) || (_cycle == RasterIrqLine0Cycle && _rasterLine == 0)) + { + _rasterInterruptTriggered = false; - public void ExecutePhase2() - { + if (_rasterLine == LastDmaLine) + _badlineEnable = false; + } - { - ParseCycle(); + // rasterline IRQ compare + if (_rasterLine != _rasterInterruptLine) + { + _rasterInterruptTriggered = false; + } + else + { + if (!_rasterInterruptTriggered) + { + _rasterInterruptTriggered = true; + _intRaster = true; + } + } - // advance cycle and optionally raster line - cycle++; - if (cycle == totalCycles) - { - if (rasterLine == borderB) - borderOnVertical = true; - if (rasterLine == borderT && displayEnable) - borderOnVertical = false; + // check top and bottom border + if (_rasterLine == _borderB) + { + _borderOnVertical = true; + } + if (_displayEnable && _rasterLine == _borderT) + { + _borderOnVertical = false; + } - if (rasterLine == vblankStart) - vblank = true; - if (rasterLine == vblankEnd) - vblank = false; + // display enable compare + if (_rasterLine == FirstDmaLine) + _badlineEnable |= _displayEnable; - cycleIndex = 0; - cycle = 0; - rasterLine++; - if (rasterLine == totalLines) - { - rasterLine = 0; - vcbase = 0; - vc = 0; - } - } + // badline compare + if (_badlineEnable) + { + if ((_rasterLine & 0x7) == _yScroll) + { + _badline = true; - Render(); - UpdateBA(); - pinAEC = (baCount > 0); + // go into display state on a badline + _idle = false; + } + else + { + _badline = false; + } + } + else + { + _badline = false; + } - // must always come last - UpdatePins(); - } - } + // render + ParseCycle(); + Render(); + ParseCycle(); + Render(); + _extraColorModeBuffer = _extraColorMode; - private void UpdateBA() - { - if (pinBA) - baCount = baResetCounter; - else if (baCount > 0) - baCount--; + // if the BA counter is nonzero, allow CPU bus access + if (_pinBa) + _baCount = BaResetCounter; + else if (_baCount > 0) + _baCount--; + _pinAec = _pinBa || _baCount > 0; + + // must always come last + UpdatePins(); + + _cyclesExecuted++; } private void UpdateBorder() { - borderL = columnSelect ? 0x018 : 0x01F; - borderR = columnSelect ? 0x158 : 0x14F; - //borderL = columnSelect ? 28 : 35; - //borderR = columnSelect ? 348 : 339; - borderT = rowSelect ? 0x033 : 0x037; - borderB = rowSelect ? 0x0FB : 0x0F7; + _borderL = _columnSelect ? BorderLeft40 : BorderLeft38; + _borderR = _columnSelect ? BorderRight40 : BorderRight38; + _borderT = _rowSelect ? BorderTop25 : BorderTop24; + _borderB = _rowSelect ? BorderBottom25 : BorderBottom24; } private void UpdatePins() { - bool irqTemp = !( - (enableIntRaster & intRaster) | - (enableIntSpriteDataCollision & intSpriteDataCollision) | - (enableIntSpriteCollision & intSpriteCollision) | - (enableIntLightPen & intLightPen)); + var irqTemp = !( + (_enableIntRaster & _intRaster) | + (_enableIntSpriteDataCollision & _intSpriteDataCollision) | + (_enableIntSpriteCollision & _intSpriteCollision) | + (_enableIntLightPen & _intLightPen)); - irqShift <<= 1; - irqShift |= (irqTemp ? 0x1 : 0x0); - pinIRQ = (irqShift & 0x1) != 0; + _pinIrq = irqTemp; } private void UpdateVideoMode() { - if (!extraColorMode && !bitmapMode && !multicolorMode) + if (!_extraColorMode && !_bitmapMode && !_multicolorMode) { - videoMode = 0; + _videoMode = VideoMode000; return; } - else if (!extraColorMode && !bitmapMode && multicolorMode) - { - videoMode = 1; - return; - } - else if (!extraColorMode && bitmapMode && !multicolorMode) - { - videoMode = 2; - return; - } - else if (!extraColorMode && bitmapMode && multicolorMode) - { - videoMode = 3; - return; - } - else if (extraColorMode && !bitmapMode && !multicolorMode) - { - videoMode = 4; - return; - } - videoMode = -1; + if (!_extraColorMode && !_bitmapMode && _multicolorMode) + { + _videoMode = VideoMode001; + return; + } + if (!_extraColorMode && _bitmapMode && !_multicolorMode) + { + _videoMode = VideoMode010; + return; + } + if (!_extraColorMode && _bitmapMode && _multicolorMode) + { + _videoMode = VideoMode011; + return; + } + if (_extraColorMode && !_bitmapMode && !_multicolorMode) + { + _videoMode = VideoMode100; + return; + } + _videoMode = VideoModeInvalid; } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Media/D64.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/D64.cs index 26868b2276..5fd8bf9e2d 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Media/D64.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/D64.cs @@ -1,11 +1,12 @@ using System; +using System.Collections.Generic; using System.IO; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Media { public static class D64 { - private static int[] densityTable = + private static readonly int[] densityTable = { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, @@ -17,7 +18,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 0, 0, 0, 0, 0 }; - private static int[] gcrDecodeTable = + private static readonly int[] gcrDecodeTable = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, //00xxx 0xFF, 0x08, 0x00, 0x01, 0xFF, 0x0C, 0x04, 0x05, //01xxx @@ -25,7 +26,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 0xFF, 0x09, 0x0A, 0x0B, 0xFF, 0x0D, 0x0E, 0xFF //11xxx }; - private static int[] gcrEncodeTable = + private static readonly int[] gcrEncodeTable = { Convert.ToByte("01010", 2), // 0 Convert.ToByte("01011", 2), // 1 @@ -45,7 +46,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 Convert.ToByte("10101", 2) // F }; - private static int[] sectorsPerTrack = + private static readonly int[] sectorsPerTrack = { 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, @@ -57,49 +58,41 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 17, 17, 17, 17, 17 }; - private static int[] standardTrackLengthBytes = + private static readonly int[] standardTrackLengthBytes = { 6250, 6666, 7142, 7692 }; private static byte Checksum(byte[] source) { - int count = source.Length; + var count = source.Length; byte result = 0; - for (int i = 0; i < count; i++) + for (var i = 0; i < count; i++) result ^= source[i]; return result; } - private static byte[] ConvertSectorFromGCR(byte[] source, out int bitsWritten) + private static byte[] ConvertSectorToGcr(byte[] source, byte sectorNo, byte trackNo, byte formatA, byte formatB, out int bitsWritten) { - bitsWritten = 0; - return new byte[] { }; - } - - private static byte[] ConvertSectorToGCR(byte[] source, byte sectorNo, byte trackNo, byte formatA, byte formatB, out int bitsWritten) - { - MemoryStream mem = new MemoryStream(); - BinaryWriter writer = new BinaryWriter(mem); - byte[] writtenData; - byte headerChecksum = (byte)(sectorNo ^ trackNo ^ formatA ^ formatB); + var mem = new MemoryStream(); + var writer = new BinaryWriter(mem); + var headerChecksum = (byte)(sectorNo ^ trackNo ^ formatA ^ formatB); // assemble written data for GCR encoding - writtenData = new byte[260]; + var writtenData = new byte[260]; Array.Copy(source, 0, writtenData, 1, 256); writtenData[0] = 0x07; writtenData[0x101] = Checksum(source); writtenData[0x102] = 0x00; writtenData[0x103] = 0x00; - bitsWritten = 0; writer.Write(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }); // sync - writer.Write(EncodeGCR(new byte[] { 0x08, headerChecksum, sectorNo, trackNo, formatA, formatB, 0x0F, 0x0F })); // header + writer.Write(EncodeGcr(new byte[] { 0x08, headerChecksum, sectorNo, trackNo, formatA, formatB, 0x0F, 0x0F })); // header writer.Write(new byte[] { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 }); // gap writer.Write(new byte[] { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }); // sync - writer.Write(EncodeGCR(writtenData)); // data + writer.Write(EncodeGcr(writtenData)); // data writer.Write(new byte[] { 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 }); // gap bitsWritten = (int)mem.Length * 8; @@ -108,71 +101,46 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 return mem.ToArray(); } - private static byte[] DecodeGCR(byte[] source) - { - // 5 GCR encoded bytes -> 4 bytes - int[] gcr = new int[8]; - byte[] data = new byte[4]; - int count = source.Length; - int outputValue; - MemoryStream mem = new MemoryStream(); - BinaryWriter writer = new BinaryWriter(mem); - - for (int i = 0; i < count; i += 5) - { - Array.Copy(source, i, data, 0, 5); - - // -------- -------- -------- -------- -------- - // 11100000 32222211 44443333 66555554 77777666 - - gcr[0] = ((data[0])) & 0x1F; - gcr[1] = ((data[0] >> 5) | data[1] << 3) & 0x1F; - gcr[2] = ((data[1] >> 2)) & 0x1F; - gcr[3] = ((data[1] >> 7) | data[2] << 1) & 0x1F; - gcr[4] = ((data[2] >> 4) | data[3] << 4) & 0x1F; - gcr[5] = ((data[3] >> 1)) & 0x1F; - gcr[6] = ((data[3] >> 6) | data[4] << 2) & 0x1F; - gcr[7] = ((data[4] >> 3)) & 0x1F; - - outputValue = gcrDecodeTable[gcr[0]] | (gcrDecodeTable[gcr[1]] << 4); - writer.Write((byte)(outputValue & 0xFF)); - outputValue = gcrDecodeTable[gcr[2]] | (gcrDecodeTable[gcr[3]] << 4); - writer.Write((byte)(outputValue & 0xFF)); - outputValue = gcrDecodeTable[gcr[4]] | (gcrDecodeTable[gcr[5]] << 4); - writer.Write((byte)(outputValue & 0xFF)); - outputValue = gcrDecodeTable[gcr[6]] | (gcrDecodeTable[gcr[7]] << 4); - writer.Write((byte)(outputValue & 0xFF)); - } - writer.Flush(); - return mem.ToArray(); - } - - private static byte[] EncodeGCR(byte[] source) + private static byte[] EncodeGcr(byte[] source) { // 4 bytes -> 5 GCR encoded bytes - int[] gcr = new int[8]; - byte[] data = new byte[4]; - int count = source.Length; - int outputValue; - MemoryStream mem = new MemoryStream(); - BinaryWriter writer = new BinaryWriter(mem); + var gcr = new int[8]; + var data = new byte[4]; + var count = source.Length; + var mem = new MemoryStream(); + var writer = new BinaryWriter(mem); - for (int i = 0; i < count; i += 4) + for (var i = 0; i < count; i += 4) { - Array.Copy(source, i, data, 0, 4); - gcr[0] = gcrEncodeTable[data[0] & 0xF]; - gcr[1] = gcrEncodeTable[data[0] >> 4]; - gcr[2] = gcrEncodeTable[data[1] & 0xF]; - gcr[3] = gcrEncodeTable[data[1] >> 4]; - gcr[4] = gcrEncodeTable[data[2] & 0xF]; - gcr[5] = gcrEncodeTable[data[2] >> 4]; - gcr[6] = gcrEncodeTable[data[3] & 0xF]; - gcr[7] = gcrEncodeTable[data[3] >> 4]; - + Array.Copy(source, i, data, 0, 4); + gcr[0] = gcrEncodeTable[data[0] >> 4]; + gcr[1] = gcrEncodeTable[data[0] & 0xF]; + gcr[2] = gcrEncodeTable[data[1] >> 4]; + gcr[3] = gcrEncodeTable[data[1] & 0xF]; + gcr[4] = gcrEncodeTable[data[2] >> 4]; + gcr[5] = gcrEncodeTable[data[2] & 0xF]; + gcr[6] = gcrEncodeTable[data[3] >> 4]; + gcr[7] = gcrEncodeTable[data[3] & 0xF]; + + // -------- -------- -------- -------- -------- + // 00000111 11222223 33334444 45555566 66677777 + + var outputValue = (gcr[0] << 3) | (gcr[1] >> 2); + writer.Write((byte)(outputValue & 0xFF)); + outputValue = (gcr[1] << 6) | (gcr[2] << 1) | (gcr[3] >> 4); + writer.Write((byte)(outputValue & 0xFF)); + outputValue = (gcr[3] << 4) | (gcr[4] >> 1); + writer.Write((byte)(outputValue & 0xFF)); + outputValue = (gcr[4] << 7) | (gcr[5] << 2) | (gcr[6] >> 3); + writer.Write((byte)(outputValue & 0xFF)); + outputValue = (gcr[6] << 5) | (gcr[7]); + writer.Write((byte)(outputValue & 0xFF)); + + /* // -------- -------- -------- -------- -------- // 11100000 32222211 44443333 66555554 77777666 - outputValue = (gcr[0]) | (gcr[1] << 5); + var outputValue = (gcr[0]) | (gcr[1] << 5); writer.Write((byte)(outputValue & 0xFF)); outputValue = (gcr[1] >> 3) | (gcr[2] << 2) | (gcr[3] << 7); writer.Write((byte)(outputValue & 0xFF)); @@ -182,17 +150,21 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 writer.Write((byte)(outputValue & 0xFF)); outputValue = (gcr[6] >> 2) | (gcr[7] << 3); writer.Write((byte)(outputValue & 0xFF)); - } - writer.Flush(); + */ + } + writer.Flush(); return mem.ToArray(); } public static Disk Read(byte[] source) { - MemoryStream mem = new MemoryStream(source); - BinaryReader reader = new BinaryReader(mem); - Disk result = new Disk(); - int trackCount = 0; + var mem = new MemoryStream(source); + var reader = new BinaryReader(mem); + var trackDatas = new List(); + var trackLengths = new List(); + var trackNumbers = new List(); + var trackDensities = new List(); + int trackCount; switch (source.Length) { @@ -208,42 +180,40 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 case 197376: // 40 tracks with errors trackCount = 40; break; + default: + throw new Exception("Not able to identify capacity of the D64 file."); } - for (int i = 0; i < trackCount; i++) + for (var i = 0; i < trackCount; i++) { - Track track = new Track(); - int sectors = sectorsPerTrack[i]; - MemoryStream trackMem = new MemoryStream(); + var sectors = sectorsPerTrack[i]; + var trackLengthBits = 0; + using (var trackMem = new MemoryStream()) + { + for (var j = 0; j < sectors; j++) + { + int bitsWritten; + var sectorData = reader.ReadBytes(256); + var diskData = ConvertSectorToGcr(sectorData, (byte)j, (byte)(i + 1), 0xA0, 0xA0, out bitsWritten); + trackMem.Write(diskData, 0, diskData.Length); + trackLengthBits += bitsWritten; + } + var density = densityTable[i]; - for (int j = 0; j < sectors; j++) - { - int bitsWritten; - byte[] sectorData = reader.ReadBytes(256); - byte[] diskData = ConvertSectorToGCR(sectorData, (byte)j, (byte)i, (byte)0x00, (byte)0x00, out bitsWritten); - trackMem.Write(diskData, 0, diskData.Length); - } - track.density = densityTable[i]; + // we pad the tracks with extra gap bytes to meet MNIB standards + while (trackMem.Length < standardTrackLengthBytes[density]) + { + trackMem.WriteByte(0x55); + } - // we pad the tracks with extra gap bytes to meet MNIB standards - while (trackMem.Length < standardTrackLengthBytes[track.density]) - { - trackMem.WriteByte(0x55); - } - track.data = trackMem.ToArray(); - track.bits = (int)trackMem.Length; - track.index = i; - result.tracks.Add(track); - trackMem.Dispose(); + trackDatas.Add(trackMem.ToArray()); + trackLengths.Add(trackLengthBits); + trackNumbers.Add(i * 2); + trackDensities.Add(densityTable[i]); + } } - result.valid = (result.tracks.Count > 0); - return result; - } - - public static byte[] Write(Disk source) - { - return null; + return new Disk(trackDatas, trackNumbers, trackDensities, trackLengths, 84); } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Media/Disk.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/Disk.cs index 013018df01..dd0165bc73 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Media/Disk.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/Disk.cs @@ -1,19 +1,116 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using System.Linq; +using BizHawk.Common; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Media { - public class Track + public sealed class Disk { - public int bits; - public byte[] data; - public int density; - public int index; - } + public const int FLUX_BITS_PER_ENTRY = 32; + public const int FLUX_BITS_PER_TRACK = 16000000 / 5; + public const int FLUX_ENTRIES_PER_TRACK = FLUX_BITS_PER_TRACK/FLUX_BITS_PER_ENTRY; - public class Disk - { + private class Track + { + public int Index; + public bool Present; + public int[] FluxData; + } - public List tracks = new List(); - public bool valid; - } + [SaveState.DoNotSave] private readonly Track[] _tracks; + [SaveState.DoNotSave] public bool Valid; + + /// + /// Create a blank, unformatted disk. + /// + public Disk(int trackCapacity) + { + _tracks = new Track[trackCapacity]; + FillMissingTracks(); + Valid = true; + } + + /// + /// Create an expanded representation of a magnetic disk. + /// + /// Raw bit data. + /// Track numbers for the raw bit data. + /// Density zones for the raw bit data. + /// Length, in bits, of each raw bit data. + /// Total number of tracks on the media. + public Disk(IList trackData, IList trackNumbers, IList trackDensities, IList trackLengths, int trackCapacity) + { + _tracks = new Track[trackCapacity]; + for (var i = 0; i < trackData.Count; i++) + { + var track = new Track + { + Index = trackNumbers[i], + Present = true, + FluxData = ConvertToFluxTransitions(trackDensities[i], trackData[i], 0) + }; + _tracks[trackNumbers[i]] = track; + } + FillMissingTracks(); + Valid = true; + } + + private int[] ConvertToFluxTransitions(int density, byte[] bytes, int fluxBitOffset) + { + var result = new int[FLUX_ENTRIES_PER_TRACK]; + var length = bytes.Length; + var lengthBits = length*8; + var offsets = new List(); + + const long bitsNum = FLUX_ENTRIES_PER_TRACK * FLUX_BITS_PER_ENTRY; + long bitsDen = lengthBits; + + for (var i = 0; i < length; i++) + { + var byteData = bytes[i]; + for (var j = 0; j < 8; j++) + { + var offset = fluxBitOffset + ((i * 8 + j) * bitsNum / bitsDen); + var byteOffset = (int)(offset / FLUX_BITS_PER_ENTRY); + var bitOffset = (int)(offset % FLUX_BITS_PER_ENTRY); + offsets.Add(offset); + result[byteOffset] |= ((byteData & 0x80) != 0 ? 1 : 0) << bitOffset; + byteData <<= 1; + } + } + + return result; + } + + private void FillMissingTracks() + { + for (var i = 0; i < _tracks.Length; i++) + { + if (_tracks[i] == null) + { + _tracks[i] = new Track + { + Index = i, + FluxData = new int[FLUX_ENTRIES_PER_TRACK] + }; + } + } + } + + public int[] GetDataForTrack(int halftrack) + { + return _tracks[halftrack].FluxData; + } + + public IEnumerable GetPresentTracks() + { + return _tracks.Where(t => t.Present).Select(t => t.Index); + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Media/G64.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/G64.cs index 451e2c2258..1d22f557ef 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Media/G64.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/G64.cs @@ -1,59 +1,62 @@ -using System.IO; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Media { public static class G64 { public static Disk Read(byte[] source) { - MemoryStream mem = new MemoryStream(source); - BinaryReader reader = new BinaryReader(mem); - Disk result = new Disk(); - string id = new string(reader.ReadChars(8)); + var mem = new MemoryStream(source); + var reader = new BinaryReader(mem); + var id = new string(reader.ReadChars(8)); + var trackDatas = new List(); + var trackLengths = new List(); + var trackNumbers = new List(); + var trackDensities = new List(); - if (id == @"GCR-1541") + if (id == @"GCR-1541") { - int trackCount; - int[] trackOffsetTable = new int[84]; - int[] trackSpeedTable = new int[84]; reader.ReadByte(); //version - trackCount = reader.ReadByte(); + int trackCount = reader.ReadByte(); reader.ReadInt16(); //max track size in bytes - for (int i = 0; i < 84; i++) + var trackOffsetTable = new int[trackCount]; + var trackSpeedTable = new int[trackCount]; + + for (var i = 0; i < trackCount; i++) trackOffsetTable[i] = reader.ReadInt32(); - for (int i = 0; i < 84; i++) + for (var i = 0; i < trackCount; i++) trackSpeedTable[i] = reader.ReadInt32(); - for (int i = 0; i < 84; i++) + for (var i = 0; i < trackCount; i++) { if (trackOffsetTable[i] > 0) { - int trackLength; - byte[] trackData; - Track track = new Track(); - mem.Position = trackOffsetTable[i]; - trackLength = reader.ReadInt16(); - trackData = reader.ReadBytes(trackLength); - track.bits = trackLength * 8; - track.data = trackData; - track.density = trackSpeedTable[i]; - track.index = i; - result.tracks.Add(track); + int trackLength = reader.ReadInt16(); + var trackData = reader.ReadBytes(trackLength); + + trackDatas.Add(trackData); + trackLengths.Add(trackLength * 8); + trackDensities.Add(trackSpeedTable[i]); + trackNumbers.Add(i); } } + + if (trackSpeedTable.Any(ts => ts > 3 || ts < 0)) + { + throw new Exception("Byte-level speeds are not yet supported in the G64 loader."); + } + + return new Disk(trackDatas, trackNumbers, trackDensities, trackLengths, 84); } - result.valid = (result.tracks.Count > 0); - return result; + return new Disk(84); } - - public static byte[] Write(Disk source) - { - return null; - } - } + } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Media/PRG.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/PRG.cs index 37b552acac..9c81b4451d 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/Media/PRG.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/PRG.cs @@ -1,26 +1,28 @@ using BizHawk.Emulation.Cores.Computers.Commodore64.MOS; -namespace BizHawk.Emulation.Cores.Computers.Commodore64 +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Media { - public static class PRG + public static class Prg { - static public void Load(MOSPLA pla, byte[] prgFile) + public static void Load(Chip90611401 pla, byte[] prgFile) { - int length = prgFile.Length; - if (length > 2) - { - int addr = (prgFile[0] | (prgFile[1] << 8)); - int offset = 2; - unchecked - { - while (offset < length) - { - pla.Write(addr, prgFile[offset]); - offset++; - addr++; - } - } - } + var length = prgFile.Length; + if (length <= 2) + { + return; + } + + var addr = prgFile[0] | (prgFile[1] << 8); + var offset = 2; + unchecked + { + while (offset < length) + { + pla.Write(addr, prgFile[offset]); + offset++; + addr++; + } + } } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Media/Tape.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/Tape.cs new file mode 100644 index 0000000000..6e493d1d02 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Media/Tape.cs @@ -0,0 +1,101 @@ +using System; +using System.Text; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Media +{ + /** + * This class represents a tape. Only TAP-style tapes are supported for now. + */ + public class Tape + { + [SaveState.DoNotSave] private readonly byte[] _tapeData; + [SaveState.DoNotSave] private readonly byte _version; + [SaveState.DoNotSave] private readonly int _start; + [SaveState.DoNotSave] private readonly int _end; + private int _pos, _cycle; + private bool _data; + + public Tape(byte version, byte[] tapeData, int start, int end) + { + _version = version; + _tapeData = tapeData; + _start = start; + _end = end; + Rewind(); + } + + public void ExecuteCycle() + { + if (_cycle == 0) + { + if (_pos >= _end) + { + _data = true; + return; + } + + _cycle = _tapeData[_pos++] * 8; + if (_cycle == 0) + { + if (_version == 0) + { + _cycle = 256 * 8; // unspecified overflow condition + } + else + { + _cycle = (int)(BitConverter.ToUInt32(_tapeData, _pos - 1) >> 8); + _pos += 3; + if (_cycle == 0) + { + throw new Exception("Bad tape data"); + } + } + } + + _cycle++; + } + + // Send a single negative pulse at the end of a cycle + _data = --_cycle != 0; + } + + // Rewinds the tape back to start + public void Rewind() + { + _pos = _start; + _cycle = 0; + } + + // Reads from tape, this will tell the caller if the flag pin should be raised + public bool Read() + { + return _data; + } + + // Try to construct a tape file from file data. Returns null if not a tape file, throws exceptions for bad tape files. + // (Note that some error conditions aren't caught right here.) + public static Tape Load(byte[] tapeFile) + { + Tape result = null; + + if (Encoding.ASCII.GetString(tapeFile, 0, 12) == "C64-TAPE-RAW") + { + var version = tapeFile[12]; + if (version > 1) throw new Exception("This tape has an unsupported version"); + var size = BitConverter.ToUInt32(tapeFile, 16); + if (size + 20 != tapeFile.Length) + { + throw new Exception("Tape file header specifies a length that doesn't match the file size"); + } + result = new Tape(version, tapeFile, 20, tapeFile.Length); + } + return result; + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/SaveState.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/SaveState.cs index 632af5beb3..b87509162d 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/SaveState.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/SaveState.cs @@ -1,5 +1,6 @@ using System; using System.Drawing; +using System.Linq; using System.Reflection; using System.Text; @@ -9,204 +10,204 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 { internal static class SaveState { - static private Encoding encoding = Encoding.Unicode; + public class DoNotSave : Attribute + { + } - static public void SyncObject(Serializer ser, object obj) + private static readonly Encoding Encoding = Encoding.Unicode; + + public static void SyncObject(Serializer ser, object obj) { - BindingFlags defaultFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy; - MemberInfo[] members = obj.GetType().GetMembers(defaultFlags); + const BindingFlags defaultFlags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy; + var objType = obj.GetType(); + var members = objType.GetMembers(defaultFlags); - Bit refBit; - Boolean refBool; - Byte refByte; - ByteBuffer refByteBuffer; - Int16 refInt16; - Int32 refInt32; - IntBuffer refIntBuffer; - Int32 refPointX; - Int32 refPointY; - SByte refSByte; - UInt16 refUInt16; - UInt32 refUInt32; - Int32 refRectHeight; - Int32 refRectWidth; - - foreach (MemberInfo member in members) + foreach (var member in members) { - object currentValue = null; - bool fail = false; - FieldInfo fieldInfo = null; - PropertyInfo propInfo = null; - Type valueType = null; + if (member.GetCustomAttributes(true).Any(a => a is DoNotSave)) + { + continue; + } - if (member.MemberType == MemberTypes.Field) + object currentValue = null; + var fail = false; + var fieldInfo = member as FieldInfo; + Type valueType = null; + + if ((member.MemberType == MemberTypes.Field) && member.ReflectedType != null) { - fieldInfo = member.ReflectedType.GetField(member.Name, defaultFlags); - valueType = fieldInfo.FieldType; - currentValue = fieldInfo.GetValue(obj); - } - else - { - fail = true; - } + valueType = fieldInfo.FieldType; + currentValue = fieldInfo.GetValue(obj); + } - if (!fail) - { - if (valueType.IsArray) - { - } + if (currentValue != null) + { + ByteBuffer refByteBuffer; + int refInt32; + IntBuffer refIntBuffer; + int refPointX; + int refPointY; + switch (valueType.Name) + { + case "Action`1": + case "Action`2": + break; + case "Bit": + var refBit = (Bit)currentValue; + ser.Sync(member.Name, ref refBit); + currentValue = refBit; + break; + case "Boolean": + var refBool = (bool)currentValue; + ser.Sync(member.Name, ref refBool); + currentValue = refBool; + break; + case "Boolean[]": + { + var tmp = (bool[])currentValue; + ser.Sync(member.Name, ref tmp, false); + currentValue = tmp; + } + break; + case "Byte": + var refByte = (byte)currentValue; + ser.Sync(member.Name, ref refByte); + currentValue = refByte; + break; + case "Byte[]": + refByteBuffer = new ByteBuffer((byte[])currentValue); + ser.Sync(member.Name, ref refByteBuffer); + currentValue = refByteBuffer.Arr; + break; + case "ByteBuffer": + refByteBuffer = (ByteBuffer)currentValue; + ser.Sync(member.Name, ref refByteBuffer); + currentValue = refByteBuffer; + break; + case "Func`1": + case "Func`2": + break; + case "Int16": + var refInt16 = (short)currentValue; + ser.Sync(member.Name, ref refInt16); + currentValue = refInt16; + break; + case "Int32": + refInt32 = (int)currentValue; + ser.Sync(member.Name, ref refInt32); + currentValue = refInt32; + break; + case "Int32[]": + refIntBuffer = new IntBuffer((int[])currentValue); + ser.Sync(member.Name, ref refIntBuffer); + currentValue = refIntBuffer.Arr; + break; + case "IntBuffer": + refIntBuffer = (IntBuffer)currentValue; + ser.Sync(member.Name, ref refIntBuffer); + currentValue = refIntBuffer; + break; + case "Point": + refPointX = ((Point)currentValue).X; + refPointY = ((Point)currentValue).Y; + ser.Sync(member.Name + "_X", ref refPointX); + ser.Sync(member.Name + "_Y", ref refPointY); + currentValue = new Point(refPointX, refPointY); + break; + case "Rectangle": + refPointX = ((Rectangle)currentValue).X; + refPointY = ((Rectangle)currentValue).Y; + var refRectWidth = ((Rectangle)currentValue).Width; + var refRectHeight = ((Rectangle)currentValue).Height; + ser.Sync(member.Name + "_X", ref refPointX); + ser.Sync(member.Name + "_Y", ref refPointY); + ser.Sync(member.Name + "_Height", ref refRectHeight); + ser.Sync(member.Name + "_Width", ref refRectWidth); + currentValue = new Rectangle(refPointX, refPointY, refRectWidth, refRectHeight); + break; + case "SByte": + var refSByte = (sbyte)currentValue; + ser.Sync(member.Name, ref refSByte); + currentValue = refSByte; + break; + case "String": + var refString = (string)currentValue; + var refVal = new ByteBuffer(Encoding.GetBytes(refString)); + ser.Sync(member.Name, ref refVal); + currentValue = Encoding.GetString(refVal.Arr); + break; + case "UInt16": + var refUInt16 = (ushort)currentValue; + ser.Sync(member.Name, ref refUInt16); + currentValue = refUInt16; + break; + case "UInt32": + var refUInt32 = (uint)currentValue; + ser.Sync(member.Name, ref refUInt32); + currentValue = refUInt32; + break; + default: + var t = currentValue.GetType(); + if (t.IsEnum) + { + refInt32 = (int)currentValue; + ser.Sync(member.Name, ref refInt32); + currentValue = refInt32; + } + else if (t.IsArray) + { + var currentValueArray = (Array) currentValue; + for (var i = 0; i < currentValueArray.Length; i++) + { + ser.BeginSection(string.Format("{0}_{1}", member.Name, i)); + SyncObject(ser, currentValueArray.GetValue(i)); + ser.EndSection(); + } + } + else if (t.IsValueType) + { + fail = true; + } + else if (t.IsClass) + { + fail = true; + foreach (var method in t.GetMethods().Where(method => method.Name == "SyncState")) + { + ser.BeginSection(fieldInfo.Name); + method.Invoke(currentValue, new object[] { ser }); + ser.EndSection(); + fail = false; + break; + } + } + else + { + fail = true; + } + break; + } + } - if (currentValue != null) - { - switch (valueType.Name) - { - case "Bit": - refBit = (Bit)currentValue; - ser.Sync(member.Name, ref refBit); - currentValue = refBit; - break; - case "Boolean": - refBool = (Boolean)currentValue; - ser.Sync(member.Name, ref refBool); - currentValue = refBool; - break; - case "Boolean[]": - { - bool[] tmp = (bool[])currentValue; - ser.Sync(member.Name, ref tmp, false); - currentValue = tmp; - } - break; - case "Byte": - refByte = (Byte)currentValue; - ser.Sync(member.Name, ref refByte); - currentValue = refByte; - break; - case "Byte[]": - refByteBuffer = new ByteBuffer((byte[])currentValue); - ser.Sync(member.Name, ref refByteBuffer); - currentValue = refByteBuffer.Arr; - break; - case "ByteBuffer": - refByteBuffer = (ByteBuffer)currentValue; - ser.Sync(member.Name, ref refByteBuffer); - currentValue = refByteBuffer; - break; - case "Func`1": - break; - case "Int16": - refInt16 = (Int16)currentValue; - ser.Sync(member.Name, ref refInt16); - currentValue = refInt16; - break; - case "Int32": - refInt32 = (Int32)currentValue; - ser.Sync(member.Name, ref refInt32); - currentValue = refInt32; - break; - case "Int32[]": - refIntBuffer = new IntBuffer((int[])currentValue); - ser.Sync(member.Name, ref refIntBuffer); - currentValue = refIntBuffer.Arr; - break; - case "IntBuffer": - refIntBuffer = (IntBuffer)currentValue; - ser.Sync(member.Name, ref refIntBuffer); - currentValue = refIntBuffer; - break; - case "Point": - refPointX = ((Point)currentValue).X; - refPointY = ((Point)currentValue).Y; - ser.Sync(member.Name + "_X", ref refPointX); - ser.Sync(member.Name + "_Y", ref refPointY); - currentValue = new Point(refPointX, refPointY); - break; - case "Rectangle": - refPointX = ((Rectangle)currentValue).X; - refPointY = ((Rectangle)currentValue).Y; - refRectWidth = ((Rectangle)currentValue).Width; - refRectHeight = ((Rectangle)currentValue).Height; - ser.Sync(member.Name + "_X", ref refPointX); - ser.Sync(member.Name + "_Y", ref refPointY); - ser.Sync(member.Name + "_Height", ref refRectHeight); - ser.Sync(member.Name + "_Width", ref refRectWidth); - currentValue = new Rectangle(refPointX, refPointY, refRectWidth, refRectHeight); - break; - case "SByte": - refSByte = (SByte)currentValue; - ser.Sync(member.Name, ref refSByte); - currentValue = refSByte; - break; - case "String": - { - var refString = (String)currentValue; - var refVal = new ByteBuffer(encoding.GetBytes(refString)); - ser.Sync(member.Name, ref refVal); - currentValue = encoding.GetString(refVal.Arr); - } - break; - case "UInt16": - refUInt16 = (UInt16)currentValue; - ser.Sync(member.Name, ref refUInt16); - currentValue = refUInt16; - break; - case "UInt32": - refUInt32 = (UInt32)currentValue; - ser.Sync(member.Name, ref refUInt32); - currentValue = refUInt32; - break; - default: - { - Type t = currentValue.GetType(); - if (t.IsEnum) - { - refInt32 = (Int32)currentValue; - ser.Sync(member.Name, ref refInt32); - currentValue = refInt32; - } - else if (t.IsValueType) - { - fail = true; - } - else if (t.IsClass) - { - fail = true; - foreach (var method in t.GetMethods()) - { - if (method.Name == "SyncState") - { - ser.BeginSection(fieldInfo.Name); - method.Invoke(currentValue, new object[] { (Serializer)ser }); - ser.EndSection(); - fail = false; - break; - } - } - } - else - { - fail = true; - } - } - break; - } - } - - if (member.MemberType == MemberTypes.Property) - { - if (propInfo.CanWrite && !fail) - { - MethodInfo setMethod = propInfo.GetSetMethod(); - setMethod.Invoke(obj, new object[] { currentValue }); - } - } - - if (member.MemberType == MemberTypes.Field) - { - fieldInfo.SetValue(obj, currentValue); - } - } - } + if (!fail) + { + if (member.MemberType == MemberTypes.Property) + { + var propInfo = member as PropertyInfo; + if (propInfo.CanWrite) + { + var setMethod = propInfo.GetSetMethod(); + if (setMethod != null) + { + setMethod.Invoke(obj, new[] { currentValue }); + } + } + } + else if (member.MemberType == MemberTypes.Field) + { + fieldInfo.SetValue(obj, currentValue); + } + } + } } } } diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.FluxTransitions.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.FluxTransitions.cs new file mode 100644 index 0000000000..d59965f4ec --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.FluxTransitions.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Emulation.Cores.Computers.Commodore64.Media; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Serial +{ + public sealed partial class Drive1541 + { + private const long LEHMER_RNG_PRIME = 48271; + + private int _diskDensityCounter; // density .. 16 + private int _diskSupplementaryCounter; // 0 .. 16 + private bool _diskFluxReversalDetected; + private int _diskBitsLeft; + private int _diskByteOffset; + private int _diskBits; + private int _diskCycle; + private int _diskDensity; + private bool _previousCa1; + private int _countsBeforeRandomTransition; + private int _rngCurrent; + + // Lehmer RNG + private void AdvanceRng() + { + if (_rngCurrent == 0) + _rngCurrent = 1; + _rngCurrent = (int)(_rngCurrent * LEHMER_RNG_PRIME % int.MaxValue); + } + + private void ExecuteFlux() + { + for (_diskCycle = 0; _diskCycle < 16; _diskCycle++) + { + // rotate disk + if (_motorEnabled) + { + if (_diskBitsLeft <= 0) + { + _diskByteOffset++; + if (_diskByteOffset == Disk.FLUX_ENTRIES_PER_TRACK) + { + _diskByteOffset = 0; + } + _diskBits = _trackImageData[_diskByteOffset]; + _diskBitsLeft = Disk.FLUX_BITS_PER_ENTRY; + } + if ((_diskBits & 1) != 0) + { + _countsBeforeRandomTransition = 0; + _diskFluxReversalDetected = true; + } + _diskBits >>= 1; + _diskBitsLeft--; + } + + // random flux transition readings for unformatted data + if (_countsBeforeRandomTransition > 0) + { + _countsBeforeRandomTransition--; + if (_countsBeforeRandomTransition == 0) + { + _diskFluxReversalDetected = true; + AdvanceRng(); + // This constant is what VICE uses. TODO: Determine accuracy. + _countsBeforeRandomTransition = (_rngCurrent % 367) + 33; + } + } + + // flux transition circuitry + if (_diskFluxReversalDetected) + { + _diskDensityCounter = _diskDensity; + _diskSupplementaryCounter = 0; + _diskFluxReversalDetected = false; + if (_countsBeforeRandomTransition == 0) + { + AdvanceRng(); + // This constant is what VICE uses. TODO: Determine accuracy. + _countsBeforeRandomTransition = (_rngCurrent & 0x1F) + 289; + } + } + + // counter circuitry + if (_diskDensityCounter >= 16) + { + _diskDensityCounter = _diskDensity; + _diskSupplementaryCounter++; + if ((_diskSupplementaryCounter & 0x3) == 0x2) + { + _byteReady = false; + _bitsRemainingInLatchedByte--; + if (_bitsRemainingInLatchedByte <= 0) + { + _bitsRemainingInLatchedByte = 8; + + // SOE (sync output enabled) + _byteReady = Via1.Ca2; + } + + _bitHistory = (_bitHistory << 1) | ((_diskSupplementaryCounter & 0xC) == 0x0 ? 1 : 0); + _sync = false; + if (Via1.Cb2 && (_bitHistory & 0x3FF) == 0x3FF) + { + _sync = true; + _bitsRemainingInLatchedByte = 8; + _byteReady = false; + } + + // negative transition activates SO pin on CPU + _previousCa1 = Via1.Ca1; + Via1.Ca1 = !_byteReady; + if (_previousCa1 && !Via1.Ca1) + { + // cycle 6 is roughly 400ns + _overflowFlagDelaySr |= _diskCycle > 6 ? 4 : 2; + } + } + } + + if (_diskSupplementaryCounter >= 16) + { + _diskSupplementaryCounter = 0; + } + + _diskDensityCounter++; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.IDebuggable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.IDebuggable.cs new file mode 100644 index 0000000000..132b181514 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.IDebuggable.cs @@ -0,0 +1,157 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Serial +{ + public sealed partial class Drive1541 : IDebuggable + { + IDictionary IDebuggable.GetCpuFlagsAndRegisters() + { + return new Dictionary + { + { "A", _cpu.A }, + { "X", _cpu.X }, + { "Y", _cpu.Y }, + { "S", _cpu.S }, + { "PC", _cpu.PC }, + { "Flag C", _cpu.FlagC }, + { "Flag Z", _cpu.FlagZ }, + { "Flag I", _cpu.FlagI }, + { "Flag D", _cpu.FlagD }, + { "Flag B", _cpu.FlagB }, + { "Flag V", _cpu.FlagV }, + { "Flag N", _cpu.FlagN }, + { "Flag T", _cpu.FlagT } + }; + } + + void IDebuggable.SetCpuRegister(string register, int value) + { + switch (register) + { + default: + throw new InvalidOperationException(); + case "A": + _cpu.A = (byte)value; + break; + case "X": + _cpu.X = (byte)value; + break; + case "Y": + _cpu.Y = (byte)value; + break; + case "S": + _cpu.S = (byte)value; + break; + case "PC": + _cpu.PC = (ushort)value; + break; + } + } + + bool IDebuggable.CanStep(StepType type) + { + switch (type) + { + case StepType.Into: + case StepType.Over: + case StepType.Out: + return DebuggerStep != null; + default: + return false; + } + } + + + void IDebuggable.Step(StepType type) + { + switch (type) + { + case StepType.Into: + StepInto(); + break; + case StepType.Out: + StepOut(); + break; + case StepType.Over: + StepOver(); + break; + } + } + + private void StepInto() + { + while (_cpu.AtInstructionStart()) + { + DebuggerStep(); + } + while (!_cpu.AtInstructionStart()) + { + DebuggerStep(); + } + } + + private void StepOver() + { + var instruction = CpuPeek(_cpu.PC); + + if (instruction == Jsr) + { + var destination = _cpu.PC + JsrSize; + while (_cpu.PC != destination) + { + StepInto(); + } + } + else + { + StepInto(); + } + } + + private void StepOut() + { + var instructionsBeforeBailout = 1000000; + var instr = CpuPeek(_cpu.PC); + _jsrCount = instr == Jsr ? 1 : 0; + + while (--instructionsBeforeBailout > 0) + { + StepInto(); + instr = CpuPeek(_cpu.PC); + if (instr == Jsr) + { + _jsrCount++; + } + else if ((instr == Rts || instr == Rti) && _jsrCount <= 0) + { + StepInto(); + _jsrCount = 0; + break; + } + else if (instr == Rts || instr == Rti) + { + _jsrCount--; + } + } + } + + [SaveState.DoNotSave] + private int _jsrCount; + [SaveState.DoNotSave] + private const byte Jsr = 0x20; + [SaveState.DoNotSave] + private const byte Rti = 0x40; + [SaveState.DoNotSave] + private const byte Rts = 0x60; + + [SaveState.DoNotSave] + private const byte JsrSize = 3; + + [SaveState.DoNotSave] + public IMemoryCallbackSystem MemoryCallbacks { get; private set; } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.IDisassemblable.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.IDisassemblable.cs new file mode 100644 index 0000000000..4ad9631bea --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.IDisassemblable.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Serial +{ + public sealed partial class Drive1541 : IDisassemblable + { + IEnumerable IDisassemblable.AvailableCpus + { + get { yield return "Disk Drive 6502"; } + } + + string IDisassemblable.Cpu + { + get { return "Disk Drive 6502"; } + set + { + } + } + + string IDisassemblable.PCRegisterName + { + get { return "PC"; } + } + + string IDisassemblable.Disassemble(MemoryDomain m, uint addr, out int length) + { + return Components.M6502.MOS6502X.Disassemble((ushort)addr, out length, CpuPeek); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.Motor.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.Motor.cs new file mode 100644 index 0000000000..65dfca8b0f --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.Motor.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Serial +{ + public sealed partial class Drive1541 + { + [SaveState.DoNotSave] private int _tempStep; + [SaveState.DoNotSave] private int _tempPrB1; + + private int _overflowFlagDelaySr; + + private int ReadVia1PrA() + { + return _bitHistory & 0xFF; + } + + private int ReadVia1PrB() + { + return (_motorStep & 0x03) | (_motorEnabled ? 0x04 : 0x00) | (_sync ? 0x00 : 0x80); + } + + private void ExecuteMotor() + { + _tempPrB1 = Via1.EffectivePrB; + _tempStep = _tempPrB1 & 0x3; + _diskDensity = (_tempPrB1 & 0x60) >> 5; + _motorEnabled = (_tempPrB1 & 0x04) != 0; + _ledEnabled = (_tempPrB1 & 0x08) != 0; + + // motor track stepping + if (_tempStep != _motorStep) + { + if (_tempStep == ((_motorStep - 1) & 0x3)) + _trackNumber--; + else if (_tempStep == ((_motorStep + 1) & 0x3)) + _trackNumber++; + + if (_trackNumber < 0) + _trackNumber = 0; + else if (_trackNumber > 83) + _trackNumber = 83; + + _motorStep = _tempStep; + UpdateMediaData(); + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.cs new file mode 100644 index 0000000000..3e2662b11b --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/Drive1541.cs @@ -0,0 +1,309 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Components.M6502; +using BizHawk.Emulation.Cores.Computers.Commodore64.Media; +using BizHawk.Emulation.Cores.Computers.Commodore64.MOS; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Serial +{ + public sealed partial class Drive1541 : SerialPortDevice + { + private Disk _disk; + private int _bitHistory; + private int _bitsRemainingInLatchedByte; + private bool _sync; + private bool _byteReady; + [SaveState.DoNotSave] private readonly int _driveCpuClockNum; + private int _trackNumber; + private bool _motorEnabled; + private bool _ledEnabled; + private int _motorStep; + private int _via0PortBtemp; + private readonly MOS6502X _cpu; + private readonly int[] _ram; + public readonly Via Via0; + public readonly Via Via1; + private readonly int _cpuClockNum; + private int _ratioDifference; + private int _driveLightOffTime; + [SaveState.DoNotSave] private int[] _trackImageData = new int[1]; + + public Func ReadIec = () => 0xFF; + public Action DebuggerStep; + public readonly Chip23128 DriveRom; + + public Drive1541(int clockNum, int clockDen) + { + DriveRom = new Chip23128(); + _cpu = new MOS6502X + { + ReadMemory = CpuRead, + WriteMemory = CpuWrite, + DummyReadMemory = CpuRead, + PeekMemory = CpuPeek, + NMI = false + }; + + _ram = new int[0x800]; + Via0 = new Via(ViaReadClock, ViaReadData, ViaReadAtn, 8); + Via1 = new Via(ReadVia1PrA, ReadVia1PrB); + + _cpuClockNum = clockNum; + _driveCpuClockNum = clockDen*1000000; // 1mhz + } + + private byte CpuPeek(ushort addr) + { + return unchecked((byte)Peek(addr)); + } + + private byte CpuRead(ushort addr) + { + return unchecked((byte) Read(addr)); + } + + private void CpuWrite(ushort addr, byte val) + { + Write(addr, val); + } + + private bool ViaReadClock() + { + var inputClock = ReadMasterClk(); + var outputClock = ReadDeviceClk(); + return !(inputClock && outputClock); + } + + private bool ViaReadData() + { + var inputData = ReadMasterData(); + var outputData = ReadDeviceData(); + return !(inputData && outputData); + } + + private bool ViaReadAtn() + { + var inputAtn = ReadMasterAtn(); + return !inputAtn; + } + + public override void ExecutePhase() + { + if (_cpuClockNum > _driveCpuClockNum) + { + _ratioDifference += _cpuClockNum - _driveCpuClockNum; + if (_ratioDifference > _cpuClockNum) + { + _ratioDifference -= _cpuClockNum; + return; + } + } + else if (_cpuClockNum <= _driveCpuClockNum) + { + _ratioDifference += _driveCpuClockNum - _cpuClockNum; + while (_ratioDifference > _driveCpuClockNum) + { + _ratioDifference -= _driveCpuClockNum; + ExecutePhaseInternal(); + } + } + ExecutePhaseInternal(); + } + + private void ExecutePhaseInternal() + { + Via0.Ca1 = ViaReadAtn(); + + // clock output from 325572-01 drives CPU clock (phi0) + ExecuteMotor(); + ExecuteFlux(); + Via0.ExecutePhase(); + Via1.ExecutePhase(); + + // SO pin pipeline + if ((_overflowFlagDelaySr & 0x01) != 0) + { + _cpu.SetOverflow(); + } + _overflowFlagDelaySr >>= 1; + + _cpu.IRQ = !(Via0.Irq && Via1.Irq); // active low IRQ line + _cpu.ExecuteOne(); + + _via0PortBtemp = Via0.EffectivePrB; + _ledEnabled = (_via0PortBtemp & 0x08) != 0; + + if (_ledEnabled) + { + _driveLightOffTime = 1000000; + } + else if (_driveLightOffTime > 0) + { + _driveLightOffTime--; + } + } + + public override void HardReset() + { + Via0.HardReset(); + Via1.HardReset(); + _trackNumber = 34; + for (var i = 0; i < _ram.Length; i++) + { + _ram[i] = 0x00; + } + + _diskDensity = 0; + _diskFluxReversalDetected = false; + _diskByteOffset = 0; + _diskBitsLeft = 0; + _diskBits = 0; + _driveLightOffTime = 0; + _diskDensityCounter = 0; + _diskSupplementaryCounter = 0; + _diskCycle = 0; + _previousCa1 = false; + _countsBeforeRandomTransition = 0; + + SoftReset(); + UpdateMediaData(); + } + + public void SoftReset() + { + _cpu.NESSoftReset(); + _overflowFlagDelaySr = 0; + } + + public void InsertMedia(Disk disk) + { + _disk = disk; + UpdateMediaData(); + } + + private void UpdateMediaData() + { + if (_disk != null) + { + _trackImageData = _disk.GetDataForTrack(_trackNumber); + _diskBits = _trackImageData[_diskByteOffset] >> (Disk.FLUX_BITS_PER_ENTRY - _diskBitsLeft); + } + } + + public void RemoveMedia() + { + _trackImageData = new int[1]; + } + + public int Peek(int addr) + { + switch (addr & 0xFC00) + { + case 0x1800: + return Via0.Peek(addr); + case 0x1C00: + return Via1.Peek(addr); + } + if ((addr & 0x8000) != 0) + return DriveRom.Peek(addr & 0x3FFF); + if ((addr & 0x1F00) < 0x800) + return _ram[addr & 0x7FF]; + return (addr >> 8) & 0xFF; + } + + public int PeekVia0(int addr) + { + return Via0.Peek(addr); + } + + public int PeekVia1(int addr) + { + return Via1.Peek(addr); + } + + public void Poke(int addr, int val) + { + switch (addr & 0xFC00) + { + case 0x1800: + Via0.Poke(addr, val); + break; + case 0x1C00: + Via1.Poke(addr, val); + break; + default: + if ((addr & 0x8000) == 0 && (addr & 0x1F00) < 0x800) + _ram[addr & 0x7FF] = val & 0xFF; + break; + } + } + + public void PokeVia0(int addr, int val) + { + Via0.Poke(addr, val); + } + + public void PokeVia1(int addr, int val) + { + Via1.Poke(addr, val); + } + + public int Read(int addr) + { + switch (addr & 0xFC00) + { + case 0x1800: + return Via0.Read(addr); + case 0x1C00: + return Via1.Read(addr); + } + if ((addr & 0x8000) != 0) + return DriveRom.Read(addr & 0x3FFF); + if ((addr & 0x1F00) < 0x800) + return _ram[addr & 0x7FF]; + return (addr >> 8) & 0xFF; + } + + public void Write(int addr, int val) + { + switch (addr & 0xFC00) + { + case 0x1800: + Via0.Write(addr, val); + break; + case 0x1C00: + Via1.Write(addr, val); + break; + default: + if ((addr & 0x8000) == 0 && (addr & 0x1F00) < 0x800) + _ram[addr & 0x7FF] = val & 0xFF; + break; + } + } + + public override bool ReadDeviceClk() + { + var viaOutputClock = (Via0.DdrB & 0x08) != 0 && (Via0.PrB & 0x08) != 0; + return !viaOutputClock; + } + + public override bool ReadDeviceData() + { + var viaOutputData = (Via0.DdrB & 0x02) != 0 && (Via0.PrB & 0x02) != 0; + var viaInputAtn = ViaReadAtn(); + var viaOutputAtna = (Via0.DdrB & 0x10) != 0 && (Via0.PrB & 0x10) != 0; + + return !(viaOutputAtna ^ viaInputAtn) && !viaOutputData; + } + + public override bool ReadDeviceLight() + { + return _driveLightOffTime > 0; + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/SerialPort.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/SerialPort.cs new file mode 100644 index 0000000000..07cc758df4 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/SerialPort.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Common; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Computers.Commodore64.Cassette; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Serial +{ + public sealed class SerialPort : IDriveLight + { + public Func ReadMasterAtn = () => true; + public Func ReadMasterClk = () => true; + public Func ReadMasterData = () => true; + + private SerialPortDevice _device; + private bool _connected; + + public void HardReset() + { + if (_connected) + { + _device.HardReset(); + } + } + + public void ExecutePhase() + { + if (_connected) + { + _device.ExecutePhase(); + } + } + + public void ExecuteDeferred(int cycles) + { + if (_connected) + { + _device.ExecuteDeferred(cycles); + } + } + + public bool ReadDeviceClock() + { + return !_connected || _device.ReadDeviceClk(); + } + + public bool ReadDeviceData() + { + return !_connected || _device.ReadDeviceData(); + } + + public bool ReadDeviceLight() + { + return _connected && _device.ReadDeviceLight(); + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + + public void Connect(SerialPortDevice device) + { + _connected = device != null; + _device = device; + if (_device == null) + { + return; + } + + _device.ReadMasterAtn = () => ReadMasterAtn(); + _device.ReadMasterClk = () => ReadMasterClk(); + _device.ReadMasterData = () => ReadMasterData(); + } + + public bool DriveLightEnabled { get { return true; } } + public bool DriveLightOn { get { return ReadDeviceLight(); } } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/SerialPortDevice.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/SerialPortDevice.cs new file mode 100644 index 0000000000..150ec49940 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/Serial/SerialPortDevice.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.Serial +{ + public abstract class SerialPortDevice + { + public Func ReadMasterAtn; + public Func ReadMasterClk; + public Func ReadMasterData; + + public virtual void ExecutePhase() + { + } + + public virtual void ExecuteDeferred(int cycles) + { + } + + public virtual void HardReset() + { + } + + public virtual bool ReadDeviceClk() + { + return true; + } + + public virtual bool ReadDeviceData() + { + return true; + } + + public virtual bool ReadDeviceLight() + { + return false; + } + + public virtual void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/User/UserPort.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/User/UserPort.cs new file mode 100644 index 0000000000..ba6afcc0c3 --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/User/UserPort.cs @@ -0,0 +1,75 @@ +using System; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.User +{ + public sealed class UserPort + { + public Func ReadCounter1; + public Func ReadCounter2; + public Func ReadHandshake; + public Func ReadSerial1; + public Func ReadSerial2; + + private bool _connected; + private UserPortDevice _device; + + public void Connect(UserPortDevice device) + { + _device = device; + _connected = _device != null; + if (_device != null) + { + _device.ReadCounter1 = () => ReadCounter1(); + _device.ReadCounter2 = () => ReadCounter2(); + _device.ReadHandshake = () => ReadHandshake(); + _device.ReadSerial1 = () => ReadSerial1(); + _device.ReadSerial2 = () => ReadSerial2(); + } + } + + public void Disconnect() + { + _connected = false; + _device = null; + } + + public void HardReset() + { + if (_connected) + { + _device.HardReset(); + } + } + + public bool ReadAtn() + { + return !_connected || _device.ReadAtn(); + } + + public int ReadData() + { + return !_connected ? 0xFF : _device.ReadData(); + } + + public bool ReadFlag2() + { + return !_connected || _device.ReadFlag2(); + } + + public bool ReadPa2() + { + return !_connected || _device.ReadPa2(); + } + + public bool ReadReset() + { + return !_connected || _device.ReadReset(); + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/User/UserPortDevice.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/User/UserPortDevice.cs new file mode 100644 index 0000000000..b4e215f3bc --- /dev/null +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/User/UserPortDevice.cs @@ -0,0 +1,49 @@ +using System; +using BizHawk.Common; + +namespace BizHawk.Emulation.Cores.Computers.Commodore64.User +{ + public abstract class UserPortDevice + { + public Func ReadCounter1; + public Func ReadCounter2; + public Func ReadHandshake; + public Func ReadSerial1; + public Func ReadSerial2; + + public virtual void HardReset() + { + // note: this will not disconnect any attached media + } + + public virtual bool ReadAtn() + { + return true; + } + + public virtual int ReadData() + { + return 0xFF; + } + + public virtual bool ReadFlag2() + { + return true; + } + + public virtual bool ReadPa2() + { + return true; + } + + public virtual bool ReadReset() + { + return true; + } + + public void SyncState(Serializer ser) + { + SaveState.SyncObject(ser, this); + } + } +} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/UserPort/UserPortDevice.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/UserPort/UserPortDevice.cs deleted file mode 100644 index eedf9a1872..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/UserPort/UserPortDevice.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using BizHawk.Common; -using BizHawk.Emulation.Common; - -namespace BizHawk.Emulation.Cores.Computers.Commodore64.UserPort -{ - public class UserPortDevice - { - public Func ReadCounter1; - public Func ReadCounter2; - public Func ReadHandshake; - public Func ReadSerial1; - public Func ReadSerial2; - - public UserPortDevice() - { - } - - virtual public void HardReset() - { - // note: this will not disconnect any attached media - } - - virtual public bool ReadAtn() - { - return true; - } - - virtual public bool ReadCounter1Buffer() - { - return true; - } - - virtual public bool ReadCounter2Buffer() - { - return true; - } - - virtual public byte ReadData() - { - return 0xFF; - } - - virtual public bool ReadFlag2() - { - return true; - } - - virtual public bool ReadPA2() - { - return true; - } - - virtual public bool ReadReset() - { - return true; - } - - virtual public bool ReadSerial1Buffer() - { - return true; - } - - virtual public bool ReadSerial2Buffer() - { - return true; - } - - public void SyncState(Serializer ser) - { - SaveState.SyncObject(ser, this); - } - } -} diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/docs/CRT.TXT b/BizHawk.Emulation.Cores/Computers/Commodore64/docs/CRT.TXT deleted file mode 100644 index aeae90299b..0000000000 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/docs/CRT.TXT +++ /dev/null @@ -1,1201 +0,0 @@ - -*** CRT - CaRTridge Images (from the CCS64 emulator) -*** Document revision: 1.13 -*** Last updated: June 12, 2007 -*** Compiler/Editor: Peter Schepers -*** Contributors/sources: Per Hakan Sundell, - Markus Brenner - Marco Van Den Heuvel - - Cartridge files were introduced in the CCS64 emulator, written by Per -Hakan Sundell, and use the ".CRT" file extension. This format was created -to handle the various ROM cartridges that exist, such as Action Replay, the -Power cartridge, and the Final Cartridge. - - Normal game cartridges can load into several different memory ranges -($8000-9FFF, $A000-BFFF or $E000-FFFF). Newer utility and freezer -cartridges were less intrusive, hiding themselves until called upon, and -still others used bank-switching techniques to allow much larger ROM's than -normal. Because of these "stealthing" and bank-switching methods, a special -cartridge format was necessary, to let the emulator know where the -cartridge should reside, the control line states to enable it and any -special hardware features it uses. - - Here is a dump of a sample 8K normal cartridge, "Attack Of The Mutant -Camels"... - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 00 00 01 00 00 00 00 00 00 @ -0020: 41 54 54 41 43 4B 20 4F 46 20 54 48 45 20 4D 55 ATTACKOFTHEMU -0030: 54 41 4E 54 20 43 41 4D 45 4C 53 00 00 00 00 00 TANTCAMELS -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: D3 9B BC FE C3 C2 CD 38 30 EA EA EA A9 01 85 13 ӛ80 -0060: 4C B3 9B A9 08 85 5A 88 D0 FD C6 5A D0 F9 60 D0 LZZ` - - Bytes:$0000-000F - 16-byte cartridge signature "C64 CARTRIDGE" (padded - with space characters) - 0010-0013 - File header length ($00000040, in high/low format, - calculated from offset $0000). The default (also the - minimum) value is $40. Some cartridges exist which - show a value of $00000020 which is wrong. - 0014-0015 - Cartridge version (high/low, presently 01.00) - 0016-0017 - Cartridge hardware type ($0000, high/low) - 0 - Normal cartridge - 1 - Action Replay - 2 - KCS Power Cartridge - 3 - Final Cartridge III - 4 - Simons Basic - 5 - Ocean type 1* - 6 - Expert Cartridge - 7 - Fun Play, Power Play - 8 - Super Games - 9 - Atomic Power - 10 - Epyx Fastload - 11 - Westermann Learning - 12 - Rex Utility - 13 - Final Cartridge I - 14 - Magic Formel - 15 - C64 Game System, System 3 - 16 - WarpSpeed - 17 - Dinamic** - 18 - Zaxxon, Super Zaxxon (SEGA) - 19 - Magic Desk, Domark, HES Australia - 20 - Super Snapshot 5 - 21 - Comal-80 - 22 - Structured Basic - 23 - Ross - 24 - Dela EP64 - 25 - Dela EP7x8 - 26 - Dela EP256 - 27 - Rex EP256 - 0018 - Cartridge port EXROM line status - 0 - inactive - 1 - active - 0019 - Cartridge port GAME line status - 0 - inactive - 1 - active - 001A-001F - Reserved for future use - 0020-003F - 32-byte cartridge name "CCSMON" (uppercase, padded - with null characters) - 0040-xxxx - Cartridge contents (called CHIP PACKETS, as there can - be more than one per CRT file). See below for a - breakdown of the CHIP format. - - (*Note: Ocean type 1 includes Navy Seals, Robocop 2 & 3, Shadow of the - Beast, Toki, Terminator 2 and more) - - (**Note: Dinamic includes Narco Police and more) - - ---------------------------------------------------------------------------- - - -CHIP Contents -------------- - - The following is the contents of the CHIP packet, from position $0040 on -in the CRT file. Note I have re-adjusted the starting address to be $0000, -since we are now looking at a file contained in the .CRT file, and all size -references are from where it starts. - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0010: D3 9B BC FE C3 C2 CD 38 30 EA EA EA A9 01 85 13 ӛ80 -0020: 4C B3 9B A9 08 85 5A 88 D0 FD C6 5A D0 F9 60 D0 LZZ` -0030: F2 60 A9 04 85 49 A9 00 85 48 A2 00 A5 48 9D 40 `IHH@ -0040: 03 A5 49 9D 60 03 A5 48 18 69 28 85 48 A5 49 69 I`Hi(HIi -0050: 00 85 49 E8 E0 18 D0 E4 60 A6 03 A4 02 BD 40 03 I`@ - - Bytes:$0000-0003 - Contained ROM signature "CHIP" (note there can be more - than one image in a .CRT file) - 0004-0007 - Total packet length ($00002010, ROM image size and - header combined) (high/low format) - 0008-0009 - Chip type - 0 - ROM - 1 - RAM, no ROM data - 2 - Flash ROM - 000A-000B - Bank number ($0000 - normal cartridge) - 000C-000D - Starting load address (high/low format) - 000E-000F - ROM image size in bytes (high/low format, typically - $2000 or $4000) - 0010-xxxx - ROM data - - ---------------------------------------------------------------------------- - - - The following is a chart taken from the "Commodore Programmers Reference -Guide". It details the state of various areas of memory depending on the -state of the control lines. - - -Legend: -L - ROML (low) -H - ROMH (high) -G - GAME -E - EXROM - -Addr LHGE LHGE LHGE LHGE LHGE LHGE LHGE LHGE LHGE -Range - 1111 101X 1000 011X 001X 1110 0100 1100 XX01 - default 00X0 Ultimax -------------------------------------------------------------------------- -E000-FFFF Kernal RAM RAM Kernal RAM Kernal Kernal Kernal ROMH(*) -D000-DFFF IO/CHR IO/CHR IO/RAM IO/CHR RAM IO/CHR IO/CHR IO/CHR I/O -C000-CFFF RAM RAM RAM RAM RAM RAM RAM RAM - -A000-BFFF BASIC RAM RAM RAM RAM BASIC ROMH ROMH - -8000-9FFF RAM RAM RAM RAM RAM ROML RAM ROML ROML(*) -4000-7FFF RAM RAM RAM RAM RAM RAM RAM RAM - -1000-3FFF RAM RAM RAM RAM RAM RAM RAM RAM - -0000-0FFF RAM RAM RAM RAM RAM RAM RAM RAM RAM - -(*) Internal memory does not respond to write accesses in these areas - - - From the above chart, the following table can be built. It shows standard -cartridges, either 8K or 16K in size, and the memory ranges they load into. - -Type Size Game EXRom Low Bank High Bank - in K Line Line (ROML) (ROMH) -------------------------------------------------- -Normal 8k hi lo $8000 ---- -Normal 16k lo lo $8000 $A000 -Ultimax 8k lo hi $E000 ---- - - The ROMH and ROML lines are CPU-controlled status lines, used to bank -in/out RAM, ROM or I/O, depending on what is needed at the time. - - Ultimax cartridges typically are situated in the $E000-FFFF (8K) ROM -address range. There are some cartridges which only use 4K of the 8K -allocation. If the cartridge is 16K in size, then it will reside in both -$8000-9FFF and $E000-FFFF. - - ---------------------------------------------------------------------------- - - -Cartridge Specifics -------------------- - -0 - Normal cartridge - - Size - 8Kb - GAME - active (1) - EXROM - inactive (0) - Load address - $8000-9FFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 00 00 01 00 00 00 00 00 00 @ -0020: 41 54 54 41 43 4B 20 4F 46 20 54 48 45 20 4D 55 ATTACKOFTHEMU -0030: 54 41 4E 54 20 43 41 4D 45 4C 53 00 00 00 00 00 TANTCAMELS -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: D3 9B BC FE C3 C2 CD 38 30 EA EA EA A9 01 85 13 ӛ80 - - - The second sample below is a dump of "Music Machine", a 4Kb ULTIMAX - mode cartridge. It is still identified as a "standard cartridge" - according to the ID. - - Normal cartridge - - Size - 4Kb (ULTIMAX mode) - GAME - inactive (0) - EXROM - active (1) - Load address - $F000-F7FF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 00 01 00 00 00 00 00 00 00 @ -0020: 4D 55 53 49 43 20 4D 41 43 48 49 4E 45 00 00 00 MUSICMACHINE -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 10 10 00 00 00 00 F0 00 10 00 CHIP -0050: 3C 66 C3 C3 66 3C FF FF 18 3C 66 7E 66 66 66 00 Bank 0 - $08 -> Bank 1 - $10 -> Bank 2 - $18 -> Bank 3 - $20 -> Bank 4 - $28 -> Bank 5 - $30 -> Bank 6 - $38 -> Bank 7 - $01 -> Bank 8 - $09 -> Bank 9 - $11 -> Bank 10 - $19 -> Bank 11 - $21 -> Bank 12 - $29 -> Bank 13 - $31 -> Bank 14 - $39 -> Bank 15 - - The bank field in the chip headers is set according to the value - written to $DE00. The following bits are used for bank decoding in - $DE00 (0 being the LSB, 3 being the MSB). - - Bit# 76543210 - xx210xx3 - - After copying memory from the ROM banks, the selection program writes - a value of $86 to $DE00. This seems either to reset or disable the - cartridge ROM. - - -=========================================================================== - - -8 - Super Games - - Size - 64Kb (4 banks of 16Kb each) - GAME - inactive (0) - EXROM - inactive (0) - Load address - $8000-BFFF (all modules) - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 08 00 00 00 00 00 00 00 00 @ -0020: 53 55 50 45 52 20 47 41 4D 45 53 00 00 00 00 00 SUPERGAMES -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00 CHIP@@ -0050: 0A 80 0A 80 C3 C2 CD 38 30 00 A9 80 A0 00 85 FB 80 -.... -4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00 CHIP@@ -4060: 27 80 A8 80 C3 C2 CD 38 30 00 40 C0 40 C0 40 C0 '80@@@ -.... -8060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00 CHIP@@ -8070: 00 00 00 49 4D C7 64 47 46 45 F3 48 DC 08 7E 0B IMdGFEH~ -.... -C070: 43 48 49 50 00 00 40 10 00 00 00 03 80 00 40 00 CHIP@@ -C080: D5 F9 F0 C1 D5 F7 F0 BD E8 B5 02 F0 FB C9 05 30 0 - - The SUPER GAMES cartridge uses 4 16Kb banks ($8000-$BFFF) of ROM - memory. Bank selecting is done by writing to $DF00. - - Values for $DF00: - - $00 -> Bank 0 - $01 -> Bank 1 (also value $09 used) - $02 -> Bank 2 - $03 -> Bank 3 - - Bit #2 - 0: ROM $8000-$BFFF - 1: ROM $8000-$9FFF - Bit #3 - 0: ? - 1: if bit #2 AND #3 are on (1) then the module is off - - -=========================================================================== - - -9 - Atomic Power - - Size - 32Kb (4 banks of 8Kb modules) - GAME - inactive (0) - EXROM - inactive (0) - Load address - $8000-9FFF (all modules) - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 09 00 00 00 00 00 00 00 00 @ -0020: 41 74 6F 6D 69 63 20 50 6F 77 65 72 00 00 00 00 AtomicPower -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: 09 80 0C 80 C3 C2 CD 38 30 4C 41 80 4C 1E 80 4C 80LALL -.... -2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00 CHIP -2060: 09 80 0C 80 C3 C2 CD 38 30 4C 3F 80 4C 91 80 4C 80L?LL -.... -4060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00 CHIP -4070: EF FC 09 80 C3 C2 CD 38 30 4C 27 80 4C DB 81 4C 80L'LہL -.... -6070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00 CHIP -6080: 09 80 0C 80 C3 C2 CD 38 30 4C 73 86 4C 30 80 4C 80LsL0L - - -=========================================================================== - - -10 - Epyx Fastload - - Size - 8Kb - GAME - active (1) - EXROM - active (1) - Load address - $8000-9FFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 0A 01 01 00 00 00 00 00 00 @ -0020: 45 50 59 58 20 46 41 53 54 4C 4F 41 44 00 00 00 EPYXFASTLOAD -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: 30 80 5E FE C3 C2 CD 38 30 20 04 90 4C 38 DF AB 0^80L8߫ - - -=========================================================================== - - -11 - Westermann Learning - - Size - 16Kb - GAME - inactive (0) - EXROM - inactive (0) - Load address - $8000-BFFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 0B 00 00 00 00 00 00 00 00 @ -0020: 57 45 53 54 45 52 4D 41 4E 4E 00 00 00 00 00 00 WESTERMANN -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 40 00 CHIP@ -0050: 09 80 9C 80 C3 C2 CD 38 30 A2 00 8E 16 D0 20 84 80 - - -=========================================================================== - - -12 - Rex Utility - - Size - 8K - GAME - active (1) - EXROM - inactive (0) - Load address - $8000-9FFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 0C 00 01 00 00 00 00 00 00 @ -0020: 52 45 58 00 00 00 00 00 00 00 00 00 00 00 00 00 REX -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: 08 80 C1 FE C3 C2 CD 38 30 6C 95 E3 20 A3 FD 20 80l - - -=========================================================================== - - -13 - Final Cartridge I - - Size - 16Kb - GAME - active (1) - EXROM - active (1) - Load address - $8000-BFFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 0D 01 01 00 00 00 00 00 00 @ -0020: 54 68 65 20 46 69 6E 61 6C 20 43 61 72 74 72 69 TheFinalCartri -0030: 64 67 65 20 49 00 00 00 00 00 00 00 00 00 00 00 dgeI -0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00 CHIP@@ -0050: 80 BA 5E FE C3 C2 CD 38 30 00 A0 A0 20 2D FE 58 ^80-X - - -=========================================================================== - - -14 - Magic Formel - - Size - 64Kb (8 banks of 8Kb) - GAME - Inactive (0) - EXROM - Inactive (0) - Load Address - $E000-FFFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 0E 01 01 00 00 00 00 00 00 @ -0020: 4D 61 67 69 63 20 46 6F 72 6D 65 6C 00 00 00 00 MagicFormel -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 E0 00 20 00 CHIP -0050: 4D 46 30 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D MF0``` -... -2050: 43 48 49 50 00 00 20 10 00 00 00 01 E0 00 20 00 CHIP -2060: 4C 5F E4 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D L_``` -... -4060: 43 48 49 50 00 00 20 10 00 00 00 02 E0 00 20 00 CHIP -4070: 4D 46 32 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D MF2``` -... -6070: 43 48 49 50 00 00 20 10 00 00 00 03 E0 00 20 00 CHIP -6080: 4D 46 33 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D MF3``` -... -8080: 43 48 49 50 00 00 20 10 00 00 00 04 E0 00 20 00 CHIP -8090: 4D 46 34 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D MF4``` -... -A090: 43 48 49 50 00 00 20 10 00 00 00 05 E0 00 20 00 CHIP -A0A0: 4D 46 35 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D MF5``` -... -C0A0: 43 48 49 50 00 00 20 10 00 00 00 06 E0 00 20 00 CHIP -C0B0: 4D 46 36 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D MF6``` -.. -E0B0: 43 48 49 50 00 00 20 10 00 00 00 07 E0 00 20 00 CHIP -E0C0: 4D 46 37 8D 00 DF 60 8D 01 DF 60 8D 02 DF 60 8D MF7``` - - -=========================================================================== - - -15 - C64 Game System, System 3 - - Size - 512Kb (64 banks of 8Kb each) - GAME - inactive (0) - EXROM - active (1) - Load address - $8000-9FFF (all modules) - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -000000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -000010: 00 00 00 40 01 00 00 0F 00 01 00 00 00 00 00 00 @ -000020: 43 36 34 47 53 20 43 61 72 74 72 69 64 67 65 00 C64GSCartridge -000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -000040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -000050: 6D 80 C5 80 C3 C2 CD 38 30 4C CB 80 4C 36 84 4C mŀ80LˀL6L -.... -002050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00 CHIP -002060: 18 D0 A9 FF 8D 15 D0 8D 1D D0 8D 17 D0 A2 07 A9 ЩЍЍТ -.... -004060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00 CHIP -004070: E0 08 19 21 77 84 52 98 9F 80 A5 21 31 01 31 89 !wR!11 -.... -006070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00 CHIP -006080: C0 08 1C 1D A0 92 03 03 D8 AA 04 C0 B8 01 40 EA ت@ -.... -07E430: 43 48 49 50 00 00 20 10 00 00 00 3F 80 00 20 00 CHIP? -07E440: 45 20 41 20 42 49 47 20 58 FE 4F 4E 20 54 48 49 EABIGXONTHI - - Here is a list of the known cartridges: - - C64GS 4-in-1 (Commodore) (512 kB) - Last Ninja Remix (System 3) (512 kB) - Myth (System 3) (512 kB) - - ROM memory is organized in 8Kb ($2000) banks located at $8000-$9FFF. - Bank switching is done by writing to address $DE00+X, where X is the - bank number (STA $DE00,X). For instance, to read from bank 3, address - $DE03 is accessed. - - The CRT file contains a string of CHIP blocks, each block with a start - address of $8000, length $2000 and the bank number in the bank field. - In the cartridge header, EXROM ($18) is set to 0, GAME ($19) is set to - 1 to enable the 8 kB ROM configuration. - - -=========================================================================== - - -16 - WarpSpeed - - Size - 16Kb - GAME - inactive (0) - EXROM - inactive (0) - Load address - $8000-BFFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 10 01 01 00 00 00 00 00 00 @ -0020: 57 61 72 70 73 70 65 65 64 00 00 00 00 00 00 00 Warpspeed -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00 CHIP@@ -0050: 4C 22 80 4C 22 80 FF 43 42 4D 20 53 E4 20 18 E5 L"L"CBMS - - After RESET or POWER ON, 16kB of Cartridge ROM are visible at - $8000-$BFFF. Additionally, ROM normally located at $9E00-$9FFF is - mirrored into IO1 and IO2 at $DE00-$DFFF. ROM at $8000-$BFFF is - disabled by writing into the IO2 area (typically $DF00) and may be - re-enabled by writing into IO1 ($DE00). However, the $DE00-$DFFF - (IO1/IO2) area itself always remains mapped to cartridge ROM. - - Included with these documents is a WRPSPEED.JPG which is the schematic - of the WarpSpeed cartridge itself. - - -=========================================================================== - - -17 - Dinamic - - Size - 128Kb (16 banks of 8Kb each) - GAME - inactive (0) - EXROM - active (1) - Load address - $8000-9FFF (all modules) - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -000000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -000010: 00 00 00 40 01 00 00 11 00 01 00 00 00 00 00 00 @ -000020: 4E 61 72 63 6F 20 50 6F 6C 69 63 65 00 00 00 00 NarcoPolice -000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -000040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -000050: 0B 80 0B 80 C3 C2 CD 38 30 00 00 78 A2 FF 9A D8 80x -.. -002050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00 CHIP -002060: 1C 8C 1B 8C 16 16 8F 16 16 88 1C 1C 86 1C 1C 89 -.. -004060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00 CHIP -004070: B6 02 07 08 07 07 00 0A 0A B6 00 05 0A 00 07 07 -.. -01E130: 43 48 49 50 00 00 20 10 00 00 00 0F 80 00 20 00 CHIP -01E140: 00 D5 70 03 F5 70 0F 5F 70 0F F7 70 35 FD F0 37 pp_pp57 - - Here is a list of the known DINAMIC cartridges: - - Narco Police (128 kB) - Satan (128 kB) - - ROM memory is organized in 8Kb ($2000) banks located at $8000-$9FFF. - Bank switching is done by reading from address $DE00+X, where X is the - bank number (LDA $DE00,X). For instance, to read from bank 3, address - $DE03 is accessed. - - The CRT file contains a string of CHIP blocks, each block with a start - address of $8000, length $2000 and the bank number in the bank field. - In the cartridge header, EXROM ($18) is set to 0, GAME ($19) is set to - 1 to enable the 8 kB ROM configuration. - - -=========================================================================== - - -18 - Zaxxon, Super Zaxxon (SEGA) - - Size - 20Kb (3 banks of different sizes) - GAME - active (1) - EXROM - active (1) - Load address - $8000-8FFF (mirrored in $9000-9FFF, module 0, chip U1) - $A000-BFFF (banked modules 1 and 2, chip U2) - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -000000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -000010: 00 00 00 40 01 00 00 12 00 00 00 00 00 00 00 00 @ -000020: 5A 61 78 78 6F 6E 00 00 00 00 00 00 00 00 00 00 Zaxxon -000030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -000040: 43 48 49 50 00 00 10 10 00 00 00 00 80 00 10 00 CHIP -000050: 0D 80 29 80 C3 C2 CD 38 30 78 4C 09 80 78 A9 00 )80xLx -.. -001050: 43 48 49 50 00 00 20 10 00 00 00 00 A0 00 20 00 CHIP -001060: A2 0F BD 00 20 D0 04 CA 10 F8 60 BD 70 20 F0 0D `p -.. -003060: 43 48 49 50 00 00 20 10 00 00 00 01 A0 00 20 00 CHIP -003070: 65 A2 36 A3 E7 A3 CB A4 94 A5 86 A6 5E A7 35 A8 e6ˤ^5 - - The (Super) Zaxxon carts use a 4Kb ($1000) ROM at $8000-$8FFF (mirrored - in $9000-$9FFF) along with two 8Kb ($2000) cartridge banks located at - $A000-$BFFF. One of the two banks is selected by doing a read access to - either the $8000-$8FFF area (bank 0 is selected) or to $9000-$9FFF area - (bank 1 is selected). EXROM ($18 = $00) and GAME ($19 = $00) lines are - always pulled to GND to select the 16 kB ROM configuration. - - The CRT file includes three CHIP blocks: - a) bank = 0, load address = $8000, size = $1000 - b) bank = 0, load address = $A000, size = $2000 - c) bank = 1, load address = $A000, size = $2000 - - -=========================================================================== - - -19. Magic Desk, Domark, HES Australia - - Size - 32Kb, 64Kb or 128Kb sizes (4 to 16 banks of 8Kb each) - GAME - inactive (0) - EXROM - active (1) - Load address (banks 00-15) - $8000-9FFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 13 00 01 00 00 00 00 00 00 @ -0020: 4D 61 67 69 63 20 44 65 73 6B 00 00 00 00 00 00 MagicDesk -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: 09 80 C6 CA C3 C2 CD 38 30 8E 16 D0 20 A3 FD 20 80 -.. -2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00 CHIP -2060: 00 3F 0A 01 00 86 4E 24 28 31 30 29 3A 4A 4F 59 ?N$(10):JOY -.. -4060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00 CHIP -4070: 00 8B C9 28 4E 24 2C 31 29 B3 B1 22 FF 22 A7 32 (N$,1)""2 -.. -6070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00 CHIP -6080: AE 01 83 33 2C 37 2C 22 32 29 20 44 45 4C 20 4B 3,7,"2)DELK - - This cartridge type is very similar to the OCEAN cart type: ROM memory - is organized in 8Kb ($2000) banks located at $8000-$9FFF. Bank - switching is done by writing the bank number to $DE00. Deviant from the - Ocean type, bit 8 is cleared for selecting one of the ROM banks. If bit - 8 is set ($DE00 = $80), the GAME/EXROM lines are disabled, turning on - RAM at $8000-$9FFF instead of ROM. - - In the cartridge header, EXROM ($18) is set to 0, GAME ($19) is set to - 1 to indicate the RESET/power-up configuration of 8 kB ROM. - - Here is a list of the known cartridges: - - Ghosbusters (HES Australia) (32 kB) - Magic Desk (Commodore) (32 kB) - Badlands (Domark) (64 kB) - Vindicators (Domark) (64 kB) - Wonderboy (HES Australia) (64 kB) - Cyberball (Domark) (128 kB) - - -=========================================================================== - - -20. Super Snapshot 5 - - Size - 64Kb (4 banks of 16Kb each) - GAME - active (1) - EXROM - active (1) - Load address - $8000-BFFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 14 01 01 00 00 00 00 00 00 @ -0020: 53 75 70 65 72 20 53 6E 61 70 73 68 6F 74 20 35 SuperSnapshot5 -0030: 20 4E 54 53 43 00 00 00 00 00 00 00 00 00 00 00 NTSC -0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00 CHIP@@ -0050: 09 80 59 80 C3 C2 CD 38 30 20 03 9F 00 FA F4 20 Y80 -... -4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00 CHIP@@ -4060: 79 DE BC FE C3 C2 CD 38 30 A9 05 8D 20 D0 8D 21 y޼80Ѝ! -... -8060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00 CHIP@@ -8070: 50 DE BC FE C3 C2 CD 38 30 A9 0A 85 6A A9 0D 85 P޼80j -... -C070: 43 48 49 50 00 00 40 10 00 00 00 03 80 00 40 00 CHIP@@ -C080: 50 DE BC FE C3 C2 CD 38 30 85 07 20 1A AD A5 76 P޼80v - - -=========================================================================== - - -21. Comal-80 - - Size - 64Kb (4 banks of 16Kb each) - GAME - active (1) - EXROM - active (1) - Load address - $8000-BFFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 15 01 01 00 00 00 00 00 00 @ -0020: 43 6F 6D 61 6C 20 38 30 00 00 00 00 00 00 00 00 Comal80 -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00 CHIP@@ -0050: 87 87 70 CF C3 C2 CD 38 30 4C AA CF 4C 70 CF 4C p80LLpL -... -4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00 CHIP@@ -4060: AA CF 70 CF C3 C2 CD 38 30 01 29 01 28 01 2C 04 p80)(, -... -8060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00 CHIP@@ -8070: AA CF 70 CF C3 C2 CD 38 30 91 92 92 92 92 92 92 p80 -... -C070: 43 48 49 50 00 00 40 10 00 00 00 03 80 00 40 00 CHIP@@ -C080: 7B C8 7E C8 C3 C2 CD 38 30 43 4F 4D 41 4C 80 93 {~80COMAL - - - The Comal-80 Cartridge uses $DE00 for bank selection, and uses 16Kb - banks ($4000) at $8000-$BFFF. There are 4 banks of ROM memory and are - referenced by the following values: - - $80 -> Bank 0 - $81 -> Bank 1 - $82 -> Bank 2 - $83 -> Bank 3 - - -=========================================================================== - - -22. Structured Basic - - Size - 16Kb (2 banks of 8Kb each) - GAME - active (0) - EXROM - active (1) - Load address - $8000-9FFF - - No sample data/file available. - - Any read/write access to $DE00 or $DE01 will switch in bank 0. - Any read/write access to $DE02 will switch in bank 1. - Any read/write access to $DE03 will switch off EXROM. - - -=========================================================================== - - -23. Ross - - Size - 16Kb or 32Kb sizes (1 or 2 banks of 16Kb each) - GAME - active (1) - EXROM - active (1) - Load address - $8000-BFFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 17 00 00 00 00 00 00 00 00 @ -0020: 52 6F 73 73 20 31 34 00 00 00 00 00 00 00 00 00 Ross14 -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 40 10 00 00 00 00 80 00 40 00 CHIP@@ -0050: 09 80 09 80 C3 C2 CD 38 30 A2 00 BD 20 80 4D 0E 80M -... -4050: 43 48 49 50 00 00 40 10 00 00 00 01 80 00 40 00 CHIP@@ -4060: 3F 5A 4D 4D 50 4D 8D 25 3F 1A 1F 77 3F CD E0 3F ?ZMMPM%?w?? - - Any read access to $DE00 will switch in bank 1 (if cart is 32Kb). - Any read access to $DF00 will switch off EXROM and GAME. - - -=========================================================================== - - -24. Dela EP64 - - Size - 8Kb to 72kb sizes (1 to 9 banks of 8Kb each, - or 1 bank of 8Kb and 1 or 2 banks - of 32Kb each) - GAME - inactive (0) - EXROM - active (1) - Load address - $8000-9FFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 18 00 01 00 00 00 00 00 00 @ -0020: 44 45 4C 41 20 45 50 36 34 00 00 00 00 00 00 00 DELAEP64 -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: 00 85 5E FE C3 C2 CD 38 30 FF FF FF FF FF FF FF ^80 -... -2050: 43 48 49 50 00 00 80 10 00 00 00 01 80 00 80 00 CHIP -2060: 54 45 53 54 0D 2A 0D 54 45 20 36 34 0D 00 00 00 TEST*TE64 - - This is an eprom cartridge. It has 1 2764 (8Kb) which holds the base - eprom with the base menu, and 2 27256 eproms of which 8Kb parts are - banked into the $8000-9FFF area. - - The bank selecting is done by writing to $DE00. The following bits are - used for bank decoding in $DE00 (0 being the LSB, 3 being the MSB). - - Bit# 76543210 - xx10xx32 - - Any bank value below 4 or above 11 switches in the base bank (bank 0). - - The bit values for each eprom bank are : - - eprom bank 1 : xx00xx01 - eprom bank 2 : xx01xx01 - eprom bank 3 : xx10xx01 - eprom bank 4 : xx11xx01 - eprom bank 5 : xx00xx10 - eprom bank 6 : xx01xx10 - eprom bank 7 : xx10xx10 - eprom bank 8 : xx11xx10 - - Setting bit 7 high will switch off EXROM. - - -========================================================================== - - -25. Dela EP7x8 - - Size - 8Kb to 64kb sizes (1 to 8 banks of 8Kb each) - GAME - inactive (0) - EXROM - active (1) - Load address - $8000-9FFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 19 00 01 00 00 00 00 00 00 @ -0020: 44 45 4C 41 20 45 50 37 78 38 00 00 00 00 00 00 DELAEP7x8 -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: 09 80 5E FE C3 C2 CD 38 30 78 A2 FF 9A D8 8E 16 ^80x؎ -... -2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00 CHIP -2060: 94 83 A0 83 C3 C2 CD 38 30 02 BB 5A 30 5F EE 3D 80Z0_= - - This is an eprom cartridge. It has 8 8Kb banks of which the first holds - the base menu, the other eproms can be banked into the $8000-9FFF area. - - The bank selecting is done by writing to $DE00. Each low bit is used to - bank in the respective eprom. If all bits are high then the EXROM is - switched off. - - The bit values for each eprom bank is: - - eprom bank 1 : 11111110 ($FE) (base eprom) - eprom bank 2 : 11111101 ($FD) - eprom bank 3 : 11111011 ($FB) - eprom bank 4 : 11110111 ($F7) - eprom bank 5 : 11101111 ($EF) - eprom bank 6 : 11011111 ($DF) - eprom bank 7 : 10111111 ($BF) - eprom bank 8 : 01111111 ($7F) - - EXROM off : 11111111 ($FF) - - -========================================================================== - - -26. Dela EP256 - - Size - 8Kb to 262kb sizes (1 to 33 banks of 8Kb each) - GAME - inactive (0) - EXROM - active (1) - Load address - $8000-9FFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 1A 00 01 00 00 00 00 00 00 @ -0020: 44 45 4C 41 20 45 50 32 35 36 00 00 00 00 00 00 DELAEP256 -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: 00 85 5E FE C3 C2 CD 38 30 93 0D 2B 2B 2B 20 45 ^80+++E -... -2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00 CHIP -2060: 09 80 28 80 C3 C2 CD 38 30 78 A2 05 8E 16 D0 20 (80x -... -4060: 43 48 49 50 00 00 20 10 00 00 00 02 80 00 20 00 CHIP -4070: 0B 80 BC FE C3 C2 CD 38 30 DC 10 8E 16 D0 20 87 80 -... -6070: 43 48 49 50 00 00 20 10 00 00 00 03 80 00 20 00 CHIP -6080: 09 80 F6 8E C3 C2 CD 38 30 A2 C8 8E 16 D0 20 .. 80Ȏ. -... -8080: 43 48 49 50 00 00 20 10 00 00 00 04 80 00 20 00 CHIP -8090: 94 83 A0 83 C3 C2 CD 38 30 02 BB 5A 30 5F EE 3D 80Z0_= - - This is an eprom cartridge. It has 33 8Kb banks of which the first - holds the base menu, the other eproms can be banked into the $8000-9FFF - area. - - The bank selecting is done by writing to $DE00. - - The values for the (extra) eprom banks are: - - eprom banks 1- 8 : $38-3F - eprom banks 9-16 : $28-2F - eprom banks 17-24 : $18-1F - eprom banks 25-32 : $08-0F - - Setting bit 7 high will switch off EXROM. - - -========================================================================== - - -27. Rex EP256 - - Size - 8Kb to 262kb sizes (1 bank of 8Kb and 1 to 8 banks of either - 8Kb, 16Kb or 32Kb) - GAME - inactive (0) - EXROM - active (1) - Load address - $8000-9FFF - - 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ASCII - ----------------------------------------------- ---------------- -0000: 43 36 34 20 43 41 52 54 52 49 44 47 45 20 20 20 C64CARTRIDGE -0010: 00 00 00 40 01 00 00 1B 00 01 00 00 00 00 00 00 @ -0020: 52 45 58 20 45 50 32 35 36 00 00 00 00 00 00 00 REXEP256 -0030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 -0040: 43 48 49 50 00 00 20 10 00 00 00 00 80 00 20 00 CHIP -0050: 09 80 C1 FE C3 C2 CD 38 30 20 A3 FD 20 50 FD 20 80P -... -2050: 43 48 49 50 00 00 20 10 00 00 00 01 80 00 20 00 CHIP -2060: 09 80 F2 8F C3 C2 CD 38 30 A2 C8 8E 16 D0 20 A3 80Ȏ -... -4060: 43 48 49 50 00 00 40 10 00 00 00 02 80 00 40 00 CHIP@@ -4070: 09 80 09 80 C3 C2 CD 38 30 58 D8 20 84 FF 20 8A 80X - - This is an eprom cartridge. It has 9 eprom sockets, of which the first - holds the base eprom with the base menu which is an 8Kb eprom, the - other eprom sockets can handle 8Kb, 16Kb or 32Kb eproms, of which 8kb - can be banked into the $8000-9FFF area. - - The bank selecting is done by writing to $DFA0. Bits 2, 1 and 0 - determine which socket is used and bits 5 and 4 are used to select an - 8Kb piece of the eprom. - - The possible values for bits 5 and 4 for the (extra) eprom banks are: - - 8Kb : 3, 2, 1, 0 - - 16Kb bank 0 : 2, 0 - 16Kb bank 1 : 3, 1 - - 32Kb bank 0 : 0 - 32Kb bank 1 : 1 - 32Kb bank 2 : 2 - 32Kb bank 3 : 3 - - Reading from $DFC0 switches off the EXROM. - Reading from $DFE0 switches on the EXROM. - -