From fa58c7a7d6e3323d093065a1be5a373e7708f96a Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 13 Aug 2023 23:32:07 +0300 Subject: [PATCH 01/88] OS Timers part 2 --- include/kernel/kernel_types.hpp | 11 +++++++++++ src/core/kernel/kernel.cpp | 1 + src/core/kernel/threads.cpp | 3 +++ src/core/kernel/timers.cpp | 19 ++++++++++++++++++- 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/include/kernel/kernel_types.hpp b/include/kernel/kernel_types.hpp index 56bed359..abefbcd9 100644 --- a/include/kernel/kernel_types.hpp +++ b/include/kernel/kernel_types.hpp @@ -163,6 +163,17 @@ struct Semaphore { Semaphore(s32 initialCount, s32 maximumCount) : availableCount(initialCount), maximumCount(maximumCount), waitlist(0) {} }; +struct Timer { + u64 waitlist; // Refer to the getWaitlist function below for documentation + ResetType resetType = ResetType::OneShot; + + u64 initialDelay; // Number of ns until the timer fires for the first time + u64 interval; // Number of ns until the timer fires for the second and future times + bool fired; // Has this Timer been signalled? + + Timer(ResetType type) : resetType(type), initialDelay(0), interval(0), waitlist(0), fired(false) {} +}; + struct MemoryBlock { u32 addr = 0; u32 size = 0; diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp index 900ad559..a80f4c7b 100644 --- a/src/core/kernel/kernel.cpp +++ b/src/core/kernel/kernel.cpp @@ -122,6 +122,7 @@ void Kernel::deleteObjectData(KernelObject& object) { case KernelObjectType::Session: delete object.getData(); return; case KernelObjectType::Mutex: delete object.getData(); return; case KernelObjectType::Semaphore: delete object.getData(); return; + case KernelObjectType::Timer: delete object.getData(); return; case KernelObjectType::Thread: return; case KernelObjectType::Dummy: return; default: [[unlikely]] Helpers::warn("unknown object type"); return; diff --git a/src/core/kernel/threads.cpp b/src/core/kernel/threads.cpp index 440045d3..08fc697d 100644 --- a/src/core/kernel/threads.cpp +++ b/src/core/kernel/threads.cpp @@ -612,6 +612,9 @@ bool Kernel::shouldWaitOnObject(KernelObject* object) { case KernelObjectType::Thread: // Waiting on a thread waits until it's dead. If it's dead then no need to wait return object->getData()->status != ThreadStatus::Dead; + case KernelObjectType::Timer: // We should wait on a timer only if it has not been signalled + return !object->getData()->fired; + case KernelObjectType::Semaphore: // Wait if the semaphore count <= 0 return object->getData()->availableCount <= 0; diff --git a/src/core/kernel/timers.cpp b/src/core/kernel/timers.cpp index f4a89407..6750bcc1 100644 --- a/src/core/kernel/timers.cpp +++ b/src/core/kernel/timers.cpp @@ -1,6 +1,23 @@ #include "kernel.hpp" -void Kernel::svcCreateTimer() { Helpers::panic("Kernel::CreateTimer"); } +Handle Kernel::makeTimer(ResetType type) { + Handle ret = makeObject(KernelObjectType::Timer); + objects[ret].data = new Timer(type); + + return ret; +} + +void Kernel::svcCreateTimer() { + const u32 resetType = regs[1]; + if (resetType > 2) { + Helpers::panic("Invalid reset type for event %d", resetType); + } + + logSVC("CreateTimer (resetType = %s)\n", resetTypeToString(resetType)); + regs[0] = Result::Success; + regs[1] = makeTimer(static_cast(resetType)); +} + void Kernel::svcSetTimer() { Helpers::panic("Kernel::SetTimer"); } void Kernel::svcClearTimer() { Helpers::panic("Kernel::ClearTimer"); } void Kernel::svcCancelTimer() { Helpers::panic("Kernel::CancelTimer"); } \ No newline at end of file From 1354b0f7faaf5bc1d3fdc90dcf682e0181247d43 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Mon, 14 Aug 2023 15:13:37 +0300 Subject: [PATCH 02/88] Moar timer --- include/kernel/kernel.hpp | 2 + include/kernel/kernel_types.hpp | 34 +++++++++-------- src/core/kernel/threads.cpp | 8 ++++ src/core/kernel/timers.cpp | 65 ++++++++++++++++++++++++++++++++- 4 files changed, 91 insertions(+), 18 deletions(-) diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp index 163b19e1..55dfea55 100644 --- a/include/kernel/kernel.hpp +++ b/include/kernel/kernel.hpp @@ -82,6 +82,8 @@ private: bool canThreadRun(const Thread& t); bool shouldWaitOnObject(KernelObject* object); void releaseMutex(Mutex* moo); + void cancelTimer(Timer* timer); + void signalTimer(Handle timerHandle, Timer* timer); // Wake up the thread with the highest priority out of all threads in the waitlist // Returns the index of the woken up thread diff --git a/include/kernel/kernel_types.hpp b/include/kernel/kernel_types.hpp index abefbcd9..30340221 100644 --- a/include/kernel/kernel_types.hpp +++ b/include/kernel/kernel_types.hpp @@ -207,21 +207,23 @@ struct KernelObject { } // Retrieves a reference to the waitlist for a specified object - // We return a reference because this function is only called in the kernel threading internals - // We want the kernel to be able to easily manage waitlists, by reading/parsing them or setting/clearing bits. - // As we mention in the definition of the "Event" struct, the format for wailists is very simple and made to be efficient. - // Each bit corresponds to a thread index and denotes whether the corresponding thread is waiting on this object - // For example if bit 0 of the wait list is set, then the thread with index 0 is waiting on our object - u64& getWaitlist() { - // This code is actually kinda trash but eh good enough - switch (type) { - case KernelObjectType::Event: return getData()->waitlist; - case KernelObjectType::Mutex: return getData()->waitlist; - case KernelObjectType::Semaphore: return getData()->waitlist; - case KernelObjectType::Thread: return getData()->threadsWaitingForTermination; - // This should be unreachable once we fully implement sync objects - default: [[unlikely]] + // We return a reference because this function is only called in the kernel threading internals + // We want the kernel to be able to easily manage waitlists, by reading/parsing them or setting/clearing bits. + // As we mention in the definition of the "Event" struct, the format for wailists is very simple and made to be efficient. + // Each bit corresponds to a thread index and denotes whether the corresponding thread is waiting on this object + // For example if bit 0 of the wait list is set, then the thread with index 0 is waiting on our object + u64& getWaitlist() { + // This code is actually kinda trash but eh good enough + switch (type) { + case KernelObjectType::Event: return getData()->waitlist; + case KernelObjectType::Mutex: return getData()->waitlist; + case KernelObjectType::Semaphore: return getData()->waitlist; + case KernelObjectType::Thread: return getData()->threadsWaitingForTermination; + case KernelObjectType::Timer: return getData()->waitlist; + + // This should be unreachable once we fully implement sync objects + default: [[unlikely]] Helpers::panic("Called GetWaitList on kernel object without a waitlist (Type: %s)", getTypeName()); - } - } + } + } }; \ No newline at end of file diff --git a/src/core/kernel/threads.cpp b/src/core/kernel/threads.cpp index 08fc697d..53d7342b 100644 --- a/src/core/kernel/threads.cpp +++ b/src/core/kernel/threads.cpp @@ -252,6 +252,14 @@ void Kernel::acquireSyncObject(KernelObject* object, const Thread& thread) { case KernelObjectType::Thread: break; + case KernelObjectType::Timer: { + Timer* timer = object->getData(); + if (timer->resetType == ResetType::OneShot) { // One-shot timers automatically get cleared after waking up a thread + timer->fired = false; + } + break; + } + default: Helpers::panic("Acquiring unimplemented sync object %s", object->getTypeName()); } } diff --git a/src/core/kernel/timers.cpp b/src/core/kernel/timers.cpp index 6750bcc1..917fa573 100644 --- a/src/core/kernel/timers.cpp +++ b/src/core/kernel/timers.cpp @@ -4,20 +4,81 @@ Handle Kernel::makeTimer(ResetType type) { Handle ret = makeObject(KernelObjectType::Timer); objects[ret].data = new Timer(type); + if (type == ResetType::Pulse) Helpers::panic("Created pulse timer"); + return ret; } +void Kernel::cancelTimer(Timer* timer) { + // TODO: When we have a scheduler this should properly cancel timer events in the scheduler +} + +void Kernel::signalTimer(Handle timerHandle, Timer* timer) { + timer->fired = true; + wakeupAllThreads(timer->waitlist, timerHandle); + + switch (timer->resetType) { + case ResetType::OneShot: timer->fired = false; break; + case ResetType::Sticky: break; + case ResetType::Pulse: Helpers::panic("Signalled pulsing timer"); break; + } +} + void Kernel::svcCreateTimer() { const u32 resetType = regs[1]; if (resetType > 2) { Helpers::panic("Invalid reset type for event %d", resetType); } + // Have a warning here until our timers don't suck + Helpers::warn("Called Kernel::CreateTimer"); + logSVC("CreateTimer (resetType = %s)\n", resetTypeToString(resetType)); regs[0] = Result::Success; regs[1] = makeTimer(static_cast(resetType)); } -void Kernel::svcSetTimer() { Helpers::panic("Kernel::SetTimer"); } -void Kernel::svcClearTimer() { Helpers::panic("Kernel::ClearTimer"); } +void Kernel::svcSetTimer() { + Handle handle = regs[0]; + // TODO: Is this actually s64 or u64? 3DBrew says s64, but u64 makes more sense + const s64 initial = s64(u64(regs[1]) | (u64(regs[2]) << 32)); + const s64 interval = s64(u64(regs[3]) | (u64(regs[4]) << 32)); + logSVC("SetTimer (handle = %X, initial delay = %llxX, interval delay = %llx)\n", handle, initial, interval); + + KernelObject* object = getObject(handle, KernelObjectType::Timer); + + if (object == nullptr) { + Helpers::panic("Tried to set non-existent timer %X\n", handle); + regs[0] = Result::Kernel::InvalidHandle; + } + + Timer* timer = object->getData(); + cancelTimer(timer); + timer->initialDelay = initial; + timer->interval = interval; + + // If the initial delay is 0 then instantly signal the timer + if (initial == 0) { + signalTimer(handle, timer); + } else { + // This should schedule an event in the scheduler when we have one + } + + regs[0] = Result::Success; +} + +void Kernel::svcClearTimer() { + Handle handle = regs[0]; + logSVC("ClearTimer (handle = %X)\n", handle); + KernelObject* object = getObject(handle, KernelObjectType::Timer); + + if (object == nullptr) { + Helpers::panic("Tried to clear non-existent timer %X\n", handle); + regs[0] = Result::Kernel::InvalidHandle; + } else { + object->getData()->fired = false; + regs[0] = Result::Success; + } +} + void Kernel::svcCancelTimer() { Helpers::panic("Kernel::CancelTimer"); } \ No newline at end of file From 8881467505ce119fd1a98761b66f178045339506 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Mon, 14 Aug 2023 17:24:53 +0300 Subject: [PATCH 03/88] I hate timers --- include/kernel/kernel.hpp | 10 ++++++ include/kernel/kernel_types.hpp | 10 +++--- src/core/kernel/kernel.cpp | 2 ++ src/core/kernel/timers.cpp | 59 ++++++++++++++++++++++++++++----- 4 files changed, 69 insertions(+), 12 deletions(-) diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp index 55dfea55..6171bbda 100644 --- a/include/kernel/kernel.hpp +++ b/include/kernel/kernel.hpp @@ -35,6 +35,7 @@ class Kernel { std::vector objects; std::vector portHandles; std::vector mutexHandles; + std::vector timerHandles; // Thread indices, sorted by priority std::vector threadIndices; @@ -84,6 +85,7 @@ private: void releaseMutex(Mutex* moo); void cancelTimer(Timer* timer); void signalTimer(Handle timerHandle, Timer* timer); + void updateTimer(Handle timerHandle, Timer* timer); // Wake up the thread with the highest priority out of all threads in the waitlist // Returns the index of the woken up thread @@ -182,6 +184,14 @@ public: void requireReschedule() { needReschedule = true; } void evalReschedule() { + for (auto handle : timerHandles) { + const auto object = getObject(handle, KernelObjectType::Timer); + if (object != nullptr) { + Timer* timer = object->getData(); + updateTimer(handle, timer); + } + } + if (needReschedule) { needReschedule = false; rescheduleThreads(); diff --git a/include/kernel/kernel_types.hpp b/include/kernel/kernel_types.hpp index 30340221..1309c1d1 100644 --- a/include/kernel/kernel_types.hpp +++ b/include/kernel/kernel_types.hpp @@ -167,11 +167,13 @@ struct Timer { u64 waitlist; // Refer to the getWaitlist function below for documentation ResetType resetType = ResetType::OneShot; - u64 initialDelay; // Number of ns until the timer fires for the first time - u64 interval; // Number of ns until the timer fires for the second and future times - bool fired; // Has this Timer been signalled? + u64 startTick; // CPU tick the timer started + u64 currentDelay; // Number of ns until the timer fires next time + u64 interval; // Number of ns until the timer fires for the second and future times + bool fired; // Has this timer been signalled? + bool running; // Is this timer running or stopped? - Timer(ResetType type) : resetType(type), initialDelay(0), interval(0), waitlist(0), fired(false) {} + Timer(ResetType type) : resetType(type), startTick(0), currentDelay(0), interval(0), waitlist(0), fired(false), running(false) {} }; struct MemoryBlock { diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp index a80f4c7b..30908e20 100644 --- a/src/core/kernel/kernel.cpp +++ b/src/core/kernel/kernel.cpp @@ -7,6 +7,7 @@ Kernel::Kernel(CPU& cpu, Memory& mem, GPU& gpu) : cpu(cpu), regs(cpu.regs()), mem(mem), handleCounter(0), serviceManager(regs, mem, gpu, currentProcess, *this) { objects.reserve(512); // Make room for a few objects to avoid further memory allocs later mutexHandles.reserve(8); + timerHandles.reserve(8); portHandles.reserve(32); threadIndices.reserve(appResourceLimits.maxThreads); @@ -146,6 +147,7 @@ void Kernel::reset() { } objects.clear(); mutexHandles.clear(); + timerHandles.clear(); portHandles.clear(); threadIndices.clear(); serviceManager.reset(); diff --git a/src/core/kernel/timers.cpp b/src/core/kernel/timers.cpp index 917fa573..d6e38e5e 100644 --- a/src/core/kernel/timers.cpp +++ b/src/core/kernel/timers.cpp @@ -1,26 +1,55 @@ #include "kernel.hpp" +#include "cpu.hpp" Handle Kernel::makeTimer(ResetType type) { Handle ret = makeObject(KernelObjectType::Timer); objects[ret].data = new Timer(type); - if (type == ResetType::Pulse) Helpers::panic("Created pulse timer"); + if (type == ResetType::Pulse) { + Helpers::panic("Created pulse timer"); + } + timerHandles.push_back(ret); return ret; } +void Kernel::updateTimer(Handle handle, Timer* timer) { + if (timer->running) { + const u64 currentTicks = cpu.getTicks(); + u64 elapsedTicks = currentTicks - timer->startTick; + + constexpr double ticksPerSec = double(CPU::ticksPerSec); + constexpr double nsPerTick = ticksPerSec / 1000000000.0; + const s64 elapsedNs = s64(double(elapsedTicks) * nsPerTick); + + // Timer has fired + if (elapsedNs >= timer->currentDelay) { + timer->startTick = currentTicks; + timer->currentDelay = timer->interval; + signalTimer(handle, timer); + } + } +} + void Kernel::cancelTimer(Timer* timer) { + timer->running = false; // TODO: When we have a scheduler this should properly cancel timer events in the scheduler } void Kernel::signalTimer(Handle timerHandle, Timer* timer) { timer->fired = true; - wakeupAllThreads(timer->waitlist, timerHandle); + requireReschedule(); - switch (timer->resetType) { - case ResetType::OneShot: timer->fired = false; break; - case ResetType::Sticky: break; - case ResetType::Pulse: Helpers::panic("Signalled pulsing timer"); break; + // Check if there's any thread waiting on this event + if (timer->waitlist != 0) { + wakeupAllThreads(timer->waitlist, timerHandle); + timer->waitlist = 0; // No threads waiting; + + switch (timer->resetType) { + case ResetType::OneShot: timer->fired = false; break; + case ResetType::Sticky: break; + case ResetType::Pulse: Helpers::panic("Signalled pulsing timer"); break; + } } } @@ -54,8 +83,10 @@ void Kernel::svcSetTimer() { Timer* timer = object->getData(); cancelTimer(timer); - timer->initialDelay = initial; + timer->currentDelay = initial; timer->interval = interval; + timer->running = true; + timer->startTick = cpu.getTicks(); // If the initial delay is 0 then instantly signal the timer if (initial == 0) { @@ -81,4 +112,16 @@ void Kernel::svcClearTimer() { } } -void Kernel::svcCancelTimer() { Helpers::panic("Kernel::CancelTimer"); } \ No newline at end of file +void Kernel::svcCancelTimer() { + Handle handle = regs[0]; + logSVC("CancelTimer (handle = %X)\n", handle); + KernelObject* object = getObject(handle, KernelObjectType::Timer); + + if (object == nullptr) { + Helpers::panic("Tried to cancel non-existent timer %X\n", handle); + regs[0] = Result::Kernel::InvalidHandle; + } else { + cancelTimer(object->getData()); + regs[0] = Result::Success; + } +} \ No newline at end of file From 56b17c3e8da30b77c2f53241852d703a0a65da8d Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Mon, 14 Aug 2023 17:26:02 +0300 Subject: [PATCH 04/88] Fix format specifiers --- src/core/kernel/timers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/kernel/timers.cpp b/src/core/kernel/timers.cpp index d6e38e5e..5d021679 100644 --- a/src/core/kernel/timers.cpp +++ b/src/core/kernel/timers.cpp @@ -72,7 +72,7 @@ void Kernel::svcSetTimer() { // TODO: Is this actually s64 or u64? 3DBrew says s64, but u64 makes more sense const s64 initial = s64(u64(regs[1]) | (u64(regs[2]) << 32)); const s64 interval = s64(u64(regs[3]) | (u64(regs[4]) << 32)); - logSVC("SetTimer (handle = %X, initial delay = %llxX, interval delay = %llx)\n", handle, initial, interval); + logSVC("SetTimer (handle = %X, initial delay = %llX, interval delay = %llX)\n", handle, initial, interval); KernelObject* object = getObject(handle, KernelObjectType::Timer); From 7ada8da8a84c0607603c91d5b57dcd8a647a440f Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 13:22:48 +0300 Subject: [PATCH 05/88] Start adding SD card support --- include/fs/archive_sdmc.hpp | 2 +- include/services/fs.hpp | 10 ++++--- src/core/fs/archive_save_data.cpp | 6 ++-- src/core/fs/archive_sdmc.cpp | 43 +++++++++++++++++++++++++-- src/core/services/fs.cpp | 19 ++++++------ src/core/services/service_manager.cpp | 2 +- 6 files changed, 62 insertions(+), 20 deletions(-) diff --git a/include/fs/archive_sdmc.hpp b/include/fs/archive_sdmc.hpp index a8d9e259..23cbe600 100644 --- a/include/fs/archive_sdmc.hpp +++ b/include/fs/archive_sdmc.hpp @@ -8,7 +8,7 @@ class SDMCArchive : public ArchiveBase { public: SDMCArchive(Memory& mem) : ArchiveBase(mem) {} - u64 getFreeBytes() override { Helpers::panic("SDMC::GetFreeBytes unimplemented"); return 0; } + u64 getFreeBytes() override { return 1_GB; } std::string name() override { return "SDMC"; } HorizonResult createFile(const FSPath& path, u64 size) override; diff --git a/include/services/fs.hpp b/include/services/fs.hpp index fb098c7d..e65be798 100644 --- a/include/services/fs.hpp +++ b/include/services/fs.hpp @@ -1,4 +1,5 @@ #pragma once +#include "config.hpp" #include "fs/archive_ext_save_data.hpp" #include "fs/archive_ncch.hpp" #include "fs/archive_save_data.hpp" @@ -8,7 +9,6 @@ #include "kernel_types.hpp" #include "logger.hpp" #include "memory.hpp" -#include "result/result.hpp" // Yay, more circular dependencies class Kernel; @@ -35,6 +35,8 @@ class FSService { std::optional openFileHandle(ArchiveBase* archive, const FSPath& path, const FSPath& archivePath, const FilePerms& perms); FSPath readPath(u32 type, u32 pointer, u32 size); + const EmulatorConfig& config; + // Service commands void createDirectory(u32 messagePointer); void createExtSaveData(u32 messagePointer); @@ -62,9 +64,9 @@ class FSService { u32 priority; public: - FSService(Memory& mem, Kernel& kernel) : mem(mem), saveData(mem), - sharedExtSaveData_nand(mem, "../SharedFiles/NAND", true), extSaveData_sdmc(mem, "SDMC"), - sdmc(mem), selfNcch(mem), ncch(mem), kernel(kernel) + FSService(Memory& mem, Kernel& kernel, const EmulatorConfig& config) : mem(mem), saveData(mem), + sharedExtSaveData_nand(mem, "../SharedFiles/NAND", true), extSaveData_sdmc(mem, "SDMC"), sdmc(mem), selfNcch(mem), + ncch(mem), kernel(kernel), config(config) {} void reset(); diff --git a/src/core/fs/archive_save_data.cpp b/src/core/fs/archive_save_data.cpp index 107aefde..97ae3229 100644 --- a/src/core/fs/archive_save_data.cpp +++ b/src/core/fs/archive_save_data.cpp @@ -92,11 +92,13 @@ HorizonResult SaveDataArchive::deleteFile(const FSPath& path) { FileDescriptor SaveDataArchive::openFile(const FSPath& path, const FilePerms& perms) { if (path.type == PathType::UTF16) { - if (!isPathSafe(path)) + if (!isPathSafe(path)) { Helpers::panic("Unsafe path in SaveData::OpenFile"); + } - if (perms.raw == 0 || (perms.create() && !perms.write())) + if (perms.raw == 0 || (perms.create() && !perms.write())) { Helpers::panic("[SaveData] Unsupported flags for OpenFile"); + } fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); diff --git a/src/core/fs/archive_sdmc.cpp b/src/core/fs/archive_sdmc.cpp index 5049df14..428354d1 100644 --- a/src/core/fs/archive_sdmc.cpp +++ b/src/core/fs/archive_sdmc.cpp @@ -1,6 +1,8 @@ #include "fs/archive_sdmc.hpp" #include +namespace fs = std::filesystem; + HorizonResult SDMCArchive::createFile(const FSPath& path, u64 size) { Helpers::panic("[SDMC] CreateFile not yet supported"); return Result::Success; @@ -12,13 +14,48 @@ HorizonResult SDMCArchive::deleteFile(const FSPath& path) { } FileDescriptor SDMCArchive::openFile(const FSPath& path, const FilePerms& perms) { - printf("SDMCArchive::OpenFile: Failed"); + if (path.type == PathType::ASCII) { + if (!isPathSafe(path)) { + Helpers::panic("Unsafe path in SaveData::OpenFile"); + } + + if (perms.raw == 0 || (perms.create() && !perms.write())) { + Helpers::panic("[SaveData] Unsupported flags for OpenFile"); + } + + fs::path p = IOFile::getAppData() / "SDMC"; + p += fs::path(path.string).make_preferred(); + + const char* permString = perms.write() ? "r+b" : "rb"; + + if (fs::exists(p)) { // Return file descriptor if the file exists + IOFile file(p.string().c_str(), permString); + return file.isOpen() ? file.getHandle() : FileError; + } else { + // If the file is not found, create it if the create flag is on + if (perms.create()) { + IOFile file(p.string().c_str(), "wb"); // Create file + file.close(); // Close it + + file.open(p.string().c_str(), permString); // Reopen with proper perms + return file.isOpen() ? file.getHandle() : FileError; + } else { + return FileError; + } + } + } + + Helpers::panic("SDMCArchive::OpenFile: Failed"); return FileError; } Rust::Result SDMCArchive::openArchive(const FSPath& path) { - printf("SDMCArchive::OpenArchive: Failed\n"); - return Err(Result::FS::NotFormatted); + // TODO: Fail here if the SD is disabled in the connfig. + if (path.type != PathType::Empty) { + Helpers::panic("Unimplemented path type for SDMC::OpenArchive"); + } + + return Ok((ArchiveBase*)this); } std::optional SDMCArchive::readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) { diff --git a/src/core/services/fs.cpp b/src/core/services/fs.cpp index 38a526e3..cc3c3a76 100644 --- a/src/core/services/fs.cpp +++ b/src/core/services/fs.cpp @@ -2,6 +2,7 @@ #include "kernel/kernel.hpp" #include "io_file.hpp" #include "ipc.hpp" +#include "result/result.hpp" #ifdef CreateFile // windows.h defines CreateFile & DeleteFile because of course it does. #undef CreateDirectory @@ -338,7 +339,8 @@ void FSService::openFileDirectly(u32 messagePointer) { std::optional handle = openFileHandle(archive, filePath, archivePath, perms); mem.write32(messagePointer, IPC::responseHeader(0x803, 1, 2)); if (!handle.has_value()) { - Helpers::panic("OpenFileDirectly: Failed to open file with given path"); + printf("OpenFileDirectly failed\n"); + mem.write32(messagePointer + 4, Result::FS::FileNotFound); } else { mem.write32(messagePointer + 4, Result::Success); mem.write32(messagePointer + 12, handle.value()); @@ -582,22 +584,21 @@ void FSService::setPriority(u32 messagePointer) { priority = value; } - -// Shows whether an SD card is inserted. At the moment stubbed to no -constexpr bool sdInserted = false; - void FSService::isSdmcDetected(u32 messagePointer) { log("FS::IsSdmcDetected\n"); + mem.write32(messagePointer, IPC::responseHeader(0x817, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, sdInserted ? 1 : 0); + mem.write8(messagePointer + 8, config.sdCardInserted ? 1 : 0); } -// We consider our SD card to always be writable if oen is inserted for now -// So isSdmcWritable returns 1 if an SD card is inserted (because it's always writable) and 0 if not. +// We consider our SD card to always be writable if one is inserted for now +// However we do make sure to respect the configs and properly return the correct value here void FSService::isSdmcWritable(u32 messagePointer) { log("FS::isSdmcWritable\n"); + const bool writeProtected = (!config.sdCardInserted) || (config.sdCardInserted && config.sdWriteProtected); + mem.write32(messagePointer, IPC::responseHeader(0x818, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write8(messagePointer + 8, sdInserted ? 1 : 0); + mem.write8(messagePointer + 8, writeProtected ? 0 : 1); } \ No newline at end of file diff --git a/src/core/services/service_manager.cpp b/src/core/services/service_manager.cpp index 591d424a..15fcb401 100644 --- a/src/core/services/service_manager.cpp +++ b/src/core/services/service_manager.cpp @@ -7,7 +7,7 @@ ServiceManager::ServiceManager(std::span regs, Memory& mem, GPU& gpu, u32& currentPID, Kernel& kernel, const EmulatorConfig& config) : regs(regs), mem(mem), kernel(kernel), ac(mem), am(mem), boss(mem), act(mem), apt(mem, kernel), cam(mem, kernel), cecd(mem, kernel), cfg(mem), - dlp_srvr(mem), dsp(mem, kernel), hid(mem, kernel), http(mem), ir_user(mem, kernel), frd(mem), fs(mem, kernel), + dlp_srvr(mem), dsp(mem, kernel), hid(mem, kernel), http(mem), ir_user(mem, kernel), frd(mem), fs(mem, kernel, config), gsp_gpu(mem, gpu, kernel, currentPID), gsp_lcd(mem), ldr(mem), mcu_hwc(mem, config), mic(mem), nfc(mem, kernel), nim(mem), ndm(mem), ptm(mem, config), soc(mem), ssl(mem), y2r(mem, kernel) {} From 0ef46cf8b0ab6f3caedfc5b0ef281fbdcab5d4d3 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 13:31:02 +0300 Subject: [PATCH 06/88] SDMC archive always has read perms --- src/core/fs/archive_sdmc.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/fs/archive_sdmc.cpp b/src/core/fs/archive_sdmc.cpp index 428354d1..c8e4ebb3 100644 --- a/src/core/fs/archive_sdmc.cpp +++ b/src/core/fs/archive_sdmc.cpp @@ -19,7 +19,11 @@ FileDescriptor SDMCArchive::openFile(const FSPath& path, const FilePerms& perms) Helpers::panic("Unsafe path in SaveData::OpenFile"); } - if (perms.raw == 0 || (perms.create() && !perms.write())) { + FilePerms realPerms = perms; + // SD card always has read permission + realPerms.raw |= (1 << 0); + + if ((realPerms.create() && !realPerms.write())) { Helpers::panic("[SaveData] Unsupported flags for OpenFile"); } @@ -33,7 +37,7 @@ FileDescriptor SDMCArchive::openFile(const FSPath& path, const FilePerms& perms) return file.isOpen() ? file.getHandle() : FileError; } else { // If the file is not found, create it if the create flag is on - if (perms.create()) { + if (realPerms.create()) { IOFile file(p.string().c_str(), "wb"); // Create file file.close(); // Close it From 9ee7543f9a796d3a73d17d1b8832741cf3529ce8 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 13:55:38 +0300 Subject: [PATCH 07/88] Moar SDMC --- include/fs/archive_sdmc.hpp | 3 + src/core/fs/archive_save_data.cpp | 10 ++- src/core/fs/archive_sdmc.cpp | 112 +++++++++++++++++++++++------- 3 files changed, 96 insertions(+), 29 deletions(-) diff --git a/include/fs/archive_sdmc.hpp b/include/fs/archive_sdmc.hpp index 23cbe600..4aa80eab 100644 --- a/include/fs/archive_sdmc.hpp +++ b/include/fs/archive_sdmc.hpp @@ -13,8 +13,11 @@ public: HorizonResult createFile(const FSPath& path, u64 size) override; HorizonResult deleteFile(const FSPath& path) override; + HorizonResult createDirectory(const FSPath& path) override; Rust::Result openArchive(const FSPath& path) override; + Rust::Result openDirectory(const FSPath& path) override; + FileDescriptor openFile(const FSPath& path, const FilePerms& perms) override; std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) override; }; \ No newline at end of file diff --git a/src/core/fs/archive_save_data.cpp b/src/core/fs/archive_save_data.cpp index 97ae3229..aa94cdc4 100644 --- a/src/core/fs/archive_save_data.cpp +++ b/src/core/fs/archive_save_data.cpp @@ -39,14 +39,17 @@ HorizonResult SaveDataArchive::createFile(const FSPath& path, u64 size) { HorizonResult SaveDataArchive::createDirectory(const FSPath& path) { if (path.type == PathType::UTF16) { - if (!isPathSafe(path)) + if (!isPathSafe(path)) { Helpers::panic("Unsafe path in SaveData::OpenFile"); + } fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); - if (fs::is_directory(p)) + if (fs::is_directory(p)) { return Result::FS::AlreadyExists; + } + if (fs::is_regular_file(p)) { Helpers::panic("File path passed to SaveData::CreateDirectory"); } @@ -128,8 +131,9 @@ FileDescriptor SaveDataArchive::openFile(const FSPath& path, const FilePerms& pe Rust::Result SaveDataArchive::openDirectory(const FSPath& path) { if (path.type == PathType::UTF16) { - if (!isPathSafe(path)) + if (!isPathSafe(path)) { Helpers::panic("Unsafe path in SaveData::OpenDirectory"); + } fs::path p = IOFile::getAppData() / "SaveData"; p += fs::path(path.utf16_string).make_preferred(); diff --git a/src/core/fs/archive_sdmc.cpp b/src/core/fs/archive_sdmc.cpp index c8e4ebb3..ee5c8ffb 100644 --- a/src/core/fs/archive_sdmc.cpp +++ b/src/core/fs/archive_sdmc.cpp @@ -14,43 +14,103 @@ HorizonResult SDMCArchive::deleteFile(const FSPath& path) { } FileDescriptor SDMCArchive::openFile(const FSPath& path, const FilePerms& perms) { - if (path.type == PathType::ASCII) { - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SaveData::OpenFile"); + FilePerms realPerms = perms; + // SD card always has read permission + realPerms.raw |= (1 << 0); + + if ((realPerms.create() && !realPerms.write())) { + Helpers::panic("[SDMC] Unsupported flags for OpenFile"); + } + + std::filesystem::path p = IOFile::getAppData() / "SDMC"; + + switch (path.type) { + case PathType::ASCII: + if (!isPathSafe(path)) { + Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); + } + + p += fs::path(path.string).make_preferred(); + break; + + case PathType::UTF16: + if (!isPathSafe(path)) { + Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); + } + + p += fs::path(path.utf16_string).make_preferred(); + break; + + default: Helpers::panic("SDMCArchive::OpenFile: Failed. Path type: %d", path.type); return FileError; + } + + const char* permString = perms.write() ? "r+b" : "rb"; + + if (fs::exists(p)) { // Return file descriptor if the file exists + IOFile file(p.string().c_str(), permString); + return file.isOpen() ? file.getHandle() : FileError; + } else { + // If the file is not found, create it if the create flag is on + if (realPerms.create()) { + IOFile file(p.string().c_str(), "wb"); // Create file + file.close(); // Close it + + file.open(p.string().c_str(), permString); // Reopen with proper perms + return file.isOpen() ? file.getHandle() : FileError; + } else { + return FileError; } + } +} - FilePerms realPerms = perms; - // SD card always has read permission - realPerms.raw |= (1 << 0); - - if ((realPerms.create() && !realPerms.write())) { - Helpers::panic("[SaveData] Unsupported flags for OpenFile"); +HorizonResult SDMCArchive::createDirectory(const FSPath& path) { + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) { + Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); } fs::path p = IOFile::getAppData() / "SDMC"; - p += fs::path(path.string).make_preferred(); + p += fs::path(path.utf16_string).make_preferred(); - const char* permString = perms.write() ? "r+b" : "rb"; + if (fs::is_directory(p)) { + return Result::FS::AlreadyExists; + } - if (fs::exists(p)) { // Return file descriptor if the file exists - IOFile file(p.string().c_str(), permString); - return file.isOpen() ? file.getHandle() : FileError; + if (fs::is_regular_file(p)) { + Helpers::panic("File path passed to SDMCArchive::CreateDirectory"); + } + + std::error_code ec; + bool success = fs::create_directory(p, ec); + return success ? Result::Success : Result::FS::UnexpectedFileOrDir; + } else { + Helpers::panic("Unimplemented SDMC::CreateDirectory path type"); + } +} + +Rust::Result SDMCArchive::openDirectory(const FSPath& path) { + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) { + Helpers::panic("Unsafe path in SaveData::OpenDirectory"); + } + + fs::path p = IOFile::getAppData() / "SDMC"; + p += fs::path(path.utf16_string).make_preferred(); + + if (fs::is_regular_file(p)) { + printf("SDMC: OpenDirectory used with a file path"); + return Err(Result::FS::UnexpectedFileOrDir); + } + + if (fs::is_directory(p)) { + return Ok(DirectorySession(this, p)); } else { - // If the file is not found, create it if the create flag is on - if (realPerms.create()) { - IOFile file(p.string().c_str(), "wb"); // Create file - file.close(); // Close it - - file.open(p.string().c_str(), permString); // Reopen with proper perms - return file.isOpen() ? file.getHandle() : FileError; - } else { - return FileError; - } + return Err(Result::FS::FileNotFoundAlt); } } - Helpers::panic("SDMCArchive::OpenFile: Failed"); - return FileError; + Helpers::panic("SDMCArchive::OpenDirectory: Unimplemented path type"); + return Err(Result::Success); } Rust::Result SDMCArchive::openArchive(const FSPath& path) { From 5106f251cf27211810f1e1339d1b6481f8df7c93 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 16:53:06 +0300 Subject: [PATCH 08/88] [SDMC] Handle ASCII paths for CreateDirectory --- src/core/fs/archive_sdmc.cpp | 45 +++++++++++++++++----------- src/core/renderer_gl/renderer_gl.cpp | 8 ++++- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/src/core/fs/archive_sdmc.cpp b/src/core/fs/archive_sdmc.cpp index ee5c8ffb..8e6010eb 100644 --- a/src/core/fs/archive_sdmc.cpp +++ b/src/core/fs/archive_sdmc.cpp @@ -64,28 +64,39 @@ FileDescriptor SDMCArchive::openFile(const FSPath& path, const FilePerms& perms) } HorizonResult SDMCArchive::createDirectory(const FSPath& path) { - if (path.type == PathType::UTF16) { - if (!isPathSafe(path)) { - Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); - } + std::filesystem::path p = IOFile::getAppData() / "SDMC"; - fs::path p = IOFile::getAppData() / "SDMC"; - p += fs::path(path.utf16_string).make_preferred(); + switch (path.type) { + case PathType::ASCII: + if (!isPathSafe(path)) { + Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); + } - if (fs::is_directory(p)) { - return Result::FS::AlreadyExists; - } + p += fs::path(path.string).make_preferred(); + break; - if (fs::is_regular_file(p)) { - Helpers::panic("File path passed to SDMCArchive::CreateDirectory"); - } + case PathType::UTF16: + if (!isPathSafe(path)) { + Helpers::panic("Unsafe path in SDMCArchive::OpenFile"); + } - std::error_code ec; - bool success = fs::create_directory(p, ec); - return success ? Result::Success : Result::FS::UnexpectedFileOrDir; - } else { - Helpers::panic("Unimplemented SDMC::CreateDirectory path type"); + p += fs::path(path.utf16_string).make_preferred(); + break; + + default: Helpers::panic("SDMCArchive::CreateDirectory: Failed. Path type: %d", path.type); return Result::FailurePlaceholder; } + + if (fs::is_directory(p)) { + return Result::FS::AlreadyExists; + } + + if (fs::is_regular_file(p)) { + Helpers::panic("File path passed to SDMCArchive::CreateDirectory"); + } + + std::error_code ec; + bool success = fs::create_directory(p, ec); + return success ? Result::Success : Result::FS::UnexpectedFileOrDir; } Rust::Result SDMCArchive::openDirectory(const FSPath& path) { diff --git a/src/core/renderer_gl/renderer_gl.cpp b/src/core/renderer_gl/renderer_gl.cpp index 6d29e7d3..f904dc37 100644 --- a/src/core/renderer_gl/renderer_gl.cpp +++ b/src/core/renderer_gl/renderer_gl.cpp @@ -695,6 +695,7 @@ void RendererGL::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 if (inputGap != 0 || outputGap != 0) { // Helpers::warn("Strided texture copy\n"); } + if (inputWidth != outputWidth) { Helpers::warn("Input width does not match output width, cannot accelerate texture copy!"); return; @@ -716,7 +717,12 @@ void RendererGL::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 // inputHeight/outputHeight are typically set to zero so they cannot be used to get the height of the copy region // in contrast to display transfer. Compute height manually by dividing the copy size with the copy width. The result // is the number of vertical tiles so multiply that by eight to get the actual copy height. - const u32 copyHeight = (copySize / inputWidth) * 8; + u32 copyHeight; + if (inputWidth != 0) [[likely]] { + copyHeight = (copySize / inputWidth) * 8; + } else { + copyHeight = 0; + } // Find the source surface. auto srcFramebuffer = getColourBuffer(inputAddr, PICA::ColorFmt::RGBA8, copyStride, copyHeight, false); From 82ded962d09c3654585bddaf88d4e793349fcfd3 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 17:06:32 +0300 Subject: [PATCH 09/88] Add PTM::GetBatteryChargeState --- include/services/ptm.hpp | 1 + src/core/services/ptm.cpp | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/include/services/ptm.hpp b/include/services/ptm.hpp index 62fa6f65..1f887aea 100644 --- a/include/services/ptm.hpp +++ b/include/services/ptm.hpp @@ -16,6 +16,7 @@ class PTMService { // Service commands void configureNew3DSCPU(u32 messagePointer); void getAdapterState(u32 messagePointer); + void getBatteryChargeState(u32 messagePointer); void getBatteryLevel(u32 messagePointer); void getStepHistory(u32 messagePointer); void getTotalStepCount(u32 messagePointer); diff --git a/src/core/services/ptm.cpp b/src/core/services/ptm.cpp index 57fbf638..1c822fcf 100644 --- a/src/core/services/ptm.cpp +++ b/src/core/services/ptm.cpp @@ -5,6 +5,7 @@ namespace PTMCommands { enum : u32 { GetAdapterState = 0x00050000, GetBatteryLevel = 0x00070000, + GetBatteryChargeState = 0x00080000, GetStepHistory = 0x000B00C2, GetTotalStepCount = 0x000C0000, ConfigureNew3DSCPU = 0x08180040, @@ -18,6 +19,7 @@ void PTMService::handleSyncRequest(u32 messagePointer) { switch (command) { case PTMCommands::ConfigureNew3DSCPU: configureNew3DSCPU(messagePointer); break; case PTMCommands::GetAdapterState: getAdapterState(messagePointer); break; + case PTMCommands::GetBatteryChargeState: getBatteryChargeState(messagePointer); break; case PTMCommands::GetBatteryLevel: getBatteryLevel(messagePointer); break; case PTMCommands::GetStepHistory: getStepHistory(messagePointer); break; case PTMCommands::GetTotalStepCount: getTotalStepCount(messagePointer); break; @@ -33,6 +35,16 @@ void PTMService::getAdapterState(u32 messagePointer) { mem.write8(messagePointer + 8, config.chargerPlugged ? 1 : 0); } +void PTMService::getBatteryChargeState(u32 messagePointer) { + log("PTM::GetBatteryChargeState"); + // We're only charging if the battery is not already full + const bool charging = config.chargerPlugged && (config.batteryPercentage < 100); + + mem.write32(messagePointer, IPC::responseHeader(0x7, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + mem.write8(messagePointer + 8, charging ? 1 : 0); +} + void PTMService::getBatteryLevel(u32 messagePointer) { log("PTM::GetBatteryLevel"); From 41ef4ad540321b4cbe8a92d70e349bfb116d4c95 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 20 Aug 2023 17:50:53 +0300 Subject: [PATCH 10/88] [HTTP] Stub some certificate stuff --- include/services/http.hpp | 2 ++ src/core/services/http.cpp | 28 ++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/include/services/http.hpp b/include/services/http.hpp index 8dccc0c5..1e7f30c3 100644 --- a/include/services/http.hpp +++ b/include/services/http.hpp @@ -12,7 +12,9 @@ class HTTPService { bool initialized = false; // Service commands + void createRootCertChain(u32 messagePointer); void initialize(u32 messagePointer); + void rootCertChainAddDefaultCert(u32 messagePointer); public: HTTPService(Memory& mem) : mem(mem) {} diff --git a/src/core/services/http.cpp b/src/core/services/http.cpp index f61eca3b..076afa06 100644 --- a/src/core/services/http.cpp +++ b/src/core/services/http.cpp @@ -6,6 +6,8 @@ namespace HTTPCommands { enum : u32 { Initialize = 0x00010044, + CreateRootCertChain = 0x002D0000, + RootCertChainAddDefaultCert = 0x00300080, }; } @@ -14,7 +16,9 @@ void HTTPService::reset() { initialized = false; } void HTTPService::handleSyncRequest(u32 messagePointer) { const u32 command = mem.read32(messagePointer); switch (command) { + case HTTPCommands::CreateRootCertChain: createRootCertChain(messagePointer); break; case HTTPCommands::Initialize: initialize(messagePointer); break; + case HTTPCommands::RootCertChainAddDefaultCert: rootCertChainAddDefaultCert(messagePointer); break; default: Helpers::panic("HTTP service requested. Command: %08X\n", command); } } @@ -39,4 +43,28 @@ void HTTPService::initialize(u32 messagePointer) { initialized = true; // We currently don't emulate HTTP properly. TODO: Prepare POST buffer here mem.write32(messagePointer + 4, Result::Success); +} + +void HTTPService::createRootCertChain(u32 messagePointer) { + log("HTTP::CreateRootCertChain (Unimplemented)\n"); + + // TODO: Verify response header + mem.write32(messagePointer, IPC::responseHeader(0x2D, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + + // RootCertChain context handle. No need to emulate this yet + mem.write32(messagePointer + 8, 0x66666666); +} + +void HTTPService::rootCertChainAddDefaultCert(u32 messagePointer) { + log("HTTP::RootCertChainAddDefaultCert (Unimplemented)\n"); + const u32 contextHandle = mem.read32(messagePointer + 4); + const u32 certID = mem.read32(messagePointer + 8); + + // TODO: Verify response header + mem.write32(messagePointer, IPC::responseHeader(0x30, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + + // Cert context handle. No need to emulate this yet + mem.write32(messagePointer + 8, 0x66666666); } \ No newline at end of file From 17101e9bb935b9b877bd5624e8ba1ad1976c01fa Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Tue, 25 Jul 2023 13:44:34 -0700 Subject: [PATCH 11/88] Fix graphics queue assignment Copy-paste error --- src/core/renderer_vk/renderer_vk.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 4ec70412..92ce12e4 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -513,7 +513,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { VULKAN_HPP_DEFAULT_DISPATCHER.init(device.get()); presentQueue = device->getQueue(presentQueueFamily, 0); - graphicsQueue = device->getQueue(presentQueueFamily, 0); + graphicsQueue = device->getQueue(graphicsQueueFamily, 0); computeQueue = device->getQueue(computeQueueFamily, 0); transferQueue = device->getQueue(transferQueueFamily, 0); From d0832ca558c66358092a97083a082c1eb0302151 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Tue, 25 Jul 2023 13:48:07 -0700 Subject: [PATCH 12/88] Fix support for headless vulkan context --- include/renderer_vk/renderer_vk.hpp | 14 +- src/core/renderer_vk/renderer_vk.cpp | 337 +++++++++++++++------------ 2 files changed, 192 insertions(+), 159 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 59d8cdae..6ebbcb7e 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -32,9 +32,14 @@ class RendererVK final : public Renderer { std::vector swapchainImages = {}; std::vector swapchainImageViews = {}; - // Per-swapchain-image data - // Each vector is `swapchainImageCount` in size - std::vector presentCommandBuffers = {}; + // This value is the degree of parallelism to allow multiple frames to be in-flight + // aka: "double-buffer"/"triple-buffering" + // Todo: make this a configuration option + static constexpr usize frameBufferingCount = 3; + + // Frame-buffering data + // Each vector is `frameBufferingCount` in size + std::vector frameCommandBuffers = {}; std::vector swapImageFreeSemaphore = {}; std::vector renderFinishedSemaphore = {}; std::vector frameFinishedFences = {}; @@ -42,7 +47,8 @@ class RendererVK final : public Renderer { // Recreate the swapchain, possibly re-using the old one in the case of a resize vk::Result recreateSwapchain(vk::SurfaceKHR surface, vk::Extent2D swapchainExtent); - u64 currentFrame = 0; + u64 frameBufferingIndex = 0; + public: RendererVK(GPU& gpu, const std::array& internalRegs, const std::array& externalRegs); ~RendererVK() override; diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 92ce12e4..4b6956d5 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -155,48 +155,6 @@ vk::Result RendererVK::recreateSwapchain(vk::SurfaceKHR surface, vk::Extent2D sw Helpers::panic("Error creating acquiring swapchain images: %s\n", vk::to_string(getResult.result).c_str()); } - // Swapchain Command buffer(s) - vk::CommandBufferAllocateInfo commandBuffersInfo = {}; - commandBuffersInfo.commandPool = commandPool.get(); - commandBuffersInfo.level = vk::CommandBufferLevel::ePrimary; - commandBuffersInfo.commandBufferCount = swapchainImageCount; - - if (auto allocateResult = device->allocateCommandBuffersUnique(commandBuffersInfo); allocateResult.result == vk::Result::eSuccess) { - presentCommandBuffers = std::move(allocateResult.value); - } else { - Helpers::panic("Error allocating command buffer: %s\n", vk::to_string(allocateResult.result).c_str()); - } - - // Swapchain synchronization primitives - vk::FenceCreateInfo fenceInfo = {}; - fenceInfo.flags = vk::FenceCreateFlagBits::eSignaled; - - vk::SemaphoreCreateInfo semaphoreInfo = {}; - - swapImageFreeSemaphore.resize(swapchainImageCount); - renderFinishedSemaphore.resize(swapchainImageCount); - frameFinishedFences.resize(swapchainImageCount); - - for (usize i = 0; i < swapchainImageCount; i++) { - if (auto createResult = device->createSemaphoreUnique(semaphoreInfo); createResult.result == vk::Result::eSuccess) { - swapImageFreeSemaphore[i] = std::move(createResult.value); - } else { - Helpers::panic("Error creating 'present-ready' semaphore: %s\n", vk::to_string(createResult.result).c_str()); - } - - if (auto createResult = device->createSemaphoreUnique(semaphoreInfo); createResult.result == vk::Result::eSuccess) { - renderFinishedSemaphore[i] = std::move(createResult.value); - } else { - Helpers::panic("Error creating 'post-render' semaphore: %s\n", vk::to_string(createResult.result).c_str()); - } - - if (auto createResult = device->createFenceUnique(fenceInfo); createResult.result == vk::Result::eSuccess) { - frameFinishedFences[i] = std::move(createResult.value); - } else { - Helpers::panic("Error creating 'present-ready' semaphore: %s\n", vk::to_string(createResult.result).c_str()); - } - } - return vk::Result::eSuccess; } @@ -208,133 +166,143 @@ RendererVK::~RendererVK() {} void RendererVK::reset() {} void RendererVK::display() { - // Block, on the CPU, to ensure that this swapchain-frame is ready for more work - if (auto waitResult = device->waitForFences({frameFinishedFences[currentFrame].get()}, true, std::numeric_limits::max()); + // Block, on the CPU, to ensure that this frame-buffering-frame is ready for more work + if (auto waitResult = device->waitForFences({frameFinishedFences[frameBufferingIndex].get()}, true, std::numeric_limits::max()); waitResult != vk::Result::eSuccess) { Helpers::panic("Error waiting on swapchain fence: %s\n", vk::to_string(waitResult).c_str()); } - u32 swapchainImageIndex = std::numeric_limits::max(); - if (const auto acquireResult = - device->acquireNextImageKHR(swapchain.get(), std::numeric_limits::max(), swapImageFreeSemaphore[currentFrame].get(), {}); - acquireResult.result == vk::Result::eSuccess) { - swapchainImageIndex = acquireResult.value; - } else { - switch (acquireResult.result) { - case vk::Result::eSuboptimalKHR: - case vk::Result::eErrorOutOfDateKHR: { - // Surface resized - vk::Extent2D swapchainExtent; - { - int windowWidth, windowHeight; - // Block until we have a valid surface-area to present to - // Usually this is because the window has been minimized - // Todo: We should still be rendering even without a valid swapchain - do { - SDL_Vulkan_GetDrawableSize(targetWindow, &windowWidth, &windowHeight); - } while (!windowWidth || !windowHeight); - swapchainExtent.width = windowWidth; - swapchainExtent.height = windowHeight; + // Get the next available swapchain image, and signal the semaphore when it's ready + static constexpr u32 swapchainImageInvalid = std::numeric_limits::max(); + u32 swapchainImageIndex = swapchainImageInvalid; + if (swapchain) { + if (const auto acquireResult = + device->acquireNextImageKHR(swapchain.get(), std::numeric_limits::max(), swapImageFreeSemaphore[frameBufferingIndex].get(), {}); + acquireResult.result == vk::Result::eSuccess) { + swapchainImageIndex = acquireResult.value; + } else { + switch (acquireResult.result) { + case vk::Result::eSuboptimalKHR: + case vk::Result::eErrorOutOfDateKHR: { + // Surface resized + vk::Extent2D swapchainExtent; + { + int windowWidth, windowHeight; + // Block until we have a valid surface-area to present to + // Usually this is because the window has been minimized + // Todo: We should still be rendering even without a valid swapchain + do { + SDL_Vulkan_GetDrawableSize(targetWindow, &windowWidth, &windowHeight); + } while (!windowWidth || !windowHeight); + swapchainExtent.width = windowWidth; + swapchainExtent.height = windowHeight; + } + recreateSwapchain(surface.get(), swapchainExtent); + break; + } + default: { + Helpers::panic("Error acquiring next swapchain image: %s\n", vk::to_string(acquireResult.result).c_str()); } - recreateSwapchain(surface.get(), swapchainExtent); - break; - } - default: { - Helpers::panic("Error acquiring next swapchain image: %s\n", vk::to_string(acquireResult.result).c_str()); } } } - vk::UniqueCommandBuffer& presentCommandBuffer = presentCommandBuffers.at(currentFrame); + vk::UniqueCommandBuffer& frameCommandBuffer = frameCommandBuffers.at(frameBufferingIndex); vk::CommandBufferBeginInfo beginInfo = {}; beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; - if (const vk::Result beginResult = presentCommandBuffer->begin(beginInfo); beginResult != vk::Result::eSuccess) { + if (const vk::Result beginResult = frameCommandBuffer->begin(beginInfo); beginResult != vk::Result::eSuccess) { Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); } { - static const std::array presentScopeColor = {{1.0f, 0.0f, 1.0f, 1.0f}}; + static const std::array frameScopeColor = {{1.0f, 0.0f, 1.0f, 1.0f}}; - Vulkan::DebugLabelScope debugScope(presentCommandBuffer.get(), presentScopeColor, "Present"); + Vulkan::DebugLabelScope debugScope(frameCommandBuffer.get(), frameScopeColor, "Frame"); // Prepare for color-clear - presentCommandBuffer->pipelineBarrier( - vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, - {vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, - vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - )} - ); + if (swapchainImageIndex != swapchainImageInvalid) { + frameCommandBuffer->pipelineBarrier( + vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + {vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + )} + ); - presentCommandBuffer->clearColorImage( - swapchainImages[swapchainImageIndex], vk::ImageLayout::eTransferDstOptimal, presentScopeColor, - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ); - - // Prepare for present - presentCommandBuffer->pipelineBarrier( - vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, - {vk::ImageMemoryBarrier( - vk::AccessFlagBits::eNone, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, - vk::ImageLayout::ePresentSrcKHR, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], + static const std::array clearColor = {{0.0f, 0.0f, 0.0f, 1.0f}}; + frameCommandBuffer->clearColorImage( + swapchainImages[swapchainImageIndex], vk::ImageLayout::eTransferDstOptimal, clearColor, vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - )} - ); + ); + + // Prepare for present + frameCommandBuffer->pipelineBarrier( + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, + {vk::ImageMemoryBarrier( + vk::AccessFlagBits::eNone, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::ePresentSrcKHR, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + )} + ); + } } - if (const vk::Result endResult = presentCommandBuffer->end(); endResult != vk::Result::eSuccess) { + if (const vk::Result endResult = frameCommandBuffer->end(); endResult != vk::Result::eSuccess) { Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); } vk::SubmitInfo submitInfo = {}; // Wait for any previous uses of the image image to finish presenting - submitInfo.setWaitSemaphores(swapImageFreeSemaphore[currentFrame].get()); + if (swapchainImageIndex != swapchainImageInvalid) { + submitInfo.setWaitSemaphores(swapImageFreeSemaphore[frameBufferingIndex].get()); + static const vk::PipelineStageFlags waitStageMask = vk::PipelineStageFlagBits::eColorAttachmentOutput; + submitInfo.setWaitDstStageMask(waitStageMask); + } // Signal when finished - submitInfo.setSignalSemaphores(renderFinishedSemaphore[currentFrame].get()); + submitInfo.setSignalSemaphores(renderFinishedSemaphore[frameBufferingIndex].get()); - static const vk::PipelineStageFlags waitStageMask = vk::PipelineStageFlagBits::eColorAttachmentOutput; - submitInfo.setWaitDstStageMask(waitStageMask); + submitInfo.setCommandBuffers(frameCommandBuffer.get()); - submitInfo.setCommandBuffers(presentCommandBuffer.get()); + device->resetFences({frameFinishedFences[frameBufferingIndex].get()}); - device->resetFences({frameFinishedFences[currentFrame].get()}); - - if (const vk::Result submitResult = graphicsQueue.submit({submitInfo}, frameFinishedFences[currentFrame].get()); + if (const vk::Result submitResult = graphicsQueue.submit({submitInfo}, frameFinishedFences[frameBufferingIndex].get()); submitResult != vk::Result::eSuccess) { Helpers::panic("Error submitting to graphics queue: %s\n", vk::to_string(submitResult).c_str()); } - vk::PresentInfoKHR presentInfo = {}; - presentInfo.setWaitSemaphores(renderFinishedSemaphore[currentFrame].get()); - presentInfo.setSwapchains(swapchain.get()); - presentInfo.setImageIndices(swapchainImageIndex); + if (swapchainImageIndex != swapchainImageInvalid) { + vk::PresentInfoKHR presentInfo = {}; + presentInfo.setWaitSemaphores(renderFinishedSemaphore[frameBufferingIndex].get()); + presentInfo.setSwapchains(swapchain.get()); + presentInfo.setImageIndices(swapchainImageIndex); - if (const auto presentResult = presentQueue.presentKHR(presentInfo); presentResult == vk::Result::eSuccess) { - } else { - switch (presentResult) { - case vk::Result::eSuboptimalKHR: - case vk::Result::eErrorOutOfDateKHR: { - // Surface resized - vk::Extent2D swapchainExtent; - { - int windowWidth, windowHeight; - SDL_Vulkan_GetDrawableSize(targetWindow, &windowWidth, &windowHeight); - swapchainExtent.width = windowWidth; - swapchainExtent.height = windowHeight; + if (const auto presentResult = presentQueue.presentKHR(presentInfo); presentResult == vk::Result::eSuccess) { + } else { + switch (presentResult) { + case vk::Result::eSuboptimalKHR: + case vk::Result::eErrorOutOfDateKHR: { + // Surface resized + vk::Extent2D swapchainExtent; + { + int windowWidth, windowHeight; + SDL_Vulkan_GetDrawableSize(targetWindow, &windowWidth, &windowHeight); + swapchainExtent.width = windowWidth; + swapchainExtent.height = windowHeight; + } + recreateSwapchain(surface.get(), swapchainExtent); + break; + } + default: { + Helpers::panic("Error presenting swapchain image: %s\n", vk::to_string(presentResult).c_str()); } - recreateSwapchain(surface.get(), swapchainExtent); - break; - } - default: { - Helpers::panic("Error presenting swapchain image: %s\n", vk::to_string(presentResult).c_str()); } } } - currentFrame = ((currentFrame + 1) % swapchainImageCount); + frameBufferingIndex = ((frameBufferingIndex + 1) % frameBufferingCount); } void RendererVK::initGraphicsContext(SDL_Window* window) { @@ -365,11 +333,11 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { }; // Get any additional extensions that SDL wants as well - { + if (targetWindow) { unsigned int extensionCount = 0; - SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, nullptr); + SDL_Vulkan_GetInstanceExtensions(targetWindow, &extensionCount, nullptr); std::vector sdlInstanceExtensions(extensionCount); - SDL_Vulkan_GetInstanceExtensions(window, &extensionCount, sdlInstanceExtensions.data()); + SDL_Vulkan_GetInstanceExtensions(targetWindow, &extensionCount, sdlInstanceExtensions.data()); instanceExtensions.insert(instanceExtensions.end(), sdlInstanceExtensions.begin(), sdlInstanceExtensions.end()); } @@ -411,10 +379,12 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { } // Create surface - if (VkSurfaceKHR newSurface; SDL_Vulkan_CreateSurface(window, instance.get(), &newSurface)) { - surface.reset(newSurface); - } else { - Helpers::warn("Error creating Vulkan surface"); + if (window) { + if (VkSurfaceKHR newSurface; SDL_Vulkan_CreateSurface(window, instance.get(), &newSurface)) { + surface.reset(newSurface); + } else { + Helpers::warn("Error creating Vulkan surface"); + } } // Pick physical device @@ -423,18 +393,20 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { std::vector::iterator partitionEnd = physicalDevices.end(); // Prefer GPUs that can access the surface - const auto surfaceSupport = [this](const vk::PhysicalDevice& physicalDevice) -> bool { - const usize queueCount = physicalDevice.getQueueFamilyProperties().size(); - for (usize queueIndex = 0; queueIndex < queueCount; ++queueIndex) { - if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueIndex, surface.get()); - supportResult.result == vk::Result::eSuccess) { - return supportResult.value; + if (surface) { + const auto surfaceSupport = [this](const vk::PhysicalDevice& physicalDevice) -> bool { + const usize queueCount = physicalDevice.getQueueFamilyProperties().size(); + for (usize queueIndex = 0; queueIndex < queueCount; ++queueIndex) { + if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueIndex, surface.get()); + supportResult.result == vk::Result::eSuccess) { + return supportResult.value; + } } - } - return false; - }; + return false; + }; - partitionEnd = std::stable_partition(physicalDevices.begin(), partitionEnd, surfaceSupport); + partitionEnd = std::stable_partition(physicalDevices.begin(), partitionEnd, surfaceSupport); + } // Prefer Discrete GPUs const auto isDiscrete = [](const vk::PhysicalDevice& physicalDevice) -> bool { @@ -454,26 +426,32 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { std::vector deviceQueueInfos; { const std::vector queueFamilyProperties = physicalDevice.getQueueFamilyProperties(); - + std::unordered_set queueFamilyRequests; // Get present queue family - for (usize queueFamilyIndex = 0; queueFamilyIndex < queueFamilyProperties.size(); ++queueFamilyIndex) { - if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueFamilyIndex, surface.get()); - supportResult.result == vk::Result::eSuccess) { - if (supportResult.value) { - presentQueueFamily = queueFamilyIndex; - break; + if (surface) { + for (usize queueFamilyIndex = 0; queueFamilyIndex < queueFamilyProperties.size(); ++queueFamilyIndex) { + if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueFamilyIndex, surface.get()); + supportResult.result == vk::Result::eSuccess) { + if (supportResult.value) { + presentQueueFamily = queueFamilyIndex; + break; + } } } + queueFamilyRequests.emplace(presentQueueFamily); } static const float queuePriority = 1.0f; graphicsQueueFamily = findQueueFamily(queueFamilyProperties, vk::QueueFlagBits::eGraphics); + queueFamilyRequests.emplace(graphicsQueueFamily); computeQueueFamily = findQueueFamily(queueFamilyProperties, vk::QueueFlagBits::eCompute); + queueFamilyRequests.emplace(computeQueueFamily); transferQueueFamily = findQueueFamily(queueFamilyProperties, vk::QueueFlagBits::eTransfer); + queueFamilyRequests.emplace(transferQueueFamily); // Requests a singular queue for each unique queue-family - const std::unordered_set queueFamilyRequests = {presentQueueFamily, graphicsQueueFamily, computeQueueFamily, transferQueueFamily}; + for (const u32 queueFamilyIndex : queueFamilyRequests) { deviceQueueInfos.emplace_back(vk::DeviceQueueCreateInfo({}, queueFamilyIndex, 1, &queuePriority)); } @@ -482,15 +460,31 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { // Create Device vk::DeviceCreateInfo deviceInfo = {}; - static const char* deviceExtensions[] = { - VK_KHR_SWAPCHAIN_EXTENSION_NAME, + // Device extensions + std::vector deviceExtensions = { #if defined(__APPLE__) "VK_KHR_portability_subset", #endif // VK_KHR_TIMELINE_SEMAPHORE_EXTENSION_NAME }; - deviceInfo.ppEnabledExtensionNames = deviceExtensions; - deviceInfo.enabledExtensionCount = std::size(deviceExtensions); + + std::unordered_set physicalDeviceExtensions; + if (const auto enumerateResult = physicalDevice.enumerateDeviceExtensionProperties(); enumerateResult.result == vk::Result::eSuccess) { + for (const auto& extension : enumerateResult.value) { + physicalDeviceExtensions.insert(extension.extensionName); + } + } else { + Helpers::panic("Error enumerating physical devices extensions: %s\n", vk::to_string(enumerateResult.result).c_str()); + } + + // Opertional extensions + + // Optionally enable the swapchain, to support "headless" rendering + if (physicalDeviceExtensions.contains(VK_KHR_SWAPCHAIN_EXTENSION_NAME)) { + deviceExtensions.emplace_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME); + } + + deviceInfo.setPEnabledExtensionNames(deviceExtensions); vk::StructureChain deviceFeatureChain = {}; @@ -528,6 +522,39 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { } // Create swapchain + if (targetWindow && surface) { + vk::Extent2D swapchainExtent; + { + int windowWidth, windowHeight; + SDL_Vulkan_GetDrawableSize(window, &windowWidth, &windowHeight); + swapchainExtent.width = windowWidth; + swapchainExtent.height = windowHeight; + } + recreateSwapchain(surface.get(), swapchainExtent); + } + + // Create frame-buffering data + // Frame-buffering Command buffer(s) + vk::CommandBufferAllocateInfo commandBuffersInfo = {}; + commandBuffersInfo.commandPool = commandPool.get(); + commandBuffersInfo.level = vk::CommandBufferLevel::ePrimary; + commandBuffersInfo.commandBufferCount = frameBufferingCount; + + if (auto allocateResult = device->allocateCommandBuffersUnique(commandBuffersInfo); allocateResult.result == vk::Result::eSuccess) { + frameCommandBuffers = std::move(allocateResult.value); + } else { + Helpers::panic("Error allocating command buffer: %s\n", vk::to_string(allocateResult.result).c_str()); + } + + // Frame-buffering synchronization primitives + vk::FenceCreateInfo fenceInfo = {}; + fenceInfo.flags = vk::FenceCreateFlagBits::eSignaled; + + vk::SemaphoreCreateInfo semaphoreInfo = {}; + + swapImageFreeSemaphore.resize(frameBufferingCount); + renderFinishedSemaphore.resize(frameBufferingCount); + frameFinishedFences.resize(frameBufferingCount); vk::Extent2D swapchainExtent; { int windowWidth, windowHeight; From e3699fe8f8ac799e3cf4208224ee8c3e273e4c66 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Tue, 25 Jul 2023 22:00:37 -0700 Subject: [PATCH 13/88] Allocate and present separate top/bottom screen framebuffer images Instead of operating directly on the swapchain images, we have our own top/bottom framebuffer images that will be rendered to independent of having an available swapchain. The images are blitted into the swapchain images, allowing for resizing too! --- CMakeLists.txt | 4 +- include/renderer_vk/renderer_vk.hpp | 5 + include/renderer_vk/vk_memory.hpp | 36 ++++++ src/core/renderer_vk/renderer_vk.cpp | 150 +++++++++++++++++++++-- src/core/renderer_vk/vk_memory.cpp | 174 +++++++++++++++++++++++++++ 5 files changed, 354 insertions(+), 15 deletions(-) create mode 100644 include/renderer_vk/vk_memory.hpp create mode 100644 src/core/renderer_vk/vk_memory.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 14262e65..f915444c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -239,11 +239,11 @@ if(ENABLE_VULKAN) ) set(RENDERER_VK_INCLUDE_FILES include/renderer_vk/renderer_vk.hpp - include/renderer_vk/vulkan_api.hpp include/renderer_vk/vk_debug.hpp + include/renderer_vk/vulkan_api.hpp include/renderer_vk/vk_debug.hpp include/renderer_vk/vk_memory.hpp ) set(RENDERER_VK_SOURCE_FILES src/core/renderer_vk/renderer_vk.cpp - src/core/renderer_vk/vulkan_api.cpp src/core/renderer_vk/vk_debug.cpp + src/core/renderer_vk/vulkan_api.cpp src/core/renderer_vk/vk_debug.cpp src/core/renderer_vk/vk_memory.cpp ) set(HEADER_FILES ${HEADER_FILES} ${RENDERER_VK_INCLUDE_FILES}) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 6ebbcb7e..9545a4d9 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -37,6 +37,8 @@ class RendererVK final : public Renderer { // Todo: make this a configuration option static constexpr usize frameBufferingCount = 3; + vk::UniqueDeviceMemory framebufferMemory = {}; + // Frame-buffering data // Each vector is `frameBufferingCount` in size std::vector frameCommandBuffers = {}; @@ -44,6 +46,9 @@ class RendererVK final : public Renderer { std::vector renderFinishedSemaphore = {}; std::vector frameFinishedFences = {}; + std::vector topScreenImages = {}; + std::vector bottomScreenImages = {}; + // Recreate the swapchain, possibly re-using the old one in the case of a resize vk::Result recreateSwapchain(vk::SurfaceKHR surface, vk::Extent2D swapchainExtent); diff --git a/include/renderer_vk/vk_memory.hpp b/include/renderer_vk/vk_memory.hpp new file mode 100644 index 00000000..8bf3f25d --- /dev/null +++ b/include/renderer_vk/vk_memory.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include +#include +#include + +#include "helpers.hpp" +#include "vulkan_api.hpp" + +namespace Vulkan { + + // Will try to find a memory type that is suitable for the given requirements. + // Returns -1 if no suitable memory type was found. + s32 findMemoryTypeIndex( + vk::PhysicalDevice physicalDevice, u32 memoryTypeMask, vk::MemoryPropertyFlags memoryProperties, + vk::MemoryPropertyFlags memoryExcludeProperties = vk::MemoryPropertyFlagBits::eProtected + ); + + // Given an array of valid Vulkan image-handles or buffer-handles, these + // functions will allocate a single block of device-memory for all of them + // and bind them consecutively. + // There may be a case that all the buffers or images cannot be allocated + // to the same device memory due to their required memory-type. + std::tuple commitImageHeap( + vk::Device device, vk::PhysicalDevice physicalDevice, const std::span images, + vk::MemoryPropertyFlags memoryProperties = vk::MemoryPropertyFlagBits::eDeviceLocal, + vk::MemoryPropertyFlags memoryExcludeProperties = vk::MemoryPropertyFlagBits::eProtected + ); + + std::tuple commitBufferHeap( + vk::Device device, vk::PhysicalDevice physicalDevice, const std::span buffers, + vk::MemoryPropertyFlags memoryProperties = vk::MemoryPropertyFlagBits::eDeviceLocal, + vk::MemoryPropertyFlags memoryExcludeProperties = vk::MemoryPropertyFlagBits::eProtected + ); + +} // namespace Vulkan \ No newline at end of file diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 4b6956d5..310fdec3 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -1,12 +1,14 @@ #include "renderer_vk/renderer_vk.hpp" #include +#include #include #include #include "SDL_vulkan.h" #include "helpers.hpp" #include "renderer_vk/vk_debug.hpp" +#include "renderer_vk/vk_memory.hpp" // Finds the first queue family that satisfies `queueMask` and excludes `queueExcludeMask` bits // Returns -1 if not found @@ -221,15 +223,27 @@ void RendererVK::display() { Vulkan::DebugLabelScope debugScope(frameCommandBuffer.get(), frameScopeColor, "Frame"); - // Prepare for color-clear if (swapchainImageIndex != swapchainImageInvalid) { + // Prepare images for color-clear frameCommandBuffer->pipelineBarrier( vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, - {vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, - vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - )} + { + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + topScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + bottomScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + } ); static const std::array clearColor = {{0.0f, 0.0f, 0.0f, 1.0f}}; @@ -238,6 +252,56 @@ void RendererVK::display() { vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ); + //// Simulated rendering work, just clear the screens and get them ready to blit(transfer-src layout) + { + static const std::array topClearColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; + static const std::array bottomClearColor = {{0.0f, 1.0f, 0.0f, 1.0f}}; + frameCommandBuffer->clearColorImage( + topScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, topClearColor, + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ); + frameCommandBuffer->clearColorImage( + bottomScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, bottomClearColor, + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ); + frameCommandBuffer->pipelineBarrier( + vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + { + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + topScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + bottomScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + } + ); + } + + // Blip top/bottom screen onto swapchain image + { + static const vk::ImageBlit topScreenBlit( + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240, 1}}, + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240, 1}} + ); + static const vk::ImageBlit bottomScreenBlit( + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{320, 240, 1}}, + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), + {vk::Offset3D{(400 / 2) - (320 / 2), 240, 0}, vk::Offset3D{(400 / 2) + (320 / 2), 240 + 240, 1}} + ); + frameCommandBuffer->blitImage( + topScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], + vk::ImageLayout::eTransferDstOptimal, {topScreenBlit}, vk::Filter::eNearest + ); + frameCommandBuffer->blitImage( + bottomScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], + vk::ImageLayout::eTransferDstOptimal, {bottomScreenBlit}, vk::Filter::eNearest + ); + } + // Prepare for present frameCommandBuffer->pipelineBarrier( vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, @@ -555,14 +619,74 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { swapImageFreeSemaphore.resize(frameBufferingCount); renderFinishedSemaphore.resize(frameBufferingCount); frameFinishedFences.resize(frameBufferingCount); - vk::Extent2D swapchainExtent; - { - int windowWidth, windowHeight; - SDL_Vulkan_GetDrawableSize(window, &windowWidth, &windowHeight); - swapchainExtent.width = windowWidth; - swapchainExtent.height = windowHeight; + + vk::ImageCreateInfo topScreenInfo = {}; + topScreenInfo.setImageType(vk::ImageType::e2D); + topScreenInfo.setFormat(vk::Format::eR8G8B8A8Unorm); + topScreenInfo.setExtent(vk::Extent3D(400, 240, 1)); + topScreenInfo.setMipLevels(1); + topScreenInfo.setArrayLayers(2); // Two image layers, for 3D mode + topScreenInfo.setSamples(vk::SampleCountFlagBits::e1); + topScreenInfo.setTiling(vk::ImageTiling::eOptimal); + topScreenInfo.setUsage( + vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eInputAttachment | vk::ImageUsageFlagBits::eTransferSrc | + vk::ImageUsageFlagBits::eTransferDst + ); + topScreenInfo.setSharingMode(vk::SharingMode::eExclusive); + topScreenInfo.setInitialLayout(vk::ImageLayout::eUndefined); + + vk::ImageCreateInfo bottomScreenInfo = topScreenInfo; + bottomScreenInfo.setExtent(vk::Extent3D(320, 240, 1)); + bottomScreenInfo.setArrayLayers(1); + + topScreenImages.resize(frameBufferingCount); + bottomScreenImages.resize(frameBufferingCount); + + for (usize i = 0; i < frameBufferingCount; i++) { + if (auto createResult = device->createSemaphoreUnique(semaphoreInfo); createResult.result == vk::Result::eSuccess) { + swapImageFreeSemaphore[i] = std::move(createResult.value); + } else { + Helpers::panic("Error creating 'present-ready' semaphore: %s\n", vk::to_string(createResult.result).c_str()); + } + + if (auto createResult = device->createSemaphoreUnique(semaphoreInfo); createResult.result == vk::Result::eSuccess) { + renderFinishedSemaphore[i] = std::move(createResult.value); + } else { + Helpers::panic("Error creating 'post-render' semaphore: %s\n", vk::to_string(createResult.result).c_str()); + } + + if (auto createResult = device->createFenceUnique(fenceInfo); createResult.result == vk::Result::eSuccess) { + frameFinishedFences[i] = std::move(createResult.value); + } else { + Helpers::panic("Error creating 'present-ready' semaphore: %s\n", vk::to_string(createResult.result).c_str()); + } + + if (auto createResult = device->createImageUnique(topScreenInfo); createResult.result == vk::Result::eSuccess) { + topScreenImages[i] = std::move(createResult.value); + } else { + Helpers::panic("Error creating top-screen image: %s\n", vk::to_string(createResult.result).c_str()); + } + + if (auto createResult = device->createImageUnique(bottomScreenInfo); createResult.result == vk::Result::eSuccess) { + bottomScreenImages[i] = std::move(createResult.value); + } else { + Helpers::panic("Error creating bottom-screen image: %s\n", vk::to_string(createResult.result).c_str()); + } + } + + // Commit memory to all of our images + { + const auto getImage = [](const vk::UniqueImage& image) -> vk::Image { return image.get(); }; + std::vector images; + std::ranges::transform(topScreenImages, std::back_inserter(images), getImage); + std::ranges::transform(bottomScreenImages, std::back_inserter(images), getImage); + + if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, images); result == vk::Result::eSuccess) { + framebufferMemory = std::move(imageMemory); + } else { + Helpers::panic("Error allocating framebuffer memory: %s\n", vk::to_string(result).c_str()); + } } - recreateSwapchain(surface.get(), swapchainExtent); } void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) {} diff --git a/src/core/renderer_vk/vk_memory.cpp b/src/core/renderer_vk/vk_memory.cpp new file mode 100644 index 00000000..c9087719 --- /dev/null +++ b/src/core/renderer_vk/vk_memory.cpp @@ -0,0 +1,174 @@ +#include "renderer_vk/vk_memory.hpp" + +namespace Vulkan { + + static constexpr vk::DeviceSize alignUp(vk::DeviceSize value, std::size_t size) { + const vk::DeviceSize mod = static_cast(value % size); + value -= mod; + return static_cast(mod == vk::DeviceSize{0} ? value : value + size); + } + + // Given a speculative heap-allocation, defined by its current size and + // memory-type bits, appends a memory requirements structure to it, updating + // both the size and the required memory-type-bits. Returns the offset within + // the heap for the current MemoryRequirements Todo: Sun Apr 23 13:28:25 PDT + // 2023 Rather than using a running-size of the heap, look at all of the memory + // requests and optimally create a packing for all of the offset and alignment + // requirements. Such as by satisfying all of the largest alignments first, and + // then the smallest, to reduce padding + static vk::DeviceSize commitMemoryRequestToHeap( + const vk::MemoryRequirements& curMemoryRequirements, vk::DeviceSize& curHeapEnd, u32& curMemoryTypeBits, vk::DeviceSize sizeAlignment + ) { + // Accumulate a mask of all the memory types that satisfies each of the + // handles + curMemoryTypeBits &= curMemoryRequirements.memoryTypeBits; + + // Pad up the memory sizes so they are not considered aliasing + const vk::DeviceSize curMemoryOffset = alignUp(curHeapEnd, curMemoryRequirements.alignment); + // Pad the size by the required size-alignment. + // Intended for BufferImageGranularity + const vk::DeviceSize curMemorySize = alignUp(curMemoryRequirements.size, sizeAlignment); + + curHeapEnd = (curMemoryOffset + curMemorySize); + return curMemoryOffset; + } + + s32 findMemoryTypeIndex( + vk::PhysicalDevice physicalDevice, u32 memoryTypeMask, vk::MemoryPropertyFlags memoryProperties, + vk::MemoryPropertyFlags memoryExcludeProperties + ) { + const vk::PhysicalDeviceMemoryProperties deviceMemoryProperties = physicalDevice.getMemoryProperties(); + // Iterate the physical device's memory types until we find a match + for (std::size_t i = 0; i < deviceMemoryProperties.memoryTypeCount; i++) { + if( + // Is within memory type mask + (((memoryTypeMask >> i) & 0b1) == 0b1) && + // Has property flags + (deviceMemoryProperties.memoryTypes[i].propertyFlags + & memoryProperties) + == memoryProperties + && + // None of the excluded properties are enabled + !(deviceMemoryProperties.memoryTypes[i].propertyFlags + & memoryExcludeProperties) ) + { + return static_cast(i); + } + } + + return -1; + } + + std::tuple commitImageHeap( + vk::Device device, vk::PhysicalDevice physicalDevice, const std::span images, vk::MemoryPropertyFlags memoryProperties, + vk::MemoryPropertyFlags memoryExcludeProperties + ) { + vk::MemoryAllocateInfo imageHeapAllocInfo = {}; + u32 imageHeapMemoryTypeBits = 0xFFFFFFFF; + std::vector imageHeapBinds; + + const vk::DeviceSize bufferImageGranularity = physicalDevice.getProperties().limits.bufferImageGranularity; + + for (const vk::Image& curImage : images) { + const vk::DeviceSize curBindOffset = commitMemoryRequestToHeap( + device.getImageMemoryRequirements(curImage), imageHeapAllocInfo.allocationSize, imageHeapMemoryTypeBits, bufferImageGranularity + ); + + if (imageHeapMemoryTypeBits == 0) { + // No possible memory heap for all of the images to share + return std::make_tuple(vk::Result::eErrorOutOfDeviceMemory, vk::UniqueDeviceMemory()); + } + + // Put nullptr for the device memory for now + imageHeapBinds.emplace_back(vk::BindImageMemoryInfo{curImage, nullptr, curBindOffset}); + } + + const s32 memoryTypeIndex = findMemoryTypeIndex(physicalDevice, imageHeapMemoryTypeBits, memoryProperties, memoryExcludeProperties); + + if (memoryTypeIndex < 0) { + // Unable to find a memory heap that satisfies all the images + return std::make_tuple(vk::Result::eErrorOutOfDeviceMemory, vk::UniqueDeviceMemory()); + } + + imageHeapAllocInfo.memoryTypeIndex = memoryTypeIndex; + + vk::UniqueDeviceMemory imageHeapMemory = {}; + + if (auto allocResult = device.allocateMemoryUnique(imageHeapAllocInfo); allocResult.result == vk::Result::eSuccess) { + imageHeapMemory = std::move(allocResult.value); + } else { + return std::make_tuple(allocResult.result, vk::UniqueDeviceMemory()); + } + + // Assign the device memory to the bindings + for (vk::BindImageMemoryInfo& curBind : imageHeapBinds) { + curBind.memory = imageHeapMemory.get(); + } + + // Now bind them all in one call + if (const vk::Result bindResult = device.bindImageMemory2(imageHeapBinds); bindResult == vk::Result::eSuccess) { + // Binding memory succeeded + } else { + return std::make_tuple(bindResult, vk::UniqueDeviceMemory()); + } + + return std::make_tuple(vk::Result::eSuccess, std::move(imageHeapMemory)); + } + + std::tuple commitBufferHeap( + vk::Device device, vk::PhysicalDevice physicalDevice, const std::span buffers, vk::MemoryPropertyFlags memoryProperties, + vk::MemoryPropertyFlags memoryExcludeProperties + ) { + vk::MemoryAllocateInfo bufferHeapAllocInfo = {}; + u32 bufferHeapMemoryTypeBits = 0xFFFFFFFF; + std::vector bufferHeapBinds; + + const vk::DeviceSize bufferImageGranularity = physicalDevice.getProperties().limits.bufferImageGranularity; + + for (const vk::Buffer& curBuffer : buffers) { + const vk::DeviceSize curBindOffset = commitMemoryRequestToHeap( + device.getBufferMemoryRequirements(curBuffer), bufferHeapAllocInfo.allocationSize, bufferHeapMemoryTypeBits, bufferImageGranularity + ); + + if (bufferHeapMemoryTypeBits == 0) { + // No possible memory heap for all of the buffers to share + return std::make_tuple(vk::Result::eErrorOutOfDeviceMemory, vk::UniqueDeviceMemory()); + } + + // Put nullptr for the device memory for now + bufferHeapBinds.emplace_back(vk::BindBufferMemoryInfo{curBuffer, nullptr, curBindOffset}); + } + + const s32 memoryTypeIndex = findMemoryTypeIndex(physicalDevice, bufferHeapMemoryTypeBits, memoryProperties, memoryExcludeProperties); + + if (memoryTypeIndex < 0) { + // Unable to find a memory heap that satisfies all the buffers + return std::make_tuple(vk::Result::eErrorOutOfDeviceMemory, vk::UniqueDeviceMemory()); + } + + bufferHeapAllocInfo.memoryTypeIndex = memoryTypeIndex; + + vk::UniqueDeviceMemory bufferHeapMemory = {}; + + if (auto allocResult = device.allocateMemoryUnique(bufferHeapAllocInfo); allocResult.result == vk::Result::eSuccess) { + bufferHeapMemory = std::move(allocResult.value); + } else { + return std::make_tuple(allocResult.result, vk::UniqueDeviceMemory()); + } + + // Assign the device memory to the bindings + for (vk::BindBufferMemoryInfo& curBind : bufferHeapBinds) { + curBind.memory = bufferHeapMemory.get(); + } + + // Now bind them all in one call + if (const vk::Result bindResult = device.bindBufferMemory2(bufferHeapBinds); bindResult == vk::Result::eSuccess) { + // Binding memory succeeded + } else { + return std::make_tuple(bindResult, vk::UniqueDeviceMemory()); + } + + return std::make_tuple(vk::Result::eSuccess, std::move(bufferHeapMemory)); + } + +} // namespace Vulkan \ No newline at end of file From e87db99a97e703bb4b581bd5b6afb47de59b91fe Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Tue, 25 Jul 2023 22:53:47 -0700 Subject: [PATCH 14/88] Remove ownership of SDL's vulkan-surface This surface is managed by SDL itself, so there is no need to keep it in a Unique handle for us to delete. Fixes the bug where vulkan crashes during shutdown. --- include/renderer_vk/renderer_vk.hpp | 2 +- src/core/renderer_vk/renderer_vk.cpp | 13 ++++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 9545a4d9..708e196d 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -10,7 +10,7 @@ class RendererVK final : public Renderer { vk::UniqueInstance instance = {}; vk::UniqueDebugUtilsMessengerEXT debugMessenger = {}; - vk::UniqueSurfaceKHR surface = {}; + vk::SurfaceKHR surface = {}; vk::PhysicalDevice physicalDevice = {}; diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 310fdec3..3161bf58 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -199,7 +199,7 @@ void RendererVK::display() { swapchainExtent.width = windowWidth; swapchainExtent.height = windowHeight; } - recreateSwapchain(surface.get(), swapchainExtent); + recreateSwapchain(surface, swapchainExtent); break; } default: { @@ -356,7 +356,7 @@ void RendererVK::display() { swapchainExtent.width = windowWidth; swapchainExtent.height = windowHeight; } - recreateSwapchain(surface.get(), swapchainExtent); + recreateSwapchain(surface, swapchainExtent); break; } default: { @@ -445,7 +445,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { // Create surface if (window) { if (VkSurfaceKHR newSurface; SDL_Vulkan_CreateSurface(window, instance.get(), &newSurface)) { - surface.reset(newSurface); + surface = newSurface; } else { Helpers::warn("Error creating Vulkan surface"); } @@ -461,8 +461,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { const auto surfaceSupport = [this](const vk::PhysicalDevice& physicalDevice) -> bool { const usize queueCount = physicalDevice.getQueueFamilyProperties().size(); for (usize queueIndex = 0; queueIndex < queueCount; ++queueIndex) { - if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueIndex, surface.get()); - supportResult.result == vk::Result::eSuccess) { + if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueIndex, surface); supportResult.result == vk::Result::eSuccess) { return supportResult.value; } } @@ -494,7 +493,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { // Get present queue family if (surface) { for (usize queueFamilyIndex = 0; queueFamilyIndex < queueFamilyProperties.size(); ++queueFamilyIndex) { - if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueFamilyIndex, surface.get()); + if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueFamilyIndex, surface); supportResult.result == vk::Result::eSuccess) { if (supportResult.value) { presentQueueFamily = queueFamilyIndex; @@ -594,7 +593,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { swapchainExtent.width = windowWidth; swapchainExtent.height = windowHeight; } - recreateSwapchain(surface.get(), swapchainExtent); + recreateSwapchain(surface, swapchainExtent); } // Create frame-buffering data From ac1f7bc521fe35f7198c6073a4f29ac7c1c7c9d5 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 27 Jul 2023 06:54:44 -0700 Subject: [PATCH 15/88] Remove dependency on C++20 ranges AppleClang does not support this unfortunately --- src/core/renderer_vk/renderer_vk.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 3161bf58..7edeb25c 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -1,7 +1,6 @@ #include "renderer_vk/renderer_vk.hpp" #include -#include #include #include @@ -677,8 +676,8 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { { const auto getImage = [](const vk::UniqueImage& image) -> vk::Image { return image.get(); }; std::vector images; - std::ranges::transform(topScreenImages, std::back_inserter(images), getImage); - std::ranges::transform(bottomScreenImages, std::back_inserter(images), getImage); + std::transform(topScreenImages.begin(), topScreenImages.end(), std::back_inserter(images), getImage); + std::transform(bottomScreenImages.begin(), bottomScreenImages.end(), std::back_inserter(images), getImage); if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, images); result == vk::Result::eSuccess) { framebufferMemory = std::move(imageMemory); From 4976671ef085ba17130a761c75cdb41ddc86fe2d Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 27 Jul 2023 06:58:33 -0700 Subject: [PATCH 16/88] Rename `vulkan_api.hpp` to `vk_api.hpp` Consistant with other vulkan header patterns. This header in particular is to configure our Vulkan API usage. --- CMakeLists.txt | 4 ++-- include/renderer_vk/renderer_vk.hpp | 2 +- include/renderer_vk/{vulkan_api.hpp => vk_api.hpp} | 0 include/renderer_vk/vk_debug.hpp | 2 +- include/renderer_vk/vk_memory.hpp | 2 +- src/core/renderer_vk/vk_api.cpp | 3 +++ src/core/renderer_vk/vulkan_api.cpp | 3 --- 7 files changed, 8 insertions(+), 8 deletions(-) rename include/renderer_vk/{vulkan_api.hpp => vk_api.hpp} (100%) create mode 100644 src/core/renderer_vk/vk_api.cpp delete mode 100644 src/core/renderer_vk/vulkan_api.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f915444c..c49fa564 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -239,11 +239,11 @@ if(ENABLE_VULKAN) ) set(RENDERER_VK_INCLUDE_FILES include/renderer_vk/renderer_vk.hpp - include/renderer_vk/vulkan_api.hpp include/renderer_vk/vk_debug.hpp include/renderer_vk/vk_memory.hpp + include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp include/renderer_vk/vk_memory.hpp ) set(RENDERER_VK_SOURCE_FILES src/core/renderer_vk/renderer_vk.cpp - src/core/renderer_vk/vulkan_api.cpp src/core/renderer_vk/vk_debug.cpp src/core/renderer_vk/vk_memory.cpp + src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp src/core/renderer_vk/vk_memory.cpp ) set(HEADER_FILES ${HEADER_FILES} ${RENDERER_VK_INCLUDE_FILES}) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 708e196d..b20c1789 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -1,5 +1,5 @@ #include "renderer.hpp" -#include "vulkan_api.hpp" +#include "vk_api.hpp" class GPU; diff --git a/include/renderer_vk/vulkan_api.hpp b/include/renderer_vk/vk_api.hpp similarity index 100% rename from include/renderer_vk/vulkan_api.hpp rename to include/renderer_vk/vk_api.hpp diff --git a/include/renderer_vk/vk_debug.hpp b/include/renderer_vk/vk_debug.hpp index afc367dc..ed712269 100644 --- a/include/renderer_vk/vk_debug.hpp +++ b/include/renderer_vk/vk_debug.hpp @@ -4,7 +4,7 @@ #include #include -#include "vulkan_api.hpp" +#include "vk_api.hpp" namespace Vulkan { diff --git a/include/renderer_vk/vk_memory.hpp b/include/renderer_vk/vk_memory.hpp index 8bf3f25d..a84a5720 100644 --- a/include/renderer_vk/vk_memory.hpp +++ b/include/renderer_vk/vk_memory.hpp @@ -5,7 +5,7 @@ #include #include "helpers.hpp" -#include "vulkan_api.hpp" +#include "vk_api.hpp" namespace Vulkan { diff --git a/src/core/renderer_vk/vk_api.cpp b/src/core/renderer_vk/vk_api.cpp new file mode 100644 index 00000000..4f879dc2 --- /dev/null +++ b/src/core/renderer_vk/vk_api.cpp @@ -0,0 +1,3 @@ +#include "renderer_vk/vk_api.hpp" + +VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE; \ No newline at end of file diff --git a/src/core/renderer_vk/vulkan_api.cpp b/src/core/renderer_vk/vulkan_api.cpp deleted file mode 100644 index c207eea7..00000000 --- a/src/core/renderer_vk/vulkan_api.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "renderer_vk/vulkan_api.hpp" - -VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE; \ No newline at end of file From d19b8cf364c8bbc1ec6dfe15effb2c8776ae8550 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 27 Jul 2023 07:32:10 -0700 Subject: [PATCH 17/88] Separate frame-work from presentation --- include/renderer_vk/renderer_vk.hpp | 2 +- src/core/renderer_vk/renderer_vk.cpp | 202 ++++++++++++++------------- 2 files changed, 103 insertions(+), 101 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index b20c1789..e7dfdf0c 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -10,7 +10,7 @@ class RendererVK final : public Renderer { vk::UniqueInstance instance = {}; vk::UniqueDebugUtilsMessengerEXT debugMessenger = {}; - vk::SurfaceKHR surface = {}; + vk::SurfaceKHR swapchainSurface = {}; vk::PhysicalDevice physicalDevice = {}; diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 7edeb25c..2c887cc8 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -167,7 +167,7 @@ RendererVK::~RendererVK() {} void RendererVK::reset() {} void RendererVK::display() { - // Block, on the CPU, to ensure that this frame-buffering-frame is ready for more work + // Block, on the CPU, to ensure that this buffered-frame is ready for more work if (auto waitResult = device->waitForFences({frameFinishedFences[frameBufferingIndex].get()}, true, std::numeric_limits::max()); waitResult != vk::Result::eSuccess) { Helpers::panic("Error waiting on swapchain fence: %s\n", vk::to_string(waitResult).c_str()); @@ -198,7 +198,7 @@ void RendererVK::display() { swapchainExtent.width = windowWidth; swapchainExtent.height = windowHeight; } - recreateSwapchain(surface, swapchainExtent); + recreateSwapchain(swapchainSurface, swapchainExtent); break; } default: { @@ -208,7 +208,7 @@ void RendererVK::display() { } } - vk::UniqueCommandBuffer& frameCommandBuffer = frameCommandBuffers.at(frameBufferingIndex); + const vk::UniqueCommandBuffer& frameCommandBuffer = frameCommandBuffers[frameBufferingIndex]; vk::CommandBufferBeginInfo beginInfo = {}; beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; @@ -217,100 +217,102 @@ void RendererVK::display() { Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); } + //// Render Frame(Simulated - just clear the images to different colors for now) { static const std::array frameScopeColor = {{1.0f, 0.0f, 1.0f, 1.0f}}; Vulkan::DebugLabelScope debugScope(frameCommandBuffer.get(), frameScopeColor, "Frame"); - if (swapchainImageIndex != swapchainImageInvalid) { - // Prepare images for color-clear - frameCommandBuffer->pipelineBarrier( - vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, - { - vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, - vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ), - vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, - vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, - topScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ), - vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, - vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, - bottomScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ), - } - ); + // Prepare images for color-clear + frameCommandBuffer->pipelineBarrier( + vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + { + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + topScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + bottomScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + } + ); + static const std::array topClearColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; + static const std::array bottomClearColor = {{0.0f, 1.0f, 0.0f, 1.0f}}; + frameCommandBuffer->clearColorImage( + topScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, topClearColor, + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ); + frameCommandBuffer->clearColorImage( + bottomScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, bottomClearColor, + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ); + } - static const std::array clearColor = {{0.0f, 0.0f, 0.0f, 1.0f}}; - frameCommandBuffer->clearColorImage( - swapchainImages[swapchainImageIndex], vk::ImageLayout::eTransferDstOptimal, clearColor, + //// Present + if (swapchainImageIndex != swapchainImageInvalid) { + static const std::array presentScopeColor = {{1.0f, 1.0f, 0.0f, 1.0f}}; + Vulkan::DebugLabelScope debugScope(frameCommandBuffer.get(), presentScopeColor, "Present"); + + // Prepare swapchain image for color-clear/blit-dst, prepare top/bottom screen for blit-src + frameCommandBuffer->pipelineBarrier( + vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + { + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + topScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + bottomScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + } + ); + + static const std::array clearColor = {{0.0f, 0.0f, 0.0f, 1.0f}}; + frameCommandBuffer->clearColorImage( + swapchainImages[swapchainImageIndex], vk::ImageLayout::eTransferDstOptimal, clearColor, + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ); + + // Blit top/bottom screen into swapchain image + + static const vk::ImageBlit topScreenBlit( + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240, 1}}, + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240, 1}} + ); + static const vk::ImageBlit bottomScreenBlit( + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{320, 240, 1}}, + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), + {vk::Offset3D{(400 / 2) - (320 / 2), 240, 0}, vk::Offset3D{(400 / 2) + (320 / 2), 240 + 240, 1}} + ); + frameCommandBuffer->blitImage( + topScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], + vk::ImageLayout::eTransferDstOptimal, {topScreenBlit}, vk::Filter::eNearest + ); + frameCommandBuffer->blitImage( + bottomScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], + vk::ImageLayout::eTransferDstOptimal, {bottomScreenBlit}, vk::Filter::eNearest + ); + + // Prepare swapchain image for present + frameCommandBuffer->pipelineBarrier( + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, + {vk::ImageMemoryBarrier( + vk::AccessFlagBits::eNone, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::ePresentSrcKHR, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ); - - //// Simulated rendering work, just clear the screens and get them ready to blit(transfer-src layout) - { - static const std::array topClearColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; - static const std::array bottomClearColor = {{0.0f, 1.0f, 0.0f, 1.0f}}; - frameCommandBuffer->clearColorImage( - topScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, topClearColor, - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ); - frameCommandBuffer->clearColorImage( - bottomScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, bottomClearColor, - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ); - frameCommandBuffer->pipelineBarrier( - vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, - { - vk::ImageMemoryBarrier( - vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eTransferDstOptimal, - vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, - topScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ), - vk::ImageMemoryBarrier( - vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eTransferDstOptimal, - vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, - bottomScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ), - } - ); - } - - // Blip top/bottom screen onto swapchain image - { - static const vk::ImageBlit topScreenBlit( - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240, 1}}, - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240, 1}} - ); - static const vk::ImageBlit bottomScreenBlit( - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{320, 240, 1}}, - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), - {vk::Offset3D{(400 / 2) - (320 / 2), 240, 0}, vk::Offset3D{(400 / 2) + (320 / 2), 240 + 240, 1}} - ); - frameCommandBuffer->blitImage( - topScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], - vk::ImageLayout::eTransferDstOptimal, {topScreenBlit}, vk::Filter::eNearest - ); - frameCommandBuffer->blitImage( - bottomScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], - vk::ImageLayout::eTransferDstOptimal, {bottomScreenBlit}, vk::Filter::eNearest - ); - } - - // Prepare for present - frameCommandBuffer->pipelineBarrier( - vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, - {vk::ImageMemoryBarrier( - vk::AccessFlagBits::eNone, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, - vk::ImageLayout::ePresentSrcKHR, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - )} - ); - } + )} + ); } if (const vk::Result endResult = frameCommandBuffer->end(); endResult != vk::Result::eSuccess) { @@ -355,7 +357,7 @@ void RendererVK::display() { swapchainExtent.width = windowWidth; swapchainExtent.height = windowHeight; } - recreateSwapchain(surface, swapchainExtent); + recreateSwapchain(swapchainSurface, swapchainExtent); break; } default: { @@ -444,7 +446,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { // Create surface if (window) { if (VkSurfaceKHR newSurface; SDL_Vulkan_CreateSurface(window, instance.get(), &newSurface)) { - surface = newSurface; + swapchainSurface = newSurface; } else { Helpers::warn("Error creating Vulkan surface"); } @@ -456,11 +458,12 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { std::vector::iterator partitionEnd = physicalDevices.end(); // Prefer GPUs that can access the surface - if (surface) { + if (swapchainSurface) { const auto surfaceSupport = [this](const vk::PhysicalDevice& physicalDevice) -> bool { const usize queueCount = physicalDevice.getQueueFamilyProperties().size(); for (usize queueIndex = 0; queueIndex < queueCount; ++queueIndex) { - if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueIndex, surface); supportResult.result == vk::Result::eSuccess) { + if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueIndex, swapchainSurface); + supportResult.result == vk::Result::eSuccess) { return supportResult.value; } } @@ -490,9 +493,9 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { const std::vector queueFamilyProperties = physicalDevice.getQueueFamilyProperties(); std::unordered_set queueFamilyRequests; // Get present queue family - if (surface) { + if (swapchainSurface) { for (usize queueFamilyIndex = 0; queueFamilyIndex < queueFamilyProperties.size(); ++queueFamilyIndex) { - if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueFamilyIndex, surface); + if (auto supportResult = physicalDevice.getSurfaceSupportKHR(queueFamilyIndex, swapchainSurface); supportResult.result == vk::Result::eSuccess) { if (supportResult.value) { presentQueueFamily = queueFamilyIndex; @@ -584,7 +587,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { } // Create swapchain - if (targetWindow && surface) { + if (targetWindow && swapchainSurface) { vk::Extent2D swapchainExtent; { int windowWidth, windowHeight; @@ -592,7 +595,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { swapchainExtent.width = windowWidth; swapchainExtent.height = windowHeight; } - recreateSwapchain(surface, swapchainExtent); + recreateSwapchain(swapchainSurface, swapchainExtent); } // Create frame-buffering data @@ -623,7 +626,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { topScreenInfo.setFormat(vk::Format::eR8G8B8A8Unorm); topScreenInfo.setExtent(vk::Extent3D(400, 240, 1)); topScreenInfo.setMipLevels(1); - topScreenInfo.setArrayLayers(2); // Two image layers, for 3D mode + topScreenInfo.setArrayLayers(1); topScreenInfo.setSamples(vk::SampleCountFlagBits::e1); topScreenInfo.setTiling(vk::ImageTiling::eOptimal); topScreenInfo.setUsage( @@ -635,7 +638,6 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { vk::ImageCreateInfo bottomScreenInfo = topScreenInfo; bottomScreenInfo.setExtent(vk::Extent3D(320, 240, 1)); - bottomScreenInfo.setArrayLayers(1); topScreenImages.resize(frameBufferingCount); bottomScreenImages.resize(frameBufferingCount); From bf8bb5d45913cc85d0b76cef65edf03c0dbece86 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 27 Jul 2023 10:05:43 -0700 Subject: [PATCH 18/88] Add `vk_pica` translation unit Intended for conversions and utils between PICA definitions and Vulkan. --- CMakeLists.txt | 2 ++ include/renderer_vk/vk_pica.hpp | 12 ++++++++++++ src/core/renderer_vk/vk_pica.cpp | 25 +++++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 include/renderer_vk/vk_pica.hpp create mode 100644 src/core/renderer_vk/vk_pica.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index c49fa564..6d15bbe9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -240,10 +240,12 @@ if(ENABLE_VULKAN) set(RENDERER_VK_INCLUDE_FILES include/renderer_vk/renderer_vk.hpp include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp include/renderer_vk/vk_memory.hpp + include/renderer_vk/vk_pica.hpp ) set(RENDERER_VK_SOURCE_FILES src/core/renderer_vk/renderer_vk.cpp src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp src/core/renderer_vk/vk_memory.cpp + src/core/renderer_vk/vk_pica.cpp ) set(HEADER_FILES ${HEADER_FILES} ${RENDERER_VK_INCLUDE_FILES}) diff --git a/include/renderer_vk/vk_pica.hpp b/include/renderer_vk/vk_pica.hpp new file mode 100644 index 00000000..affd3aa8 --- /dev/null +++ b/include/renderer_vk/vk_pica.hpp @@ -0,0 +1,12 @@ +#pragma once + +#include "PICA/gpu.hpp" +#include "helpers.hpp" +#include "vk_api.hpp" + +namespace Vulkan { + + vk::Format colorFormatToVulkan(PICA::ColorFmt colorFormat); + vk::Format depthFormatToVulkan(PICA::DepthFmt depthFormat); + +} // namespace Vulkan \ No newline at end of file diff --git a/src/core/renderer_vk/vk_pica.cpp b/src/core/renderer_vk/vk_pica.cpp new file mode 100644 index 00000000..8e72b51c --- /dev/null +++ b/src/core/renderer_vk/vk_pica.cpp @@ -0,0 +1,25 @@ +#include "renderer_vk/vk_pica.hpp" + +namespace Vulkan { + + vk::Format colorFormatToVulkan(PICA::ColorFmt colorFormat) { + switch (colorFormat) { + case PICA::ColorFmt::RGBA8: return vk::Format::eR8G8B8A8Unorm; + case PICA::ColorFmt::RGB8: return vk::Format::eR8G8B8Unorm; + case PICA::ColorFmt::RGBA5551: return vk::Format::eR5G5B5A1UnormPack16; + case PICA::ColorFmt::RGB565: return vk::Format::eR5G6B5UnormPack16; + case PICA::ColorFmt::RGBA4: return vk::Format::eR4G4B4A4UnormPack16; + } + return vk::Format::eUndefined; + } + vk::Format depthFormatToVulkan(PICA::DepthFmt depthFormat) { + switch (depthFormat) { + case PICA::DepthFmt::Depth16: return vk::Format::eD16Unorm; + case PICA::DepthFmt::Unknown1: return vk::Format::eUndefined; + case PICA::DepthFmt::Depth24: return vk::Format::eX8D24UnormPack32; + case PICA::DepthFmt::Depth24Stencil8: return vk::Format::eD24UnormS8Uint; + } + return vk::Format::eUndefined; + } + +} // namespace Vulkan \ No newline at end of file From 37902cd9d6c50a592c1653c94a552294fa5b3716 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 27 Jul 2023 10:13:53 -0700 Subject: [PATCH 19/88] Implement a renderpass cache. Technically we can generate every possible render-pass up-front based on the possible combinations of ColorFmt and DepthFmt, but we should only allocate what the game asks for. Save that pattern for pipelines. --- include/renderer_vk/renderer_vk.hpp | 7 ++++ src/core/renderer_vk/renderer_vk.cpp | 59 +++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index e7dfdf0c..700861b2 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -1,3 +1,6 @@ +#include +#include + #include "renderer.hpp" #include "vk_api.hpp" @@ -49,6 +52,10 @@ class RendererVK final : public Renderer { std::vector topScreenImages = {}; std::vector bottomScreenImages = {}; + std::map renderPassCache; + + vk::RenderPass getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat); + // Recreate the swapchain, possibly re-using the old one in the case of a resize vk::Result recreateSwapchain(vk::SurfaceKHR surface, vk::Extent2D swapchainExtent); diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 2c887cc8..05b40e43 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -8,6 +8,7 @@ #include "helpers.hpp" #include "renderer_vk/vk_debug.hpp" #include "renderer_vk/vk_memory.hpp" +#include "renderer_vk/vk_pica.hpp" // Finds the first queue family that satisfies `queueMask` and excludes `queueExcludeMask` bits // Returns -1 if not found @@ -24,6 +25,57 @@ static s32 findQueueFamily( return -1; } +vk::RenderPass RendererVK::getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat) { + u32 renderPassHash = static_cast(colorFormat); + + if (depthFormat.has_value()) { + renderPassHash |= (static_cast(depthFormat.value()) << 8); + } + + // Cache hit + if (renderPassCache.contains(renderPassHash)) { + return renderPassCache.at(renderPassHash).get(); + } + + // Cache miss + vk::RenderPassCreateInfo renderPassInfo = {}; + + std::vector renderPassAttachments = {}; + + vk::AttachmentDescription colorAttachment = {}; + colorAttachment.format = Vulkan::colorFormatToVulkan(colorFormat); + colorAttachment.samples = vk::SampleCountFlagBits::e1; + colorAttachment.loadOp = vk::AttachmentLoadOp::eLoad; + colorAttachment.storeOp = vk::AttachmentStoreOp::eStore; + colorAttachment.stencilLoadOp = vk::AttachmentLoadOp::eLoad; + colorAttachment.stencilStoreOp = vk::AttachmentStoreOp::eStore; + colorAttachment.initialLayout = vk::ImageLayout::eColorAttachmentOptimal; + colorAttachment.finalLayout = vk::ImageLayout::eColorAttachmentOptimal; + renderPassAttachments.emplace_back(colorAttachment); + + if (depthFormat.has_value()) { + vk::AttachmentDescription depthAttachment = {}; + depthAttachment.format = Vulkan::depthFormatToVulkan(depthFormat.value()); + depthAttachment.samples = vk::SampleCountFlagBits::e1; + depthAttachment.loadOp = vk::AttachmentLoadOp::eLoad; + depthAttachment.storeOp = vk::AttachmentStoreOp::eStore; + depthAttachment.stencilLoadOp = vk::AttachmentLoadOp::eLoad; + depthAttachment.stencilStoreOp = vk::AttachmentStoreOp::eStore; + depthAttachment.initialLayout = vk::ImageLayout::eDepthStencilAttachmentOptimal; + depthAttachment.finalLayout = vk::ImageLayout::eDepthStencilAttachmentOptimal; + renderPassAttachments.emplace_back(depthAttachment); + } + + renderPassInfo.setAttachments(renderPassAttachments); + + if (auto createResult = device->createRenderPassUnique(renderPassInfo); createResult.result == vk::Result::eSuccess) { + return (renderPassCache[renderPassHash] = std::move(createResult.value)).get(); + } else { + Helpers::panic("Error creating render pass: %s\n", vk::to_string(createResult.result).c_str()); + } + return {}; +} + vk::Result RendererVK::recreateSwapchain(vk::SurfaceKHR surface, vk::Extent2D swapchainExtent) { static constexpr u32 screenTextureWidth = 400; // Top screen is 400 pixels wide, bottom is 320 static constexpr u32 screenTextureHeight = 2 * 240; // Both screens are 240 pixels tall @@ -695,6 +747,11 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u void RendererVK::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) {} -void RendererVK::drawVertices(PICA::PrimType primType, std::span vertices) {} +void RendererVK::drawVertices(PICA::PrimType primType, std::span vertices) { + const u32 depthControl = regs[PICA::InternalRegs::DepthAndColorMask]; + const bool depthEnable = depthControl & 1; + + const vk::RenderPass curRenderPass = getRenderPass(colourBufferFormat, depthEnable ? std::make_optional(depthBufferFormat) : std::nullopt); +} void RendererVK::screenshot(const std::string& name) {} From bf3917f0743d207de8a82f730b37016ef21bdd83 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 27 Jul 2023 14:56:49 -0700 Subject: [PATCH 20/88] Add subpass dependencies, optional depth attachment --- src/core/renderer_vk/renderer_vk.cpp | 40 +++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 05b40e43..ea458314 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -39,6 +39,7 @@ vk::RenderPass RendererVK::getRenderPass(PICA::ColorFmt colorFormat, std::option // Cache miss vk::RenderPassCreateInfo renderPassInfo = {}; + vk::SubpassDescription subPass = {}; std::vector renderPassAttachments = {}; @@ -68,6 +69,32 @@ vk::RenderPass RendererVK::getRenderPass(PICA::ColorFmt colorFormat, std::option renderPassInfo.setAttachments(renderPassAttachments); + static const vk::AttachmentReference colorAttachmentReference = {0, vk::ImageLayout::eColorAttachmentOptimal}; + static const vk::AttachmentReference depthAttachmentReference = {1, vk::ImageLayout::eDepthStencilReadOnlyOptimal}; + + subPass.setColorAttachments(colorAttachmentReference); + if (depthFormat.has_value()) { + subPass.setPDepthStencilAttachment(&depthAttachmentReference); + } + + subPass.pipelineBindPoint = vk::PipelineBindPoint::eGraphics; + + renderPassInfo.setSubpasses(subPass); + + // We only have one sub-pass and we want all render-passes to be sequential, + // so input/output depends on VK_SUBPASS_EXTERNAL + static const vk::SubpassDependency subpassDependencies[2] = { + vk::SubpassDependency( + VK_SUBPASS_EXTERNAL, 0, vk::PipelineStageFlagBits::eAllGraphics, vk::PipelineStageFlagBits::eAllGraphics, + vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eColorAttachmentWrite, vk::DependencyFlagBits::eByRegion + ), + vk::SubpassDependency( + 0, VK_SUBPASS_EXTERNAL, vk::PipelineStageFlagBits::eAllGraphics, vk::PipelineStageFlagBits::eAllGraphics, + vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eColorAttachmentWrite, vk::DependencyFlagBits::eByRegion + )}; + + renderPassInfo.setDependencies(subpassDependencies); + if (auto createResult = device->createRenderPassUnique(renderPassInfo); createResult.result == vk::Result::eSuccess) { return (renderPassCache[renderPassHash] = std::move(createResult.value)).get(); } else { @@ -216,7 +243,7 @@ RendererVK::RendererVK(GPU& gpu, const std::array& internalRegs, co RendererVK::~RendererVK() {} -void RendererVK::reset() {} +void RendererVK::reset() { renderPassCache.clear(); } void RendererVK::display() { // Block, on the CPU, to ensure that this buffered-frame is ready for more work @@ -748,10 +775,15 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u void RendererVK::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) {} void RendererVK::drawVertices(PICA::PrimType primType, std::span vertices) { - const u32 depthControl = regs[PICA::InternalRegs::DepthAndColorMask]; - const bool depthEnable = depthControl & 1; + using namespace Helpers; - const vk::RenderPass curRenderPass = getRenderPass(colourBufferFormat, depthEnable ? std::make_optional(depthBufferFormat) : std::nullopt); + const u32 depthControl = regs[PICA::InternalRegs::DepthAndColorMask]; + const bool depthTestEnable = depthControl & 1; + const bool depthWriteEnable = getBit<12>(depthControl); + const int depthFunc = getBits<4, 3>(depthControl); + const vk::ColorComponentFlags colorMask = vk::ColorComponentFlags(getBits<8, 4>(depthControl)); + + const vk::RenderPass curRenderPass = getRenderPass(colourBufferFormat, depthTestEnable ? std::make_optional(depthBufferFormat) : std::nullopt); } void RendererVK::screenshot(const std::string& name) {} From a36ee0025fb8c3dc4347b09f507bc2d4f0cff88c Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 27 Jul 2023 21:57:43 -0700 Subject: [PATCH 21/88] Disable present queue when present unavailable. --- src/core/renderer_vk/renderer_vk.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index ea458314..61f3186a 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -650,7 +650,9 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { // Initialize device-specific function pointers VULKAN_HPP_DEFAULT_DISPATCHER.init(device.get()); - presentQueue = device->getQueue(presentQueueFamily, 0); + if (presentQueueFamily != VK_QUEUE_FAMILY_IGNORED) { + presentQueue = device->getQueue(presentQueueFamily, 0); + } graphicsQueue = device->getQueue(graphicsQueueFamily, 0); computeQueue = device->getQueue(computeQueueFamily, 0); transferQueue = device->getQueue(transferQueueFamily, 0); From 6dcd09af3e33d612543f0ff38af072f1db34d1a5 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 27 Jul 2023 22:16:02 -0700 Subject: [PATCH 22/88] Implement basic color/depth render-texture cache --- include/renderer_vk/renderer_vk.hpp | 12 ++ src/core/renderer_vk/renderer_vk.cpp | 159 ++++++++++++++++++++++++++- 2 files changed, 170 insertions(+), 1 deletion(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 700861b2..fa349148 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -48,6 +48,18 @@ class RendererVK final : public Renderer { std::vector swapImageFreeSemaphore = {}; std::vector renderFinishedSemaphore = {}; std::vector frameFinishedFences = {}; + struct Texture { + vk::UniqueImage image; + vk::UniqueDeviceMemory imageMemory; + vk::UniqueImageView imageView; + }; + std::map textureCache; + + static u32 colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format); + static u32 depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format); + + Texture& getColorRenderTexture(); + Texture& getDepthRenderTexture(); std::vector topScreenImages = {}; std::vector bottomScreenImages = {}; diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 61f3186a..f255eb0b 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -25,6 +25,124 @@ static s32 findQueueFamily( return -1; } +u32 RendererVK::colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format) { + return std::rotl(loc, 17) ^ std::rotr(size, 23) ^ (static_cast(format) << 60); +} +u32 RendererVK::depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format) { + return std::rotl(loc, 17) ^ std::rotr(size, 29) ^ (static_cast(format) << 60); +} + +RendererVK::Texture& RendererVK::getColorRenderTexture() { + const u32 renderTextureHash = + colorBufferHash(colourBufferLoc, fbSize[0] * fbSize[1] * PICA::sizePerPixel(colourBufferFormat), colourBufferFormat); + + // Cache hit + if (textureCache.contains(renderTextureHash)) { + return textureCache.at(renderTextureHash); + } + + // Cache miss + Texture& newTexture = textureCache[renderTextureHash]; + + vk::ImageCreateInfo textureInfo = {}; + textureInfo.setImageType(vk::ImageType::e2D); + textureInfo.setFormat(Vulkan::colorFormatToVulkan(colourBufferFormat)); + textureInfo.setExtent(vk::Extent3D(fbSize[0], fbSize[1], 1)); + textureInfo.setMipLevels(1); + textureInfo.setArrayLayers(1); + textureInfo.setSamples(vk::SampleCountFlagBits::e1); + textureInfo.setTiling(vk::ImageTiling::eOptimal); + textureInfo.setUsage( + vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eInputAttachment | vk::ImageUsageFlagBits::eTransferSrc | + vk::ImageUsageFlagBits::eTransferDst + ); + textureInfo.setSharingMode(vk::SharingMode::eExclusive); + textureInfo.setInitialLayout(vk::ImageLayout::eUndefined); + + if (auto createResult = device->createImageUnique(textureInfo); createResult.result == vk::Result::eSuccess) { + newTexture.image = std::move(createResult.value); + } else { + Helpers::panic("Error creating color render-texture image: %s\n", vk::to_string(createResult.result).c_str()); + } + + vk::ImageViewCreateInfo viewInfo = {}; + viewInfo.image = newTexture.image.get(); + viewInfo.viewType = vk::ImageViewType::e2D; + viewInfo.format = Vulkan::colorFormatToVulkan(colourBufferFormat); + viewInfo.components = vk::ComponentMapping(); + viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1); + + if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, {&newTexture.image.get(), 1}); + result == vk::Result::eSuccess) { + newTexture.imageMemory = std::move(imageMemory); + } else { + Helpers::panic("Error allocating color render-texture memory: %s\n", vk::to_string(result).c_str()); + } + + if (auto createResult = device->createImageViewUnique(viewInfo); createResult.result == vk::Result::eSuccess) { + newTexture.imageView = std::move(createResult.value); + } else { + Helpers::panic("Error creating color render-texture: %s\n", vk::to_string(createResult.result).c_str()); + } + + return newTexture; +} + +RendererVK::Texture& RendererVK::getDepthRenderTexture() { + const u32 renderTextureHash = depthBufferHash(depthBufferLoc, fbSize[0] * fbSize[1] * PICA::sizePerPixel(depthBufferFormat), depthBufferFormat); + + // Cache hit + if (textureCache.contains(renderTextureHash)) { + return textureCache.at(renderTextureHash); + } + + // Cache miss + Texture& newTexture = textureCache[renderTextureHash]; + + vk::ImageCreateInfo textureInfo = {}; + textureInfo.setImageType(vk::ImageType::e2D); + textureInfo.setFormat(Vulkan::depthFormatToVulkan(depthBufferFormat)); + textureInfo.setExtent(vk::Extent3D(fbSize[0], fbSize[1], 1)); + textureInfo.setMipLevels(1); + textureInfo.setArrayLayers(1); + textureInfo.setSamples(vk::SampleCountFlagBits::e1); + textureInfo.setTiling(vk::ImageTiling::eOptimal); + textureInfo.setUsage( + vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eInputAttachment | vk::ImageUsageFlagBits::eTransferSrc | + vk::ImageUsageFlagBits::eTransferDst + ); + textureInfo.setSharingMode(vk::SharingMode::eExclusive); + textureInfo.setInitialLayout(vk::ImageLayout::eUndefined); + + if (auto createResult = device->createImageUnique(textureInfo); createResult.result == vk::Result::eSuccess) { + newTexture.image = std::move(createResult.value); + } else { + Helpers::panic("Error creating depth render-texture image: %s\n", vk::to_string(createResult.result).c_str()); + } + + vk::ImageViewCreateInfo viewInfo = {}; + viewInfo.image = newTexture.image.get(); + viewInfo.viewType = vk::ImageViewType::e2D; + viewInfo.format = Vulkan::depthFormatToVulkan(depthBufferFormat); + viewInfo.components = vk::ComponentMapping(); + viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth, 0, 1, 0, 1); + + if (auto createResult = device->createImageViewUnique(viewInfo); createResult.result == vk::Result::eSuccess) { + newTexture.imageView = std::move(createResult.value); + } else { + Helpers::panic("Error creating depth render-texture: %s\n", vk::to_string(createResult.result).c_str()); + } + + if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, {&newTexture.image.get(), 1}); + result == vk::Result::eSuccess) { + newTexture.imageMemory = std::move(imageMemory); + } else { + Helpers::panic("Error allocating depth render-texture memory: %s\n", vk::to_string(result).c_str()); + } + + return newTexture; +} + vk::RenderPass RendererVK::getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat) { u32 renderPassHash = static_cast(colorFormat); @@ -739,7 +857,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { if (auto createResult = device->createFenceUnique(fenceInfo); createResult.result == vk::Result::eSuccess) { frameFinishedFences[i] = std::move(createResult.value); } else { - Helpers::panic("Error creating 'present-ready' semaphore: %s\n", vk::to_string(createResult.result).c_str()); + Helpers::panic("Error creating 'frame-finished' fence: %s\n", vk::to_string(createResult.result).c_str()); } if (auto createResult = device->createImageUnique(topScreenInfo); createResult.result == vk::Result::eSuccess) { @@ -786,6 +904,45 @@ void RendererVK::drawVertices(PICA::PrimType primType, std::span(depthControl)); const vk::RenderPass curRenderPass = getRenderPass(colourBufferFormat, depthTestEnable ? std::make_optional(depthBufferFormat) : std::nullopt); + + // Create framebuffer, find a way to cache this! + vk::Framebuffer curFramebuffer = {}; + { + std::vector renderTargets; + + const auto& colorTexture = getColorRenderTexture(); + renderTargets.emplace_back(colorTexture.imageView.get()); + + if (depthTestEnable) { + const auto& depthTexture = getDepthRenderTexture(); + renderTargets.emplace_back(depthTexture.imageView.get()); + } + + vk::FramebufferCreateInfo framebufferInfo = {}; + framebufferInfo.setRenderPass(curRenderPass); + framebufferInfo.setAttachments(renderTargets); + framebufferInfo.setWidth(fbSize[0]); + framebufferInfo.setHeight(fbSize[1]); + framebufferInfo.setLayers(1); + if (auto createResult = device->createFramebufferUnique(framebufferInfo); createResult.result == vk::Result::eSuccess) { + curFramebuffer = (frameFramebuffers[frameBufferingIndex].emplace_back(std::move(createResult.value))).get(); + } else { + Helpers::panic("Error creating render-texture framebuffer: %s\n", vk::to_string(createResult.result).c_str()); + } + } + + vk::RenderPassBeginInfo renderBeginInfo = {}; + renderBeginInfo.renderPass = curRenderPass; + static const vk::ClearValue ClearColors[] = { + vk::ClearColorValue(std::array{0.0f, 0.0f, 0.0f, 0.0f}), + vk::ClearDepthStencilValue(1.0f, 0), + vk::ClearColorValue(std::array{0.0f, 0.0f, 0.0f, 0.0f}), + }; + renderBeginInfo.pClearValues = ClearColors; + renderBeginInfo.clearValueCount = std::size(ClearColors); + renderBeginInfo.renderArea.extent.width = fbSize[0]; + renderBeginInfo.renderArea.extent.height = fbSize[1]; + renderBeginInfo.framebuffer = curFramebuffer; } void RendererVK::screenshot(const std::string& name) {} From 27268f86d35848bc69d3a699f646388832457a3b Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Fri, 11 Aug 2023 18:40:47 -0700 Subject: [PATCH 23/88] Fix instance-extension iteration Add the extensions when they are available rather than statically including them. --- src/core/renderer_vk/renderer_vk.cpp | 34 +++++++++++++++++++--------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index f255eb0b..ef64bd5c 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -587,12 +587,30 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { instanceInfo.pApplicationInfo = &applicationInfo; - std::vector instanceExtensions = { + std::unordered_set instanceExtensionsAvailable = {}; + if (const auto enumerateResult = vk::enumerateInstanceExtensionProperties(); enumerateResult.result == vk::Result::eSuccess) { + for (const auto& curExtension : enumerateResult.value) { + instanceExtensionsAvailable.emplace(curExtension.extensionName); + } + } + + std::vector instanceExtensions = {}; + + if (instanceExtensionsAvailable.contains(VK_KHR_SURFACE_EXTENSION_NAME)) { + instanceExtensions.emplace_back(VK_KHR_SURFACE_EXTENSION_NAME); + } + + bool debugUtils = false; + if (instanceExtensionsAvailable.contains(VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) { + instanceExtensions.emplace_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); + debugUtils = true; + } + #if defined(__APPLE__) - VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME, + if (instanceExtensionsAvailable.contains(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)) { + instanceExtensionNames.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); + } #endif - VK_EXT_DEBUG_UTILS_EXTENSION_NAME, - }; // Get any additional extensions that SDL wants as well if (targetWindow) { @@ -620,13 +638,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { VULKAN_HPP_DEFAULT_DISPATCHER.init(instance.get()); // Enable debug messenger if the instance was able to be created with debug_utils - if (std::find( - instanceExtensions.begin(), instanceExtensions.end(), - // std::string_view has a way to compare itself to `const char*` - // so by casting it, we get the actual string comparisons - // and not pointer-comparisons - std::string_view(VK_EXT_DEBUG_UTILS_EXTENSION_NAME) - ) != instanceExtensions.end()) { + if (debugUtils) { vk::DebugUtilsMessengerCreateInfoEXT debugCreateInfo{}; debugCreateInfo.messageSeverity = vk::DebugUtilsMessageSeverityFlagBitsEXT::eVerbose | vk::DebugUtilsMessageSeverityFlagBitsEXT::eInfo | vk::DebugUtilsMessageSeverityFlagBitsEXT::eError | vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning; From 50029e13333bddfd49b14cd0cac0946c5381da15 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Fri, 11 Aug 2023 23:07:12 -0700 Subject: [PATCH 24/88] Avoid usage of D24-S8 format This support is not supported on `radv`. Vulkan mandates D16 only and a combination of Depth and Depth-Stencil types only. --- src/core/renderer_vk/vk_pica.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/core/renderer_vk/vk_pica.cpp b/src/core/renderer_vk/vk_pica.cpp index 8e72b51c..33aca623 100644 --- a/src/core/renderer_vk/vk_pica.cpp +++ b/src/core/renderer_vk/vk_pica.cpp @@ -14,10 +14,20 @@ namespace Vulkan { } vk::Format depthFormatToVulkan(PICA::DepthFmt depthFormat) { switch (depthFormat) { + // VK_FORMAT_D16_UNORM is mandated by the vulkan specification case PICA::DepthFmt::Depth16: return vk::Format::eD16Unorm; case PICA::DepthFmt::Unknown1: return vk::Format::eUndefined; - case PICA::DepthFmt::Depth24: return vk::Format::eX8D24UnormPack32; - case PICA::DepthFmt::Depth24Stencil8: return vk::Format::eD24UnormS8Uint; + // The GPU may _not_ support these formats natively + // Only one of: + // VK_FORMAT_X8_D24_UNORM_PACK32 and VK_FORMAT_D32_SFLOAT + // and one of: + // VK_FORMAT_D24_UNORM_S8_UINT and VK_FORMAT_D32_SFLOAT_S8_UINT + // will be supported + // TODO: Detect this! + // case PICA::DepthFmt::Depth24: return vk::Format::eX8D24UnormPack32; + // case PICA::DepthFmt::Depth24Stencil8: return vk::Format::eD24UnormS8Uint; + case PICA::DepthFmt::Depth24: return vk::Format::eD32Sfloat; + case PICA::DepthFmt::Depth24Stencil8: return vk::Format::eD32SfloatS8Uint; } return vk::Format::eUndefined; } From c778c34433f03c0f2d283ec766f4a32f9e0c5eed Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sat, 12 Aug 2023 18:23:29 -0700 Subject: [PATCH 25/88] Separate present/graphics workloads Separate the "Display" texture from the cache of framebuffer textures, move present/graphics into separate command buffers. --- include/renderer_vk/renderer_vk.hpp | 13 +- src/core/renderer_vk/renderer_vk.cpp | 253 +++++++++++++++++++-------- 2 files changed, 192 insertions(+), 74 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index fa349148..b9ada4a9 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -44,15 +44,21 @@ class RendererVK final : public Renderer { // Frame-buffering data // Each vector is `frameBufferingCount` in size - std::vector frameCommandBuffers = {}; + std::vector framePresentCommandBuffers = {}; std::vector swapImageFreeSemaphore = {}; std::vector renderFinishedSemaphore = {}; std::vector frameFinishedFences = {}; + std::vector> frameFramebuffers = {}; + std::vector frameGraphicsCommandBuffers = {}; + + // Todo: + // Use `{colourBuffer,depthBuffer}Loc` to maintain an std::map-cache of framebuffers struct Texture { vk::UniqueImage image; vk::UniqueDeviceMemory imageMemory; vk::UniqueImageView imageView; }; + // Hash(loc, size, format) -> Texture std::map textureCache; static u32 colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format); @@ -61,8 +67,9 @@ class RendererVK final : public Renderer { Texture& getColorRenderTexture(); Texture& getDepthRenderTexture(); - std::vector topScreenImages = {}; - std::vector bottomScreenImages = {}; + // Use `lower_bound` to find nearest texture for an address + // Blit them during `display()` + std::vector screenTexture = {}; std::map renderPassCache; diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index ef64bd5c..246ac6b4 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -108,7 +108,7 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture() { textureInfo.setSamples(vk::SampleCountFlagBits::e1); textureInfo.setTiling(vk::ImageTiling::eOptimal); textureInfo.setUsage( - vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eInputAttachment | vk::ImageUsageFlagBits::eTransferSrc | + vk::ImageUsageFlagBits::eDepthStencilAttachment | vk::ImageUsageFlagBits::eInputAttachment | vk::ImageUsageFlagBits::eTransferSrc | vk::ImageUsageFlagBits::eTransferDst ); textureInfo.setSharingMode(vk::SharingMode::eExclusive); @@ -125,7 +125,7 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture() { viewInfo.viewType = vk::ImageViewType::e2D; viewInfo.format = Vulkan::depthFormatToVulkan(depthBufferFormat); viewInfo.components = vk::ComponentMapping(); - viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth, 0, 1, 0, 1); + viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1); if (auto createResult = device->createImageViewUnique(viewInfo); createResult.result == vk::Result::eSuccess) { newTexture.imageView = std::move(createResult.value); @@ -364,12 +364,6 @@ RendererVK::~RendererVK() {} void RendererVK::reset() { renderPassCache.clear(); } void RendererVK::display() { - // Block, on the CPU, to ensure that this buffered-frame is ready for more work - if (auto waitResult = device->waitForFences({frameFinishedFences[frameBufferingIndex].get()}, true, std::numeric_limits::max()); - waitResult != vk::Result::eSuccess) { - Helpers::panic("Error waiting on swapchain fence: %s\n", vk::to_string(waitResult).c_str()); - } - // Get the next available swapchain image, and signal the semaphore when it's ready static constexpr u32 swapchainImageInvalid = std::numeric_limits::max(); u32 swapchainImageIndex = swapchainImageInvalid; @@ -405,7 +399,11 @@ void RendererVK::display() { } } - const vk::UniqueCommandBuffer& frameCommandBuffer = frameCommandBuffers[frameBufferingIndex]; + if (const vk::Result endResult = frameGraphicsCommandBuffers[frameBufferingIndex]->end(); endResult != vk::Result::eSuccess) { + Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); + } + + const vk::UniqueCommandBuffer& frameCommandBuffer = framePresentCommandBuffers[frameBufferingIndex]; vk::CommandBufferBeginInfo beginInfo = {}; beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; @@ -426,24 +424,15 @@ void RendererVK::display() { { vk::ImageMemoryBarrier( vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, - vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, - topScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ), - vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, - vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, - bottomScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), } ); static const std::array topClearColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; static const std::array bottomClearColor = {{0.0f, 1.0f, 0.0f, 1.0f}}; frameCommandBuffer->clearColorImage( - topScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, topClearColor, - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ); - frameCommandBuffer->clearColorImage( - bottomScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, bottomClearColor, + screenTexture[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, topClearColor, vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ); } @@ -464,13 +453,8 @@ void RendererVK::display() { ), vk::ImageMemoryBarrier( vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eTransferDstOptimal, - vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, - topScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ), - vk::ImageMemoryBarrier( - vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eTransferDstOptimal, - vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, - bottomScreenImages[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), } ); @@ -483,22 +467,13 @@ void RendererVK::display() { // Blit top/bottom screen into swapchain image - static const vk::ImageBlit topScreenBlit( - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240, 1}}, - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240, 1}} - ); - static const vk::ImageBlit bottomScreenBlit( - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{320, 240, 1}}, - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), - {vk::Offset3D{(400 / 2) - (320 / 2), 240, 0}, vk::Offset3D{(400 / 2) + (320 / 2), 240 + 240, 1}} + static const vk::ImageBlit screenBlit( + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240 * 2, 1}}, + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240 * 2, 1}} ); frameCommandBuffer->blitImage( - topScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], - vk::ImageLayout::eTransferDstOptimal, {topScreenBlit}, vk::Filter::eNearest - ); - frameCommandBuffer->blitImage( - bottomScreenImages[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], - vk::ImageLayout::eTransferDstOptimal, {bottomScreenBlit}, vk::Filter::eNearest + screenTexture[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], + vk::ImageLayout::eTransferDstOptimal, {screenBlit}, vk::Filter::eNearest ); // Prepare swapchain image for present @@ -565,6 +540,27 @@ void RendererVK::display() { } frameBufferingIndex = ((frameBufferingIndex + 1) % frameBufferingCount); + + // Wait for next frame to be ready + + // Block, on the CPU, to ensure that this buffered-frame is ready for more work + if (auto waitResult = device->waitForFences({frameFinishedFences[frameBufferingIndex].get()}, true, std::numeric_limits::max()); + waitResult != vk::Result::eSuccess) { + Helpers::panic("Error waiting on swapchain fence: %s\n", vk::to_string(waitResult).c_str()); + } + + { + frameFramebuffers[frameBufferingIndex].clear(); + + frameGraphicsCommandBuffers[frameBufferingIndex]->reset(); + + vk::CommandBufferBeginInfo beginInfo = {}; + beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; + + if (const vk::Result beginResult = frameGraphicsCommandBuffers[frameBufferingIndex]->begin(beginInfo); beginResult != vk::Result::eSuccess) { + Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); + } + } } void RendererVK::initGraphicsContext(SDL_Window* window) { @@ -608,7 +604,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { #if defined(__APPLE__) if (instanceExtensionsAvailable.contains(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME)) { - instanceExtensionNames.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); + instanceExtensions.emplace_back(VK_KHR_PORTABILITY_ENUMERATION_EXTENSION_NAME); } #endif @@ -817,11 +813,25 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { commandBuffersInfo.commandBufferCount = frameBufferingCount; if (auto allocateResult = device->allocateCommandBuffersUnique(commandBuffersInfo); allocateResult.result == vk::Result::eSuccess) { - frameCommandBuffers = std::move(allocateResult.value); + framePresentCommandBuffers = std::move(allocateResult.value); } else { Helpers::panic("Error allocating command buffer: %s\n", vk::to_string(allocateResult.result).c_str()); } + if (auto allocateResult = device->allocateCommandBuffersUnique(commandBuffersInfo); allocateResult.result == vk::Result::eSuccess) { + frameGraphicsCommandBuffers = std::move(allocateResult.value); + } else { + Helpers::panic("Error allocating command buffer: %s\n", vk::to_string(allocateResult.result).c_str()); + } + + vk::CommandBufferBeginInfo beginInfo = {}; + beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; + for (const auto& graphicsCommandBuffer : frameGraphicsCommandBuffers) { + if (const vk::Result beginResult = graphicsCommandBuffer->begin(beginInfo); beginResult != vk::Result::eSuccess) { + Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); + } + } + // Frame-buffering synchronization primitives vk::FenceCreateInfo fenceInfo = {}; fenceInfo.flags = vk::FenceCreateFlagBits::eSignaled; @@ -831,27 +841,25 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { swapImageFreeSemaphore.resize(frameBufferingCount); renderFinishedSemaphore.resize(frameBufferingCount); frameFinishedFences.resize(frameBufferingCount); + frameFramebuffers.resize(frameBufferingCount); + frameGraphicsCommandBuffers.resize(frameBufferingCount); - vk::ImageCreateInfo topScreenInfo = {}; - topScreenInfo.setImageType(vk::ImageType::e2D); - topScreenInfo.setFormat(vk::Format::eR8G8B8A8Unorm); - topScreenInfo.setExtent(vk::Extent3D(400, 240, 1)); - topScreenInfo.setMipLevels(1); - topScreenInfo.setArrayLayers(1); - topScreenInfo.setSamples(vk::SampleCountFlagBits::e1); - topScreenInfo.setTiling(vk::ImageTiling::eOptimal); - topScreenInfo.setUsage( + vk::ImageCreateInfo screenTextureInfo = {}; + screenTextureInfo.setImageType(vk::ImageType::e2D); + screenTextureInfo.setFormat(vk::Format::eR8G8B8A8Unorm); + screenTextureInfo.setExtent(vk::Extent3D(400, 240, 1)); + screenTextureInfo.setMipLevels(1); + screenTextureInfo.setArrayLayers(1); + screenTextureInfo.setSamples(vk::SampleCountFlagBits::e1); + screenTextureInfo.setTiling(vk::ImageTiling::eOptimal); + screenTextureInfo.setUsage( vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eInputAttachment | vk::ImageUsageFlagBits::eTransferSrc | vk::ImageUsageFlagBits::eTransferDst ); - topScreenInfo.setSharingMode(vk::SharingMode::eExclusive); - topScreenInfo.setInitialLayout(vk::ImageLayout::eUndefined); + screenTextureInfo.setSharingMode(vk::SharingMode::eExclusive); + screenTextureInfo.setInitialLayout(vk::ImageLayout::eUndefined); - vk::ImageCreateInfo bottomScreenInfo = topScreenInfo; - bottomScreenInfo.setExtent(vk::Extent3D(320, 240, 1)); - - topScreenImages.resize(frameBufferingCount); - bottomScreenImages.resize(frameBufferingCount); + screenTexture.resize(frameBufferingCount); for (usize i = 0; i < frameBufferingCount; i++) { if (auto createResult = device->createSemaphoreUnique(semaphoreInfo); createResult.result == vk::Result::eSuccess) { @@ -872,25 +880,18 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { Helpers::panic("Error creating 'frame-finished' fence: %s\n", vk::to_string(createResult.result).c_str()); } - if (auto createResult = device->createImageUnique(topScreenInfo); createResult.result == vk::Result::eSuccess) { - topScreenImages[i] = std::move(createResult.value); + if (auto createResult = device->createImageUnique(screenTextureInfo); createResult.result == vk::Result::eSuccess) { + screenTexture[i] = std::move(createResult.value); } else { Helpers::panic("Error creating top-screen image: %s\n", vk::to_string(createResult.result).c_str()); } - - if (auto createResult = device->createImageUnique(bottomScreenInfo); createResult.result == vk::Result::eSuccess) { - bottomScreenImages[i] = std::move(createResult.value); - } else { - Helpers::panic("Error creating bottom-screen image: %s\n", vk::to_string(createResult.result).c_str()); - } } // Commit memory to all of our images { const auto getImage = [](const vk::UniqueImage& image) -> vk::Image { return image.get(); }; std::vector images; - std::transform(topScreenImages.begin(), topScreenImages.end(), std::back_inserter(images), getImage); - std::transform(bottomScreenImages.begin(), bottomScreenImages.end(), std::back_inserter(images), getImage); + std::transform(screenTexture.begin(), screenTexture.end(), std::back_inserter(images), getImage); if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, images); result == vk::Result::eSuccess) { framebufferMemory = std::move(imageMemory); @@ -902,7 +903,112 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) {} -void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) {} +void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) { + return; + if (fbSize[0] == 0 || fbSize[1] == 0) { + return; + } + const u32 inputWidth = inputSize & 0xffff; + const u32 inputGap = inputSize >> 16; + + const u32 outputWidth = outputSize & 0xffff; + const u32 outputGap = outputSize >> 16; + + Texture& colorTexture = getColorRenderTexture(); + + vk::ImageBlit blitRegion = {}; + // Hack: Detect whether we are writing to the top or bottom screen by checking output gap and drawing to the proper part of the output texture + // We consider output gap == 320 to mean bottom, and anything else to mean top + if (outputGap == 320) { + // Bottom screen + blitRegion = vk::ImageBlit( + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{0, 0, 0}, vk::Offset3D{320, 240, 1}}, + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{40, 240, 0}, vk::Offset3D{40 + 320, 240 + 240, 1}} + ); + } else { + // Top screen + blitRegion = vk::ImageBlit( + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{0, 0, 0}, vk::Offset3D{400, 240, 1}}, + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{0, 0, 0}, vk::Offset3D{400, 240, 1}} + ); + } + + vk::CommandBufferAllocateInfo commandBuffersInfo = {}; + commandBuffersInfo.commandPool = commandPool.get(); + commandBuffersInfo.level = vk::CommandBufferLevel::ePrimary; + commandBuffersInfo.commandBufferCount = 1; + + vk::UniqueCommandBuffer blitCommandBuffer = {}; + if (auto allocateResult = device->allocateCommandBuffersUnique(commandBuffersInfo); allocateResult.result == vk::Result::eSuccess) { + blitCommandBuffer = std::move(allocateResult.value[0]); + } else { + Helpers::panic("Error allocating command buffer: %s\n", vk::to_string(allocateResult.result).c_str()); + } + + vk::CommandBufferBeginInfo beginInfo = {}; + beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; + + if (const vk::Result beginResult = blitCommandBuffer->begin(beginInfo); beginResult != vk::Result::eSuccess) { + Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); + } + + blitCommandBuffer->pipelineBarrier( + vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + { + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eColorAttachmentOptimal, + vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, colorTexture.image.get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eColorAttachmentOptimal, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + } + ); + + blitCommandBuffer->blitImage( + colorTexture.image.get(), vk::ImageLayout::eTransferSrcOptimal, screenTexture[frameBufferingIndex].get(), + vk::ImageLayout::eTransferDstOptimal, {blitRegion}, vk::Filter::eNearest + ); + + if (const vk::Result endResult = frameGraphicsCommandBuffers[frameBufferingIndex]->end(); endResult != vk::Result::eSuccess) { + Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); + } + + blitCommandBuffer->pipelineBarrier( + vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + { + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferRead, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferSrcOptimal, + vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, colorTexture.image.get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + } + ); + + vk::FenceCreateInfo fenceInfo = {}; + vk::UniqueFence finishedFence = {}; + if (auto createResult = device->createFenceUnique(fenceInfo); createResult.result == vk::Result::eSuccess) { + finishedFence = std::move(createResult.value); + } else { + Helpers::panic("Error creating fence: %s\n", vk::to_string(createResult.result).c_str()); + } + + vk::SubmitInfo submitInfo = {}; + + submitInfo.setCommandBuffers(blitCommandBuffer.get()); + + if (const vk::Result submitResult = graphicsQueue.submit({submitInfo}, finishedFence.get()); submitResult != vk::Result::eSuccess) { + Helpers::panic("Error submitting to graphics queue: %s\n", vk::to_string(submitResult).c_str()); + } +} void RendererVK::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) {} @@ -955,6 +1061,11 @@ void RendererVK::drawVertices(PICA::PrimType primType, std::spanbeginRenderPass(renderBeginInfo, vk::SubpassContents::eInline); + commandBuffer->endRenderPass(); } void RendererVK::screenshot(const std::string& name) {} From cb64c52d2fd332df58fc2fc74af559dbb41ebbc4 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Tue, 15 Aug 2023 11:19:12 -0700 Subject: [PATCH 26/88] Use inline `rotl`/`ror` Fixes apple-clang builds, which do not implement a lot of the `bit` header. --- src/core/renderer_vk/renderer_vk.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 246ac6b4..5de3d534 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -25,11 +25,14 @@ static s32 findQueueFamily( return -1; } +static u32 rotl32(u32 x, u32 n) { return (x << n) | (x >> (32 - n)); } +static u32 ror32(u32 x, u32 n) { return (x >> n) | (x << (32 - n)); } + u32 RendererVK::colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format) { - return std::rotl(loc, 17) ^ std::rotr(size, 23) ^ (static_cast(format) << 60); + return rotl32(loc, 17) ^ ror32(size, 23) ^ (static_cast(format) << 60); } u32 RendererVK::depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format) { - return std::rotl(loc, 17) ^ std::rotr(size, 29) ^ (static_cast(format) << 60); + return rotl32(loc, 17) ^ ror32(size, 29) ^ (static_cast(format) << 60); } RendererVK::Texture& RendererVK::getColorRenderTexture() { From f62f1bf9b269419c53d91591650475ee2c49c474 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Tue, 15 Aug 2023 13:22:51 -0700 Subject: [PATCH 27/88] Fix ambiguous extension name conversion --- src/core/renderer_vk/renderer_vk.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 5de3d534..b7653393 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -589,7 +589,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { std::unordered_set instanceExtensionsAvailable = {}; if (const auto enumerateResult = vk::enumerateInstanceExtensionProperties(); enumerateResult.result == vk::Result::eSuccess) { for (const auto& curExtension : enumerateResult.value) { - instanceExtensionsAvailable.emplace(curExtension.extensionName); + instanceExtensionsAvailable.emplace(curExtension.extensionName.data()); } } From 97b6b7f1223cd03534070c455b9b10aff73a48b5 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Wed, 16 Aug 2023 21:11:25 -0700 Subject: [PATCH 28/88] Add Vulkan Host-Shader compilation Compiles Vulkan Host shaders into spirv binary files and embeds them into the application's virtual file-system. --- CMakeLists.txt | 22 +++++++++++++++++++++- src/host_shaders/vulkan_display.frag | 7 +++++++ src/host_shaders/vulkan_display.vert | 23 +++++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/host_shaders/vulkan_display.frag create mode 100644 src/host_shaders/vulkan_display.vert diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d15bbe9..81f3a1eb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -251,10 +251,30 @@ if(ENABLE_VULKAN) set(HEADER_FILES ${HEADER_FILES} ${RENDERER_VK_INCLUDE_FILES}) source_group("Source Files\\Core\\Vulkan Renderer" FILES ${RENDERER_VK_SOURCE_FILES}) + + set(RENDERER_VK_HOST_SHADERS_SOURCE + "src/host_shaders/vulkan_display.frag" + "src/host_shaders/vulkan_display.vert" + ) + +foreach( HOST_SHADER_SOURCE ${RENDERER_VK_HOST_SHADERS_SOURCE} ) + get_filename_component( FILE_NAME ${HOST_SHADER_SOURCE} NAME ) + set( HOST_SHADER_SPIRV "${PROJECT_BINARY_DIR}/host_shaders/${FILE_NAME}.spv" ) + add_custom_command( + OUTPUT ${HOST_SHADER_SPIRV} + COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/host_shaders/" + COMMAND Vulkan::glslangValidator -t --target-env vulkan1.1 -g -V "${PROJECT_SOURCE_DIR}/${HOST_SHADER_SOURCE}" -o ${HOST_SHADER_SPIRV} + #COMMAND ${SPIRV_OPT} -O ${HOST_SHADER_SPIRV} -o ${HOST_SHADER_SPIRV} + DEPENDS ${HOST_SHADER_SOURCE} + ) + list( APPEND RENDERER_VK_HOST_SHADERS_SPIRV ${HOST_SHADER_SPIRV} ) +endforeach() + cmrc_add_resource_library( resources_renderer_vk NAMESPACE RendererVK - WHENCE "src/host_shaders/" + WHENCE "${PROJECT_BINARY_DIR}/host_shaders/" + ${RENDERER_VK_HOST_SHADERS_SPIRV} ) endif() diff --git a/src/host_shaders/vulkan_display.frag b/src/host_shaders/vulkan_display.frag new file mode 100644 index 00000000..1b6bd937 --- /dev/null +++ b/src/host_shaders/vulkan_display.frag @@ -0,0 +1,7 @@ +#version 460 core +layout(location = 0) in vec2 UV; +layout(location = 0) out vec4 FragColor; + +layout(binding = 0) uniform sampler2D u_texture; + +void main() { FragColor = texture(u_texture, UV); } \ No newline at end of file diff --git a/src/host_shaders/vulkan_display.vert b/src/host_shaders/vulkan_display.vert new file mode 100644 index 00000000..766b8d0c --- /dev/null +++ b/src/host_shaders/vulkan_display.vert @@ -0,0 +1,23 @@ +#version 460 core +layout(location = 0) out vec2 UV; + +void main() { + const vec4 positions[4] = vec4[]( + vec4(-1.0, 1.0, 1.0, 1.0), // Top-left + vec4(1.0, 1.0, 1.0, 1.0), // Top-right + vec4(-1.0, -1.0, 1.0, 1.0), // Bottom-left + vec4(1.0, -1.0, 1.0, 1.0) // Bottom-right + ); + + // The 3DS displays both screens' framebuffer rotated 90 deg counter clockwise + // So we adjust our texcoords accordingly + const vec2 texcoords[4] = vec2[]( + vec2(1.0, 1.0), // Top-right + vec2(1.0, 0.0), // Bottom-right + vec2(0.0, 1.0), // Top-left + vec2(0.0, 0.0) // Bottom-left + ); + + gl_Position = positions[gl_VertexIndex]; + UV = texcoords[gl_VertexIndex]; +} \ No newline at end of file From 9e2781e87459c2e24fc9187c1cedd4d2e6d4340e Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Wed, 16 Aug 2023 22:36:25 -0700 Subject: [PATCH 29/88] Refactor render-texture cache Implement `displayTransfer` in parity with the OpenGL renderer. Allow arguments to `get{Color,Depth}RenderTexture`. --- include/renderer_vk/renderer_vk.hpp | 23 +++-- src/core/renderer_vk/renderer_vk.cpp | 143 +++++++++++++++++---------- 2 files changed, 109 insertions(+), 57 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index b9ada4a9..b7ff779b 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -1,6 +1,7 @@ #include #include +#include "math_util.hpp" #include "renderer.hpp" #include "vk_api.hpp" @@ -40,8 +41,6 @@ class RendererVK final : public Renderer { // Todo: make this a configuration option static constexpr usize frameBufferingCount = 3; - vk::UniqueDeviceMemory framebufferMemory = {}; - // Frame-buffering data // Each vector is `frameBufferingCount` in size std::vector framePresentCommandBuffers = {}; @@ -54,9 +53,21 @@ class RendererVK final : public Renderer { // Todo: // Use `{colourBuffer,depthBuffer}Loc` to maintain an std::map-cache of framebuffers struct Texture { + u32 loc = 0; + u32 sizePerPixel = 0; + std::array size = {}; + vk::UniqueImage image; vk::UniqueDeviceMemory imageMemory; vk::UniqueImageView imageView; + + Math::Rect getSubRect(u32 inputAddress, u32 width, u32 height) { + // PICA textures have top-left origin, same as Vulkan + const u32 startOffset = (inputAddress - loc) / sizePerPixel; + const u32 x0 = (startOffset % (size[0] * 8)) / 8; + const u32 y0 = (startOffset / (size[0] * 8)) * 8; + return Math::Rect{x0, y0, x0 + width, y0 + height}; + } }; // Hash(loc, size, format) -> Texture std::map textureCache; @@ -64,12 +75,12 @@ class RendererVK final : public Renderer { static u32 colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format); static u32 depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format); - Texture& getColorRenderTexture(); - Texture& getDepthRenderTexture(); + Texture& getColorRenderTexture(u32 addr, PICA::ColorFmt format, u32 width, u32 height); + Texture& getDepthRenderTexture(u32 addr, PICA::DepthFmt format, u32 width, u32 height); - // Use `lower_bound` to find nearest texture for an address - // Blit them during `display()` + // Framebuffer for the top/bottom image std::vector screenTexture = {}; + vk::UniqueDeviceMemory framebufferMemory = {}; std::map renderPassCache; diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index b7653393..4b40cac1 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -35,9 +35,8 @@ u32 RendererVK::depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format) { return rotl32(loc, 17) ^ ror32(size, 29) ^ (static_cast(format) << 60); } -RendererVK::Texture& RendererVK::getColorRenderTexture() { - const u32 renderTextureHash = - colorBufferHash(colourBufferLoc, fbSize[0] * fbSize[1] * PICA::sizePerPixel(colourBufferFormat), colourBufferFormat); +RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt format, u32 width, u32 height) { + const u32 renderTextureHash = colorBufferHash(addr, width * height * PICA::sizePerPixel(format), format); // Cache hit if (textureCache.contains(renderTextureHash)) { @@ -46,11 +45,14 @@ RendererVK::Texture& RendererVK::getColorRenderTexture() { // Cache miss Texture& newTexture = textureCache[renderTextureHash]; + newTexture.loc = addr; + newTexture.sizePerPixel = PICA::sizePerPixel(format); + newTexture.size = fbSize; vk::ImageCreateInfo textureInfo = {}; textureInfo.setImageType(vk::ImageType::e2D); - textureInfo.setFormat(Vulkan::colorFormatToVulkan(colourBufferFormat)); - textureInfo.setExtent(vk::Extent3D(fbSize[0], fbSize[1], 1)); + textureInfo.setFormat(Vulkan::colorFormatToVulkan(format)); + textureInfo.setExtent(vk::Extent3D(width, height, 1)); textureInfo.setMipLevels(1); textureInfo.setArrayLayers(1); textureInfo.setSamples(vk::SampleCountFlagBits::e1); @@ -71,7 +73,7 @@ RendererVK::Texture& RendererVK::getColorRenderTexture() { vk::ImageViewCreateInfo viewInfo = {}; viewInfo.image = newTexture.image.get(); viewInfo.viewType = vk::ImageViewType::e2D; - viewInfo.format = Vulkan::colorFormatToVulkan(colourBufferFormat); + viewInfo.format = textureInfo.format; viewInfo.components = vk::ComponentMapping(); viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1); @@ -91,8 +93,8 @@ RendererVK::Texture& RendererVK::getColorRenderTexture() { return newTexture; } -RendererVK::Texture& RendererVK::getDepthRenderTexture() { - const u32 renderTextureHash = depthBufferHash(depthBufferLoc, fbSize[0] * fbSize[1] * PICA::sizePerPixel(depthBufferFormat), depthBufferFormat); +RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt format, u32 width, u32 height) { + const u32 renderTextureHash = depthBufferHash(addr, width * height * PICA::sizePerPixel(format), format); // Cache hit if (textureCache.contains(renderTextureHash)) { @@ -101,11 +103,14 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture() { // Cache miss Texture& newTexture = textureCache[renderTextureHash]; + newTexture.loc = addr; + newTexture.sizePerPixel = PICA::sizePerPixel(format); + newTexture.size = fbSize; vk::ImageCreateInfo textureInfo = {}; textureInfo.setImageType(vk::ImageType::e2D); - textureInfo.setFormat(Vulkan::depthFormatToVulkan(depthBufferFormat)); - textureInfo.setExtent(vk::Extent3D(fbSize[0], fbSize[1], 1)); + textureInfo.setFormat(Vulkan::depthFormatToVulkan(format)); + textureInfo.setExtent(vk::Extent3D(width, height, 1)); textureInfo.setMipLevels(1); textureInfo.setArrayLayers(1); textureInfo.setSamples(vk::SampleCountFlagBits::e1); @@ -126,16 +131,10 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture() { vk::ImageViewCreateInfo viewInfo = {}; viewInfo.image = newTexture.image.get(); viewInfo.viewType = vk::ImageViewType::e2D; - viewInfo.format = Vulkan::depthFormatToVulkan(depthBufferFormat); + viewInfo.format = textureInfo.format; viewInfo.components = vk::ComponentMapping(); viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1); - if (auto createResult = device->createImageViewUnique(viewInfo); createResult.result == vk::Result::eSuccess) { - newTexture.imageView = std::move(createResult.value); - } else { - Helpers::panic("Error creating depth render-texture: %s\n", vk::to_string(createResult.result).c_str()); - } - if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, {&newTexture.image.get(), 1}); result == vk::Result::eSuccess) { newTexture.imageMemory = std::move(imageMemory); @@ -143,6 +142,12 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture() { Helpers::panic("Error allocating depth render-texture memory: %s\n", vk::to_string(result).c_str()); } + if (auto createResult = device->createImageViewUnique(viewInfo); createResult.result == vk::Result::eSuccess) { + newTexture.imageView = std::move(createResult.value); + } else { + Helpers::panic("Error creating depth render-texture: %s\n", vk::to_string(createResult.result).c_str()); + } + return newTexture; } @@ -270,7 +275,7 @@ vk::Result RendererVK::recreateSwapchain(vk::SurfaceKHR surface, vk::Extent2D sw // Fifo support is required by all vulkan implementations, waits for vsync vk::PresentModeKHR swapchainPresentMode = vk::PresentModeKHR::eFifo; if (auto getResult = physicalDevice.getSurfacePresentModesKHR(surface); getResult.result == vk::Result::eSuccess) { - std::vector& presentModes = getResult.value; + const std::vector& presentModes = getResult.value; // Use mailbox if available, lowest-latency vsync-enabled mode if (std::find(presentModes.begin(), presentModes.end(), vk::PresentModeKHR::eMailbox) != presentModes.end()) { @@ -415,6 +420,13 @@ void RendererVK::display() { Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); } + const bool topActiveFb = externalRegs[PICA::ExternalRegs::Framebuffer0Select] & 1; + const u32 topScreenAddr = externalRegs[topActiveFb ? PICA::ExternalRegs::Framebuffer0AFirstAddr : PICA::ExternalRegs::Framebuffer0ASecondAddr]; + + const bool bottomActiveFb = externalRegs[PICA::ExternalRegs::Framebuffer1Select] & 1; + const u32 bottomScreenAddr = + externalRegs[bottomActiveFb ? PICA::ExternalRegs::Framebuffer1AFirstAddr : PICA::ExternalRegs::Framebuffer1ASecondAddr]; + //// Render Frame(Simulated - just clear the images to different colors for now) { static const std::array frameScopeColor = {{1.0f, 0.0f, 1.0f, 1.0f}}; @@ -850,7 +862,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { vk::ImageCreateInfo screenTextureInfo = {}; screenTextureInfo.setImageType(vk::ImageType::e2D); screenTextureInfo.setFormat(vk::Format::eR8G8B8A8Unorm); - screenTextureInfo.setExtent(vk::Extent3D(400, 240, 1)); + screenTextureInfo.setExtent(vk::Extent3D(400, 240 * 2, 1)); screenTextureInfo.setMipLevels(1); screenTextureInfo.setArrayLayers(1); screenTextureInfo.setSamples(vk::SampleCountFlagBits::e1); @@ -906,36 +918,56 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) {} +// NOTE: The GPU format has RGB5551 and RGB655 swapped compared to internal regs format +static PICA::ColorFmt ToColorFmt(u32 format) { + switch (format) { + case 2: return PICA::ColorFmt::RGB565; + case 3: return PICA::ColorFmt::RGBA5551; + default: return static_cast(format); + } +} + void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u32 outputSize, u32 flags) { - return; - if (fbSize[0] == 0 || fbSize[1] == 0) { - return; - } const u32 inputWidth = inputSize & 0xffff; - const u32 inputGap = inputSize >> 16; + const u32 inputHeight = inputSize >> 16; + const PICA::ColorFmt inputFormat = ToColorFmt(Helpers::getBits<8, 3>(flags)); + const PICA::ColorFmt outputFormat = ToColorFmt(Helpers::getBits<12, 3>(flags)); + const bool verticalFlip = flags & 1; + const PICA::Scaling scaling = static_cast(Helpers::getBits<24, 2>(flags)); - const u32 outputWidth = outputSize & 0xffff; - const u32 outputGap = outputSize >> 16; + u32 outputWidth = outputSize & 0xffff; + u32 outputHeight = outputSize >> 16; - Texture& colorTexture = getColorRenderTexture(); + Texture& srcFramebuffer = getColorRenderTexture(inputAddr, inputFormat, inputWidth, inputHeight); + Math::Rect srcRect = srcFramebuffer.getSubRect(inputAddr, outputWidth, outputHeight); - vk::ImageBlit blitRegion = {}; - // Hack: Detect whether we are writing to the top or bottom screen by checking output gap and drawing to the proper part of the output texture - // We consider output gap == 320 to mean bottom, and anything else to mean top - if (outputGap == 320) { - // Bottom screen - blitRegion = vk::ImageBlit( - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{0, 0, 0}, vk::Offset3D{320, 240, 1}}, - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{40, 240, 0}, vk::Offset3D{40 + 320, 240 + 240, 1}} - ); - } else { - // Top screen - blitRegion = vk::ImageBlit( - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{0, 0, 0}, vk::Offset3D{400, 240, 1}}, - vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{0, 0, 0}, vk::Offset3D{400, 240, 1}} - ); + if (verticalFlip) { + std::swap(srcRect.bottom, srcRect.top); } + // Apply scaling for the destination rectangle. + if (scaling == PICA::Scaling::X || scaling == PICA::Scaling::XY) { + outputWidth >>= 1; + } + + if (scaling == PICA::Scaling::XY) { + outputHeight >>= 1; + } + + Texture& destFramebuffer = getColorRenderTexture(outputAddr, outputFormat, outputWidth, outputHeight); + Math::Rect destRect = destFramebuffer.getSubRect(outputAddr, outputWidth, outputHeight); + + if (inputWidth != outputWidth) { + // Helpers::warn("Strided display transfer is not handled correctly!\n"); + } + + const vk::ImageBlit blitRegion( + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), + {vk::Offset3D{(int)srcRect.left, (int)srcRect.top, 0}, vk::Offset3D{(int)srcRect.right, (int)srcRect.bottom, 1}}, + vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), + {vk::Offset3D{(int)destRect.left, (int)destRect.top, 0}, vk::Offset3D{(int)destRect.right, (int)destRect.bottom, 1}} + ); + vk::CommandBufferAllocateInfo commandBuffersInfo = {}; commandBuffersInfo.commandPool = commandPool.get(); commandBuffersInfo.level = vk::CommandBufferLevel::ePrimary; @@ -960,20 +992,20 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u { vk::ImageMemoryBarrier( vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eColorAttachmentOptimal, - vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, colorTexture.image.get(), + vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, srcFramebuffer.image.get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), vk::ImageMemoryBarrier( vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eColorAttachmentOptimal, - vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, destFramebuffer.image.get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), } ); blitCommandBuffer->blitImage( - colorTexture.image.get(), vk::ImageLayout::eTransferSrcOptimal, screenTexture[frameBufferingIndex].get(), - vk::ImageLayout::eTransferDstOptimal, {blitRegion}, vk::Filter::eNearest + srcFramebuffer.image.get(), vk::ImageLayout::eTransferSrcOptimal, destFramebuffer.image.get(), vk::ImageLayout::eTransferDstOptimal, + {blitRegion}, vk::Filter::eLinear ); if (const vk::Result endResult = frameGraphicsCommandBuffers[frameBufferingIndex]->end(); endResult != vk::Result::eSuccess) { @@ -981,21 +1013,25 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u } blitCommandBuffer->pipelineBarrier( - vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, { vk::ImageMemoryBarrier( vk::AccessFlagBits::eTransferRead, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferSrcOptimal, - vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, colorTexture.image.get(), + vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, srcFramebuffer.image.get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), vk::ImageMemoryBarrier( vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, - vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), + vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, destFramebuffer.image.get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), } ); + if (const vk::Result endResult = blitCommandBuffer->end(); endResult != vk::Result::eSuccess) { + Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); + } + vk::FenceCreateInfo fenceInfo = {}; vk::UniqueFence finishedFence = {}; if (auto createResult = device->createFenceUnique(fenceInfo); createResult.result == vk::Result::eSuccess) { @@ -1011,6 +1047,11 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u if (const vk::Result submitResult = graphicsQueue.submit({submitInfo}, finishedFence.get()); submitResult != vk::Result::eSuccess) { Helpers::panic("Error submitting to graphics queue: %s\n", vk::to_string(submitResult).c_str()); } + + // Block, on the CPU, to ensure that this buffered-frame is ready for more work + if (auto waitResult = device->waitForFences({finishedFence.get()}, true, std::numeric_limits::max()); waitResult != vk::Result::eSuccess) { + Helpers::panic("Error waiting on swapchain fence: %s\n", vk::to_string(waitResult).c_str()); + } } void RendererVK::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) {} @@ -1031,11 +1072,11 @@ void RendererVK::drawVertices(PICA::PrimType primType, std::span renderTargets; - const auto& colorTexture = getColorRenderTexture(); + const auto& colorTexture = getColorRenderTexture(colourBufferLoc, colourBufferFormat, fbSize[0], fbSize[1]); renderTargets.emplace_back(colorTexture.imageView.get()); if (depthTestEnable) { - const auto& depthTexture = getDepthRenderTexture(); + const auto& depthTexture = getDepthRenderTexture(depthBufferLoc, depthBufferFormat, fbSize[0], fbSize[1]); renderTargets.emplace_back(depthTexture.imageView.get()); } From cb8c53e0b87a64d356b9fbab02dc0afe2bf68dbf Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Wed, 16 Aug 2023 22:52:44 -0700 Subject: [PATCH 30/88] Map RGB8 to RGBA8 RGB8 is not supported by drivers like RADV. Instead, we map it to RGBA8. RGBA8 is mandated to be supported by the vulkan spec. --- src/core/renderer_vk/vk_pica.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/core/renderer_vk/vk_pica.cpp b/src/core/renderer_vk/vk_pica.cpp index 33aca623..e7fc9033 100644 --- a/src/core/renderer_vk/vk_pica.cpp +++ b/src/core/renderer_vk/vk_pica.cpp @@ -5,7 +5,11 @@ namespace Vulkan { vk::Format colorFormatToVulkan(PICA::ColorFmt colorFormat) { switch (colorFormat) { case PICA::ColorFmt::RGBA8: return vk::Format::eR8G8B8A8Unorm; - case PICA::ColorFmt::RGB8: return vk::Format::eR8G8B8Unorm; + // VK_FORMAT_R8G8B8A8_UNORM is mandated by the vulkan specification + // VK_FORMAT_R8G8B8_UNORM may not be supported + // TODO: Detect this! + // case PICA::ColorFmt::RGB8: return vk::Format::eR8G8B8Unorm; + case PICA::ColorFmt::RGB8: return vk::Format::eR8G8B8A8Unorm; case PICA::ColorFmt::RGBA5551: return vk::Format::eR5G5B5A1UnormPack16; case PICA::ColorFmt::RGB565: return vk::Format::eR5G6B5UnormPack16; case PICA::ColorFmt::RGBA4: return vk::Format::eR4G4B4A4UnormPack16; From 52ddaae2215e235e9e5b5aa07121946b993905ab Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 17 Aug 2023 20:14:10 -0700 Subject: [PATCH 31/88] Add `getCurrentCommandBuffer` for all frame workloads Rather than allocating new command buffers for each small task, schedule all work onto the frame's main command buffer to be dispatched at display-time. Fixes all layout transition and synchronization issues. --- include/renderer_vk/renderer_vk.hpp | 2 + src/core/renderer_vk/renderer_vk.cpp | 72 +++++++--------------------- 2 files changed, 19 insertions(+), 55 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index b7ff779b..36b7d429 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -50,6 +50,8 @@ class RendererVK final : public Renderer { std::vector> frameFramebuffers = {}; std::vector frameGraphicsCommandBuffers = {}; + const vk::CommandBuffer& getCurrentCommandBuffer() const { return frameGraphicsCommandBuffers[frameBufferingIndex].get(); } + // Todo: // Use `{colourBuffer,depthBuffer}Loc` to maintain an std::map-cache of framebuffers struct Texture { diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 4b40cac1..430e9a7e 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -407,7 +407,7 @@ void RendererVK::display() { } } - if (const vk::Result endResult = frameGraphicsCommandBuffers[frameBufferingIndex]->end(); endResult != vk::Result::eSuccess) { + if (const vk::Result endResult = getCurrentCommandBuffer().end(); endResult != vk::Result::eSuccess) { Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); } @@ -554,6 +554,7 @@ void RendererVK::display() { } } + // We are now working on the next frame frameBufferingIndex = ((frameBufferingIndex + 1) % frameBufferingCount); // Wait for next frame to be ready @@ -567,12 +568,12 @@ void RendererVK::display() { { frameFramebuffers[frameBufferingIndex].clear(); - frameGraphicsCommandBuffers[frameBufferingIndex]->reset(); + getCurrentCommandBuffer().reset(); vk::CommandBufferBeginInfo beginInfo = {}; beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; - if (const vk::Result beginResult = frameGraphicsCommandBuffers[frameBufferingIndex]->begin(beginInfo); beginResult != vk::Result::eSuccess) { + if (const vk::Result beginResult = getCurrentCommandBuffer().begin(beginInfo); beginResult != vk::Result::eSuccess) { Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); } } @@ -968,26 +969,16 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u {vk::Offset3D{(int)destRect.left, (int)destRect.top, 0}, vk::Offset3D{(int)destRect.right, (int)destRect.bottom, 1}} ); - vk::CommandBufferAllocateInfo commandBuffersInfo = {}; - commandBuffersInfo.commandPool = commandPool.get(); - commandBuffersInfo.level = vk::CommandBufferLevel::ePrimary; - commandBuffersInfo.commandBufferCount = 1; + const vk::CommandBuffer& blitCommandBuffer = getCurrentCommandBuffer(); - vk::UniqueCommandBuffer blitCommandBuffer = {}; - if (auto allocateResult = device->allocateCommandBuffersUnique(commandBuffersInfo); allocateResult.result == vk::Result::eSuccess) { - blitCommandBuffer = std::move(allocateResult.value[0]); - } else { - Helpers::panic("Error allocating command buffer: %s\n", vk::to_string(allocateResult.result).c_str()); - } + static const std::array displayTransferColor = {{1.0f, 1.0f, 0.0f, 1.0f}}; + Vulkan::DebugLabelScope scope( + blitCommandBuffer, displayTransferColor, + "DisplayTransfer inputAddr 0x%08X outputAddr 0x%08X inputWidth %d outputWidth %d inputHeight %d outputHeight %d", inputAddr, outputAddr, + inputWidth, outputWidth, inputHeight, outputHeight + ); - vk::CommandBufferBeginInfo beginInfo = {}; - beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; - - if (const vk::Result beginResult = blitCommandBuffer->begin(beginInfo); beginResult != vk::Result::eSuccess) { - Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); - } - - blitCommandBuffer->pipelineBarrier( + blitCommandBuffer.pipelineBarrier( vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, { vk::ImageMemoryBarrier( @@ -1003,16 +994,12 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u } ); - blitCommandBuffer->blitImage( + blitCommandBuffer.blitImage( srcFramebuffer.image.get(), vk::ImageLayout::eTransferSrcOptimal, destFramebuffer.image.get(), vk::ImageLayout::eTransferDstOptimal, {blitRegion}, vk::Filter::eLinear ); - if (const vk::Result endResult = frameGraphicsCommandBuffers[frameBufferingIndex]->end(); endResult != vk::Result::eSuccess) { - Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); - } - - blitCommandBuffer->pipelineBarrier( + blitCommandBuffer.pipelineBarrier( vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, { vk::ImageMemoryBarrier( @@ -1027,31 +1014,6 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u ), } ); - - if (const vk::Result endResult = blitCommandBuffer->end(); endResult != vk::Result::eSuccess) { - Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); - } - - vk::FenceCreateInfo fenceInfo = {}; - vk::UniqueFence finishedFence = {}; - if (auto createResult = device->createFenceUnique(fenceInfo); createResult.result == vk::Result::eSuccess) { - finishedFence = std::move(createResult.value); - } else { - Helpers::panic("Error creating fence: %s\n", vk::to_string(createResult.result).c_str()); - } - - vk::SubmitInfo submitInfo = {}; - - submitInfo.setCommandBuffers(blitCommandBuffer.get()); - - if (const vk::Result submitResult = graphicsQueue.submit({submitInfo}, finishedFence.get()); submitResult != vk::Result::eSuccess) { - Helpers::panic("Error submitting to graphics queue: %s\n", vk::to_string(submitResult).c_str()); - } - - // Block, on the CPU, to ensure that this buffered-frame is ready for more work - if (auto waitResult = device->waitForFences({finishedFence.get()}, true, std::numeric_limits::max()); waitResult != vk::Result::eSuccess) { - Helpers::panic("Error waiting on swapchain fence: %s\n", vk::to_string(waitResult).c_str()); - } } void RendererVK::textureCopy(u32 inputAddr, u32 outputAddr, u32 totalBytes, u32 inputSize, u32 outputSize, u32 flags) {} @@ -1106,10 +1068,10 @@ void RendererVK::drawVertices(PICA::PrimType primType, std::spanbeginRenderPass(renderBeginInfo, vk::SubpassContents::eInline); - commandBuffer->endRenderPass(); + commandBuffer.beginRenderPass(renderBeginInfo, vk::SubpassContents::eInline); + commandBuffer.endRenderPass(); } void RendererVK::screenshot(const std::string& name) {} From 6052abe551606cdcca994193722c53d2251bcb06 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 17 Aug 2023 21:23:19 -0700 Subject: [PATCH 32/88] Fix swapchain synchronization issues While we wait on the CPU-side fence for these command buffers, we must also wait on the GPU-side semaphore to be compliant to validation layers synchronization. We still get an error on the very first frame since it will wait for a semaphore that has nothing signaling it. --- src/core/renderer_vk/renderer_vk.cpp | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 430e9a7e..d889c683 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -508,10 +508,23 @@ void RendererVK::display() { vk::SubmitInfo submitInfo = {}; // Wait for any previous uses of the image image to finish presenting - if (swapchainImageIndex != swapchainImageInvalid) { - submitInfo.setWaitSemaphores(swapImageFreeSemaphore[frameBufferingIndex].get()); - static const vk::PipelineStageFlags waitStageMask = vk::PipelineStageFlagBits::eColorAttachmentOutput; - submitInfo.setWaitDstStageMask(waitStageMask); + std::vector waitSemaphores; + std::vector waitSemaphoreStages; + { + if (swapchainImageIndex != swapchainImageInvalid) { + waitSemaphores.emplace_back(swapImageFreeSemaphore[frameBufferingIndex].get()); + static const vk::PipelineStageFlags waitStageMask = vk::PipelineStageFlagBits::eColorAttachmentOutput; + waitSemaphoreStages.emplace_back(waitStageMask); + } + + // Ensure a proper semaphore wait on render-finished + // We already wait on the fence, but this must be done to be compliant + // to validation layers + waitSemaphores.emplace_back(renderFinishedSemaphore[frameBufferingIndex].get()); + waitSemaphoreStages.emplace_back(vk::PipelineStageFlagBits::eColorAttachmentOutput); + + submitInfo.setWaitSemaphores(waitSemaphores); + submitInfo.setWaitDstStageMask(waitSemaphoreStages); } // Signal when finished submitInfo.setSignalSemaphores(renderFinishedSemaphore[frameBufferingIndex].get()); @@ -880,12 +893,16 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { for (usize i = 0; i < frameBufferingCount; i++) { if (auto createResult = device->createSemaphoreUnique(semaphoreInfo); createResult.result == vk::Result::eSuccess) { swapImageFreeSemaphore[i] = std::move(createResult.value); + + Vulkan::setObjectName(device.get(), swapImageFreeSemaphore[i].get(), "swapImageFreeSemaphore#%zu", i); } else { Helpers::panic("Error creating 'present-ready' semaphore: %s\n", vk::to_string(createResult.result).c_str()); } if (auto createResult = device->createSemaphoreUnique(semaphoreInfo); createResult.result == vk::Result::eSuccess) { renderFinishedSemaphore[i] = std::move(createResult.value); + + Vulkan::setObjectName(device.get(), renderFinishedSemaphore[i].get(), "renderFinishedSemaphore#%zu", i); } else { Helpers::panic("Error creating 'post-render' semaphore: %s\n", vk::to_string(createResult.result).c_str()); } From d4b75deaf8a2aa48bb255a5c3d1b980f2fa7118d Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 17 Aug 2023 22:29:40 -0700 Subject: [PATCH 33/88] Remove separate presentation/graphics command buffers Now there is just one primary command buffer where all work is enqueued into. At the end of the frame, the next frame's CPU-side fence is waited on before resetting and beginning its command buffer again for recording. This command buffer must always be in the RECORDING state. --- include/renderer_vk/renderer_vk.hpp | 5 ++- src/core/renderer_vk/renderer_vk.cpp | 51 +++++++++------------------- 2 files changed, 18 insertions(+), 38 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 36b7d429..e0d932a9 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -43,14 +43,13 @@ class RendererVK final : public Renderer { // Frame-buffering data // Each vector is `frameBufferingCount` in size - std::vector framePresentCommandBuffers = {}; std::vector swapImageFreeSemaphore = {}; std::vector renderFinishedSemaphore = {}; std::vector frameFinishedFences = {}; std::vector> frameFramebuffers = {}; - std::vector frameGraphicsCommandBuffers = {}; + std::vector frameCommandBuffers = {}; - const vk::CommandBuffer& getCurrentCommandBuffer() const { return frameGraphicsCommandBuffers[frameBufferingIndex].get(); } + const vk::CommandBuffer& getCurrentCommandBuffer() const { return frameCommandBuffers[frameBufferingIndex].get(); } // Todo: // Use `{colourBuffer,depthBuffer}Loc` to maintain an std::map-cache of framebuffers diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index d889c683..f4dadf8f 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -407,19 +407,6 @@ void RendererVK::display() { } } - if (const vk::Result endResult = getCurrentCommandBuffer().end(); endResult != vk::Result::eSuccess) { - Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); - } - - const vk::UniqueCommandBuffer& frameCommandBuffer = framePresentCommandBuffers[frameBufferingIndex]; - - vk::CommandBufferBeginInfo beginInfo = {}; - beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; - - if (const vk::Result beginResult = frameCommandBuffer->begin(beginInfo); beginResult != vk::Result::eSuccess) { - Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); - } - const bool topActiveFb = externalRegs[PICA::ExternalRegs::Framebuffer0Select] & 1; const u32 topScreenAddr = externalRegs[topActiveFb ? PICA::ExternalRegs::Framebuffer0AFirstAddr : PICA::ExternalRegs::Framebuffer0ASecondAddr]; @@ -431,10 +418,10 @@ void RendererVK::display() { { static const std::array frameScopeColor = {{1.0f, 0.0f, 1.0f, 1.0f}}; - Vulkan::DebugLabelScope debugScope(frameCommandBuffer.get(), frameScopeColor, "Frame"); + Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), frameScopeColor, "Frame"); // Prepare images for color-clear - frameCommandBuffer->pipelineBarrier( + getCurrentCommandBuffer().pipelineBarrier( vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, { vk::ImageMemoryBarrier( @@ -446,7 +433,7 @@ void RendererVK::display() { ); static const std::array topClearColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; static const std::array bottomClearColor = {{0.0f, 1.0f, 0.0f, 1.0f}}; - frameCommandBuffer->clearColorImage( + getCurrentCommandBuffer().clearColorImage( screenTexture[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, topClearColor, vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ); @@ -455,10 +442,10 @@ void RendererVK::display() { //// Present if (swapchainImageIndex != swapchainImageInvalid) { static const std::array presentScopeColor = {{1.0f, 1.0f, 0.0f, 1.0f}}; - Vulkan::DebugLabelScope debugScope(frameCommandBuffer.get(), presentScopeColor, "Present"); + Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), presentScopeColor, "Present"); // Prepare swapchain image for color-clear/blit-dst, prepare top/bottom screen for blit-src - frameCommandBuffer->pipelineBarrier( + getCurrentCommandBuffer().pipelineBarrier( vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, { vk::ImageMemoryBarrier( @@ -475,7 +462,7 @@ void RendererVK::display() { ); static const std::array clearColor = {{0.0f, 0.0f, 0.0f, 1.0f}}; - frameCommandBuffer->clearColorImage( + getCurrentCommandBuffer().clearColorImage( swapchainImages[swapchainImageIndex], vk::ImageLayout::eTransferDstOptimal, clearColor, vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ); @@ -486,13 +473,13 @@ void RendererVK::display() { vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240 * 2, 1}}, vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240 * 2, 1}} ); - frameCommandBuffer->blitImage( + getCurrentCommandBuffer().blitImage( screenTexture[frameBufferingIndex].get(), vk::ImageLayout::eTransferSrcOptimal, swapchainImages[swapchainImageIndex], vk::ImageLayout::eTransferDstOptimal, {screenBlit}, vk::Filter::eNearest ); // Prepare swapchain image for present - frameCommandBuffer->pipelineBarrier( + getCurrentCommandBuffer().pipelineBarrier( vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, {vk::ImageMemoryBarrier( vk::AccessFlagBits::eNone, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, @@ -502,7 +489,7 @@ void RendererVK::display() { ); } - if (const vk::Result endResult = frameCommandBuffer->end(); endResult != vk::Result::eSuccess) { + if (const vk::Result endResult = getCurrentCommandBuffer().end(); endResult != vk::Result::eSuccess) { Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); } @@ -529,7 +516,7 @@ void RendererVK::display() { // Signal when finished submitInfo.setSignalSemaphores(renderFinishedSemaphore[frameBufferingIndex].get()); - submitInfo.setCommandBuffers(frameCommandBuffer.get()); + submitInfo.setCommandBuffers(getCurrentCommandBuffer()); device->resetFences({frameFinishedFences[frameBufferingIndex].get()}); @@ -842,23 +829,17 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { commandBuffersInfo.commandBufferCount = frameBufferingCount; if (auto allocateResult = device->allocateCommandBuffersUnique(commandBuffersInfo); allocateResult.result == vk::Result::eSuccess) { - framePresentCommandBuffers = std::move(allocateResult.value); - } else { - Helpers::panic("Error allocating command buffer: %s\n", vk::to_string(allocateResult.result).c_str()); - } - - if (auto allocateResult = device->allocateCommandBuffersUnique(commandBuffersInfo); allocateResult.result == vk::Result::eSuccess) { - frameGraphicsCommandBuffers = std::move(allocateResult.value); + frameCommandBuffers = std::move(allocateResult.value); } else { Helpers::panic("Error allocating command buffer: %s\n", vk::to_string(allocateResult.result).c_str()); } + // Initialize the first command buffer to be in the RECORDING state vk::CommandBufferBeginInfo beginInfo = {}; beginInfo.flags = vk::CommandBufferUsageFlagBits::eSimultaneousUse; - for (const auto& graphicsCommandBuffer : frameGraphicsCommandBuffers) { - if (const vk::Result beginResult = graphicsCommandBuffer->begin(beginInfo); beginResult != vk::Result::eSuccess) { - Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); - } + + if (const vk::Result beginResult = frameCommandBuffers[frameBufferingIndex]->begin(beginInfo); beginResult != vk::Result::eSuccess) { + Helpers::panic("Error beginning command buffer recording: %s\n", vk::to_string(beginResult).c_str()); } // Frame-buffering synchronization primitives @@ -871,7 +852,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { renderFinishedSemaphore.resize(frameBufferingCount); frameFinishedFences.resize(frameBufferingCount); frameFramebuffers.resize(frameBufferingCount); - frameGraphicsCommandBuffers.resize(frameBufferingCount); + frameCommandBuffers.resize(frameBufferingCount); vk::ImageCreateInfo screenTextureInfo = {}; screenTextureInfo.setImageType(vk::ImageType::e2D); From 4b193c8d6ba8e76e1fd4b9a545b8d786019edb8a Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 00:26:27 -0700 Subject: [PATCH 34/88] Add general purpose vulkan render cache Takes in a general `vk::Format` rather than PICA-types --- include/renderer_vk/renderer_vk.hpp | 3 ++- src/core/renderer_vk/renderer_vk.cpp | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index e0d932a9..98e00c53 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -83,8 +83,9 @@ class RendererVK final : public Renderer { std::vector screenTexture = {}; vk::UniqueDeviceMemory framebufferMemory = {}; - std::map renderPassCache; + std::map renderPassCache; + vk::RenderPass getRenderPass(vk::Format colorFormat, std::optional depthFormat); vk::RenderPass getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat); // Recreate the swapchain, possibly re-using the old one in the case of a resize diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index f4dadf8f..c53d820d 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -151,11 +151,11 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt return newTexture; } -vk::RenderPass RendererVK::getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat) { - u32 renderPassHash = static_cast(colorFormat); +vk::RenderPass RendererVK::getRenderPass(vk::Format colorFormat, std::optional depthFormat) { + u64 renderPassHash = static_cast(colorFormat); if (depthFormat.has_value()) { - renderPassHash |= (static_cast(depthFormat.value()) << 8); + renderPassHash |= (static_cast(depthFormat.value()) << 32); } // Cache hit @@ -170,7 +170,7 @@ vk::RenderPass RendererVK::getRenderPass(PICA::ColorFmt colorFormat, std::option std::vector renderPassAttachments = {}; vk::AttachmentDescription colorAttachment = {}; - colorAttachment.format = Vulkan::colorFormatToVulkan(colorFormat); + colorAttachment.format = colorFormat; colorAttachment.samples = vk::SampleCountFlagBits::e1; colorAttachment.loadOp = vk::AttachmentLoadOp::eLoad; colorAttachment.storeOp = vk::AttachmentStoreOp::eStore; @@ -182,7 +182,7 @@ vk::RenderPass RendererVK::getRenderPass(PICA::ColorFmt colorFormat, std::option if (depthFormat.has_value()) { vk::AttachmentDescription depthAttachment = {}; - depthAttachment.format = Vulkan::depthFormatToVulkan(depthFormat.value()); + depthAttachment.format = depthFormat.value(); depthAttachment.samples = vk::SampleCountFlagBits::e1; depthAttachment.loadOp = vk::AttachmentLoadOp::eLoad; depthAttachment.storeOp = vk::AttachmentStoreOp::eStore; @@ -229,6 +229,14 @@ vk::RenderPass RendererVK::getRenderPass(PICA::ColorFmt colorFormat, std::option return {}; } +vk::RenderPass RendererVK::getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat) { + if (depthFormat.has_value()) { + return getRenderPass(Vulkan::colorFormatToVulkan(colorFormat), Vulkan::depthFormatToVulkan(depthFormat.value())); + } else { + return getRenderPass(Vulkan::colorFormatToVulkan(colorFormat), {}); + } +} + vk::Result RendererVK::recreateSwapchain(vk::SurfaceKHR surface, vk::Extent2D swapchainExtent) { static constexpr u32 screenTextureWidth = 400; // Top screen is 400 pixels wide, bottom is 320 static constexpr u32 screenTextureHeight = 2 * 240; // Both screens are 240 pixels tall From 13e52ac047c825976c5b33e6b01124c92f30e3ae Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 00:27:27 -0700 Subject: [PATCH 35/88] Add shader-module loading Loads spirv files from the embedded virtual file system and loads them into vulkan shader-modules. --- src/core/renderer_vk/renderer_vk.cpp | 30 ++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index c53d820d..a03b999a 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -1,5 +1,6 @@ #include "renderer_vk/renderer_vk.hpp" +#include #include #include #include @@ -10,6 +11,26 @@ #include "renderer_vk/vk_memory.hpp" #include "renderer_vk/vk_pica.hpp" +CMRC_DECLARE(RendererVK); + +static vk::UniqueShaderModule createShaderModule(vk::Device device, std::span shaderCode) { + vk::ShaderModuleCreateInfo shaderModuleInfo = {}; + shaderModuleInfo.pCode = reinterpret_cast(shaderCode.data()); + shaderModuleInfo.codeSize = shaderCode.size(); + + vk::UniqueShaderModule shaderModule = {}; + if (auto createResult = device.createShaderModuleUnique(shaderModuleInfo); createResult.result == vk::Result::eSuccess) { + shaderModule = std::move(createResult.value); + } else { + Helpers::panic("Error creating shader module: %s\n", vk::to_string(createResult.result).c_str()); + } + return shaderModule; +} + +static inline vk::UniqueShaderModule createShaderModule(vk::Device device, cmrc::file shaderFile) { + return createShaderModule(device, std::span(reinterpret_cast(shaderFile.begin()), shaderFile.size())); +} + // Finds the first queue family that satisfies `queueMask` and excludes `queueExcludeMask` bits // Returns -1 if not found // Todo: Smarter selection for present/graphics/compute/transfer @@ -921,6 +942,15 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { Helpers::panic("Error allocating framebuffer memory: %s\n", vk::to_string(result).c_str()); } } + + auto vk_resources = cmrc::RendererVK::get_filesystem(); + auto displayVertexShader = vk_resources.open("vulkan_display.vert.spv"); + auto displayFragmentShader = vk_resources.open("vulkan_display.frag.spv"); + + vk::UniqueShaderModule displayVertexShaderModule = createShaderModule(device.get(), displayVertexShader); + vk::UniqueShaderModule displayFragmentShaderModule = createShaderModule(device.get(), displayFragmentShader); + + vk::RenderPass screenTextureRenderPass = getRenderPass(screenTextureInfo.format, {}); } void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) {} From 89f3eb3a8783809c6f2277e6db6cbc4c7f4c3203 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 00:36:51 -0700 Subject: [PATCH 36/88] Add simple graphics pipeline creation This will eventually need to move into a cache, but this is introducing some foundational patterns so that we know how to properly design a pipeline cache. Currently does not provide a `DescriptorSetLayout` argument. Causing validation errors. This will be a general-case cache right from the get-go. --- src/core/renderer_vk/renderer_vk.cpp | 154 +++++++++++++++++++++++++++ 1 file changed, 154 insertions(+) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index a03b999a..0f9aa37a 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -31,6 +31,156 @@ static inline vk::UniqueShaderModule createShaderModule(vk::Device device, cmrc: return createShaderModule(device, std::span(reinterpret_cast(shaderFile.begin()), shaderFile.size())); } +std::tuple createGraphicsPipeline( + vk::Device device, std::span pushConstants, std::span setLayouts, + vk::ShaderModule vertModule, vk::ShaderModule fragModule, std::span vertexBindingDescriptions, + std::span vertexAttributeDescriptions, vk::RenderPass renderPass +) { + // Create Pipeline Layout + vk::PipelineLayoutCreateInfo graphicsPipelineLayoutInfo = {}; + + graphicsPipelineLayoutInfo.pSetLayouts = setLayouts.data(); + graphicsPipelineLayoutInfo.setLayoutCount = setLayouts.size(); + graphicsPipelineLayoutInfo.pPushConstantRanges = pushConstants.data(); + graphicsPipelineLayoutInfo.pushConstantRangeCount = pushConstants.size(); + + vk::UniquePipelineLayout graphicsPipelineLayout = {}; + if (auto createResult = device.createPipelineLayoutUnique(graphicsPipelineLayoutInfo); createResult.result == vk::Result::eSuccess) { + graphicsPipelineLayout = std::move(createResult.value); + } else { + Helpers::panic("Error creating pipeline layout: %s\n", vk::to_string(createResult.result).c_str()); + return {}; + } + + // Describe the stage and entry point of each shader + const vk::PipelineShaderStageCreateInfo ShaderStagesInfo[2] = { + vk::PipelineShaderStageCreateInfo( + {}, // Flags + vk::ShaderStageFlagBits::eVertex, // Shader Stage + vertModule, // Shader Module + "main", // Shader entry point function name + {} // Shader specialization info + ), + vk::PipelineShaderStageCreateInfo( + {}, // Flags + vk::ShaderStageFlagBits::eFragment, // Shader Stage + fragModule, // Shader Module + "main", // Shader entry point function name + {} // Shader specialization info + ), + }; + + vk::PipelineVertexInputStateCreateInfo vertexInputState = {}; + + vertexInputState.vertexBindingDescriptionCount = vertexBindingDescriptions.size(); + vertexInputState.pVertexBindingDescriptions = vertexBindingDescriptions.data(); + + vertexInputState.vertexAttributeDescriptionCount = vertexAttributeDescriptions.size(); + vertexInputState.pVertexAttributeDescriptions = vertexAttributeDescriptions.data(); + + vk::PipelineInputAssemblyStateCreateInfo inputAssemblyState = {}; + inputAssemblyState.topology = vk::PrimitiveTopology::eTriangleList; + inputAssemblyState.primitiveRestartEnable = false; + + vk::PipelineViewportStateCreateInfo viewportState = {}; + + static const vk::Viewport defaultViewport = {0, 0, 16, 16, 0.0f, 1.0f}; + static const vk::Rect2D defaultScissor = {{0, 0}, {16, 16}}; + viewportState.viewportCount = 1; + viewportState.pViewports = &defaultViewport; + viewportState.scissorCount = 1; + viewportState.pScissors = &defaultScissor; + + vk::PipelineRasterizationStateCreateInfo rasterizationState = {}; + + rasterizationState.depthClampEnable = false; + rasterizationState.rasterizerDiscardEnable = false; + rasterizationState.polygonMode = vk::PolygonMode::eFill; + rasterizationState.cullMode = vk::CullModeFlagBits::eBack; + rasterizationState.frontFace = vk::FrontFace::eClockwise; + rasterizationState.depthBiasEnable = false; + rasterizationState.depthBiasConstantFactor = 0.0f; + rasterizationState.depthBiasClamp = 0.0f; + rasterizationState.depthBiasSlopeFactor = 0.0; + rasterizationState.lineWidth = 1.0f; + + vk::PipelineMultisampleStateCreateInfo multisampleState = {}; + + multisampleState.rasterizationSamples = vk::SampleCountFlagBits::e1; + multisampleState.sampleShadingEnable = false; + multisampleState.minSampleShading = 1.0f; + multisampleState.pSampleMask = nullptr; + multisampleState.alphaToCoverageEnable = true; + multisampleState.alphaToOneEnable = false; + + vk::PipelineDepthStencilStateCreateInfo depthStencilState = {}; + + depthStencilState.depthTestEnable = true; + depthStencilState.depthWriteEnable = true; + depthStencilState.depthCompareOp = vk::CompareOp::eLessOrEqual; + depthStencilState.depthBoundsTestEnable = false; + depthStencilState.stencilTestEnable = false; + depthStencilState.front = vk::StencilOp::eKeep; + depthStencilState.back = vk::StencilOp::eKeep; + depthStencilState.minDepthBounds = 0.0f; + depthStencilState.maxDepthBounds = 1.0f; + + vk::PipelineColorBlendStateCreateInfo colorBlendState = {}; + + colorBlendState.logicOpEnable = false; + colorBlendState.logicOp = vk::LogicOp::eClear; + colorBlendState.attachmentCount = 1; + + vk::PipelineColorBlendAttachmentState blendAttachmentState = {}; + + blendAttachmentState.blendEnable = false; + blendAttachmentState.srcColorBlendFactor = vk::BlendFactor::eZero; + blendAttachmentState.dstColorBlendFactor = vk::BlendFactor::eZero; + blendAttachmentState.colorBlendOp = vk::BlendOp::eAdd; + blendAttachmentState.srcAlphaBlendFactor = vk::BlendFactor::eZero; + blendAttachmentState.dstAlphaBlendFactor = vk::BlendFactor::eZero; + blendAttachmentState.alphaBlendOp = vk::BlendOp::eAdd; + blendAttachmentState.colorWriteMask = + vk::ColorComponentFlagBits::eR | vk::ColorComponentFlagBits::eG | vk::ColorComponentFlagBits::eB | vk::ColorComponentFlagBits::eA; + + colorBlendState.pAttachments = &blendAttachmentState; + + vk::PipelineDynamicStateCreateInfo dynamicState = {}; + static vk::DynamicState dynamicStates[] = {// The viewport and scissor of the framebuffer will be dynamic at + // run-time + vk::DynamicState::eViewport, vk::DynamicState::eScissor}; + dynamicState.dynamicStateCount = std::size(dynamicStates); + dynamicState.pDynamicStates = dynamicStates; + + vk::GraphicsPipelineCreateInfo renderPipelineInfo = {}; + + renderPipelineInfo.stageCount = 2; // Vert + Frag stages + renderPipelineInfo.pStages = ShaderStagesInfo; + renderPipelineInfo.pVertexInputState = &vertexInputState; + renderPipelineInfo.pInputAssemblyState = &inputAssemblyState; + renderPipelineInfo.pViewportState = &viewportState; + renderPipelineInfo.pRasterizationState = &rasterizationState; + renderPipelineInfo.pMultisampleState = &multisampleState; + renderPipelineInfo.pDepthStencilState = &depthStencilState; + renderPipelineInfo.pColorBlendState = &colorBlendState; + renderPipelineInfo.pDynamicState = &dynamicState; + renderPipelineInfo.subpass = 0; + renderPipelineInfo.renderPass = renderPass; + renderPipelineInfo.layout = graphicsPipelineLayout.get(); + + // Create Pipeline + vk::UniquePipeline pipeline = {}; + + if (auto createResult = device.createGraphicsPipelineUnique({}, renderPipelineInfo); createResult.result == vk::Result::eSuccess) { + pipeline = std::move(createResult.value); + } else { + Helpers::panic("Error creating graphics pipeline: %s\n", vk::to_string(createResult.result).c_str()); + return {}; + } + + return std::make_tuple(std::move(pipeline), std::move(graphicsPipelineLayout)); +} + // Finds the first queue family that satisfies `queueMask` and excludes `queueExcludeMask` bits // Returns -1 if not found // Todo: Smarter selection for present/graphics/compute/transfer @@ -951,6 +1101,10 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { vk::UniqueShaderModule displayFragmentShaderModule = createShaderModule(device.get(), displayFragmentShader); vk::RenderPass screenTextureRenderPass = getRenderPass(screenTextureInfo.format, {}); + + auto [pipeline, pipelineLayout] = createGraphicsPipeline( + device.get(), {}, {}, displayVertexShaderModule.get(), displayFragmentShaderModule.get(), {}, {}, screenTextureRenderPass + ); } void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) {} From 6ebbd80286390737749e546caaf4f87a8b6377cf Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 21:03:15 -0700 Subject: [PATCH 37/88] Add Display-pipeline as member variables --- include/renderer_vk/renderer_vk.hpp | 3 +++ src/core/renderer_vk/renderer_vk.cpp | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 98e00c53..5f216b7d 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -88,6 +88,9 @@ class RendererVK final : public Renderer { vk::RenderPass getRenderPass(vk::Format colorFormat, std::optional depthFormat); vk::RenderPass getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat); + vk::UniquePipeline displayPipeline; + vk::UniquePipelineLayout displayPipelineLayout; + // Recreate the swapchain, possibly re-using the old one in the case of a resize vk::Result recreateSwapchain(vk::SurfaceKHR surface, vk::Extent2D swapchainExtent); diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 0f9aa37a..3e1dd64a 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -1102,7 +1102,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { vk::RenderPass screenTextureRenderPass = getRenderPass(screenTextureInfo.format, {}); - auto [pipeline, pipelineLayout] = createGraphicsPipeline( + std::tie(displayPipeline, displayPipelineLayout) = createGraphicsPipeline( device.get(), {}, {}, displayVertexShaderModule.get(), displayFragmentShaderModule.get(), {}, {}, screenTextureRenderPass ); } From 72c77e41b4d577799f3655946fcfaa69b049970f Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 21:29:37 -0700 Subject: [PATCH 38/88] Draft Vulkan DescriptorHeap A utility class from a personal project for managing a heap of descriptors of a particular layout. Allows the display graphics pipeline to be successfully created, satisfying its descriptor layout issues. --- CMakeLists.txt | 10 +- include/renderer_vk/renderer_vk.hpp | 2 + include/renderer_vk/vk_descriptor_heap.hpp | 49 ++++++++ src/core/renderer_vk/renderer_vk.cpp | 14 ++- src/core/renderer_vk/vk_descriptor_heap.cpp | 119 ++++++++++++++++++++ 5 files changed, 189 insertions(+), 5 deletions(-) create mode 100644 include/renderer_vk/vk_descriptor_heap.hpp create mode 100644 src/core/renderer_vk/vk_descriptor_heap.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 81f3a1eb..a12cf337 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -239,13 +239,15 @@ if(ENABLE_VULKAN) ) set(RENDERER_VK_INCLUDE_FILES include/renderer_vk/renderer_vk.hpp - include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp include/renderer_vk/vk_memory.hpp - include/renderer_vk/vk_pica.hpp + include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp + include/renderer_vk/vk_descriptor_heap.hpp + include/renderer_vk/vk_memory.hpp include/renderer_vk/vk_pica.hpp ) set(RENDERER_VK_SOURCE_FILES src/core/renderer_vk/renderer_vk.cpp - src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp src/core/renderer_vk/vk_memory.cpp - src/core/renderer_vk/vk_pica.cpp + src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp + src/core/renderer_vk/vk_descriptor_heap.cpp + src/core/renderer_vk/vk_memory.cpp src/core/renderer_vk/vk_pica.cpp ) set(HEADER_FILES ${HEADER_FILES} ${RENDERER_VK_INCLUDE_FILES}) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 5f216b7d..e93a97b1 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -4,6 +4,7 @@ #include "math_util.hpp" #include "renderer.hpp" #include "vk_api.hpp" +#include "vk_descriptor_heap.hpp" class GPU; @@ -88,6 +89,7 @@ class RendererVK final : public Renderer { vk::RenderPass getRenderPass(vk::Format colorFormat, std::optional depthFormat); vk::RenderPass getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat); + std::unique_ptr displayDescriptorHeap; vk::UniquePipeline displayPipeline; vk::UniquePipelineLayout displayPipelineLayout; diff --git a/include/renderer_vk/vk_descriptor_heap.hpp b/include/renderer_vk/vk_descriptor_heap.hpp new file mode 100644 index 00000000..8a9630e3 --- /dev/null +++ b/include/renderer_vk/vk_descriptor_heap.hpp @@ -0,0 +1,49 @@ +#pragma once + +#include +#include + +#include "helpers.hpp" +#include "vk_api.hpp" + +namespace Vulkan { + // Implements a basic heap of descriptor sets given a layout of particular + // bindings. Create a descriptor set by providing a list of bindings and it will + // automatically create both the pool, layout, and maintail a heap of descriptor + // sets. Descriptor sets will be reused and recycled. Assume that newly + // allocated descriptor sets are in an undefined state. + class DescriptorHeap { + private: + const vk::Device device; + + vk::UniqueDescriptorPool descriptorPool; + vk::UniqueDescriptorSetLayout descriptorSetLayout; + std::vector descriptorSets; + + std::vector bindings; + + std::vector allocationMap; + + explicit DescriptorHeap(vk::Device device); + + public: + ~DescriptorHeap() = default; + + DescriptorHeap(DescriptorHeap&&) = default; + + const vk::DescriptorPool& getDescriptorPool() const { return descriptorPool.get(); }; + + const vk::DescriptorSetLayout& getDescriptorSetLayout() const { return descriptorSetLayout.get(); }; + + const std::span getDescriptorSets() const { return descriptorSets; }; + + std::span getBindings() const { return bindings; }; + + std::optional allocateDescriptorSet(); + bool freeDescriptorSet(vk::DescriptorSet set); + + static std::optional create( + vk::Device device, std::span bindings, u16 descriptorHeapCount = 1024 + ); + }; +} // namespace Vulkan \ No newline at end of file diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 3e1dd64a..49543bc5 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -1093,6 +1093,17 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { } } + static vk::DescriptorSetLayoutBinding displayShaderLayout[] = { + {// Just a singular texture slot + 0, vk::DescriptorType::eCombinedImageSampler, 1, vk::ShaderStageFlagBits::eFragment}, + }; + + if (auto createResult = Vulkan::DescriptorHeap::create(device.get(), displayShaderLayout); createResult.has_value()) { + displayDescriptorHeap = std::make_unique(std::move(createResult.value())); + } else { + Helpers::panic("Error creating descriptor heap\n"); + } + auto vk_resources = cmrc::RendererVK::get_filesystem(); auto displayVertexShader = vk_resources.open("vulkan_display.vert.spv"); auto displayFragmentShader = vk_resources.open("vulkan_display.frag.spv"); @@ -1103,7 +1114,8 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { vk::RenderPass screenTextureRenderPass = getRenderPass(screenTextureInfo.format, {}); std::tie(displayPipeline, displayPipelineLayout) = createGraphicsPipeline( - device.get(), {}, {}, displayVertexShaderModule.get(), displayFragmentShaderModule.get(), {}, {}, screenTextureRenderPass + device.get(), {}, {{displayDescriptorHeap.get()->getDescriptorSetLayout()}}, displayVertexShaderModule.get(), + displayFragmentShaderModule.get(), {}, {}, screenTextureRenderPass ); } diff --git a/src/core/renderer_vk/vk_descriptor_heap.cpp b/src/core/renderer_vk/vk_descriptor_heap.cpp new file mode 100644 index 00000000..ecf71d92 --- /dev/null +++ b/src/core/renderer_vk/vk_descriptor_heap.cpp @@ -0,0 +1,119 @@ +#include "renderer_vk/vk_descriptor_heap.hpp" + +#include +#include +#include + +namespace Vulkan { + + DescriptorHeap::DescriptorHeap(vk::Device device) : device(device) {} + + std::optional DescriptorHeap::allocateDescriptorSet() { + // Find a free slot + const auto freeSlot = std::find(allocationMap.begin(), allocationMap.end(), false); + + // If there is no free slot, return + if (freeSlot == allocationMap.end()) { + return std::nullopt; + } + + // Mark the slot as allocated + *freeSlot = true; + + const u16 index = static_cast(std::distance(allocationMap.begin(), freeSlot)); + + vk::UniqueDescriptorSet& newDescriptorSet = descriptorSets[index]; + + if (!newDescriptorSet) { + // Descriptor set doesn't exist yet. Allocate a new one + vk::DescriptorSetAllocateInfo allocateInfo = {}; + + allocateInfo.descriptorPool = descriptorPool.get(); + allocateInfo.pSetLayouts = &descriptorSetLayout.get(); + allocateInfo.descriptorSetCount = 1; + + if (auto AllocateResult = device.allocateDescriptorSetsUnique(allocateInfo); AllocateResult.result == vk::Result::eSuccess) { + newDescriptorSet = std::move(AllocateResult.value[0]); + } else { + // Error allocating descriptor set + return std::nullopt; + } + } + + return newDescriptorSet.get(); + } + + bool DescriptorHeap::freeDescriptorSet(vk::DescriptorSet Set) { + // Find the descriptor set + const auto found = + std::find_if(descriptorSets.begin(), descriptorSets.end(), [&Set](const auto& CurSet) -> bool { return CurSet.get() == Set; }); + + // If the descriptor set is not found, return + if (found == descriptorSets.end()) { + return false; + } + + // Mark the slot as free + const u16 index = static_cast(std::distance(descriptorSets.begin(), found)); + + allocationMap[index] = false; + + return true; + } + + std::optional DescriptorHeap::create( + vk::Device device, std::span bindings, u16 descriptorHeapCount + ) { + DescriptorHeap newDescriptorHeap(device); + + // Create a histogram of each of the descriptor types and how many of each + // the pool should have + // Todo: maybe keep this around as a hash table to do more dynamic + // allocations of descriptor sets rather than allocating them all up-front + std::vector poolSizes; + { + std::unordered_map descriptorTypeCounts; + + for (const auto& binding : bindings) { + descriptorTypeCounts[binding.descriptorType] += binding.descriptorCount; + } + for (const auto& descriptorTypeCount : descriptorTypeCounts) { + poolSizes.push_back(vk::DescriptorPoolSize(descriptorTypeCount.first, descriptorTypeCount.second * descriptorHeapCount)); + } + } + + // Create descriptor pool + { + vk::DescriptorPoolCreateInfo poolInfo; + poolInfo.flags = vk::DescriptorPoolCreateFlagBits::eFreeDescriptorSet; + poolInfo.maxSets = descriptorHeapCount; + poolInfo.pPoolSizes = poolSizes.data(); + poolInfo.poolSizeCount = poolSizes.size(); + if (auto createResult = device.createDescriptorPoolUnique(poolInfo); createResult.result == vk::Result::eSuccess) { + newDescriptorHeap.descriptorPool = std::move(createResult.value); + } else { + return std::nullopt; + } + } + + // Create descriptor set layout + { + vk::DescriptorSetLayoutCreateInfo layoutInfo; + layoutInfo.pBindings = bindings.data(); + layoutInfo.bindingCount = bindings.size(); + + if (auto createResult = device.createDescriptorSetLayoutUnique(layoutInfo); createResult.result == vk::Result::eSuccess) { + newDescriptorHeap.descriptorSetLayout = std::move(createResult.value); + } else { + return std::nullopt; + } + } + + newDescriptorHeap.descriptorSets.resize(descriptorHeapCount); + newDescriptorHeap.allocationMap.resize(descriptorHeapCount); + + newDescriptorHeap.bindings.assign(bindings.begin(), bindings.end()); + + return {std::move(newDescriptorHeap)}; + } +} // namespace Vulkan \ No newline at end of file From 4b7bd9df3d32d17942a332780bb4965332dcc935 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 22:06:46 -0700 Subject: [PATCH 39/88] Add Vulkan Descriptor-Update batching Allows multiple descriptor operations to be batched up and dispatched in one API call rather than scattered through out the code base. --- CMakeLists.txt | 2 + .../vk_descriptor_update_batch.hpp | 62 ++++++++++++ .../vk_descriptor_update_batch.cpp | 98 +++++++++++++++++++ 3 files changed, 162 insertions(+) create mode 100644 include/renderer_vk/vk_descriptor_update_batch.hpp create mode 100644 src/core/renderer_vk/vk_descriptor_update_batch.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index a12cf337..1218b97b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -241,12 +241,14 @@ if(ENABLE_VULKAN) set(RENDERER_VK_INCLUDE_FILES include/renderer_vk/renderer_vk.hpp include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp include/renderer_vk/vk_descriptor_heap.hpp + include/renderer_vk/vk_descriptor_update_batch.hpp include/renderer_vk/vk_memory.hpp include/renderer_vk/vk_pica.hpp ) set(RENDERER_VK_SOURCE_FILES src/core/renderer_vk/renderer_vk.cpp src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp src/core/renderer_vk/vk_descriptor_heap.cpp + src/core/renderer_vk/vk_descriptor_update_batch.cpp src/core/renderer_vk/vk_memory.cpp src/core/renderer_vk/vk_pica.cpp ) diff --git a/include/renderer_vk/vk_descriptor_update_batch.hpp b/include/renderer_vk/vk_descriptor_update_batch.hpp new file mode 100644 index 00000000..1a10214d --- /dev/null +++ b/include/renderer_vk/vk_descriptor_update_batch.hpp @@ -0,0 +1,62 @@ +#pragma once + +#include +#include +#include + +#include "helpers.hpp" +#include "vk_api.hpp" + +namespace Vulkan { + // Implements a re-usable structure for batching up descriptor writes with a + // finite amount of space for both convenience and to reduce the overall amount + // of API calls to `vkUpdateDescriptorSets` + class DescriptorUpdateBatch { + private: + const vk::Device device; + + const usize descriptorWriteMax; + const usize descriptorCopyMax; + + using DescriptorInfoUnion = std::variant; + + // Todo: Maybe some kind of hash so that these structures can be re-used + // among descriptor writes. + std::unique_ptr descriptorInfos; + std::unique_ptr descriptorWrites; + std::unique_ptr descriptorCopies; + + usize descriptorWriteEnd = 0; + usize descriptorCopyEnd = 0; + + DescriptorUpdateBatch(vk::Device device, usize descriptorWriteMax, usize descriptorCopyMax) + : device(device), descriptorWriteMax(descriptorWriteMax), descriptorCopyMax(descriptorCopyMax) {} + + public: + ~DescriptorUpdateBatch() = default; + + DescriptorUpdateBatch(DescriptorUpdateBatch&&) = default; + + void flush(); + + void addImage( + vk::DescriptorSet targetDescriptor, u8 targetBinding, vk::ImageView imageView, vk::ImageLayout imageLayout = vk::ImageLayout::eGeneral + ); + void addSampler(vk::DescriptorSet targetDescriptor, u8 targetBinding, vk::Sampler sampler); + + void addImageSampler( + vk::DescriptorSet targetDescriptor, u8 targetBinding, vk::ImageView imageView, vk::Sampler sampler, + vk::ImageLayout imageLayout = vk::ImageLayout::eShaderReadOnlyOptimal + ); + void addBuffer( + vk::DescriptorSet targetDescriptor, u8 targetBinding, vk::Buffer buffer, vk::DeviceSize offset, vk::DeviceSize size = VK_WHOLE_SIZE + ); + + void copyBinding( + vk::DescriptorSet sourceDescriptor, vk::DescriptorSet targetDescriptor, u8 sourceBinding, u8 targetBinding, u8 sourceArrayElement = 0, + u8 targetArrayElement = 0, u8 descriptorCount = 1 + ); + + static std::optional create(vk::Device device, usize descriptorWriteMax = 256, usize descriptorCopyMax = 256); + }; +} // namespace Vulkan \ No newline at end of file diff --git a/src/core/renderer_vk/vk_descriptor_update_batch.cpp b/src/core/renderer_vk/vk_descriptor_update_batch.cpp new file mode 100644 index 00000000..a414ca2d --- /dev/null +++ b/src/core/renderer_vk/vk_descriptor_update_batch.cpp @@ -0,0 +1,98 @@ +#include "renderer_vk/vk_descriptor_update_batch.hpp" + +#include +#include + +namespace Vulkan { + + void DescriptorUpdateBatch::flush() { + device.updateDescriptorSets({std::span(descriptorWrites.get(), descriptorWriteEnd)}, {std::span(descriptorCopies.get(), descriptorCopyEnd)}); + + descriptorWriteEnd = 0; + descriptorCopyEnd = 0; + } + + void DescriptorUpdateBatch::addImage(vk::DescriptorSet targetDescriptor, u8 targetBinding, vk::ImageView imageView, vk::ImageLayout imageLayout) { + if (descriptorWriteEnd >= descriptorWriteMax) { + flush(); + } + + const auto& imageInfo = descriptorInfos[descriptorWriteEnd].emplace(vk::Sampler(), imageView, imageLayout); + + descriptorWrites[descriptorWriteEnd] = + vk::WriteDescriptorSet(targetDescriptor, targetBinding, 0, 1, vk::DescriptorType::eSampledImage, &imageInfo, nullptr, nullptr); + + ++descriptorWriteEnd; + } + + void DescriptorUpdateBatch::addSampler(vk::DescriptorSet targetDescriptor, u8 targetBinding, vk::Sampler sampler) { + if (descriptorWriteEnd >= descriptorWriteMax) { + flush(); + } + + const auto& imageInfo = descriptorInfos[descriptorWriteEnd].emplace(sampler, vk::ImageView(), vk::ImageLayout()); + + descriptorWrites[descriptorWriteEnd] = + vk::WriteDescriptorSet(targetDescriptor, targetBinding, 0, 1, vk::DescriptorType::eSampler, &imageInfo, nullptr, nullptr); + + ++descriptorWriteEnd; + } + + void DescriptorUpdateBatch::addImageSampler( + vk::DescriptorSet targetDescriptor, u8 targetBinding, vk::ImageView imageView, vk::Sampler sampler, vk::ImageLayout imageLayout + ) { + if (descriptorWriteEnd >= descriptorWriteMax) { + flush(); + } + + const auto& imageInfo = descriptorInfos[descriptorWriteEnd].emplace(sampler, imageView, imageLayout); + + descriptorWrites[descriptorWriteEnd] = + vk::WriteDescriptorSet(targetDescriptor, targetBinding, 0, 1, vk::DescriptorType::eCombinedImageSampler, &imageInfo, nullptr, nullptr); + + ++descriptorWriteEnd; + } + + void DescriptorUpdateBatch::addBuffer( + vk::DescriptorSet targetDescriptor, u8 targetBinding, vk::Buffer buffer, vk::DeviceSize offset, vk::DeviceSize size + ) { + if (descriptorWriteEnd >= descriptorWriteMax) { + flush(); + } + + const auto& bufferInfo = descriptorInfos[descriptorWriteEnd].emplace(buffer, offset, size); + + descriptorWrites[descriptorWriteEnd] = + vk::WriteDescriptorSet(targetDescriptor, targetBinding, 0, 1, vk::DescriptorType::eStorageImage, nullptr, &bufferInfo, nullptr); + + ++descriptorWriteEnd; + } + + void DescriptorUpdateBatch::copyBinding( + vk::DescriptorSet sourceDescriptor, vk::DescriptorSet targetDescriptor, u8 sourceBinding, u8 targetBinding, u8 sourceArrayElement, + u8 targetArrayElement, u8 descriptorCount + ) { + if (descriptorCopyEnd >= descriptorCopyMax) { + flush(); + } + + descriptorCopies[descriptorCopyEnd] = vk::CopyDescriptorSet( + sourceDescriptor, sourceBinding, sourceArrayElement, targetDescriptor, targetBinding, targetArrayElement, descriptorCount + ); + + ++descriptorCopyEnd; + } + + std::optional DescriptorUpdateBatch::create(vk::Device device, usize descriptorWriteMax, usize descriptorCopyMax) + + { + DescriptorUpdateBatch newDescriptorUpdateBatch(device, descriptorWriteMax, descriptorCopyMax); + + newDescriptorUpdateBatch.descriptorInfos = std::make_unique(descriptorWriteMax); + newDescriptorUpdateBatch.descriptorWrites = std::make_unique(descriptorWriteMax); + newDescriptorUpdateBatch.descriptorCopies = std::make_unique(descriptorCopyMax); + + return {std::move(newDescriptorUpdateBatch)}; + } + +} // namespace Vulkan \ No newline at end of file From 14b1d7d8a882028fd35a902ab2f8b3bf3070269b Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 23:01:12 -0700 Subject: [PATCH 40/88] Add display-shader presentation Uses the graphics pipeline to both blit and transpose the 3ds-formatted textures. Does not read from the actual texture just yet since we dont write to the descriptor just yet. Some other patterns need to line up before then. --- include/renderer_vk/renderer_vk.hpp | 10 ++- src/core/renderer_vk/renderer_vk.cpp | 109 +++++++++++++++++++++++---- 2 files changed, 103 insertions(+), 16 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index e93a97b1..d2723e35 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -5,6 +5,7 @@ #include "renderer.hpp" #include "vk_api.hpp" #include "vk_descriptor_heap.hpp" +#include "vk_descriptor_update_batch.hpp" class GPU; @@ -72,7 +73,7 @@ class RendererVK final : public Renderer { } }; // Hash(loc, size, format) -> Texture - std::map textureCache; + std::map textureCache; static u32 colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format); static u32 depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format); @@ -82,6 +83,8 @@ class RendererVK final : public Renderer { // Framebuffer for the top/bottom image std::vector screenTexture = {}; + std::vector screenTextureViews = {}; + std::vector screenTextureFramebuffers = {}; vk::UniqueDeviceMemory framebufferMemory = {}; std::map renderPassCache; @@ -89,9 +92,14 @@ class RendererVK final : public Renderer { vk::RenderPass getRenderPass(vk::Format colorFormat, std::optional depthFormat); vk::RenderPass getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat); + std::unique_ptr descriptorUpdateBatch; + + // Display pipeline data std::unique_ptr displayDescriptorHeap; vk::UniquePipeline displayPipeline; vk::UniquePipelineLayout displayPipelineLayout; + std::vector topDisplayPipelineDescriptorSet; + std::vector bottomDisplayPipelineDescriptorSet; // Recreate the swapchain, possibly re-using the old one in the case of a resize vk::Result recreateSwapchain(vk::SurfaceKHR surface, vk::Extent2D swapchainExtent); diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 49543bc5..0a0450bb 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -595,27 +595,53 @@ void RendererVK::display() { //// Render Frame(Simulated - just clear the images to different colors for now) { - static const std::array frameScopeColor = {{1.0f, 0.0f, 1.0f, 1.0f}}; + static const std::array renderScreenScopeColor = {{1.0f, 0.0f, 1.0f, 1.0f}}; - Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), frameScopeColor, "Frame"); - - // Prepare images for color-clear + Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), renderScreenScopeColor, "Render Screen"); + // Prepare screen texture for rendering into getCurrentCommandBuffer().pipelineBarrier( - vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, { vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, - vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eUndefined, + vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + screenTexture[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), } ); - static const std::array topClearColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; - static const std::array bottomClearColor = {{0.0f, 1.0f, 0.0f, 1.0f}}; - getCurrentCommandBuffer().clearColorImage( - screenTexture[frameBufferingIndex].get(), vk::ImageLayout::eTransferDstOptimal, topClearColor, - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ); + + vk::RenderPassBeginInfo renderPassBeginInfo = {}; + renderPassBeginInfo.renderPass = getRenderPass(vk::Format::eR8G8B8A8Unorm, {}); + + renderPassBeginInfo.framebuffer = screenTextureFramebuffers[frameBufferingIndex].get(); + renderPassBeginInfo.renderArea.offset = vk::Offset2D(); + renderPassBeginInfo.renderArea.extent = vk::Extent2D(400, 240 * 2); + + getCurrentCommandBuffer().beginRenderPass(renderPassBeginInfo, vk::SubpassContents::eInline); + + // Render top screen + if (topActiveFb) { + getCurrentCommandBuffer().bindDescriptorSets( + vk::PipelineBindPoint::eGraphics, displayPipelineLayout.get(), 0, {topDisplayPipelineDescriptorSet[frameBufferingIndex]}, {} + ); + getCurrentCommandBuffer().bindPipeline(vk::PipelineBindPoint::eGraphics, displayPipeline.get()); + getCurrentCommandBuffer().setViewport(0, vk::Viewport(0, 0, 400, 240)); + getCurrentCommandBuffer().setScissor(0, vk::Rect2D({0, 0}, {400, 240})); + getCurrentCommandBuffer().draw(3, 1, 0, 0); + } + + // Render bottom screen + if (bottomActiveFb) { + getCurrentCommandBuffer().bindDescriptorSets( + vk::PipelineBindPoint::eGraphics, displayPipelineLayout.get(), 0, {bottomDisplayPipelineDescriptorSet[frameBufferingIndex]}, {} + ); + getCurrentCommandBuffer().bindPipeline(vk::PipelineBindPoint::eGraphics, displayPipeline.get()); + getCurrentCommandBuffer().setViewport(0, vk::Viewport(40, 0, 320, 240)); + getCurrentCommandBuffer().setScissor(0, vk::Rect2D({40, 0}, {320, 240})); + getCurrentCommandBuffer().draw(3, 1, 0, 0); + } + + getCurrentCommandBuffer().endRenderPass(); } //// Present @@ -1049,8 +1075,10 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { screenTextureInfo.setInitialLayout(vk::ImageLayout::eUndefined); screenTexture.resize(frameBufferingCount); + screenTextureViews.resize(frameBufferingCount); + screenTextureFramebuffers.resize(frameBufferingCount); - for (usize i = 0; i < frameBufferingCount; i++) { + for (usize i = 0; i < frameBufferingCount; ++i) { if (auto createResult = device->createSemaphoreUnique(semaphoreInfo); createResult.result == vk::Result::eSuccess) { swapImageFreeSemaphore[i] = std::move(createResult.value); @@ -1093,17 +1121,68 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { } } + // Memory is bounded, create views and framebuffer for screentexture + vk::ImageViewCreateInfo screenTextureViewCreateInfo = {}; + screenTextureViewCreateInfo.viewType = vk::ImageViewType::e2D; + screenTextureViewCreateInfo.format = vk::Format::eR8G8B8A8Unorm; + screenTextureViewCreateInfo.components.r = vk::ComponentSwizzle::eR; + screenTextureViewCreateInfo.components.g = vk::ComponentSwizzle::eG; + screenTextureViewCreateInfo.components.b = vk::ComponentSwizzle::eB; + screenTextureViewCreateInfo.components.a = vk::ComponentSwizzle::eA; + screenTextureViewCreateInfo.subresourceRange = {vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1}; + + for (usize i = 0; i < frameBufferingCount; ++i) { + screenTextureViewCreateInfo.image = screenTexture[i].get(); + + if (auto createResult = device->createImageViewUnique(screenTextureViewCreateInfo); createResult.result == vk::Result::eSuccess) { + screenTextureViews[i] = std::move(createResult.value); + } else { + Helpers::panic("Error creating screen texture view: %s\n", vk::to_string(createResult.result).c_str()); + } + + vk::FramebufferCreateInfo framebufferInfo = {}; + framebufferInfo.setRenderPass(getRenderPass(vk::Format::eR8G8B8A8Unorm, {})); + framebufferInfo.setAttachments(screenTextureViews[i].get()); + framebufferInfo.setWidth(400); + framebufferInfo.setHeight(240 * 2); + framebufferInfo.setLayers(1); + if (auto createResult = device->createFramebufferUnique(framebufferInfo); createResult.result == vk::Result::eSuccess) { + screenTextureFramebuffers[i] = std::move(createResult.value); + } else { + Helpers::panic("Error creating screen-texture framebuffer: %s\n", vk::to_string(createResult.result).c_str()); + } + } + static vk::DescriptorSetLayoutBinding displayShaderLayout[] = { {// Just a singular texture slot 0, vk::DescriptorType::eCombinedImageSampler, 1, vk::ShaderStageFlagBits::eFragment}, }; + if (auto createResult = Vulkan::DescriptorUpdateBatch::create(device.get()); createResult.has_value()) { + descriptorUpdateBatch = std::make_unique(std::move(createResult.value())); + } else { + Helpers::panic("Error creating descriptor update batch\n"); + } + if (auto createResult = Vulkan::DescriptorHeap::create(device.get(), displayShaderLayout); createResult.has_value()) { displayDescriptorHeap = std::make_unique(std::move(createResult.value())); } else { Helpers::panic("Error creating descriptor heap\n"); } + for (usize i = 0; i < frameBufferingCount; ++i) { + if (auto allocateResult = displayDescriptorHeap->allocateDescriptorSet(); allocateResult.has_value()) { + topDisplayPipelineDescriptorSet.emplace_back(allocateResult.value()); + } else { + Helpers::panic("Error creating descriptor set\n"); + } + if (auto allocateResult = displayDescriptorHeap->allocateDescriptorSet(); allocateResult.has_value()) { + bottomDisplayPipelineDescriptorSet.emplace_back(allocateResult.value()); + } else { + Helpers::panic("Error creating descriptor set\n"); + } + } + auto vk_resources = cmrc::RendererVK::get_filesystem(); auto displayVertexShader = vk_resources.open("vulkan_display.vert.spv"); auto displayFragmentShader = vk_resources.open("vulkan_display.frag.spv"); From 7a86595a1b7b558e4742bc7911932b5271c14118 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 23:35:52 -0700 Subject: [PATCH 41/88] Add vulkan sampler cache --- CMakeLists.txt | 2 ++ include/renderer_vk/vk_sampler_cache.hpp | 28 ++++++++++++++++++++ src/core/renderer_vk/vk_sampler_cache.cpp | 31 +++++++++++++++++++++++ 3 files changed, 61 insertions(+) create mode 100644 include/renderer_vk/vk_sampler_cache.hpp create mode 100644 src/core/renderer_vk/vk_sampler_cache.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1218b97b..b953175e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -242,6 +242,7 @@ if(ENABLE_VULKAN) include/renderer_vk/vk_api.hpp include/renderer_vk/vk_debug.hpp include/renderer_vk/vk_descriptor_heap.hpp include/renderer_vk/vk_descriptor_update_batch.hpp + include/renderer_vk/vk_sampler_cache.hpp include/renderer_vk/vk_memory.hpp include/renderer_vk/vk_pica.hpp ) @@ -249,6 +250,7 @@ if(ENABLE_VULKAN) src/core/renderer_vk/vk_api.cpp src/core/renderer_vk/vk_debug.cpp src/core/renderer_vk/vk_descriptor_heap.cpp src/core/renderer_vk/vk_descriptor_update_batch.cpp + src/core/renderer_vk/vk_sampler_cache.cpp src/core/renderer_vk/vk_memory.cpp src/core/renderer_vk/vk_pica.cpp ) diff --git a/include/renderer_vk/vk_sampler_cache.hpp b/include/renderer_vk/vk_sampler_cache.hpp new file mode 100644 index 00000000..8cb27689 --- /dev/null +++ b/include/renderer_vk/vk_sampler_cache.hpp @@ -0,0 +1,28 @@ +#pragma once + +#include +#include + +#include "helpers.hpp" +#include "vk_api.hpp" + +namespace Vulkan { + // Implements a simple pool of reusable sampler objects + class SamplerCache { + private: + const vk::Device device; + + std::unordered_map samplerMap; + + explicit SamplerCache(vk::Device device); + + public: + ~SamplerCache() = default; + + SamplerCache(SamplerCache&&) = default; + + const vk::Sampler& getSampler(const vk::SamplerCreateInfo& samplerInfo); + + static std::optional create(vk::Device device); + }; +} // namespace Vulkan \ No newline at end of file diff --git a/src/core/renderer_vk/vk_sampler_cache.cpp b/src/core/renderer_vk/vk_sampler_cache.cpp new file mode 100644 index 00000000..884264b1 --- /dev/null +++ b/src/core/renderer_vk/vk_sampler_cache.cpp @@ -0,0 +1,31 @@ +#include "renderer_vk/vk_sampler_cache.hpp" + +#include + +#include "helpers.hpp" + +namespace Vulkan { + + SamplerCache::SamplerCache(vk::Device device) : device(device) {} + + const vk::Sampler& SamplerCache::getSampler(const vk::SamplerCreateInfo& samplerInfo) { + const std::size_t samplerHash = std::hash()(samplerInfo); + + // Cache hit + if (samplerMap.contains(samplerHash)) { + return samplerMap.at(samplerHash).get(); + } + + if (auto createResult = device.createSamplerUnique(samplerInfo); createResult.result == vk::Result::eSuccess) { + return (samplerMap[samplerHash] = std::move(createResult.value)).get(); + } else { + Helpers::panic("Error creating sampler: %s\n", vk::to_string(createResult.result).c_str()); + } + } + + std::optional SamplerCache::create(vk::Device device) { + SamplerCache newSamplerCache(device); + + return {std::move(newSamplerCache)}; + } +} // namespace Vulkan \ No newline at end of file From 0258640da931cb515da0545b886376154c764bd8 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 23:40:47 -0700 Subject: [PATCH 42/88] Add cached sampler creation Using the sampler cache we can maintain a pool of reusable samplers. The `sampler2D` utility function can help make some trivial samplers. --- include/renderer_vk/renderer_vk.hpp | 3 ++ src/core/renderer_vk/renderer_vk.cpp | 75 +++++++++++++++++++++++++--- 2 files changed, 72 insertions(+), 6 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index d2723e35..bae27f3c 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -6,6 +6,7 @@ #include "vk_api.hpp" #include "vk_descriptor_heap.hpp" #include "vk_descriptor_update_batch.hpp" +#include "vk_sampler_cache.hpp" class GPU; @@ -78,6 +79,7 @@ class RendererVK final : public Renderer { static u32 colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format); static u32 depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format); + Texture* findColorRenderTexture(u32 addr); Texture& getColorRenderTexture(u32 addr, PICA::ColorFmt format, u32 width, u32 height); Texture& getDepthRenderTexture(u32 addr, PICA::DepthFmt format, u32 width, u32 height); @@ -93,6 +95,7 @@ class RendererVK final : public Renderer { vk::RenderPass getRenderPass(PICA::ColorFmt colorFormat, std::optional depthFormat); std::unique_ptr descriptorUpdateBatch; + std::unique_ptr samplerCache; // Display pipeline data std::unique_ptr displayDescriptorHeap; diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 0a0450bb..23d317b1 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -13,6 +13,31 @@ CMRC_DECLARE(RendererVK); +static vk::SamplerCreateInfo sampler2D(bool filtered = true, bool clamp = false) { + vk::SamplerCreateInfo samplerInfo = {}; + samplerInfo.magFilter = filtered ? vk::Filter::eLinear : vk::Filter::eNearest; + samplerInfo.minFilter = filtered ? vk::Filter::eLinear : vk::Filter::eNearest; + + samplerInfo.mipmapMode = vk::SamplerMipmapMode::eLinear; + + samplerInfo.addressModeU = clamp ? vk::SamplerAddressMode::eClampToEdge : vk::SamplerAddressMode::eRepeat; + samplerInfo.addressModeV = clamp ? vk::SamplerAddressMode::eClampToEdge : vk::SamplerAddressMode::eRepeat; + samplerInfo.addressModeW = clamp ? vk::SamplerAddressMode::eClampToEdge : vk::SamplerAddressMode::eRepeat; + + samplerInfo.mipLodBias = 0.0f; + samplerInfo.anisotropyEnable = VK_FALSE; + samplerInfo.maxAnisotropy = 16.0f; + + samplerInfo.compareEnable = VK_FALSE; + samplerInfo.compareOp = vk::CompareOp::eAlways; + + samplerInfo.minLod = 0.0f; + samplerInfo.maxLod = VK_LOD_CLAMP_NONE; + samplerInfo.borderColor = vk::BorderColor::eFloatTransparentBlack; + samplerInfo.unnormalizedCoordinates = VK_FALSE; + return samplerInfo; +} + static vk::UniqueShaderModule createShaderModule(vk::Device device, std::span shaderCode) { vk::ShaderModuleCreateInfo shaderModuleInfo = {}; shaderModuleInfo.pCode = reinterpret_cast(shaderCode.data()); @@ -200,14 +225,37 @@ static u32 rotl32(u32 x, u32 n) { return (x << n) | (x >> (32 - n)); } static u32 ror32(u32 x, u32 n) { return (x >> n) | (x << (32 - n)); } u32 RendererVK::colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format) { - return rotl32(loc, 17) ^ ror32(size, 23) ^ (static_cast(format) << 60); + return loc | (static_cast(ror32(size, 23) ^ (static_cast(format))) << 32); } u32 RendererVK::depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format) { - return rotl32(loc, 17) ^ ror32(size, 29) ^ (static_cast(format) << 60); + return loc | (static_cast(ror32(size, 29) ^ (static_cast(format))) << 32); +} + +RendererVK::Texture* RendererVK::findColorRenderTexture(u32 addr) { + const auto lower = textureCache.lower_bound(addr); + + if (lower == textureCache.end()) { + // Not found + return nullptr; + } + + if (lower == textureCache.begin()) { + return &lower->second; + } + + Texture* texture = &lower->second; + + const usize sizeInBytes = texture->size[0] * texture->size[1] * texture->sizePerPixel; + + if ((addr - lower->second.loc) <= sizeInBytes) { + return texture; + } + + return nullptr; } RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt format, u32 width, u32 height) { - const u32 renderTextureHash = colorBufferHash(addr, width * height * PICA::sizePerPixel(format), format); + const u64 renderTextureHash = colorBufferHash(addr, width * height * PICA::sizePerPixel(format), format); // Cache hit if (textureCache.contains(renderTextureHash)) { @@ -265,7 +313,7 @@ RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt } RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt format, u32 width, u32 height) { - const u32 renderTextureHash = depthBufferHash(addr, width * height * PICA::sizePerPixel(format), format); + const u64 renderTextureHash = depthBufferHash(addr, width * height * PICA::sizePerPixel(format), format); // Cache hit if (textureCache.contains(renderTextureHash)) { @@ -620,7 +668,10 @@ void RendererVK::display() { getCurrentCommandBuffer().beginRenderPass(renderPassBeginInfo, vk::SubpassContents::eInline); // Render top screen - if (topActiveFb) { + if (Texture* topScreen = findColorRenderTexture(topScreenAddr); topScreen) { + descriptorUpdateBatch->addImageSampler( + topDisplayPipelineDescriptorSet[frameBufferingIndex], 0, topScreen->imageView.get(), samplerCache->getSampler(sampler2D()) + ); getCurrentCommandBuffer().bindDescriptorSets( vk::PipelineBindPoint::eGraphics, displayPipelineLayout.get(), 0, {topDisplayPipelineDescriptorSet[frameBufferingIndex]}, {} ); @@ -631,7 +682,10 @@ void RendererVK::display() { } // Render bottom screen - if (bottomActiveFb) { + if (Texture* bottomScreen = findColorRenderTexture(bottomScreenAddr); bottomScreenAddr) { + descriptorUpdateBatch->addImageSampler( + bottomDisplayPipelineDescriptorSet[frameBufferingIndex], 0, bottomScreen->imageView.get(), samplerCache->getSampler(sampler2D()) + ); getCurrentCommandBuffer().bindDescriptorSets( vk::PipelineBindPoint::eGraphics, displayPipelineLayout.get(), 0, {bottomDisplayPipelineDescriptorSet[frameBufferingIndex]}, {} ); @@ -698,6 +752,9 @@ void RendererVK::display() { Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); } + // Flush all descriptor writes + descriptorUpdateBatch->flush(); + vk::SubmitInfo submitInfo = {}; // Wait for any previous uses of the image image to finish presenting std::vector waitSemaphores; @@ -1164,6 +1221,12 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { Helpers::panic("Error creating descriptor update batch\n"); } + if (auto createResult = Vulkan::SamplerCache::create(device.get()); createResult.has_value()) { + samplerCache = std::make_unique(std::move(createResult.value())); + } else { + Helpers::panic("Error creating sampler cache\n"); + } + if (auto createResult = Vulkan::DescriptorHeap::create(device.get(), displayShaderLayout); createResult.has_value()) { displayDescriptorHeap = std::make_unique(std::move(createResult.value())); } else { From b3812548fe2d6afd0fec37f54910bd3b9abcf6b5 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sun, 20 Aug 2023 23:42:34 -0700 Subject: [PATCH 43/88] Fix bottom screen detection --- src/core/renderer_vk/renderer_vk.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 23d317b1..5635b169 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -682,7 +682,7 @@ void RendererVK::display() { } // Render bottom screen - if (Texture* bottomScreen = findColorRenderTexture(bottomScreenAddr); bottomScreenAddr) { + if (Texture* bottomScreen = findColorRenderTexture(bottomScreenAddr); bottomScreen) { descriptorUpdateBatch->addImageSampler( bottomDisplayPipelineDescriptorSet[frameBufferingIndex], 0, bottomScreen->imageView.get(), samplerCache->getSampler(sampler2D()) ); From cfd02f936ed0845e2d2413c01e51d232e346d30b Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Mon, 21 Aug 2023 22:34:16 -0700 Subject: [PATCH 44/88] Fix swapchain/screenTexture layout synchronization issues Been deving with a headless machine for too long. Fixes some presentation issues. --- src/core/renderer_vk/renderer_vk.cpp | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 5635b169..0de6606e 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -707,27 +707,29 @@ void RendererVK::display() { getCurrentCommandBuffer().pipelineBarrier( vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, { + // swapchainImage: Undefined -> TransferDst vk::ImageMemoryBarrier( vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eUndefined, vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), + // screenTexture: ColorAttachmentOptimal -> TransferSrc vk::ImageMemoryBarrier( - vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eTransferDstOptimal, + vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eColorAttachmentOptimal, vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), } ); + // Clear swapchain image with black static const std::array clearColor = {{0.0f, 0.0f, 0.0f, 1.0f}}; getCurrentCommandBuffer().clearColorImage( swapchainImages[swapchainImageIndex], vk::ImageLayout::eTransferDstOptimal, clearColor, vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ); - // Blit top/bottom screen into swapchain image - + // Blit screentexture into swapchain image static const vk::ImageBlit screenBlit( vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240 * 2, 1}}, vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1), {vk::Offset3D{}, vk::Offset3D{400, 240 * 2, 1}} @@ -738,13 +740,23 @@ void RendererVK::display() { ); // Prepare swapchain image for present + // Transfer screenTexture back into ColorAttachmentOptimal getCurrentCommandBuffer().pipelineBarrier( vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, - {vk::ImageMemoryBarrier( - vk::AccessFlagBits::eNone, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, - vk::ImageLayout::ePresentSrcKHR, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], - vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - )} + { + // swapchainImage: TransferDst -> Preset (wait for all writes) + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::ePresentSrcKHR, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + // screenTexture: TransferSrc -> ColorAttachmentOptimal (wait for all reads) + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferRead, vk::AccessFlagBits::eColorAttachmentRead, vk::ImageLayout::eTransferSrcOptimal, + vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + screenTexture[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + } ); } From d35c803ad6e6fa9475668ffdf97bec1059d28623 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Mon, 21 Aug 2023 22:40:40 -0700 Subject: [PATCH 45/88] Fix RenderTexture usage/image-aspect All color textures need to be sampled due to how we are transposing the image when writing to the render-texture. Depth-Stencil render-textures need to designate if it wants _either_ depth or stencil when creating an image-view. --- src/core/renderer_vk/renderer_vk.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 0de6606e..2c2187a8 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -278,7 +278,7 @@ RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt textureInfo.setTiling(vk::ImageTiling::eOptimal); textureInfo.setUsage( vk::ImageUsageFlagBits::eColorAttachment | vk::ImageUsageFlagBits::eInputAttachment | vk::ImageUsageFlagBits::eTransferSrc | - vk::ImageUsageFlagBits::eTransferDst + vk::ImageUsageFlagBits::eTransferDst | vk::ImageUsageFlagBits::eSampled ); textureInfo.setSharingMode(vk::SharingMode::eExclusive); textureInfo.setInitialLayout(vk::ImageLayout::eUndefined); @@ -352,7 +352,8 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt viewInfo.viewType = vk::ImageViewType::e2D; viewInfo.format = textureInfo.format; viewInfo.components = vk::ComponentMapping(); - viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1); + //viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1); + viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth, 0, 1, 0, 1); if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, {&newTexture.image.get(), 1}); result == vk::Result::eSuccess) { From 84e0d58d9eb1ffb83fcc906d64d49356238eca68 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Mon, 21 Aug 2023 22:52:51 -0700 Subject: [PATCH 46/88] Add initial render-target layout transition, depth-stencil aspect fix Fixes a lot of the render-target validation error messages. We "might" change the default layout for render-targets to shader-read-only and only use attachment-optimal layouts when they are armed for a render-pass. Render-Textures more often need to be ready for shaders than they need to be ready for render-passes. --- src/core/renderer_vk/renderer_vk.cpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 2c2187a8..7cc7b492 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -309,6 +309,16 @@ RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt Helpers::panic("Error creating color render-texture: %s\n", vk::to_string(createResult.result).c_str()); } + // Initial layout transition + getCurrentCommandBuffer().pipelineBarrier( + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllCommands, vk::DependencyFlags{}, {}, {}, + {vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eColorAttachmentRead, vk::ImageLayout::eUndefined, + vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, newTexture.image.get(), + viewInfo.subresourceRange + )} + ); + return newTexture; } @@ -352,9 +362,13 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt viewInfo.viewType = vk::ImageViewType::e2D; viewInfo.format = textureInfo.format; viewInfo.components = vk::ComponentMapping(); - //viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1); + // viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1); viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth, 0, 1, 0, 1); + if (PICA::hasStencil(format)) { + viewInfo.subresourceRange.aspectMask |= vk::ImageAspectFlagBits::eStencil; + } + if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, {&newTexture.image.get(), 1}); result == vk::Result::eSuccess) { newTexture.imageMemory = std::move(imageMemory); @@ -368,6 +382,16 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt Helpers::panic("Error creating depth render-texture: %s\n", vk::to_string(createResult.result).c_str()); } + // Initial layout transition + getCurrentCommandBuffer().pipelineBarrier( + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllCommands, vk::DependencyFlags{}, {}, {}, + {vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eDepthStencilAttachmentRead, vk::ImageLayout::eUndefined, + vk::ImageLayout::eDepthStencilAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, newTexture.image.get(), + viewInfo.subresourceRange + )} + ); + return newTexture; } From be5ebeefedf14caf624a9b708750ce339ce96f1a Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 24 Aug 2023 09:47:11 -0700 Subject: [PATCH 47/88] Default all texture layouts to `eShaderReadOnlyOptimal` By default, a texture sitting somewhere and ignored should be in a shader-read-only state, and transitioned into other layouts in exception to this passive state. This allows all shaders to be ready to be interpreted by shaders by default. --- src/core/renderer_vk/renderer_vk.cpp | 73 +++++++++++++++------------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 7cc7b492..1fc39f7d 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -289,6 +289,10 @@ RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt Helpers::panic("Error creating color render-texture image: %s\n", vk::to_string(createResult.result).c_str()); } + Vulkan::setObjectName( + device.get(), newTexture.image.get(), "TextureCache:%08x %ux%u %s", addr, width, height, vk::to_string(textureInfo.format).c_str() + ); + vk::ImageViewCreateInfo viewInfo = {}; viewInfo.image = newTexture.image.get(); viewInfo.viewType = vk::ImageViewType::e2D; @@ -313,9 +317,8 @@ RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt getCurrentCommandBuffer().pipelineBarrier( vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllCommands, vk::DependencyFlags{}, {}, {}, {vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eColorAttachmentRead, vk::ImageLayout::eUndefined, - vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, newTexture.image.get(), - viewInfo.subresourceRange + vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eShaderRead, vk::ImageLayout::eUndefined, vk::ImageLayout::eShaderReadOnlyOptimal, + VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, newTexture.image.get(), viewInfo.subresourceRange )} ); @@ -357,6 +360,10 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt Helpers::panic("Error creating depth render-texture image: %s\n", vk::to_string(createResult.result).c_str()); } + Vulkan::setObjectName( + device.get(), newTexture.image.get(), "TextureCache:%08x %ux%u %s", addr, width, height, vk::to_string(textureInfo.format).c_str() + ); + vk::ImageViewCreateInfo viewInfo = {}; viewInfo.image = newTexture.image.get(); viewInfo.viewType = vk::ImageViewType::e2D; @@ -386,9 +393,8 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt getCurrentCommandBuffer().pipelineBarrier( vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllCommands, vk::DependencyFlags{}, {}, {}, {vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eDepthStencilAttachmentRead, vk::ImageLayout::eUndefined, - vk::ImageLayout::eDepthStencilAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, newTexture.image.get(), - viewInfo.subresourceRange + vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eShaderRead, vk::ImageLayout::eUndefined, vk::ImageLayout::eShaderReadOnlyOptimal, + VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, newTexture.image.get(), viewInfo.subresourceRange )} ); @@ -420,8 +426,8 @@ vk::RenderPass RendererVK::getRenderPass(vk::Format colorFormat, std::optional renderScreenScopeColor = {{1.0f, 0.0f, 1.0f, 1.0f}}; Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), renderScreenScopeColor, "Render Screen"); - // Prepare screen texture for rendering into - getCurrentCommandBuffer().pipelineBarrier( - vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, - { - vk::ImageMemoryBarrier( - vk::AccessFlagBits::eMemoryRead, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eUndefined, - vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, - screenTexture[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) - ), - } - ); vk::RenderPassBeginInfo renderPassBeginInfo = {}; renderPassBeginInfo.renderPass = getRenderPass(vk::Format::eR8G8B8A8Unorm, {}); @@ -738,9 +733,9 @@ void RendererVK::display() { vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), - // screenTexture: ColorAttachmentOptimal -> TransferSrc + // screenTexture: ShaderReadOnlyOptimal -> TransferSrc vk::ImageMemoryBarrier( - vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eColorAttachmentOptimal, + vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eShaderReadOnlyOptimal, vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), @@ -767,7 +762,7 @@ void RendererVK::display() { // Prepare swapchain image for present // Transfer screenTexture back into ColorAttachmentOptimal getCurrentCommandBuffer().pipelineBarrier( - vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllGraphics, vk::DependencyFlags(), {}, {}, { // swapchainImage: TransferDst -> Preset (wait for all writes) vk::ImageMemoryBarrier( @@ -775,10 +770,10 @@ void RendererVK::display() { vk::ImageLayout::ePresentSrcKHR, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, swapchainImages[swapchainImageIndex], vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), - // screenTexture: TransferSrc -> ColorAttachmentOptimal (wait for all reads) + // screenTexture: TransferSrc -> eShaderReadOnlyOptimal (wait for all reads) vk::ImageMemoryBarrier( - vk::AccessFlagBits::eTransferRead, vk::AccessFlagBits::eColorAttachmentRead, vk::ImageLayout::eTransferSrcOptimal, - vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, + vk::AccessFlagBits::eTransferRead, vk::AccessFlagBits::eShaderRead, vk::ImageLayout::eTransferSrcOptimal, + vk::ImageLayout::eShaderReadOnlyOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[frameBufferingIndex].get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), } @@ -1197,6 +1192,8 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { if (auto createResult = device->createImageUnique(screenTextureInfo); createResult.result == vk::Result::eSuccess) { screenTexture[i] = std::move(createResult.value); + + Vulkan::setObjectName(device.get(), screenTexture[i].get(), "screenTexture#%zu", i); } else { Helpers::panic("Error creating top-screen image: %s\n", vk::to_string(createResult.result).c_str()); } @@ -1215,7 +1212,7 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { } } - // Memory is bounded, create views and framebuffer for screentexture + // Memory is bounded, create views, framebuffer, and layout transitions for screentexture vk::ImageViewCreateInfo screenTextureViewCreateInfo = {}; screenTextureViewCreateInfo.viewType = vk::ImageViewType::e2D; screenTextureViewCreateInfo.format = vk::Format::eR8G8B8A8Unorm; @@ -1234,6 +1231,16 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { Helpers::panic("Error creating screen texture view: %s\n", vk::to_string(createResult.result).c_str()); } + // Initial layout transition + getCurrentCommandBuffer().pipelineBarrier( + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllCommands, vk::DependencyFlags{}, {}, {}, + {vk::ImageMemoryBarrier( + vk::AccessFlagBits::eMemoryWrite, vk::AccessFlagBits::eShaderRead, vk::ImageLayout::eUndefined, + vk::ImageLayout::eShaderReadOnlyOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, screenTexture[i].get(), + screenTextureViewCreateInfo.subresourceRange + )} + ); + vk::FramebufferCreateInfo framebufferInfo = {}; framebufferInfo.setRenderPass(getRenderPass(vk::Format::eR8G8B8A8Unorm, {})); framebufferInfo.setAttachments(screenTextureViews[i].get()); @@ -1363,12 +1370,12 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, { vk::ImageMemoryBarrier( - vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eColorAttachmentOptimal, + vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferRead, vk::ImageLayout::eShaderReadOnlyOptimal, vk::ImageLayout::eTransferSrcOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, srcFramebuffer.image.get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), vk::ImageMemoryBarrier( - vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eColorAttachmentOptimal, + vk::AccessFlagBits::eColorAttachmentWrite, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eShaderReadOnlyOptimal, vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, destFramebuffer.image.get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), @@ -1381,16 +1388,16 @@ void RendererVK::displayTransfer(u32 inputAddr, u32 outputAddr, u32 inputSize, u ); blitCommandBuffer.pipelineBarrier( - vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::DependencyFlags(), {}, {}, + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllGraphics, vk::DependencyFlags(), {}, {}, { vk::ImageMemoryBarrier( vk::AccessFlagBits::eTransferRead, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferSrcOptimal, - vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, srcFramebuffer.image.get(), + vk::ImageLayout::eShaderReadOnlyOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, srcFramebuffer.image.get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), vk::ImageMemoryBarrier( vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eColorAttachmentWrite, vk::ImageLayout::eTransferDstOptimal, - vk::ImageLayout::eColorAttachmentOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, destFramebuffer.image.get(), + vk::ImageLayout::eShaderReadOnlyOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, destFramebuffer.image.get(), vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) ), } From d781802eb05d961519540b42d9314ff7b4800c44 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 24 Aug 2023 10:39:53 -0700 Subject: [PATCH 48/88] Fix render-texture cache lookups `[32bit loc | 32bit attributes]` Use `std::map::lower_bound(loc << 32)` to find the first address that matches the key in O(logn) time, finer grained searchs can happen after the fact in O(n) time. Fixes render-texture cache lookups --- include/renderer_vk/renderer_vk.hpp | 3 --- src/core/renderer_vk/renderer_vk.cpp | 29 ++++++++++++++-------------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index bae27f3c..51b84971 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -76,9 +76,6 @@ class RendererVK final : public Renderer { // Hash(loc, size, format) -> Texture std::map textureCache; - static u32 colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format); - static u32 depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format); - Texture* findColorRenderTexture(u32 addr); Texture& getColorRenderTexture(u32 addr, PICA::ColorFmt format, u32 width, u32 height); Texture& getDepthRenderTexture(u32 addr, PICA::DepthFmt format, u32 width, u32 height); diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 1fc39f7d..ed7fc41e 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -224,30 +224,29 @@ static s32 findQueueFamily( static u32 rotl32(u32 x, u32 n) { return (x << n) | (x >> (32 - n)); } static u32 ror32(u32 x, u32 n) { return (x >> n) | (x << (32 - n)); } -u32 RendererVK::colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format) { - return loc | (static_cast(ror32(size, 23) ^ (static_cast(format))) << 32); +// Lower 32 bits is the format + size, upper 32-bits is the address +static u64 colorBufferHash(u32 loc, u32 size, PICA::ColorFmt format) { + return (static_cast(loc) << 32) | (ror32(size, 23) ^ static_cast(format)); } -u32 RendererVK::depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format) { - return loc | (static_cast(ror32(size, 29) ^ (static_cast(format))) << 32); +static u64 depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format) { + return (static_cast(loc) << 32) | (ror32(size, 29) ^ static_cast(format)); } RendererVK::Texture* RendererVK::findColorRenderTexture(u32 addr) { - const auto lower = textureCache.lower_bound(addr); + // Find first render-texture hash that is >= to addr + auto match = textureCache.lower_bound(static_cast(addr) << 32); - if (lower == textureCache.end()) { + if (match == textureCache.end()) { // Not found return nullptr; } - if (lower == textureCache.begin()) { - return &lower->second; - } - - Texture* texture = &lower->second; + Texture* texture = &match->second; const usize sizeInBytes = texture->size[0] * texture->size[1] * texture->sizePerPixel; - if ((addr - lower->second.loc) <= sizeInBytes) { + // Ensure this address is within the span of the texture + if ((addr - match->second.loc) <= sizeInBytes) { return texture; } @@ -672,7 +671,7 @@ void RendererVK::display() { const u32 bottomScreenAddr = externalRegs[bottomActiveFb ? PICA::ExternalRegs::Framebuffer1AFirstAddr : PICA::ExternalRegs::Framebuffer1ASecondAddr]; - //// Render Frame(Simulated - just clear the images to different colors for now) + //// Render Display { static const std::array renderScreenScopeColor = {{1.0f, 0.0f, 1.0f, 1.0f}}; @@ -688,7 +687,7 @@ void RendererVK::display() { getCurrentCommandBuffer().beginRenderPass(renderPassBeginInfo, vk::SubpassContents::eInline); // Render top screen - if (Texture* topScreen = findColorRenderTexture(topScreenAddr); topScreen) { + if (const Texture* topScreen = findColorRenderTexture(topScreenAddr); topScreen) { descriptorUpdateBatch->addImageSampler( topDisplayPipelineDescriptorSet[frameBufferingIndex], 0, topScreen->imageView.get(), samplerCache->getSampler(sampler2D()) ); @@ -702,7 +701,7 @@ void RendererVK::display() { } // Render bottom screen - if (Texture* bottomScreen = findColorRenderTexture(bottomScreenAddr); bottomScreen) { + if (const Texture* bottomScreen = findColorRenderTexture(bottomScreenAddr); bottomScreen) { descriptorUpdateBatch->addImageSampler( bottomDisplayPipelineDescriptorSet[frameBufferingIndex], 0, bottomScreen->imageView.get(), samplerCache->getSampler(sampler2D()) ); From e4195d4d4dc9170e18fec110ec3f25ece5493713 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 24 Aug 2023 11:27:49 -0700 Subject: [PATCH 49/88] Implement color-buffer clears --- include/renderer_vk/renderer_vk.hpp | 2 +- src/core/renderer_vk/renderer_vk.cpp | 71 ++++++++++++++++++++++++++-- 2 files changed, 67 insertions(+), 6 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 51b84971..07fcdd86 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -76,7 +76,7 @@ class RendererVK final : public Renderer { // Hash(loc, size, format) -> Texture std::map textureCache; - Texture* findColorRenderTexture(u32 addr); + Texture* findRenderTexture(u32 addr); Texture& getColorRenderTexture(u32 addr, PICA::ColorFmt format, u32 width, u32 height); Texture& getDepthRenderTexture(u32 addr, PICA::DepthFmt format, u32 width, u32 height); diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index ed7fc41e..3387deda 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -232,7 +232,7 @@ static u64 depthBufferHash(u32 loc, u32 size, PICA::DepthFmt format) { return (static_cast(loc) << 32) | (ror32(size, 29) ^ static_cast(format)); } -RendererVK::Texture* RendererVK::findColorRenderTexture(u32 addr) { +RendererVK::Texture* RendererVK::findRenderTexture(u32 addr) { // Find first render-texture hash that is >= to addr auto match = textureCache.lower_bound(static_cast(addr) << 32); @@ -687,7 +687,10 @@ void RendererVK::display() { getCurrentCommandBuffer().beginRenderPass(renderPassBeginInfo, vk::SubpassContents::eInline); // Render top screen - if (const Texture* topScreen = findColorRenderTexture(topScreenAddr); topScreen) { + if (const Texture* topScreen = findRenderTexture(topScreenAddr); topScreen) { + static const std::array scopeColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; + Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), scopeColor, "Top Screen: %08x", topScreenAddr); + descriptorUpdateBatch->addImageSampler( topDisplayPipelineDescriptorSet[frameBufferingIndex], 0, topScreen->imageView.get(), samplerCache->getSampler(sampler2D()) ); @@ -701,7 +704,10 @@ void RendererVK::display() { } // Render bottom screen - if (const Texture* bottomScreen = findColorRenderTexture(bottomScreenAddr); bottomScreen) { + if (const Texture* bottomScreen = findRenderTexture(bottomScreenAddr); bottomScreen) { + static const std::array scopeColor = {{0.0f, 1.0f, 0.0f, 1.0f}}; + Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), scopeColor, "Bottom Screen: %08x", bottomScreenAddr); + descriptorUpdateBatch->addImageSampler( bottomDisplayPipelineDescriptorSet[frameBufferingIndex], 0, bottomScreen->imageView.get(), samplerCache->getSampler(sampler2D()) ); @@ -719,7 +725,7 @@ void RendererVK::display() { //// Present if (swapchainImageIndex != swapchainImageInvalid) { - static const std::array presentScopeColor = {{1.0f, 1.0f, 0.0f, 1.0f}}; + static const std::array presentScopeColor = {{1.0f, 1.0f, 1.0f, 1.0f}}; Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), presentScopeColor, "Present"); // Prepare swapchain image for color-clear/blit-dst, prepare top/bottom screen for blit-src @@ -1304,7 +1310,59 @@ void RendererVK::initGraphicsContext(SDL_Window* window) { ); } -void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) {} +void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 control) { + const Texture* renderTexture = findRenderTexture(startAddress); + + if (!renderTexture) { + // not found + return; + } + + // Color-Clear + { + vk::ClearColorValue clearColor = {}; + + clearColor.float32[0] = Helpers::getBits<24, 8>(value) / 255.0f; // r + clearColor.float32[1] = Helpers::getBits<16, 8>(value) / 255.0f; // g + clearColor.float32[2] = Helpers::getBits<8, 8>(value) / 255.0f; // b + clearColor.float32[3] = Helpers::getBits<0, 8>(value) / 255.0f; // a + + Vulkan::DebugLabelScope scope( + getCurrentCommandBuffer(), clearColor.float32, "ClearBuffer start:%08X end:%08X value:%08X control:%08X\n", startAddress, endAddress, + value, control + ); + + getCurrentCommandBuffer().pipelineBarrier( + vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + { + // renderTexture: ShaderReadOnlyOptimal -> TransferDst + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eShaderRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eShaderReadOnlyOptimal, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, renderTexture->image.get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + } + ); + + // Clear RenderTarget + getCurrentCommandBuffer().clearColorImage( + renderTexture->image.get(), vk::ImageLayout::eTransferDstOptimal, clearColor, + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ); + + getCurrentCommandBuffer().pipelineBarrier( + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllGraphics, vk::DependencyFlags(), {}, {}, + { + // renderTexture: TransferDst -> eShaderReadOnlyOptimal + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eShaderRead, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::eShaderReadOnlyOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, renderTexture->image.get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1) + ), + } + ); + } +} // NOTE: The GPU format has RGB5551 and RGB655 swapped compared to internal regs format static PICA::ColorFmt ToColorFmt(u32 format) { @@ -1457,7 +1515,10 @@ void RendererVK::drawVertices(PICA::PrimType primType, std::span labelColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; + Vulkan::insertDebugLabel(commandBuffer, labelColor, "DrawVertices: %u vertices", vertices.size()); commandBuffer.endRenderPass(); } From 57ee0a3db91b228a8b4d4c985ae243647680b752 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 24 Aug 2023 11:29:35 -0700 Subject: [PATCH 50/88] Fix display drawing Disable depth-testing, the display vertex-shader, and the viewport/scissor positioning of the bottom screen. We have visual! --- src/core/renderer_vk/renderer_vk.cpp | 8 ++++---- src/host_shaders/vulkan_display.vert | 20 ++------------------ 2 files changed, 6 insertions(+), 22 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 3387deda..ae4abc44 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -140,8 +140,8 @@ std::tuple createGraphicsPipeline( vk::PipelineDepthStencilStateCreateInfo depthStencilState = {}; - depthStencilState.depthTestEnable = true; - depthStencilState.depthWriteEnable = true; + depthStencilState.depthTestEnable = false; + depthStencilState.depthWriteEnable = false; depthStencilState.depthCompareOp = vk::CompareOp::eLessOrEqual; depthStencilState.depthBoundsTestEnable = false; depthStencilState.stencilTestEnable = false; @@ -715,8 +715,8 @@ void RendererVK::display() { vk::PipelineBindPoint::eGraphics, displayPipelineLayout.get(), 0, {bottomDisplayPipelineDescriptorSet[frameBufferingIndex]}, {} ); getCurrentCommandBuffer().bindPipeline(vk::PipelineBindPoint::eGraphics, displayPipeline.get()); - getCurrentCommandBuffer().setViewport(0, vk::Viewport(40, 0, 320, 240)); - getCurrentCommandBuffer().setScissor(0, vk::Rect2D({40, 0}, {320, 240})); + getCurrentCommandBuffer().setViewport(0, vk::Viewport(40, 240, 320, 240)); + getCurrentCommandBuffer().setScissor(0, vk::Rect2D({40, 240}, {320, 240})); getCurrentCommandBuffer().draw(3, 1, 0, 0); } diff --git a/src/host_shaders/vulkan_display.vert b/src/host_shaders/vulkan_display.vert index 766b8d0c..284997ca 100644 --- a/src/host_shaders/vulkan_display.vert +++ b/src/host_shaders/vulkan_display.vert @@ -2,22 +2,6 @@ layout(location = 0) out vec2 UV; void main() { - const vec4 positions[4] = vec4[]( - vec4(-1.0, 1.0, 1.0, 1.0), // Top-left - vec4(1.0, 1.0, 1.0, 1.0), // Top-right - vec4(-1.0, -1.0, 1.0, 1.0), // Bottom-left - vec4(1.0, -1.0, 1.0, 1.0) // Bottom-right - ); - - // The 3DS displays both screens' framebuffer rotated 90 deg counter clockwise - // So we adjust our texcoords accordingly - const vec2 texcoords[4] = vec2[]( - vec2(1.0, 1.0), // Top-right - vec2(1.0, 0.0), // Bottom-right - vec2(0.0, 1.0), // Top-left - vec2(0.0, 0.0) // Bottom-left - ); - - gl_Position = positions[gl_VertexIndex]; - UV = texcoords[gl_VertexIndex]; + UV = vec2((gl_VertexIndex << 1) & 2, gl_VertexIndex & 2); + gl_Position = vec4(UV * 2.0f + -1.0f, 0.0f, 1.0f); } \ No newline at end of file From 00e553a120f98a8781f9e8b7e54892d8cf239a6e Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sat, 26 Aug 2023 18:52:41 +0300 Subject: [PATCH 51/88] [NFC] Add more functions --- include/services/nfc.hpp | 2 ++ src/core/services/nfc.cpp | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/services/nfc.hpp b/include/services/nfc.hpp index ed4a8565..e65c42c1 100644 --- a/include/services/nfc.hpp +++ b/include/services/nfc.hpp @@ -44,7 +44,9 @@ class NFCService { void getTagInRangeEvent(u32 messagePointer); void getTagOutOfRangeEvent(u32 messagePointer); void getTagState(u32 messagePointer); + void shutdown(u32 messagePointer); void startCommunication(u32 messagePointer); + void startTagScanning(u32 messagePointer); void stopCommunication(u32 messagePointer); public: diff --git a/src/core/services/nfc.cpp b/src/core/services/nfc.cpp index eadb1b92..b1e04ab2 100644 --- a/src/core/services/nfc.cpp +++ b/src/core/services/nfc.cpp @@ -5,8 +5,10 @@ namespace NFCCommands { enum : u32 { Initialize = 0x00010040, + Shutdown = 0x00020040, StartCommunication = 0x00030000, StopCommunication = 0x00040000, + StartTagScanning = 0x00050040, GetTagInRangeEvent = 0x000B0000, GetTagOutOfRangeEvent = 0x000C0000, GetTagState = 0x000D0000, @@ -32,7 +34,9 @@ void NFCService::handleSyncRequest(u32 messagePointer) { case NFCCommands::GetTagInRangeEvent: getTagInRangeEvent(messagePointer); break; case NFCCommands::GetTagOutOfRangeEvent: getTagOutOfRangeEvent(messagePointer); break; case NFCCommands::GetTagState: getTagState(messagePointer); break; + case NFCCommands::Shutdown: shutdown(messagePointer); break; case NFCCommands::StartCommunication: startCommunication(messagePointer); break; + case NFCCommands::StartTagScanning: startTagScanning(messagePointer); break; case NFCCommands::StopCommunication: stopCommunication(messagePointer); break; default: Helpers::panic("NFC service requested. Command: %08X\n", command); } @@ -50,6 +54,16 @@ void NFCService::initialize(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +void NFCService::shutdown(u32 messagePointer) { + log("MFC::Shutdown"); + const u8 mode = mem.read8(messagePointer + 4); + + Helpers::warn("NFC::Shutdown: Unimplemented mode: %d", mode); + + mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + /* The NFC service provides userland with 2 events. One that is signaled when an NFC tag gets in range, And one that is signaled when it gets out of range. Userland can have a thread sleep on this so it will be alerted @@ -114,6 +128,14 @@ void NFCService::startCommunication(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +void NFCService::startTagScanning(u32 messagePointer) { + log("NFC::StartTagScanning\n"); + tagStatus = TagStatus::Scanning; + + mem.write32(messagePointer, IPC::responseHeader(0x5, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + void NFCService::stopCommunication(u32 messagePointer) { log("NFC::StopCommunication\n"); adapterStatus = Old3DSAdapterStatus::InitializationComplete; From 1540c941d03e9e51128c8cf8c46400d51be77628 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 24 Aug 2023 13:09:46 -0700 Subject: [PATCH 52/88] Write and flush top/bottom-screen descriptors A descriptor is consumed immediately when bound to a command buffer and cannot be updated after unless we mark the descriptors with `UPDATE_AFTER_BIND` flags and such. For now, just flush the writes immediately before binding the descriptors. Fixes all of the validation messages regarding invalid command buffers due to updated/deleted descriptor-sets. --- src/core/renderer_vk/renderer_vk.cpp | 72 ++++++++++++++++------------ 1 file changed, 41 insertions(+), 31 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index ae4abc44..eeddea32 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -686,38 +686,51 @@ void RendererVK::display() { getCurrentCommandBuffer().beginRenderPass(renderPassBeginInfo, vk::SubpassContents::eInline); - // Render top screen - if (const Texture* topScreen = findRenderTexture(topScreenAddr); topScreen) { - static const std::array scopeColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; - Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), scopeColor, "Top Screen: %08x", topScreenAddr); + const Texture* topScreen = findRenderTexture(topScreenAddr); + const Texture* bottomScreen = findRenderTexture(bottomScreenAddr); - descriptorUpdateBatch->addImageSampler( - topDisplayPipelineDescriptorSet[frameBufferingIndex], 0, topScreen->imageView.get(), samplerCache->getSampler(sampler2D()) - ); - getCurrentCommandBuffer().bindDescriptorSets( - vk::PipelineBindPoint::eGraphics, displayPipelineLayout.get(), 0, {topDisplayPipelineDescriptorSet[frameBufferingIndex]}, {} - ); + if (topScreen || bottomScreen) { getCurrentCommandBuffer().bindPipeline(vk::PipelineBindPoint::eGraphics, displayPipeline.get()); - getCurrentCommandBuffer().setViewport(0, vk::Viewport(0, 0, 400, 240)); - getCurrentCommandBuffer().setScissor(0, vk::Rect2D({0, 0}, {400, 240})); - getCurrentCommandBuffer().draw(3, 1, 0, 0); - } - // Render bottom screen - if (const Texture* bottomScreen = findRenderTexture(bottomScreenAddr); bottomScreen) { - static const std::array scopeColor = {{0.0f, 1.0f, 0.0f, 1.0f}}; - Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), scopeColor, "Bottom Screen: %08x", bottomScreenAddr); + // Update descriptors before binding to the command buffer + if (topScreen) { + descriptorUpdateBatch->addImageSampler( + topDisplayPipelineDescriptorSet[frameBufferingIndex], 0, topScreen->imageView.get(), samplerCache->getSampler(sampler2D()) + ); + } - descriptorUpdateBatch->addImageSampler( - bottomDisplayPipelineDescriptorSet[frameBufferingIndex], 0, bottomScreen->imageView.get(), samplerCache->getSampler(sampler2D()) - ); - getCurrentCommandBuffer().bindDescriptorSets( - vk::PipelineBindPoint::eGraphics, displayPipelineLayout.get(), 0, {bottomDisplayPipelineDescriptorSet[frameBufferingIndex]}, {} - ); - getCurrentCommandBuffer().bindPipeline(vk::PipelineBindPoint::eGraphics, displayPipeline.get()); - getCurrentCommandBuffer().setViewport(0, vk::Viewport(40, 240, 320, 240)); - getCurrentCommandBuffer().setScissor(0, vk::Rect2D({40, 240}, {320, 240})); - getCurrentCommandBuffer().draw(3, 1, 0, 0); + if (bottomScreen) { + descriptorUpdateBatch->addImageSampler( + bottomDisplayPipelineDescriptorSet[frameBufferingIndex], 0, bottomScreen->imageView.get(), samplerCache->getSampler(sampler2D()) + ); + } + descriptorUpdateBatch->flush(); + + // Render top screen + if (topScreen) { + static const std::array scopeColor = {{1.0f, 0.0f, 0.0f, 1.0f}}; + Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), scopeColor, "Top Screen: %08x", topScreenAddr); + + getCurrentCommandBuffer().bindDescriptorSets( + vk::PipelineBindPoint::eGraphics, displayPipelineLayout.get(), 0, {topDisplayPipelineDescriptorSet[frameBufferingIndex]}, {} + ); + getCurrentCommandBuffer().setViewport(0, vk::Viewport(0, 0, 400, 240)); + getCurrentCommandBuffer().setScissor(0, vk::Rect2D({0, 0}, {400, 240})); + getCurrentCommandBuffer().draw(3, 1, 0, 0); + } + + // Render bottom screen + if (bottomScreen) { + static const std::array scopeColor = {{0.0f, 1.0f, 0.0f, 1.0f}}; + Vulkan::DebugLabelScope debugScope(getCurrentCommandBuffer(), scopeColor, "Bottom Screen: %08x", bottomScreenAddr); + getCurrentCommandBuffer().bindDescriptorSets( + vk::PipelineBindPoint::eGraphics, displayPipelineLayout.get(), 0, {bottomDisplayPipelineDescriptorSet[frameBufferingIndex]}, {} + ); + getCurrentCommandBuffer().bindPipeline(vk::PipelineBindPoint::eGraphics, displayPipeline.get()); + getCurrentCommandBuffer().setViewport(0, vk::Viewport(40, 240, 320, 240)); + getCurrentCommandBuffer().setScissor(0, vk::Rect2D({40, 240}, {320, 240})); + getCurrentCommandBuffer().draw(3, 1, 0, 0); + } } getCurrentCommandBuffer().endRenderPass(); @@ -789,9 +802,6 @@ void RendererVK::display() { Helpers::panic("Error ending command buffer recording: %s\n", vk::to_string(endResult).c_str()); } - // Flush all descriptor writes - descriptorUpdateBatch->flush(); - vk::SubmitInfo submitInfo = {}; // Wait for any previous uses of the image image to finish presenting std::vector waitSemaphores; From 085d7d55680c259fe66fd124e1eaa74eb0539e69 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sat, 26 Aug 2023 22:04:21 -0700 Subject: [PATCH 53/88] Add clear-buffer support for Depth/Stencil --- include/renderer_vk/renderer_vk.hpp | 1 + src/core/renderer_vk/renderer_vk.cpp | 67 +++++++++++++++++++++++++--- 2 files changed, 62 insertions(+), 6 deletions(-) diff --git a/include/renderer_vk/renderer_vk.hpp b/include/renderer_vk/renderer_vk.hpp index 07fcdd86..92007674 100644 --- a/include/renderer_vk/renderer_vk.hpp +++ b/include/renderer_vk/renderer_vk.hpp @@ -61,6 +61,7 @@ class RendererVK final : public Renderer { u32 sizePerPixel = 0; std::array size = {}; + vk::Format format; vk::UniqueImage image; vk::UniqueDeviceMemory imageMemory; vk::UniqueImageView imageView; diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index eeddea32..de36e2a3 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -267,9 +267,11 @@ RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt newTexture.sizePerPixel = PICA::sizePerPixel(format); newTexture.size = fbSize; + newTexture.format = Vulkan::colorFormatToVulkan(format); + vk::ImageCreateInfo textureInfo = {}; textureInfo.setImageType(vk::ImageType::e2D); - textureInfo.setFormat(Vulkan::colorFormatToVulkan(format)); + textureInfo.setFormat(newTexture.format); textureInfo.setExtent(vk::Extent3D(width, height, 1)); textureInfo.setMipLevels(1); textureInfo.setArrayLayers(1); @@ -295,7 +297,7 @@ RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt vk::ImageViewCreateInfo viewInfo = {}; viewInfo.image = newTexture.image.get(); viewInfo.viewType = vk::ImageViewType::e2D; - viewInfo.format = textureInfo.format; + viewInfo.format = newTexture.format; viewInfo.components = vk::ComponentMapping(); viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eColor, 0, 1, 0, 1); @@ -338,9 +340,11 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt newTexture.sizePerPixel = PICA::sizePerPixel(format); newTexture.size = fbSize; + newTexture.format = Vulkan::depthFormatToVulkan(format); + vk::ImageCreateInfo textureInfo = {}; textureInfo.setImageType(vk::ImageType::e2D); - textureInfo.setFormat(Vulkan::depthFormatToVulkan(format)); + textureInfo.setFormat(newTexture.format); textureInfo.setExtent(vk::Extent3D(width, height, 1)); textureInfo.setMipLevels(1); textureInfo.setArrayLayers(1); @@ -366,7 +370,7 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt vk::ImageViewCreateInfo viewInfo = {}; viewInfo.image = newTexture.image.get(); viewInfo.viewType = vk::ImageViewType::e2D; - viewInfo.format = textureInfo.format; + viewInfo.format = newTexture.format; viewInfo.components = vk::ComponentMapping(); // viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1); viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth, 0, 1, 0, 1); @@ -1328,8 +1332,8 @@ void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 co return; } - // Color-Clear - { + if (*vk::componentName(renderTexture->format, 0) != 'D') { + // Color-Clear vk::ClearColorValue clearColor = {}; clearColor.float32[0] = Helpers::getBits<24, 8>(value) / 255.0f; // r @@ -1371,6 +1375,57 @@ void RendererVK::clearBuffer(u32 startAddress, u32 endAddress, u32 value, u32 co ), } ); + } else { + // Depth-Clear + vk::ClearDepthStencilValue clearDepthStencil = {}; + + if (vk::componentBits(renderTexture->format, 0) == 16) { + clearDepthStencil.depth = (value & 0xffff) / 65535.0f; + } else { + clearDepthStencil.depth = (value & 0xffffff) / 16777215.0f; + } + + clearDepthStencil.stencil = (value >> 24); // Stencil + + const std::array scopeColor = {{clearDepthStencil.depth, clearDepthStencil.depth, clearDepthStencil.depth, 1.0f}}; + Vulkan::DebugLabelScope scope( + getCurrentCommandBuffer(), scopeColor, "ClearBuffer start:%08X end:%08X value:%08X control:%08X\n", startAddress, endAddress, value, + control + ); + + getCurrentCommandBuffer().pipelineBarrier( + vk::PipelineStageFlagBits::eAllCommands, vk::PipelineStageFlagBits::eTransfer, vk::DependencyFlags(), {}, {}, + { + // renderTexture: ShaderReadOnlyOptimal -> TransferDst + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eShaderRead, vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eShaderReadOnlyOptimal, + vk::ImageLayout::eTransferDstOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, renderTexture->image.get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1) + ), + } + ); + + static vk::ImageSubresourceRange depthStencilRanges[2] = { + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth, 0, 1, 0, 1), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1)}; + + // Clear RenderTarget + getCurrentCommandBuffer().clearDepthStencilImage( + renderTexture->image.get(), vk::ImageLayout::eTransferDstOptimal, &clearDepthStencil, vk::componentCount(renderTexture->format), + depthStencilRanges + ); + + getCurrentCommandBuffer().pipelineBarrier( + vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllGraphics, vk::DependencyFlags(), {}, {}, + { + // renderTexture: TransferDst -> eShaderReadOnlyOptimal + vk::ImageMemoryBarrier( + vk::AccessFlagBits::eTransferWrite, vk::AccessFlagBits::eShaderRead, vk::ImageLayout::eTransferDstOptimal, + vk::ImageLayout::eShaderReadOnlyOptimal, VK_QUEUE_FAMILY_IGNORED, VK_QUEUE_FAMILY_IGNORED, renderTexture->image.get(), + vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1) + ), + } + ); } } From 225d2095b9cf1cedc945344c92c041e19cbfdd93 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sat, 26 Aug 2023 22:11:44 -0700 Subject: [PATCH 54/88] Remove redundant semaphore wait Don't need this anymore now that we sync on the host anyways --- src/core/renderer_vk/renderer_vk.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index de36e2a3..cd90fd70 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -817,12 +817,6 @@ void RendererVK::display() { waitSemaphoreStages.emplace_back(waitStageMask); } - // Ensure a proper semaphore wait on render-finished - // We already wait on the fence, but this must be done to be compliant - // to validation layers - waitSemaphores.emplace_back(renderFinishedSemaphore[frameBufferingIndex].get()); - waitSemaphoreStages.emplace_back(vk::PipelineStageFlagBits::eColorAttachmentOutput); - submitInfo.setWaitSemaphores(waitSemaphores); submitInfo.setWaitDstStageMask(waitSemaphoreStages); } From 2f96c1d24da7f54ad2de210ae7edc215b47e04ac Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sat, 26 Aug 2023 22:25:18 -0700 Subject: [PATCH 55/88] Fix Depth/Stencil render-target aspects Views must have a singular aspect set, while pipeline barriers need both aspects. Fixes more validation messages --- src/core/renderer_vk/renderer_vk.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index cd90fd70..6c6d9699 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -352,7 +352,7 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt textureInfo.setTiling(vk::ImageTiling::eOptimal); textureInfo.setUsage( vk::ImageUsageFlagBits::eDepthStencilAttachment | vk::ImageUsageFlagBits::eInputAttachment | vk::ImageUsageFlagBits::eTransferSrc | - vk::ImageUsageFlagBits::eTransferDst + vk::ImageUsageFlagBits::eTransferDst | vk::ImageUsageFlagBits::eSampled ); textureInfo.setSharingMode(vk::SharingMode::eExclusive); textureInfo.setInitialLayout(vk::ImageLayout::eUndefined); @@ -375,10 +375,6 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt // viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil, 0, 1, 0, 1); viewInfo.subresourceRange = vk::ImageSubresourceRange(vk::ImageAspectFlagBits::eDepth, 0, 1, 0, 1); - if (PICA::hasStencil(format)) { - viewInfo.subresourceRange.aspectMask |= vk::ImageAspectFlagBits::eStencil; - } - if (auto [result, imageMemory] = Vulkan::commitImageHeap(device.get(), physicalDevice, {&newTexture.image.get(), 1}); result == vk::Result::eSuccess) { newTexture.imageMemory = std::move(imageMemory); @@ -392,7 +388,10 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt Helpers::panic("Error creating depth render-texture: %s\n", vk::to_string(createResult.result).c_str()); } - // Initial layout transition + // Initial layout transition (depth and/or stencil) + if (vk::componentCount(newTexture.format) == 2) { + viewInfo.subresourceRange.aspectMask |= vk::ImageAspectFlagBits::eStencil; + } getCurrentCommandBuffer().pipelineBarrier( vk::PipelineStageFlagBits::eTransfer, vk::PipelineStageFlagBits::eAllCommands, vk::DependencyFlags{}, {}, {}, {vk::ImageMemoryBarrier( From c77740acf00317e62283379a64dc59d21d7fca26 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Sat, 26 Aug 2023 22:44:57 -0700 Subject: [PATCH 56/88] Fix render-texture size Use the width/height provided and not the current `fbSize`. Fixes a division exception. --- src/core/renderer_vk/renderer_vk.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/renderer_vk/renderer_vk.cpp b/src/core/renderer_vk/renderer_vk.cpp index 6c6d9699..52c46668 100644 --- a/src/core/renderer_vk/renderer_vk.cpp +++ b/src/core/renderer_vk/renderer_vk.cpp @@ -265,7 +265,7 @@ RendererVK::Texture& RendererVK::getColorRenderTexture(u32 addr, PICA::ColorFmt Texture& newTexture = textureCache[renderTextureHash]; newTexture.loc = addr; newTexture.sizePerPixel = PICA::sizePerPixel(format); - newTexture.size = fbSize; + newTexture.size = {width, height}; newTexture.format = Vulkan::colorFormatToVulkan(format); @@ -338,7 +338,7 @@ RendererVK::Texture& RendererVK::getDepthRenderTexture(u32 addr, PICA::DepthFmt Texture& newTexture = textureCache[renderTextureHash]; newTexture.loc = addr; newTexture.sizePerPixel = PICA::sizePerPixel(format); - newTexture.size = fbSize; + newTexture.size = {width, height}; newTexture.format = Vulkan::depthFormatToVulkan(format); From 7bf97ab840d5ab2aeedb184dbd9ecda4edb7e51c Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 27 Aug 2023 16:38:21 +0300 Subject: [PATCH 57/88] Stub FS functions --- include/services/fs.hpp | 3 +++ src/core/services/fs.cpp | 19 ++++++++++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/include/services/fs.hpp b/include/services/fs.hpp index 36ab0389..3b151985 100644 --- a/include/services/fs.hpp +++ b/include/services/fs.hpp @@ -53,6 +53,9 @@ class FSService { void getFreeBytes(u32 messagePointer); void getFormatInfo(u32 messagePointer); void getPriority(u32 messagePointer); + void getThisSaveDataSecureValue(u32 messagePointer); + void theGameboyVCFunction(u32 messagePointer); + void initialize(u32 messagePointer); void initializeWithSdkVersion(u32 messagePointer); void isSdmcDetected(u32 messagePointer); diff --git a/src/core/services/fs.cpp b/src/core/services/fs.cpp index e3c12698..4270a04f 100644 --- a/src/core/services/fs.cpp +++ b/src/core/services/fs.cpp @@ -31,7 +31,9 @@ namespace FSCommands { DeleteExtSaveData = 0x08520100, InitializeWithSdkVersion = 0x08610042, SetPriority = 0x08620040, - GetPriority = 0x08630000 + GetPriority = 0x08630000, + GetThisSaveDataSecureValue = 0x086F0040, + TheGameboyVCFunction = 0x08750180, }; } @@ -159,6 +161,7 @@ void FSService::handleSyncRequest(u32 messagePointer) { case FSCommands::GetFreeBytes: getFreeBytes(messagePointer); break; case FSCommands::GetFormatInfo: getFormatInfo(messagePointer); break; case FSCommands::GetPriority: getPriority(messagePointer); break; + case FSCommands::GetThisSaveDataSecureValue: getThisSaveDataSecureValue(messagePointer); break; case FSCommands::Initialize: initialize(messagePointer); break; case FSCommands::InitializeWithSdkVersion: initializeWithSdkVersion(messagePointer); break; case FSCommands::IsSdmcDetected: isSdmcDetected(messagePointer); break; @@ -168,6 +171,7 @@ void FSService::handleSyncRequest(u32 messagePointer) { case FSCommands::OpenFile: [[likely]] openFile(messagePointer); break; case FSCommands::OpenFileDirectly: [[likely]] openFileDirectly(messagePointer); break; case FSCommands::SetPriority: setPriority(messagePointer); break; + case FSCommands::TheGameboyVCFunction: theGameboyVCFunction(messagePointer); break; default: Helpers::panic("FS service requested. Command: %08X\n", command); } } @@ -584,6 +588,19 @@ void FSService::setPriority(u32 messagePointer) { priority = value; } +void FSService::getThisSaveDataSecureValue(u32 messagePointer) { + Helpers::warn("Unimplemented FS::GetThisSaveDataSecureValue"); + + mem.write32(messagePointer, IPC::responseHeader(0x86F, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + +void FSService::theGameboyVCFunction(u32 messagePointer) { + Helpers::warn("Unimplemented FS: function: 0x08750180"); + + mem.write32(messagePointer, IPC::responseHeader(0x875, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} // Shows whether an SD card is inserted. At the moment stubbed to no constexpr bool sdInserted = false; From 5f52a1bec4526a95d65fdcdb236bb7b117fb526c Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 27 Aug 2023 17:41:32 +0300 Subject: [PATCH 58/88] [FS] AbnegateAccessRight, SetArchivePriority, GetArchiveResource --- include/fs/archive_base.hpp | 7 ++++++ include/services/fs.hpp | 4 +++- src/core/services/fs.cpp | 48 +++++++++++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) diff --git a/include/fs/archive_base.hpp b/include/fs/archive_base.hpp index ee2cdc6a..c782f6a6 100644 --- a/include/fs/archive_base.hpp +++ b/include/fs/archive_base.hpp @@ -251,4 +251,11 @@ public: virtual std::optional readFile(FileSession* file, u64 offset, u32 size, u32 dataPointer) = 0; ArchiveBase(Memory& mem) : mem(mem) {} +}; + +struct ArchiveResource { + u32 sectorSize; // Size of a sector in bytes + u32 clusterSize; // Size of a cluster in bytes + u32 partitionCapacityInClusters; + u32 freeSpaceInClusters; }; \ No newline at end of file diff --git a/include/services/fs.hpp b/include/services/fs.hpp index 3b151985..8af39ef1 100644 --- a/include/services/fs.hpp +++ b/include/services/fs.hpp @@ -41,6 +41,7 @@ class FSService { FSPath readPath(u32 type, u32 pointer, u32 size); // Service commands + void abnegateAccessRight(u32 messagePointer); void createDirectory(u32 messagePointer); void createExtSaveData(u32 messagePointer); void createFile(u32 messagePointer); @@ -50,12 +51,12 @@ class FSService { void deleteFile(u32 messagePointer); void formatSaveData(u32 messagePointer); void formatThisUserSaveData(u32 messagePointer); + void getArchiveResource(u32 messagePointer); void getFreeBytes(u32 messagePointer); void getFormatInfo(u32 messagePointer); void getPriority(u32 messagePointer); void getThisSaveDataSecureValue(u32 messagePointer); void theGameboyVCFunction(u32 messagePointer); - void initialize(u32 messagePointer); void initializeWithSdkVersion(u32 messagePointer); void isSdmcDetected(u32 messagePointer); @@ -64,6 +65,7 @@ class FSService { void openDirectory(u32 messagePointer); void openFile(u32 messagePointer); void openFileDirectly(u32 messagePointer); + void setArchivePriority(u32 messagePointer); void setPriority(u32 messagePointer); // Used for set/get priority: Not sure what sort of priority this is referring to diff --git a/src/core/services/fs.cpp b/src/core/services/fs.cpp index 4270a04f..ec817e4d 100644 --- a/src/core/services/fs.cpp +++ b/src/core/services/fs.cpp @@ -25,10 +25,13 @@ namespace FSCommands { GetFreeBytes = 0x08120080, IsSdmcDetected = 0x08170000, IsSdmcWritable = 0x08180000, + AbnegateAccessRight = 0x08400040, GetFormatInfo = 0x084500C2, + GetArchiveResource = 0x08490040, FormatSaveData = 0x084C0242, CreateExtSaveData = 0x08510242, DeleteExtSaveData = 0x08520100, + SetArchivePriority = 0x085A00C0, InitializeWithSdkVersion = 0x08610042, SetPriority = 0x08620040, GetPriority = 0x08630000, @@ -158,6 +161,7 @@ void FSService::handleSyncRequest(u32 messagePointer) { case FSCommands::DeleteFile: deleteFile(messagePointer); break; case FSCommands::FormatSaveData: formatSaveData(messagePointer); break; case FSCommands::FormatThisUserSaveData: formatThisUserSaveData(messagePointer); break; + case FSCommands::GetArchiveResource: getArchiveResource(messagePointer); break; case FSCommands::GetFreeBytes: getFreeBytes(messagePointer); break; case FSCommands::GetFormatInfo: getFormatInfo(messagePointer); break; case FSCommands::GetPriority: getPriority(messagePointer); break; @@ -170,7 +174,9 @@ void FSService::handleSyncRequest(u32 messagePointer) { case FSCommands::OpenDirectory: openDirectory(messagePointer); break; case FSCommands::OpenFile: [[likely]] openFile(messagePointer); break; case FSCommands::OpenFileDirectly: [[likely]] openFileDirectly(messagePointer); break; + case FSCommands::SetArchivePriority: setArchivePriority(messagePointer); break; case FSCommands::SetPriority: setPriority(messagePointer); break; + case FSCommands::AbnegateAccessRight: abnegateAccessRight(messagePointer); break; case FSCommands::TheGameboyVCFunction: theGameboyVCFunction(messagePointer); break; default: Helpers::panic("FS service requested. Command: %08X\n", command); } @@ -579,6 +585,36 @@ void FSService::getPriority(u32 messagePointer) { mem.write32(messagePointer + 8, priority); } +void FSService::getArchiveResource(u32 messagePointer) { + const u32 mediaType = mem.read32(messagePointer + 4); + log("FS::GetArchiveResource (media type = %d) (stubbed)\n"); + + // For the time being, return the same stubbed archive resource for every media type + static constexpr ArchiveResource resource = { + .sectorSize = 512, + .clusterSize = 16_KB, + .partitionCapacityInClusters = 0x80000, // 0x80000 * 16 KB = 8GB + .freeSpaceInClusters = 0x80000, // Same here + }; + + mem.write32(messagePointer, IPC::responseHeader(0x849, 5, 0)); + mem.write32(messagePointer + 4, Result::Success); + + mem.write32(messagePointer + 8, resource.sectorSize); + mem.write32(messagePointer + 12, resource.clusterSize); + mem.write32(messagePointer + 16, resource.partitionCapacityInClusters); + mem.write32(messagePointer + 20, resource.freeSpaceInClusters); +} + +void FSService::setArchivePriority(u32 messagePointer) { + Handle archive = mem.read64(messagePointer + 4); + const u32 value = mem.read32(messagePointer + 12); + log("FS::SetArchivePriority (priority = %d, archive handle = %X)\n", value, handle); + + mem.write32(messagePointer, IPC::responseHeader(0x85A, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + void FSService::setPriority(u32 messagePointer) { const u32 value = mem.read32(messagePointer + 4); log("FS::SetPriority (priority = %d)\n", value); @@ -588,6 +624,18 @@ void FSService::setPriority(u32 messagePointer) { priority = value; } +void FSService::abnegateAccessRight(u32 messagePointer) { + const u32 right = mem.read32(messagePointer + 4); + log("FS::AbnegateAccessRight (right = %d)\n", right); + + if (right >= 0x38) { + Helpers::warn("FS::AbnegateAccessRight: Invalid access right"); + } + + mem.write32(messagePointer, IPC::responseHeader(0x840, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + void FSService::getThisSaveDataSecureValue(u32 messagePointer) { Helpers::warn("Unimplemented FS::GetThisSaveDataSecureValue"); From c41b4b465a27f8abb987c0b5254a925b8f5d8c68 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 27 Aug 2023 22:14:25 +0300 Subject: [PATCH 59/88] Stub SetThisSaveDataSecureValue --- include/services/fs.hpp | 1 + src/core/services/fs.cpp | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/services/fs.hpp b/include/services/fs.hpp index 8af39ef1..775c129a 100644 --- a/include/services/fs.hpp +++ b/include/services/fs.hpp @@ -67,6 +67,7 @@ class FSService { void openFileDirectly(u32 messagePointer); void setArchivePriority(u32 messagePointer); void setPriority(u32 messagePointer); + void setThisSaveDataSecureValue(u32 messagePointer); // Used for set/get priority: Not sure what sort of priority this is referring to u32 priority; diff --git a/src/core/services/fs.cpp b/src/core/services/fs.cpp index ec817e4d..00b66f0c 100644 --- a/src/core/services/fs.cpp +++ b/src/core/services/fs.cpp @@ -35,6 +35,7 @@ namespace FSCommands { InitializeWithSdkVersion = 0x08610042, SetPriority = 0x08620040, GetPriority = 0x08630000, + SetThisSaveDataSecureValue = 0x086E00C0, GetThisSaveDataSecureValue = 0x086F0040, TheGameboyVCFunction = 0x08750180, }; @@ -176,6 +177,7 @@ void FSService::handleSyncRequest(u32 messagePointer) { case FSCommands::OpenFileDirectly: [[likely]] openFileDirectly(messagePointer); break; case FSCommands::SetArchivePriority: setArchivePriority(messagePointer); break; case FSCommands::SetPriority: setPriority(messagePointer); break; + case FSCommands::SetThisSaveDataSecureValue: setThisSaveDataSecureValue(messagePointer); break; case FSCommands::AbnegateAccessRight: abnegateAccessRight(messagePointer); break; case FSCommands::TheGameboyVCFunction: theGameboyVCFunction(messagePointer); break; default: Helpers::panic("FS service requested. Command: %08X\n", command); @@ -643,6 +645,19 @@ void FSService::getThisSaveDataSecureValue(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +void FSService::setThisSaveDataSecureValue(u32 messagePointer) { + const u64 value = mem.read32(messagePointer + 4); + const u32 slot = mem.read32(messagePointer + 12); + const u32 id = mem.read32(messagePointer + 16); + const u8 variation = mem.read8(messagePointer + 20); + + // TODO: Actually do something with this. + Helpers::warn("Unimplemented FS::SetThisSaveDataSecureValue"); + + mem.write32(messagePointer, IPC::responseHeader(0x86E, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + void FSService::theGameboyVCFunction(u32 messagePointer) { Helpers::warn("Unimplemented FS: function: 0x08750180"); From e9f94aab24a3feb57463e8c17346139866842f69 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Mon, 28 Aug 2023 12:43:35 +0300 Subject: [PATCH 60/88] Default TEV source 15 to the vertex colour Co-Authored-By: GPUCode <47210458+GPUCode@users.noreply.github.com> --- src/host_shaders/opengl_fragment_shader.frag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/host_shaders/opengl_fragment_shader.frag b/src/host_shaders/opengl_fragment_shader.frag index 3f1a256b..2fd4146a 100644 --- a/src/host_shaders/opengl_fragment_shader.frag +++ b/src/host_shaders/opengl_fragment_shader.frag @@ -345,7 +345,7 @@ void main() { if ((textureConfig & 2u) != 0u) tevSources[4] = texture(u_tex1, v_texcoord1); if ((textureConfig & 4u) != 0u) tevSources[5] = texture(u_tex2, tex2UV); tevSources[13] = vec4(0.0); // Previous buffer - tevSources[15] = vec4(0.0); // Previous combiner + tevSources[15] = v_colour; // Previous combiner tevNextPreviousBuffer = v_textureEnvBufferColor; uint textureEnvUpdateBuffer = readPicaReg(0xE0); From 92a1f18af7d19bca85cf260d312d954672ca5210 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Mon, 28 Aug 2023 18:56:12 +0300 Subject: [PATCH 61/88] [MIC] Add GetPower --- include/services/mic.hpp | 1 + src/core/services/mic.cpp | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/include/services/mic.hpp b/include/services/mic.hpp index 508e9bbc..f709c27f 100644 --- a/include/services/mic.hpp +++ b/include/services/mic.hpp @@ -17,6 +17,7 @@ class MICService { // Service commands void getEventHandle(u32 messagePointer); void getGain(u32 messagePointer); + void getPower(u32 messagePointer); void isSampling(u32 messagePointer); void mapSharedMem(u32 messagePointer); void setClamp(u32 messagePointer); diff --git a/src/core/services/mic.cpp b/src/core/services/mic.cpp index d3336c5f..c20159f1 100644 --- a/src/core/services/mic.cpp +++ b/src/core/services/mic.cpp @@ -13,6 +13,7 @@ namespace MICCommands { SetGain = 0x00080040, GetGain = 0x00090000, SetPower = 0x000A0040, + GetPower = 0x000B0000, SetIirFilter = 0x000C0042, SetClamp = 0x000D0040, CaptainToadFunction = 0x00100040, @@ -33,6 +34,7 @@ void MICService::handleSyncRequest(u32 messagePointer) { switch (command) { case MICCommands::GetEventHandle: getEventHandle(messagePointer); break; case MICCommands::GetGain: getGain(messagePointer); break; + case MICCommands::GetPower: getPower(messagePointer); break; case MICCommands::IsSampling: isSampling(messagePointer); break; case MICCommands::MapSharedMem: mapSharedMem(messagePointer); break; case MICCommands::SetClamp: setClamp(messagePointer); break; @@ -101,6 +103,14 @@ void MICService::setPower(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +void MICService::getPower(u32 messagePointer) { + log("MIC::GetPower\n"); + + mem.write32(messagePointer, IPC::responseHeader(0xB, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + mem.write8(messagePointer + 8, micEnabled ? 1 : 0); +} + void MICService::setClamp(u32 messagePointer) { u8 val = mem.read8(messagePointer + 4); log("MIC::SetClamp (value = %d)\n", val); From dc68fc9943658b5b22614e998f8b3f4597b36e1e Mon Sep 17 00:00:00 2001 From: GPUCode Date: Tue, 29 Aug 2023 21:05:37 +0300 Subject: [PATCH 62/88] gpu: Saturate color before interpolation --- src/host_shaders/opengl_vertex_shader.vert | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/host_shaders/opengl_vertex_shader.vert b/src/host_shaders/opengl_vertex_shader.vert index cbf992c4..63ef1ae4 100644 --- a/src/host_shaders/opengl_vertex_shader.vert +++ b/src/host_shaders/opengl_vertex_shader.vert @@ -64,7 +64,8 @@ float decodeFP(uint hex, uint E, uint M) { void main() { gl_Position = a_coords; - v_colour = a_vertexColour; + vec4 colourAbs = abs(a_vertexColour); + v_colour = min(colourAbs, vec4(1.f)); // Flip y axis of UVs because OpenGL uses an inverted y for texture sampling compared to the PICA v_texcoord0 = vec3(a_texcoord0.x, 1.0 - a_texcoord0.y, a_texcoord0_w); @@ -94,4 +95,4 @@ void main() { // There's also another, always-on clipping plane based on vertex z gl_ClipDistance[0] = -a_coords.z; gl_ClipDistance[1] = dot(clipData, a_coords); -} \ No newline at end of file +} From cb3f7fa1345fa5526e6d3c77b987caa5556dbe8b Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Thu, 31 Aug 2023 22:47:43 +0300 Subject: [PATCH 63/88] Remove hacky timer hacks --- include/kernel/kernel.hpp | 9 --------- src/core/kernel/kernel.cpp | 2 -- src/core/kernel/timers.cpp | 2 +- 3 files changed, 1 insertion(+), 12 deletions(-) diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp index e0021541..3d4b6917 100644 --- a/include/kernel/kernel.hpp +++ b/include/kernel/kernel.hpp @@ -36,7 +36,6 @@ class Kernel { std::vector objects; std::vector portHandles; std::vector mutexHandles; - std::vector timerHandles; // Thread indices, sorted by priority std::vector threadIndices; @@ -187,14 +186,6 @@ public: void requireReschedule() { needReschedule = true; } void evalReschedule() { - for (auto handle : timerHandles) { - const auto object = getObject(handle, KernelObjectType::Timer); - if (object != nullptr) { - Timer* timer = object->getData(); - updateTimer(handle, timer); - } - } - if (needReschedule) { needReschedule = false; rescheduleThreads(); diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp index 72af8dd2..5eb3cddb 100644 --- a/src/core/kernel/kernel.cpp +++ b/src/core/kernel/kernel.cpp @@ -7,7 +7,6 @@ Kernel::Kernel(CPU& cpu, Memory& mem, GPU& gpu, const EmulatorConfig& config) : cpu(cpu), regs(cpu.regs()), mem(mem), handleCounter(0), serviceManager(regs, mem, gpu, currentProcess, *this, config) { objects.reserve(512); // Make room for a few objects to avoid further memory allocs later mutexHandles.reserve(8); - timerHandles.reserve(8); portHandles.reserve(32); threadIndices.reserve(appResourceLimits.maxThreads); @@ -149,7 +148,6 @@ void Kernel::reset() { } objects.clear(); mutexHandles.clear(); - timerHandles.clear(); portHandles.clear(); threadIndices.clear(); serviceManager.reset(); diff --git a/src/core/kernel/timers.cpp b/src/core/kernel/timers.cpp index 5d021679..1f5fefaf 100644 --- a/src/core/kernel/timers.cpp +++ b/src/core/kernel/timers.cpp @@ -9,7 +9,7 @@ Handle Kernel::makeTimer(ResetType type) { Helpers::panic("Created pulse timer"); } - timerHandles.push_back(ret); + // timerHandles.push_back(ret); return ret; } From 137f29509fbf928cf24fa8669ffaf9137ccab6b1 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Thu, 31 Aug 2023 22:48:35 +0300 Subject: [PATCH 64/88] Add warning --- src/core/kernel/timers.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/kernel/timers.cpp b/src/core/kernel/timers.cpp index 1f5fefaf..1c18d9de 100644 --- a/src/core/kernel/timers.cpp +++ b/src/core/kernel/timers.cpp @@ -60,7 +60,7 @@ void Kernel::svcCreateTimer() { } // Have a warning here until our timers don't suck - Helpers::warn("Called Kernel::CreateTimer"); + Helpers::warn("Called Kernel::CreateTimer. Timers are currently not updated nor triggered properly!"); logSVC("CreateTimer (resetType = %s)\n", resetTypeToString(resetType)); regs[0] = Result::Success; From 1b1dbeb105995683a53c902dbc035ed6cb623134 Mon Sep 17 00:00:00 2001 From: Wunkolo Date: Thu, 31 Aug 2023 12:42:29 -0700 Subject: [PATCH 65/88] vulkan: Add shader debugging information Utilize the `GPU_DEBUG_INFO` flag to conditionally compile spirv files with debugging information. --- CMakeLists.txt | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a32382a5..f2cf0958 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -273,18 +273,28 @@ if(ENABLE_VULKAN) "src/host_shaders/vulkan_display.vert" ) -foreach( HOST_SHADER_SOURCE ${RENDERER_VK_HOST_SHADERS_SOURCE} ) - get_filename_component( FILE_NAME ${HOST_SHADER_SOURCE} NAME ) - set( HOST_SHADER_SPIRV "${PROJECT_BINARY_DIR}/host_shaders/${FILE_NAME}.spv" ) - add_custom_command( - OUTPUT ${HOST_SHADER_SPIRV} - COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/host_shaders/" - COMMAND Vulkan::glslangValidator -t --target-env vulkan1.1 -g -V "${PROJECT_SOURCE_DIR}/${HOST_SHADER_SOURCE}" -o ${HOST_SHADER_SPIRV} - #COMMAND ${SPIRV_OPT} -O ${HOST_SHADER_SPIRV} -o ${HOST_SHADER_SPIRV} - DEPENDS ${HOST_SHADER_SOURCE} - ) - list( APPEND RENDERER_VK_HOST_SHADERS_SPIRV ${HOST_SHADER_SPIRV} ) -endforeach() + + set( RENDERER_VK_HOST_SHADERS_FLAGS -e main --target-env vulkan1.1) + + if(GPU_DEBUG_INFO) + # generate nonsemantic shader debug information with source + set( RENDERER_VK_HOST_SHADERS_FLAGS ${RENDERER_VK_HOST_SHADERS_FLAGS} -gVS) + else() + set( RENDERER_VK_HOST_SHADERS_FLAGS ${RENDERER_VK_HOST_SHADERS_FLAGS} -g0) + endif() + + # Compile each vulkan shader into an .spv file + foreach( HOST_SHADER_SOURCE ${RENDERER_VK_HOST_SHADERS_SOURCE} ) + get_filename_component( FILE_NAME ${HOST_SHADER_SOURCE} NAME ) + set( HOST_SHADER_SPIRV "${PROJECT_BINARY_DIR}/host_shaders/${FILE_NAME}.spv" ) + add_custom_command( + OUTPUT ${HOST_SHADER_SPIRV} + COMMAND ${CMAKE_COMMAND} -E make_directory "${PROJECT_BINARY_DIR}/host_shaders/" + COMMAND Vulkan::glslangValidator ${RENDERER_VK_HOST_SHADERS_FLAGS} -V "${PROJECT_SOURCE_DIR}/${HOST_SHADER_SOURCE}" -o ${HOST_SHADER_SPIRV} + DEPENDS ${HOST_SHADER_SOURCE} + ) + list( APPEND RENDERER_VK_HOST_SHADERS_SPIRV ${HOST_SHADER_SPIRV} ) + endforeach() cmrc_add_resource_library( resources_renderer_vk From 2e40d7a59caf22a0382124aeb1856a871270edbf Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Fri, 1 Sep 2023 11:58:38 +0300 Subject: [PATCH 66/88] added some y2r service calls --- include/services/y2r.hpp | 4 +++ src/core/services/y2r.cpp | 56 +++++++++++++++++++++++++++++++++------ 2 files changed, 52 insertions(+), 8 deletions(-) diff --git a/include/services/y2r.hpp b/include/services/y2r.hpp index fc21fc12..84f455cf 100644 --- a/include/services/y2r.hpp +++ b/include/services/y2r.hpp @@ -68,6 +68,10 @@ class Y2RService { void pingProcess(u32 messagePointer); void setTransferEndInterrupt(u32 messagePointer); void getTransferEndEvent(u32 messagePointer); + void getBlockAlignment(u32 messagePointer); + void getInputLines(u32 messagePointer); + void getInputLineWidth(u32 messagePointer); + void getOutputFormat(u32 messagePointer); void setAlpha(u32 messagePointer); void setBlockAlignment(u32 messagePointer); diff --git a/src/core/services/y2r.cpp b/src/core/services/y2r.cpp index 7d6e4c41..5aeef29e 100644 --- a/src/core/services/y2r.cpp +++ b/src/core/services/y2r.cpp @@ -1,4 +1,5 @@ #include "services/y2r.hpp" + #include "ipc.hpp" #include "kernel.hpp" @@ -26,7 +27,11 @@ namespace Y2RCommands { SetPackageParameter = 0x002901C0, PingProcess = 0x002A0000, DriverInitialize = 0x002B0000, - DriverFinalize = 0x002C0000 + DriverFinalize = 0x002C0000, + GetBlockAlignment = 0x00080000, + GetInputLines = 0x001D0000, + GetInputLineWidth = 0x001B0000, + GetOutputFormat = 0x00040000 }; } @@ -73,6 +78,10 @@ void Y2RService::handleSyncRequest(u32 messagePointer) { case Y2RCommands::SetTransferEndInterrupt: setTransferEndInterrupt(messagePointer); break; case Y2RCommands::StartConversion: [[likely]] startConversion(messagePointer); break; case Y2RCommands::StopConversion: stopConversion(messagePointer); break; + case Y2RCommands::GetBlockAlignment: getBlockAlignment(messagePointer); break; + case Y2RCommands::GetInputLines: getInputLines(messagePointer); break; + case Y2RCommands::GetInputLineWidth: getInputLineWidth(messagePointer); break; + case Y2RCommands::GetOutputFormat: getOutputFormat(messagePointer); break; default: Helpers::panic("Y2R service requested. Command: %08X\n", command); } } @@ -81,7 +90,7 @@ void Y2RService::pingProcess(u32 messagePointer) { log("Y2R::PingProcess\n"); mem.write32(messagePointer, IPC::responseHeader(0x2A, 2, 0)); mem.write32(messagePointer + 4, Result::Success); - mem.write32(messagePointer + 8, 0); // Connected number + mem.write32(messagePointer + 8, 0); // Connected number } void Y2RService::driverInitialize(u32 messagePointer) { @@ -98,8 +107,7 @@ void Y2RService::driverFinalize(u32 messagePointer) { void Y2RService::getTransferEndEvent(u32 messagePointer) { log("Y2R::GetTransferEndEvent\n"); - if (!transferEndEvent.has_value()) - transferEndEvent = kernel.makeEvent(ResetType::OneShot); + if (!transferEndEvent.has_value()) transferEndEvent = kernel.makeEvent(ResetType::OneShot); mem.write32(messagePointer, IPC::responseHeader(0xF, 1, 2)); mem.write32(messagePointer + 4, Result::Success); @@ -150,6 +158,14 @@ void Y2RService::setBlockAlignment(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +void Y2RService::getBlockAlignment(u32 messagePointer) { + log("Y2R::GetBlockAlignment\n"); + + mem.write32(messagePointer, IPC::responseHeader(0x8, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + mem.write32(messagePointer + 8, static_cast(alignment)); +} + void Y2RService::setInputFormat(u32 messagePointer) { const u32 format = mem.read32(messagePointer + 4); log("Y2R::SetInputFormat (format = %d)\n", format); @@ -178,6 +194,14 @@ void Y2RService::setOutputFormat(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +void Y2RService::getOutputFormat(u32 messagePointer) { + log("Y2R::GetOutputFormat\n"); + + mem.write32(messagePointer, IPC::responseHeader(0x4, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + mem.write32(messagePointer + 8, static_cast(outputFmt)); +} + void Y2RService::setPackageParameter(u32 messagePointer) { // Package parameter is 3 words const u32 word1 = mem.read32(messagePointer + 4); @@ -243,6 +267,13 @@ void Y2RService::setInputLineWidth(u32 messagePointer) { } } +void Y2RService::getInputLineWidth(u32 messagePointer) { + log("Y2R::GetInputLineWidth\n"); + + mem.write32(messagePointer, IPC::responseHeader(0x1B, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + mem.write32(messagePointer + 8, inputLineWidth); +} void Y2RService::setInputLines(u32 messagePointer) { const u16 lines = mem.read16(messagePointer + 4); log("Y2R::SetInputLines (lines = %d)\n", lines); @@ -253,19 +284,28 @@ void Y2RService::setInputLines(u32 messagePointer) { Helpers::panic("Y2R: Invalid input line count"); } else { // According to Citra, the Y2R module seems to accidentally skip setting the line # if it's 1024 - if (lines != 1024) - inputLines = lines; + if (lines != 1024) inputLines = lines; mem.write32(messagePointer + 4, Result::Success); } } +void Y2RService::getInputLines(u32 messagePointer) { + log("Y2R::GetInputLines\n"); + + mem.write32(messagePointer, IPC::responseHeader(0x1D, 2, 0)); + mem.write32(messagePointer + 4, Result::Success); + mem.write32(messagePointer + 8, inputLines); +} + void Y2RService::setStandardCoeff(u32 messagePointer) { const u32 coeff = mem.read32(messagePointer + 4); log("Y2R::SetStandardCoeff (coefficient = %d)\n", coeff); mem.write32(messagePointer, IPC::responseHeader(0x20, 1, 0)); - if (coeff > 3) - Helpers::panic("Y2R: Invalid standard coefficient"); + if (coeff > 3) { + Helpers::panic("Y2R: Invalid standard coefficient (coefficient = %d)\n", coeff); + } + else { Helpers::warn("Unimplemented: Y2R standard coefficient"); mem.write32(messagePointer + 4, Result::Success); From 909c5e9d14c4bd830a68aedcac641d57a34237a8 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Fri, 1 Sep 2023 17:59:39 +0300 Subject: [PATCH 67/88] Reordering --- include/services/y2r.hpp | 6 +++--- src/core/services/y2r.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/include/services/y2r.hpp b/include/services/y2r.hpp index 84f455cf..17ceaafa 100644 --- a/include/services/y2r.hpp +++ b/include/services/y2r.hpp @@ -64,14 +64,14 @@ class Y2RService { // Service commands void driverInitialize(u32 messagePointer); void driverFinalize(u32 messagePointer); - void isBusyConversion(u32 messagePointer); - void pingProcess(u32 messagePointer); - void setTransferEndInterrupt(u32 messagePointer); void getTransferEndEvent(u32 messagePointer); void getBlockAlignment(u32 messagePointer); void getInputLines(u32 messagePointer); void getInputLineWidth(u32 messagePointer); void getOutputFormat(u32 messagePointer); + void isBusyConversion(u32 messagePointer); + void pingProcess(u32 messagePointer); + void setTransferEndInterrupt(u32 messagePointer); void setAlpha(u32 messagePointer); void setBlockAlignment(u32 messagePointer); diff --git a/src/core/services/y2r.cpp b/src/core/services/y2r.cpp index 5aeef29e..3e7507bc 100644 --- a/src/core/services/y2r.cpp +++ b/src/core/services/y2r.cpp @@ -7,8 +7,10 @@ namespace Y2RCommands { enum : u32 { SetInputFormat = 0x00010040, SetOutputFormat = 0x00030040, + GetOutputFormat = 0x00040000, SetRotation = 0x00050040, SetBlockAlignment = 0x00070040, + GetBlockAlignment = 0x00080000, SetSpacialDithering = 0x00090040, SetTemporalDithering = 0x000B0040, SetTransferEndInterrupt = 0x000D0040, @@ -18,7 +20,9 @@ namespace Y2RCommands { SetSendingV = 0x00120102, SetReceiving = 0x00180102, SetInputLineWidth = 0x001A0040, + GetInputLineWidth = 0x001B0000, SetInputLines = 0x001C0040, + GetInputLines = 0x001D0000, SetStandardCoeff = 0x00200040, SetAlpha = 0x00220040, StartConversion = 0x00260000, @@ -28,10 +32,6 @@ namespace Y2RCommands { PingProcess = 0x002A0000, DriverInitialize = 0x002B0000, DriverFinalize = 0x002C0000, - GetBlockAlignment = 0x00080000, - GetInputLines = 0x001D0000, - GetInputLineWidth = 0x001B0000, - GetOutputFormat = 0x00040000 }; } From c64910d9638742e9984696f1a70bb07b388d756b Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Fri, 1 Sep 2023 18:38:00 +0300 Subject: [PATCH 68/88] Reorder function in Y2R::handleSyncRequest --- src/core/services/y2r.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/services/y2r.cpp b/src/core/services/y2r.cpp index 3e7507bc..3c527230 100644 --- a/src/core/services/y2r.cpp +++ b/src/core/services/y2r.cpp @@ -57,6 +57,10 @@ void Y2RService::handleSyncRequest(u32 messagePointer) { switch (command) { case Y2RCommands::DriverInitialize: driverInitialize(messagePointer); break; case Y2RCommands::DriverFinalize: driverFinalize(messagePointer); break; + case Y2RCommands::GetBlockAlignment: getBlockAlignment(messagePointer); break; + case Y2RCommands::GetInputLines: getInputLines(messagePointer); break; + case Y2RCommands::GetInputLineWidth: getInputLineWidth(messagePointer); break; + case Y2RCommands::GetOutputFormat: getOutputFormat(messagePointer); break; case Y2RCommands::GetTransferEndEvent: getTransferEndEvent(messagePointer); break; case Y2RCommands::IsBusyConversion: isBusyConversion(messagePointer); break; case Y2RCommands::PingProcess: pingProcess(messagePointer); break; @@ -78,10 +82,6 @@ void Y2RService::handleSyncRequest(u32 messagePointer) { case Y2RCommands::SetTransferEndInterrupt: setTransferEndInterrupt(messagePointer); break; case Y2RCommands::StartConversion: [[likely]] startConversion(messagePointer); break; case Y2RCommands::StopConversion: stopConversion(messagePointer); break; - case Y2RCommands::GetBlockAlignment: getBlockAlignment(messagePointer); break; - case Y2RCommands::GetInputLines: getInputLines(messagePointer); break; - case Y2RCommands::GetInputLineWidth: getInputLineWidth(messagePointer); break; - case Y2RCommands::GetOutputFormat: getOutputFormat(messagePointer); break; default: Helpers::panic("Y2R service requested. Command: %08X\n", command); } } @@ -356,4 +356,4 @@ void Y2RService::startConversion(u32 messagePointer) { if (transferEndEvent.has_value()) { kernel.signalEvent(transferEndEvent.value()); } -} \ No newline at end of file +} From 55af70586001d3de00d29b8b1556f5f90f123013 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Fri, 1 Sep 2023 18:42:41 +0300 Subject: [PATCH 69/88] Fix clang-format stupidity --- src/core/services/y2r.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/services/y2r.cpp b/src/core/services/y2r.cpp index 3c527230..40a6a04d 100644 --- a/src/core/services/y2r.cpp +++ b/src/core/services/y2r.cpp @@ -107,7 +107,9 @@ void Y2RService::driverFinalize(u32 messagePointer) { void Y2RService::getTransferEndEvent(u32 messagePointer) { log("Y2R::GetTransferEndEvent\n"); - if (!transferEndEvent.has_value()) transferEndEvent = kernel.makeEvent(ResetType::OneShot); + if (!transferEndEvent.has_value()) { + transferEndEvent = kernel.makeEvent(ResetType::OneShot); + } mem.write32(messagePointer, IPC::responseHeader(0xF, 1, 2)); mem.write32(messagePointer + 4, Result::Success); @@ -284,7 +286,9 @@ void Y2RService::setInputLines(u32 messagePointer) { Helpers::panic("Y2R: Invalid input line count"); } else { // According to Citra, the Y2R module seems to accidentally skip setting the line # if it's 1024 - if (lines != 1024) inputLines = lines; + if (lines != 1024) { + inputLines = lines; + } mem.write32(messagePointer + 4, Result::Success); } } From d68efb2f44a90e64338c2bd831ce9406b5b199fa Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sat, 2 Sep 2023 18:09:43 +0300 Subject: [PATCH 70/88] Warning for unimplemented ACT functions --- src/core/services/act.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/core/services/act.cpp b/src/core/services/act.cpp index 7a89e933..1434b59b 100644 --- a/src/core/services/act.cpp +++ b/src/core/services/act.cpp @@ -17,7 +17,10 @@ void ACTService::handleSyncRequest(u32 messagePointer) { case ACTCommands::GenerateUUID: generateUUID(messagePointer); break; case ACTCommands::GetAccountDataBlock: getAccountDataBlock(messagePointer); break; case ACTCommands::Initialize: initialize(messagePointer); break; - default: Helpers::panic("ACT service requested. Command: %08X\n", command); + default: + Helpers::warn("Undocumented ACT service requested. Command: %08X", command); + mem.write32(messagePointer + 4, Result::Success); + break; } } From 57cb52d029dec7b7b0d2c314e7248b9ae8948857 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sat, 2 Sep 2023 20:05:23 +0300 Subject: [PATCH 71/88] Update dynarmic --- third_party/dynarmic | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/third_party/dynarmic b/third_party/dynarmic index daa3dedf..96e17946 160000 --- a/third_party/dynarmic +++ b/third_party/dynarmic @@ -1 +1 @@ -Subproject commit daa3dedf88cad90aaf6f6ef5e26f12884b90ca13 +Subproject commit 96e179465884be74987d5847d6741cdabdfe1b48 From 29352d223bf2bdef523fd1ce1517c2b39ee4b151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20B?= Date: Sat, 2 Sep 2023 23:49:11 +0200 Subject: [PATCH 72/88] feat: 3dsx loading romFS works too, pretty neat --- CMakeLists.txt | 4 +- include/emulator.hpp | 2 + include/fs/archive_self_ncch.hpp | 3 +- include/loader/3dsx.hpp | 79 ++++++++ include/memory.hpp | 12 ++ src/core/fs/archive_self_ncch.cpp | 93 +++++---- src/core/loader/3dsx.cpp | 300 ++++++++++++++++++++++++++++++ src/emulator.cpp | 15 ++ 8 files changed, 469 insertions(+), 39 deletions(-) create mode 100644 include/loader/3dsx.hpp create mode 100644 src/core/loader/3dsx.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index f2cf0958..d0ac2804 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -144,7 +144,7 @@ set(PICA_SOURCE_FILES src/core/PICA/gpu.cpp src/core/PICA/regs.cpp src/core/PICA src/core/PICA/dynapica/shader_rec_emitter_x64.cpp src/core/PICA/pica_hash.cpp ) -set(LOADER_SOURCE_FILES src/core/loader/elf.cpp src/core/loader/ncsd.cpp src/core/loader/ncch.cpp src/core/loader/lz77.cpp) +set(LOADER_SOURCE_FILES src/core/loader/elf.cpp src/core/loader/ncsd.cpp src/core/loader/ncch.cpp src/core/loader/3dsx.cpp src/core/loader/lz77.cpp) set(FS_SOURCE_FILES src/core/fs/archive_self_ncch.cpp src/core/fs/archive_save_data.cpp src/core/fs/archive_sdmc.cpp src/core/fs/archive_ext_save_data.cpp src/core/fs/archive_ncch.cpp src/core/fs/romfs.cpp src/core/fs/ivfc.cpp src/core/fs/archive_user_save_data.cpp @@ -161,7 +161,7 @@ set(HEADER_FILES include/emulator.hpp include/helpers.hpp include/termcolor.hpp include/services/gsp_gpu.hpp include/services/gsp_lcd.hpp include/arm_defs.hpp include/renderer_null/renderer_null.hpp include/PICA/gpu.hpp include/PICA/regs.hpp include/services/ndm.hpp include/PICA/shader.hpp include/PICA/shader_unit.hpp include/PICA/float_types.hpp - include/logger.hpp include/loader/ncch.hpp include/loader/ncsd.hpp include/io_file.hpp + include/logger.hpp include/loader/ncch.hpp include/loader/ncsd.hpp include/loader/3dsx.hpp include/io_file.hpp include/loader/lz77.hpp include/fs/archive_base.hpp include/fs/archive_self_ncch.hpp include/services/dsp.hpp include/services/cfg.hpp include/services/region_codes.hpp include/fs/archive_save_data.hpp include/fs/archive_sdmc.hpp include/services/ptm.hpp diff --git a/include/emulator.hpp b/include/emulator.hpp index a3ab09a5..770d78df 100644 --- a/include/emulator.hpp +++ b/include/emulator.hpp @@ -24,6 +24,7 @@ enum class ROMType { ELF, NCSD, CXI, + HB_3DSX, }; class Emulator { @@ -99,6 +100,7 @@ class Emulator { bool loadROM(const std::filesystem::path& path); bool loadNCSD(const std::filesystem::path& path, ROMType type); + bool load3DSX(const std::filesystem::path& path); bool loadELF(const std::filesystem::path& path); bool loadELF(std::ifstream& file); void initGraphicsContext(); diff --git a/include/fs/archive_self_ncch.hpp b/include/fs/archive_self_ncch.hpp index e8877a47..aefb210a 100644 --- a/include/fs/archive_self_ncch.hpp +++ b/include/fs/archive_self_ncch.hpp @@ -18,7 +18,8 @@ public: // Returns whether the cart has a RomFS bool hasRomFS() { auto cxi = mem.getCXI(); - return (cxi != nullptr && cxi->hasRomFS()); + auto hb3dsx = mem.get3DSX(); + return (cxi != nullptr && cxi->hasRomFS()) | (hb3dsx != nullptr && hb3dsx->hasRomFs()); } // Returns whether the cart has an ExeFS (All executable carts should have an ExeFS. This is just here to be safe) diff --git a/include/loader/3dsx.hpp b/include/loader/3dsx.hpp new file mode 100644 index 00000000..1429e70e --- /dev/null +++ b/include/loader/3dsx.hpp @@ -0,0 +1,79 @@ +#pragma once +#include +#include "helpers.hpp" +#include "io_file.hpp" +#include "loader/ncch.hpp" + +struct HB3DSX { + // File layout: + // - File header + // - Code, rodata and data relocation table headers + // - Code segment + // - Rodata segment + // - Loadable (non-BSS) part of the data segment + // - Code relocation table + // - Rodata relocation table + // - Data relocation table + + // Memory layout before relocations are applied: + // [0..codeSegSize) -> code segment + // [codeSegSize..rodataSegSize) -> rodata segment + // [rodataSegSize..dataSegSize) -> data segment + + // Memory layout after relocations are applied: well, however the loader sets it up :) + // The entrypoint is always the start of the code segment. + // The BSS section must be cleared manually by the application. + + // File header + struct Header { + // minus char magic[4] + u16 headerSize; + u16 relocHdrSize; + u32 formatVer; + u32 flags; + + // Sizes of the code, rodata and data segments + + // size of the BSS section (uninitialized latter half of the data segment) + u32 codeSegSize, rodataSegSize, dataSegSize, bssSize; + }; + + // Relocation header: all fields (even extra unknown fields) are guaranteed to be relocation counts. + struct RelocHdr { + u32 cAbsolute; // # of absolute relocations (that is, fix address to post-relocation memory layout) + u32 cRelative; // # of cross-segment relative relocations (that is, 32bit signed offsets that need to be patched) + // more? + + // Relocations are written in this order: + // - Absolute relocs + // - Relative relocs + }; + enum class RelocKind { + Absolute, + Relative, + }; + + // Relocation entry: from the current pointer, skip X words and patch Y words + struct Reloc { + u16 skip, patch; + }; + + // _prm structure + static constexpr std::array PRM_MAGIC = {'_', 'P', 'R', 'M'}; + struct PrmStruct { + char magic[4]; + u32 pSrvOverride; + u32 aptAppId; + u32 heapSize, linearHeapSize; + u32 pArgList; + u32 runFlags; + }; + + IOFile file; + + static constexpr u32 ENTRYPOINT = 0x00100000; // Initial ARM11 PC + u32 romFSSize = 0; + u32 romFSOffset = 0; + + bool hasRomFs() const; + std::pair readRomFSBytes(void *dst, std::size_t offset, std::size_t size); +}; diff --git a/include/memory.hpp b/include/memory.hpp index fd1b10b4..804d1e54 100644 --- a/include/memory.hpp +++ b/include/memory.hpp @@ -11,6 +11,7 @@ #include "handles.hpp" #include "helpers.hpp" #include "loader/ncsd.hpp" +#include "loader/3dsx.hpp" #include "services/region_codes.hpp" namespace PhysicalAddrs { @@ -167,10 +168,12 @@ public: void* getReadPointer(u32 address); void* getWritePointer(u32 address); std::optional loadELF(std::ifstream& file); + std::optional load3DSX(const std::filesystem::path& path); std::optional loadNCSD(Crypto::AESEngine& aesEngine, const std::filesystem::path& path); std::optional loadCXI(Crypto::AESEngine& aesEngine, const std::filesystem::path& path); bool mapCXI(NCSD& ncsd, NCCH& cxi); + bool map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header); u8 read8(u32 vaddr); u16 read16(u32 vaddr); @@ -221,6 +224,14 @@ public: } } + HB3DSX* get3DSX() { + if (loaded3DSX.has_value()) { + return &loaded3DSX.value(); + } else { + return nullptr; + } + } + // Returns whether "addr" is aligned to a page (4096 byte) boundary static constexpr bool isAligned(u32 addr) { return (addr & pageMask) == 0; @@ -256,6 +267,7 @@ public: // Backup of the game's CXI partition info, if any std::optional loadedCXI = std::nullopt; + std::optional loaded3DSX = std::nullopt; // File handle for reading the loaded ncch IOFile CXIFile; diff --git a/src/core/fs/archive_self_ncch.cpp b/src/core/fs/archive_self_ncch.cpp index 7c679350..d4750a18 100644 --- a/src/core/fs/archive_self_ncch.cpp +++ b/src/core/fs/archive_self_ncch.cpp @@ -69,57 +69,78 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 return std::nullopt; } - auto cxi = mem.getCXI(); - IOFile& ioFile = mem.CXIFile; + bool success = false; + std::size_t bytesRead = 0; + std::vector data; - NCCH::FSInfo fsInfo; + if (auto cxi = mem.getCXI(); cxi != nullptr) { + IOFile& ioFile = mem.CXIFile; - // Seek to file offset depending on if we're reading from RomFS, ExeFS, etc - switch (type) { - case PathType::RomFS: { - const u64 romFSSize = cxi->romFS.size; - const u64 romFSOffset = cxi->romFS.offset; - if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { - Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); + NCCH::FSInfo fsInfo; + + // Seek to file offset depending on if we're reading from RomFS, ExeFS, etc + switch (type) { + case PathType::RomFS: { + const u64 romFSSize = cxi->romFS.size; + const u64 romFSOffset = cxi->romFS.offset; + if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { + Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); + } + + fsInfo = cxi->romFS; + offset += 0x1000; + break; } - fsInfo = cxi->romFS; - offset += 0x1000; - break; - } + case PathType::ExeFS: { + const u64 exeFSSize = cxi->exeFS.size; + const u64 exeFSOffset = cxi->exeFS.offset; + if ((offset >> 32) || (offset >= exeFSSize) || (offset + size >= exeFSSize)) { + Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); + } - case PathType::ExeFS: { - const u64 exeFSSize = cxi->exeFS.size; - const u64 exeFSOffset = cxi->exeFS.offset; - if ((offset >> 32) || (offset >= exeFSSize) || (offset + size >= exeFSSize)) { - Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); + fsInfo = cxi->exeFS; + break; } - fsInfo = cxi->exeFS; - break; - } + // Normally, the update RomFS should overlay the cartridge RomFS when reading from this and an update is installed. + // So to support updates, we need to perform this overlaying. For now, read from the cartridge RomFS. + case PathType::UpdateRomFS: { + Helpers::warn("Reading from update RomFS but updates are currently not supported! Reading from regular RomFS instead\n"); - // Normally, the update RomFS should overlay the cartridge RomFS when reading from this and an update is installed. - // So to support updates, we need to perform this overlaying. For now, read from the cartridge RomFS. - case PathType::UpdateRomFS: { - Helpers::warn("Reading from update RomFS but updates are currently not supported! Reading from regular RomFS instead\n"); + const u64 romFSSize = cxi->romFS.size; + const u64 romFSOffset = cxi->romFS.offset; + if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { + Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); + } - const u64 romFSSize = cxi->romFS.size; - const u64 romFSOffset = cxi->romFS.offset; - if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { - Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); + fsInfo = cxi->romFS; + offset += 0x1000; + break; } - fsInfo = cxi->romFS; - offset += 0x1000; - break; + default: Helpers::panic("Unimplemented file path type for SelfNCCH archive"); } - default: Helpers::panic("Unimplemented file path type for SelfNCCH archive"); + data.resize(size); + std::tie(success, bytesRead) = cxi->readFromFile(ioFile, fsInfo, &data[0], offset, size); } + else if (auto hb3dsx = mem.get3DSX(); hb3dsx != nullptr) { + switch (type) { + case PathType::RomFS: { + const u64 romFSSize = hb3dsx->romFSSize; + if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { + Helpers::panic("Tried to read from SelfNCCH with too big of an offset"); + } + break; + } - std::unique_ptr data(new u8[size]); - auto [success, bytesRead] = cxi->readFromFile(ioFile, fsInfo, &data[0], offset, size); + default: Helpers::panic("Unimplemented file path type for 3DSX SelfNCCH archive"); + } + + data.resize(size); + std::tie(success, bytesRead) = hb3dsx->readRomFSBytes(&data[0], offset, size); + } if (!success) { Helpers::panic("Failed to read from SelfNCCH archive"); diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp new file mode 100644 index 00000000..4140cf35 --- /dev/null +++ b/src/core/loader/3dsx.cpp @@ -0,0 +1,300 @@ +#include "loader/3dsx.hpp" + +#include +#include +#include + +#include "memory.hpp" + +namespace { + +struct LoadInfo { + u32 codeSegSizeAligned; + u32 rodataSegSizeAligned; + u32 dataSegSizeAligned; +}; + +static inline u32 TranslateAddr(const u32 off, const u32* addrs, const u32* offsets) +{ + if (off < offsets[1]) + return addrs[0] + off; + if (off < offsets[2]) + return addrs[1] + off - offsets[1]; + return addrs[2] + off - offsets[2]; +} + +} + +bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { + const LoadInfo hbInfo = { + (header.codeSegSize+0xFFF) &~ 0xFFF, + (header.rodataSegSize+0xFFF) &~ 0xFFF, + (header.dataSegSize+0xFFF) &~ 0xFFF, + }; + + const u32 textSegAddr = HB3DSX::ENTRYPOINT; + const u32 rodataSegAddr = textSegAddr + hbInfo.codeSegSizeAligned; + const u32 dataSegAddr = rodataSegAddr + hbInfo.rodataSegSizeAligned; + const u32 extraPageAddr = dataSegAddr + hbInfo.dataSegSizeAligned; + + printf("Text address = %08X, size = %08X\n", textSegAddr, hbInfo.codeSegSizeAligned); + printf("Rodata address = %08X, size = %08X\n", rodataSegAddr, hbInfo.rodataSegSizeAligned); + printf("Data address = %08X, size = %08X\n", dataSegAddr, hbInfo.dataSegSizeAligned); + + // Allocate stack, 3dsx/libctru don't require anymore than this + if (!allocateMainThreadStack(0x1000)) { + // Should be unreachable + printf("Failed to allocate stack for 3DSX.\n"); + return false; + } + + // Map code file to memory + // Total memory to allocate for loading + // suum of aligned values is always aligned, have an extra RW page for libctru + const u32 totalSize = hbInfo.codeSegSizeAligned + hbInfo.rodataSegSizeAligned + hbInfo.dataSegSizeAligned + 0x1000; + + const auto opt = findPaddr(totalSize); + if (!opt.has_value()) { + Helpers::panic("Failed to find paddr to map 3DSX file's code to"); + return false; + } + + // Map the ROM on the kernel side + const u32 textOffset = 0; + const u32 rodataOffset = textOffset + hbInfo.codeSegSizeAligned; + const u32 dataOffset = rodataOffset + hbInfo.rodataSegSizeAligned; + const u32 extraPageOffset = dataOffset + hbInfo.dataSegSizeAligned; + + std::array relocHdrs; + auto [success, count] = hb3dsx.file.read(&relocHdrs[0], relocHdrs.size(), sizeof(HB3DSX::RelocHdr)); + if (!success || count != relocHdrs.size()) { + Helpers::panic("Failed to read 3DSX relocation headers"); + return false; + } + + const u32 dataLoadsize = header.dataSegSize - header.bssSize; // 3DSX data size in header includes bss + std::vector code(totalSize, 0); + + std::tie(success, count) = hb3dsx.file.readBytes(&code[textOffset], header.codeSegSize); + if (!success || count != header.codeSegSize) { + Helpers::panic("Failed to read 3DSX text segment"); + return false; + } + + std::tie(success, count) = hb3dsx.file.readBytes(&code[rodataOffset], header.rodataSegSize); + if (!success || count != header.rodataSegSize) { + Helpers::panic("Failed to read 3DSX rodata segment"); + return false; + } + + std::tie(success, count) = hb3dsx.file.readBytes(&code[dataOffset], dataLoadsize); + if (!success || count != dataLoadsize) { + Helpers::panic("Failed to read 3DSX data segment"); + return false; + } + + std::vector currentRelocs; + const u32 segAddrs[] = { + textSegAddr, + rodataSegAddr, + dataSegAddr, + extraPageAddr, + }; + const u32 segOffs[] = { + textOffset, + rodataOffset, + dataOffset, + extraPageOffset, + }; + const u32 segSizes[] = { + header.codeSegSize, + header.rodataSegSize, + dataLoadsize, + 0x1000, + }; + + for (const auto& relocHdr : relocHdrs) { + currentRelocs.resize(relocHdr.cAbsolute + relocHdr.cRelative); + std::tie(success, count) = hb3dsx.file.read(¤tRelocs[0], currentRelocs.size(), sizeof(HB3DSX::Reloc)); + if (!success || count != currentRelocs.size()) { + Helpers::panic("Failed to read 3DSX relocations"); + return false; + } + + const auto allRelocs = std::span(currentRelocs); + const auto absoluteRelocs = allRelocs.subspan(0, relocHdr.cAbsolute); + const auto relativeRelocs = allRelocs.subspan(relocHdr.cAbsolute, relocHdr.cRelative); + + const auto currentSeg = &relocHdr - &relocHdrs[0]; + const auto sectionDataStartAs = std::span(code).subspan(segOffs[currentSeg], segSizes[currentSeg]); + + auto sectionData = sectionDataStartAs; + const auto RelocationAction = [&](const HB3DSX::Reloc& reloc, const HB3DSX::RelocKind relocKind) -> bool { + if(reloc.skip) { + sectionData = sectionData.subspan(reloc.skip * sizeof(u32)); // advance by `skip` words (32-bit values) + } + + for (u32 m = 0; m < reloc.patch && !sectionData.empty(); ++m) { + const u32 inAddr = textSegAddr + (sectionData.data() - code.data()); // byte offset -> word count + u32 origData = 0; + std::memcpy(&origData, §ionData[0], sizeof(u32)); + const u32 subType = origData >> (32-4); + const u32 addr = TranslateAddr(origData &~ 0xF0000000, segAddrs, segOffs); + + switch (relocKind) { + case HB3DSX::RelocKind::Absolute: { + if (subType != 0) { + Helpers::panic("Unsupported absolute reloc subtype"); + return false; + } + std::memcpy(§ionData[0], &addr, sizeof(u32)); + break; + } + case HB3DSX::RelocKind::Relative: { + u32 data = addr - inAddr; + switch (subType) { + case 1: // 31-bit signed offset + data &= ~(1u << 31); + case 0: // 32-bit signed offset + std::memcpy(§ionData[0], &data, sizeof(u32)); + break; + default: + Helpers::panic("Unsupported relative reloc subtype"); + return false; + } + break; + } + } + sectionData = sectionData.subspan(sizeof(u32)); + } + + return true; + }; + + for (const auto& reloc : absoluteRelocs) { + if(!RelocationAction(reloc, HB3DSX::RelocKind::Absolute)) { + return false; + } + } + + sectionData = sectionDataStartAs; // restart from the beginning for the next part + for (const auto& reloc : relativeRelocs) { + if(!RelocationAction(reloc, HB3DSX::RelocKind::Relative)) { + return false; + } + } + } + + // Detect and fill _prm structure + HB3DSX::PrmStruct pst; + std::memcpy(&pst, &code[4], sizeof(pst)); + if (pst.magic[0] == '_' && pst.magic[1] == 'p' && pst.magic[2] == 'r' && pst.magic[3] == 'm' ) { + // if there was any argv to put, it would go there + // first u32: argc + // remaining: continuous argv string (NUL-char separated, ofc) + // std::memcpy(&code[extraPageOffset], argvBuffer, ...); + + // setting to NULL (default) = run from system. load romfs from process. + // non-NULL = homebrew launcher. load romfs from 3dsx @ argv[0] + // pst.pSrvOverride = extraPageAddr + 0xFFC; + + pst.pArgList = extraPageAddr; + + // RUNFLAG_APTREINIT: Reinitialize APT. + // From libctru. Because there's no previously running software here + pst.runFlags |= 1 << 1; + + /* s64 dummy; + bool isN3DS = svcGetSystemInfo(&dummy, 0x10001, 0) == 0; + if (isN3DS) + { + pst->heapSize = 48*1024*1024; + pst->linearHeapSize = 64*1024*1024; + } else */ { + pst.heapSize = 24*1024*1024; + pst.linearHeapSize = 32*1024*1024; + } + + std::memcpy(&code[4], &pst, sizeof(pst)); + } + + const auto paddr = opt.value(); + std::memcpy(&fcram[paddr], &code[0], totalSize); // Copy the 3 segments + BSS to FCRAM + + allocateMemory(textSegAddr, paddr + textOffset, hbInfo.codeSegSizeAligned, true, true, false, true); // Text is R-X + allocateMemory(rodataSegAddr, paddr + rodataOffset, hbInfo.rodataSegSizeAligned, true, true, false, false); // Rodata is R-- + allocateMemory(dataSegAddr, paddr + dataOffset, hbInfo.dataSegSizeAligned + 0x1000, true, true, true, false); // Data+BSS+Extra is RW- + + return true; +} + +std::optional Memory::load3DSX(const std::filesystem::path& path) { + HB3DSX hb3dsx; + if (!hb3dsx.file.open(path, "rb")) return std::nullopt; + + u8 magic[4]; // Must be "3DSX" + auto [success, bytes] = hb3dsx.file.readBytes(magic, 4); + + if (!success || bytes != 4) { + printf("Failed to read 3DSX magic\n"); + return std::nullopt; + } + + if (magic[0] != '3' || magic[1] != 'D' || magic[2] != 'S' || magic[3] != 'X') { + printf("3DSX with wrong magic value\n"); + return std::nullopt; + } + + HB3DSX::Header hbHeader; + std::tie(success, bytes) = hb3dsx.file.readBytes(&hbHeader, sizeof(hbHeader)); + if (!success || bytes != sizeof(hbHeader)) { + printf("Failed to read 3DSX header\n"); + return std::nullopt; + } + + if (hbHeader.headerSize == 0x20 || hbHeader.headerSize == 0x2C) { + if (hbHeader.headerSize == 0x2C) + { + hb3dsx.file.seek(8, SEEK_CUR); // skip SMDH info + std::tie(success, bytes) = hb3dsx.file.readBytes(&hb3dsx.romFSOffset, 4); + if (!success || bytes != 4) { + printf("Failed to read 3DSX romFS offset\n"); + return std::nullopt; + } + const auto fileSize = hb3dsx.file.size(); + if (!fileSize) { + printf("Failed to get 3DSX size\n"); + return std::nullopt; + } + hb3dsx.romFSSize = *fileSize - hb3dsx.romFSOffset; + } + } + else { + printf("Invalid 3DSX header size\n"); + return std::nullopt; + } + + if (!map3DSX(hb3dsx, hbHeader)) { + printf("Failed to map 3DSX\n"); + return std::nullopt; + } + + loaded3DSX = std::move(hb3dsx); + return HB3DSX::ENTRYPOINT; +} + +bool HB3DSX::hasRomFs() const { + return romFSSize != 0 && romFSOffset != 0; +} + +std::pair HB3DSX::readRomFSBytes(void *dst, std::size_t offset, std::size_t size) { + if (!hasRomFs()) { + return { false, 0 }; + } + + if (!file.seek(romFSOffset + offset)) { + return { false, 0 }; + } + + return file.readBytes(dst, size); +} diff --git a/src/emulator.cpp b/src/emulator.cpp index 75b5dbdd..dff335f5 100644 --- a/src/emulator.cpp +++ b/src/emulator.cpp @@ -453,6 +453,8 @@ bool Emulator::loadROM(const std::filesystem::path& path) { success = loadNCSD(path, ROMType::NCSD); else if (extension == ".cxi" || extension == ".app") success = loadNCSD(path, ROMType::CXI); + else if (extension == ".3dsx") + success = load3DSX(path); else { printf("Unknown file type\n"); success = false; @@ -492,6 +494,19 @@ bool Emulator::loadNCSD(const std::filesystem::path& path, ROMType type) { return true; } +bool Emulator::load3DSX(const std::filesystem::path& path) { + std::optional entrypoint = memory.load3DSX(path); + romType = ROMType::HB_3DSX; + + if (!entrypoint.has_value()) { + return false; + } + + cpu.setReg(15, entrypoint.value()); // Set initial PC + + return true; +} + bool Emulator::loadELF(const std::filesystem::path& path) { loadedELF.open(path, std::ios_base::binary); // Open ROM in binary mode romType = ROMType::ELF; From 2f056e820ab0772b591abe1956b93770735e808a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20B?= Date: Sun, 3 Sep 2023 01:23:19 +0200 Subject: [PATCH 73/88] libctru expects this to be 32-readable --- src/core/memory.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index b532fb41..5bf0f79b 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -150,6 +150,7 @@ u32 Memory::read32(u32 vaddr) { return *(u32*)(pointer + offset); } else { switch (vaddr) { + case 0x1FF80000: return u32(kernelVersion) << 16; case ConfigMem::Datetime0: return u32(timeSince3DSEpoch()); // ms elapsed since Jan 1 1900, bottom 32 bits case ConfigMem::Datetime0 + 4: return u32(timeSince3DSEpoch() >> 32); // top 32 bits From 38be95fffab5bb4823a0862e10759b3c0b463bcf Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 3 Sep 2023 10:36:54 +0300 Subject: [PATCH 74/88] Gently bonk 3DSX --- include/loader/3dsx.hpp | 13 ++++--- readme.md | 1 + src/core/loader/3dsx.cpp | 80 ++++++++++++++++++++++------------------ 3 files changed, 53 insertions(+), 41 deletions(-) diff --git a/include/loader/3dsx.hpp b/include/loader/3dsx.hpp index 1429e70e..9d351832 100644 --- a/include/loader/3dsx.hpp +++ b/include/loader/3dsx.hpp @@ -28,7 +28,7 @@ struct HB3DSX { struct Header { // minus char magic[4] u16 headerSize; - u16 relocHdrSize; + u16 relocHeaderSize; u32 formatVer; u32 flags; @@ -38,16 +38,17 @@ struct HB3DSX { }; // Relocation header: all fields (even extra unknown fields) are guaranteed to be relocation counts. - struct RelocHdr { - u32 cAbsolute; // # of absolute relocations (that is, fix address to post-relocation memory layout) - u32 cRelative; // # of cross-segment relative relocations (that is, 32bit signed offsets that need to be patched) + struct RelocHeader { + u32 absoluteCount; // # of absolute relocations (that is, fix address to post-relocation memory layout) + u32 relativeCount; // # of cross-segment relative relocations (that is, 32bit signed offsets that need to be patched) // more? // Relocations are written in this order: // - Absolute relocs // - Relative relocs }; - enum class RelocKind { + + enum class RelocType { Absolute, Relative, }; @@ -70,7 +71,7 @@ struct HB3DSX { IOFile file; - static constexpr u32 ENTRYPOINT = 0x00100000; // Initial ARM11 PC + static constexpr u32 entrypoint = 0x00100000; // Initial ARM11 PC u32 romFSSize = 0; u32 romFSOffset = 0; diff --git a/readme.md b/readme.md index c96fe28c..0fde88ee 100644 --- a/readme.md +++ b/readme.md @@ -61,6 +61,7 @@ Panda3DS can load ROMs in the following formats: - .3ds/.cci - .cxi/.app - .elf/.axf +- .3dsx Both decrypted and encrypted dumps are supported. However for encrypted dumps you must provide your AES keys file by adding a `sysdata` folder to the emulator's app data directory with a file called `aes_keys.txt` including your keys. Currently .cia files are not supported yet (support is planned for the future), however if you want you can usually use Citra to extract the .app/.cxi file out of your .cia and run that. diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp index 4140cf35..c5a9bae2 100644 --- a/src/core/loader/3dsx.cpp +++ b/src/core/loader/3dsx.cpp @@ -14,12 +14,14 @@ struct LoadInfo { u32 dataSegSizeAligned; }; -static inline u32 TranslateAddr(const u32 off, const u32* addrs, const u32* offsets) -{ - if (off < offsets[1]) - return addrs[0] + off; - if (off < offsets[2]) - return addrs[1] + off - offsets[1]; +static inline u32 translateAddr(const u32 off, const u32* addrs, const u32* offsets) { + if (off < offsets[1]) { + return addrs[0] + off; + } + + if (off < offsets[2]) { + return addrs[1] + off - offsets[1]; + } return addrs[2] + off - offsets[2]; } @@ -27,12 +29,12 @@ static inline u32 TranslateAddr(const u32 off, const u32* addrs, const u32* offs bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { const LoadInfo hbInfo = { - (header.codeSegSize+0xFFF) &~ 0xFFF, - (header.rodataSegSize+0xFFF) &~ 0xFFF, - (header.dataSegSize+0xFFF) &~ 0xFFF, + .codeSegSizeAligned = (header.codeSegSize+0xFFF) &~ 0xFFF, + .rodataSegSizeAligned = (header.rodataSegSize+0xFFF) &~ 0xFFF, + .dataSegSizeAligned = (header.dataSegSize+0xFFF) &~ 0xFFF, }; - const u32 textSegAddr = HB3DSX::ENTRYPOINT; + const u32 textSegAddr = HB3DSX::entrypoint; const u32 rodataSegAddr = textSegAddr + hbInfo.codeSegSizeAligned; const u32 dataSegAddr = rodataSegAddr + hbInfo.rodataSegSizeAligned; const u32 extraPageAddr = dataSegAddr + hbInfo.dataSegSizeAligned; @@ -42,7 +44,7 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { printf("Data address = %08X, size = %08X\n", dataSegAddr, hbInfo.dataSegSizeAligned); // Allocate stack, 3dsx/libctru don't require anymore than this - if (!allocateMainThreadStack(0x1000)) { + if (!allocateMainThreadStack(4_KB)) { // Should be unreachable printf("Failed to allocate stack for 3DSX.\n"); return false; @@ -51,7 +53,7 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { // Map code file to memory // Total memory to allocate for loading // suum of aligned values is always aligned, have an extra RW page for libctru - const u32 totalSize = hbInfo.codeSegSizeAligned + hbInfo.rodataSegSizeAligned + hbInfo.dataSegSizeAligned + 0x1000; + const u32 totalSize = hbInfo.codeSegSizeAligned + hbInfo.rodataSegSizeAligned + hbInfo.dataSegSizeAligned + 4_KB; const auto opt = findPaddr(totalSize); if (!opt.has_value()) { @@ -65,9 +67,9 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { const u32 dataOffset = rodataOffset + hbInfo.rodataSegSizeAligned; const u32 extraPageOffset = dataOffset + hbInfo.dataSegSizeAligned; - std::array relocHdrs; - auto [success, count] = hb3dsx.file.read(&relocHdrs[0], relocHdrs.size(), sizeof(HB3DSX::RelocHdr)); - if (!success || count != relocHdrs.size()) { + std::array relocHeaders; + auto [success, count] = hb3dsx.file.read(&relocHeaders[0], relocHeaders.size(), sizeof(HB3DSX::RelocHeader)); + if (!success || count != relocHeaders.size()) { Helpers::panic("Failed to read 3DSX relocation headers"); return false; } @@ -94,18 +96,21 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { } std::vector currentRelocs; + const u32 segAddrs[] = { textSegAddr, rodataSegAddr, dataSegAddr, extraPageAddr, }; + const u32 segOffs[] = { textOffset, rodataOffset, dataOffset, extraPageOffset, }; + const u32 segSizes[] = { header.codeSegSize, header.rodataSegSize, @@ -113,8 +118,8 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { 0x1000, }; - for (const auto& relocHdr : relocHdrs) { - currentRelocs.resize(relocHdr.cAbsolute + relocHdr.cRelative); + for (const auto& relocHeader : relocHeaders) { + currentRelocs.resize(relocHeader.absoluteCount + relocHeader.relativeCount); std::tie(success, count) = hb3dsx.file.read(¤tRelocs[0], currentRelocs.size(), sizeof(HB3DSX::Reloc)); if (!success || count != currentRelocs.size()) { Helpers::panic("Failed to read 3DSX relocations"); @@ -122,15 +127,15 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { } const auto allRelocs = std::span(currentRelocs); - const auto absoluteRelocs = allRelocs.subspan(0, relocHdr.cAbsolute); - const auto relativeRelocs = allRelocs.subspan(relocHdr.cAbsolute, relocHdr.cRelative); + const auto absoluteRelocs = allRelocs.subspan(0, relocHeader.absoluteCount); + const auto relativeRelocs = allRelocs.subspan(relocHeader.absoluteCount, relocHeader.relativeCount); - const auto currentSeg = &relocHdr - &relocHdrs[0]; + const auto currentSeg = &relocHeader - &relocHeaders[0]; const auto sectionDataStartAs = std::span(code).subspan(segOffs[currentSeg], segSizes[currentSeg]); - auto sectionData = sectionDataStartAs; - const auto RelocationAction = [&](const HB3DSX::Reloc& reloc, const HB3DSX::RelocKind relocKind) -> bool { - if(reloc.skip) { + + const auto RelocationAction = [&](const HB3DSX::Reloc& reloc, const HB3DSX::RelocType relocType) -> bool { + if (reloc.skip) { sectionData = sectionData.subspan(reloc.skip * sizeof(u32)); // advance by `skip` words (32-bit values) } @@ -139,10 +144,10 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { u32 origData = 0; std::memcpy(&origData, §ionData[0], sizeof(u32)); const u32 subType = origData >> (32-4); - const u32 addr = TranslateAddr(origData &~ 0xF0000000, segAddrs, segOffs); + const u32 addr = translateAddr(origData &~ 0xF0000000, segAddrs, segOffs); - switch (relocKind) { - case HB3DSX::RelocKind::Absolute: { + switch (relocType) { + case HB3DSX::RelocType::Absolute: { if (subType != 0) { Helpers::panic("Unsupported absolute reloc subtype"); return false; @@ -150,7 +155,8 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { std::memcpy(§ionData[0], &addr, sizeof(u32)); break; } - case HB3DSX::RelocKind::Relative: { + + case HB3DSX::RelocType::Relative: { u32 data = addr - inAddr; switch (subType) { case 1: // 31-bit signed offset @@ -165,6 +171,7 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { break; } } + sectionData = sectionData.subspan(sizeof(u32)); } @@ -172,14 +179,14 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { }; for (const auto& reloc : absoluteRelocs) { - if(!RelocationAction(reloc, HB3DSX::RelocKind::Absolute)) { + if (!RelocationAction(reloc, HB3DSX::RelocType::Absolute)) { return false; } } sectionData = sectionDataStartAs; // restart from the beginning for the next part for (const auto& reloc : relativeRelocs) { - if(!RelocationAction(reloc, HB3DSX::RelocKind::Relative)) { + if (!RelocationAction(reloc, HB3DSX::RelocType::Relative)) { return false; } } @@ -208,11 +215,11 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { bool isN3DS = svcGetSystemInfo(&dummy, 0x10001, 0) == 0; if (isN3DS) { - pst->heapSize = 48*1024*1024; - pst->linearHeapSize = 64*1024*1024; + pst->heapSize = u32(48_MB); + pst->linearHeapSize = u32(64_MB); } else */ { - pst.heapSize = 24*1024*1024; - pst.linearHeapSize = 32*1024*1024; + pst.heapSize = u32(24_MB); + pst.linearHeapSize = u32(32_MB); } std::memcpy(&code[4], &pst, sizeof(pst)); @@ -230,7 +237,9 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { std::optional Memory::load3DSX(const std::filesystem::path& path) { HB3DSX hb3dsx; - if (!hb3dsx.file.open(path, "rb")) return std::nullopt; + if (!hb3dsx.file.open(path, "rb")) { + return std::nullopt; + } u8 magic[4]; // Must be "3DSX" auto [success, bytes] = hb3dsx.file.readBytes(magic, 4); @@ -261,6 +270,7 @@ std::optional Memory::load3DSX(const std::filesystem::path& path) { printf("Failed to read 3DSX romFS offset\n"); return std::nullopt; } + const auto fileSize = hb3dsx.file.size(); if (!fileSize) { printf("Failed to get 3DSX size\n"); @@ -280,7 +290,7 @@ std::optional Memory::load3DSX(const std::filesystem::path& path) { } loaded3DSX = std::move(hb3dsx); - return HB3DSX::ENTRYPOINT; + return HB3DSX::entrypoint; } bool HB3DSX::hasRomFs() const { From 53917841bc50e440d400fbf6c2060b328118b12d Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 3 Sep 2023 10:40:57 +0300 Subject: [PATCH 75/88] Run clang-format --- src/core/loader/3dsx.cpp | 98 ++++++++++++++++++---------------------- 1 file changed, 45 insertions(+), 53 deletions(-) diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp index c5a9bae2..ca6bdd19 100644 --- a/src/core/loader/3dsx.cpp +++ b/src/core/loader/3dsx.cpp @@ -7,31 +7,29 @@ #include "memory.hpp" namespace { + struct LoadInfo { + u32 codeSegSizeAligned; + u32 rodataSegSizeAligned; + u32 dataSegSizeAligned; + }; -struct LoadInfo { - u32 codeSegSizeAligned; - u32 rodataSegSizeAligned; - u32 dataSegSizeAligned; -}; + static inline u32 translateAddr(const u32 off, const u32* addrs, const u32* offsets) { + if (off < offsets[1]) { + return addrs[0] + off; + } -static inline u32 translateAddr(const u32 off, const u32* addrs, const u32* offsets) { - if (off < offsets[1]) { - return addrs[0] + off; + if (off < offsets[2]) { + return addrs[1] + off - offsets[1]; + } + return addrs[2] + off - offsets[2]; } - - if (off < offsets[2]) { - return addrs[1] + off - offsets[1]; - } - return addrs[2] + off - offsets[2]; -} - -} +} // namespace bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { const LoadInfo hbInfo = { - .codeSegSizeAligned = (header.codeSegSize+0xFFF) &~ 0xFFF, - .rodataSegSizeAligned = (header.rodataSegSize+0xFFF) &~ 0xFFF, - .dataSegSizeAligned = (header.dataSegSize+0xFFF) &~ 0xFFF, + .codeSegSizeAligned = (header.codeSegSize + 0xFFF) & ~0xFFF, + .rodataSegSizeAligned = (header.rodataSegSize + 0xFFF) & ~0xFFF, + .dataSegSizeAligned = (header.dataSegSize + 0xFFF) & ~0xFFF, }; const u32 textSegAddr = HB3DSX::entrypoint; @@ -74,7 +72,7 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { return false; } - const u32 dataLoadsize = header.dataSegSize - header.bssSize; // 3DSX data size in header includes bss + const u32 dataLoadsize = header.dataSegSize - header.bssSize; // 3DSX data size in header includes bss std::vector code(totalSize, 0); std::tie(success, count) = hb3dsx.file.readBytes(&code[textOffset], header.codeSegSize); @@ -90,13 +88,13 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { } std::tie(success, count) = hb3dsx.file.readBytes(&code[dataOffset], dataLoadsize); - if (!success || count != dataLoadsize) { + if (!success || count != dataLoadsize) { Helpers::panic("Failed to read 3DSX data segment"); return false; } std::vector currentRelocs; - + const u32 segAddrs[] = { textSegAddr, rodataSegAddr, @@ -110,7 +108,7 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { dataOffset, extraPageOffset, }; - + const u32 segSizes[] = { header.codeSegSize, header.rodataSegSize, @@ -121,7 +119,7 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { for (const auto& relocHeader : relocHeaders) { currentRelocs.resize(relocHeader.absoluteCount + relocHeader.relativeCount); std::tie(success, count) = hb3dsx.file.read(¤tRelocs[0], currentRelocs.size(), sizeof(HB3DSX::Reloc)); - if (!success || count != currentRelocs.size()) { + if (!success || count != currentRelocs.size()) { Helpers::panic("Failed to read 3DSX relocations"); return false; } @@ -136,15 +134,15 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { const auto RelocationAction = [&](const HB3DSX::Reloc& reloc, const HB3DSX::RelocType relocType) -> bool { if (reloc.skip) { - sectionData = sectionData.subspan(reloc.skip * sizeof(u32)); // advance by `skip` words (32-bit values) + sectionData = sectionData.subspan(reloc.skip * sizeof(u32)); // advance by `skip` words (32-bit values) } for (u32 m = 0; m < reloc.patch && !sectionData.empty(); ++m) { - const u32 inAddr = textSegAddr + (sectionData.data() - code.data()); // byte offset -> word count + const u32 inAddr = textSegAddr + (sectionData.data() - code.data()); // byte offset -> word count u32 origData = 0; std::memcpy(&origData, §ionData[0], sizeof(u32)); - const u32 subType = origData >> (32-4); - const u32 addr = translateAddr(origData &~ 0xF0000000, segAddrs, segOffs); + const u32 subType = origData >> (32 - 4); + const u32 addr = translateAddr(origData & ~0xF0000000, segAddrs, segOffs); switch (relocType) { case HB3DSX::RelocType::Absolute: { @@ -159,14 +157,12 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { case HB3DSX::RelocType::Relative: { u32 data = addr - inAddr; switch (subType) { - case 1: // 31-bit signed offset + case 1: // 31-bit signed offset data &= ~(1u << 31); - case 0: // 32-bit signed offset + case 0: // 32-bit signed offset std::memcpy(§ionData[0], &data, sizeof(u32)); break; - default: - Helpers::panic("Unsupported relative reloc subtype"); - return false; + default: Helpers::panic("Unsupported relative reloc subtype"); return false; } break; } @@ -184,7 +180,7 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { } } - sectionData = sectionDataStartAs; // restart from the beginning for the next part + sectionData = sectionDataStartAs; // restart from the beginning for the next part for (const auto& reloc : relativeRelocs) { if (!RelocationAction(reloc, HB3DSX::RelocType::Relative)) { return false; @@ -195,22 +191,22 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { // Detect and fill _prm structure HB3DSX::PrmStruct pst; std::memcpy(&pst, &code[4], sizeof(pst)); - if (pst.magic[0] == '_' && pst.magic[1] == 'p' && pst.magic[2] == 'r' && pst.magic[3] == 'm' ) { + if (pst.magic[0] == '_' && pst.magic[1] == 'p' && pst.magic[2] == 'r' && pst.magic[3] == 'm') { // if there was any argv to put, it would go there // first u32: argc // remaining: continuous argv string (NUL-char separated, ofc) // std::memcpy(&code[extraPageOffset], argvBuffer, ...); - + // setting to NULL (default) = run from system. load romfs from process. // non-NULL = homebrew launcher. load romfs from 3dsx @ argv[0] // pst.pSrvOverride = extraPageAddr + 0xFFC; - + pst.pArgList = extraPageAddr; - + // RUNFLAG_APTREINIT: Reinitialize APT. // From libctru. Because there's no previously running software here pst.runFlags |= 1 << 1; - + /* s64 dummy; bool isN3DS = svcGetSystemInfo(&dummy, 0x10001, 0) == 0; if (isN3DS) @@ -228,9 +224,9 @@ bool Memory::map3DSX(HB3DSX& hb3dsx, const HB3DSX::Header& header) { const auto paddr = opt.value(); std::memcpy(&fcram[paddr], &code[0], totalSize); // Copy the 3 segments + BSS to FCRAM - allocateMemory(textSegAddr, paddr + textOffset, hbInfo.codeSegSizeAligned, true, true, false, true); // Text is R-X - allocateMemory(rodataSegAddr, paddr + rodataOffset, hbInfo.rodataSegSizeAligned, true, true, false, false); // Rodata is R-- - allocateMemory(dataSegAddr, paddr + dataOffset, hbInfo.dataSegSizeAligned + 0x1000, true, true, true, false); // Data+BSS+Extra is RW- + allocateMemory(textSegAddr, paddr + textOffset, hbInfo.codeSegSizeAligned, true, true, false, true); // Text is R-X + allocateMemory(rodataSegAddr, paddr + rodataOffset, hbInfo.rodataSegSizeAligned, true, true, false, false); // Rodata is R-- + allocateMemory(dataSegAddr, paddr + dataOffset, hbInfo.dataSegSizeAligned + 0x1000, true, true, true, false); // Data+BSS+Extra is RW- return true; } @@ -262,9 +258,8 @@ std::optional Memory::load3DSX(const std::filesystem::path& path) { } if (hbHeader.headerSize == 0x20 || hbHeader.headerSize == 0x2C) { - if (hbHeader.headerSize == 0x2C) - { - hb3dsx.file.seek(8, SEEK_CUR); // skip SMDH info + if (hbHeader.headerSize == 0x2C) { + hb3dsx.file.seek(8, SEEK_CUR); // skip SMDH info std::tie(success, bytes) = hb3dsx.file.readBytes(&hb3dsx.romFSOffset, 4); if (!success || bytes != 4) { printf("Failed to read 3DSX romFS offset\n"); @@ -278,8 +273,7 @@ std::optional Memory::load3DSX(const std::filesystem::path& path) { } hb3dsx.romFSSize = *fileSize - hb3dsx.romFSOffset; } - } - else { + } else { printf("Invalid 3DSX header size\n"); return std::nullopt; } @@ -293,17 +287,15 @@ std::optional Memory::load3DSX(const std::filesystem::path& path) { return HB3DSX::entrypoint; } -bool HB3DSX::hasRomFs() const { - return romFSSize != 0 && romFSOffset != 0; -} +bool HB3DSX::hasRomFs() const { return romFSSize != 0 && romFSOffset != 0; } -std::pair HB3DSX::readRomFSBytes(void *dst, std::size_t offset, std::size_t size) { +std::pair HB3DSX::readRomFSBytes(void* dst, std::size_t offset, std::size_t size) { if (!hasRomFs()) { - return { false, 0 }; + return {false, 0}; } if (!file.seek(romFSOffset + offset)) { - return { false, 0 }; + return {false, 0}; } return file.readBytes(dst, size); From a380aa83f091c43849f7db5cc3361ddc8f3f0bd9 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 3 Sep 2023 11:04:54 +0300 Subject: [PATCH 76/88] Add 3DSX RomFS reads via NCCH archive --- include/fs/archive_ncch.hpp | 3 ++- include/fs/archive_self_ncch.hpp | 2 +- src/core/fs/archive_ncch.cpp | 13 +++++++------ src/core/fs/archive_self_ncch.cpp | 1 + src/emulator.cpp | 4 ++++ 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/include/fs/archive_ncch.hpp b/include/fs/archive_ncch.hpp index 275bcd20..de19cbe5 100644 --- a/include/fs/archive_ncch.hpp +++ b/include/fs/archive_ncch.hpp @@ -18,7 +18,8 @@ public: // Returns whether the cart has a RomFS bool hasRomFS() { auto cxi = mem.getCXI(); - return (cxi != nullptr && cxi->hasRomFS()); + auto hb3dsx = mem.get3DSX(); + return (cxi != nullptr && cxi->hasRomFS()) || (hb3dsx != nullptr && hb3dsx->hasRomFs()); } // Returns whether the cart has an ExeFS (All executable carts should have an ExeFS. This is just here to be safe) diff --git a/include/fs/archive_self_ncch.hpp b/include/fs/archive_self_ncch.hpp index aefb210a..ed882a7d 100644 --- a/include/fs/archive_self_ncch.hpp +++ b/include/fs/archive_self_ncch.hpp @@ -19,7 +19,7 @@ public: bool hasRomFS() { auto cxi = mem.getCXI(); auto hb3dsx = mem.get3DSX(); - return (cxi != nullptr && cxi->hasRomFS()) | (hb3dsx != nullptr && hb3dsx->hasRomFs()); + return (cxi != nullptr && cxi->hasRomFS()) || (hb3dsx != nullptr && hb3dsx->hasRomFs()); } // Returns whether the cart has an ExeFS (All executable carts should have an ExeFS. This is just here to be safe) diff --git a/src/core/fs/archive_ncch.cpp b/src/core/fs/archive_ncch.cpp index 6684ccf4..5a808ade 100644 --- a/src/core/fs/archive_ncch.cpp +++ b/src/core/fs/archive_ncch.cpp @@ -131,20 +131,20 @@ std::optional NCCHArchive::readFile(FileSession* file, u64 offset, u32 size } auto cxi = mem.getCXI(); - IOFile& ioFile = mem.CXIFile; + auto hb3dsx = mem.get3DSX(); - NCCH::FSInfo fsInfo; + // If isCXI is true then we've loaded a CXI/3DS file, else it's 3DSX + bool isCXI = cxi != nullptr; // Seek to file offset depending on if we're reading from RomFS, ExeFS, etc switch (type) { case PathType::RomFS: { - const u64 romFSSize = cxi->romFS.size; - const u64 romFSOffset = cxi->romFS.offset; + const u64 romFSSize = isCXI ? cxi->romFS.size : hb3dsx->romFSSize; + const u64 romFSOffset = isCXI ? cxi->romFS.offset : hb3dsx->romFSOffset; if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { Helpers::panic("Tried to read from NCCH with too big of an offset"); } - fsInfo = cxi->romFS; offset += 0x1000; break; } @@ -154,7 +154,8 @@ std::optional NCCHArchive::readFile(FileSession* file, u64 offset, u32 size } std::unique_ptr data(new u8[size]); - auto [success, bytesRead] = cxi->readFromFile(ioFile, fsInfo, &data[0], offset, size); + auto [success, bytesRead] = + isCXI ? cxi->readFromFile(mem.CXIFile, cxi->romFS, &data[0], offset, size) : hb3dsx->readRomFSBytes(&data[0], offset, size); if (!success) { Helpers::panic("Failed to read from NCCH archive"); diff --git a/src/core/fs/archive_self_ncch.cpp b/src/core/fs/archive_self_ncch.cpp index d4750a18..9b572f96 100644 --- a/src/core/fs/archive_self_ncch.cpp +++ b/src/core/fs/archive_self_ncch.cpp @@ -125,6 +125,7 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 data.resize(size); std::tie(success, bytesRead) = cxi->readFromFile(ioFile, fsInfo, &data[0], offset, size); } + else if (auto hb3dsx = mem.get3DSX(); hb3dsx != nullptr) { switch (type) { case PathType::RomFS: { diff --git a/src/emulator.cpp b/src/emulator.cpp index dff335f5..2f8c81cc 100644 --- a/src/emulator.cpp +++ b/src/emulator.cpp @@ -426,6 +426,10 @@ bool Emulator::loadROM(const std::filesystem::path& path) { reset(ReloadOption::NoReload); } + // Reset whatever state needs to be reset before loading a new ROM + memory.loadedCXI = std::nullopt; + memory.loaded3DSX = std::nullopt; + // Get path for saving files (AppData on Windows, /home/user/.local/share/ApplcationName on Linux, etc) // Inside that path, we be use a game-specific folder as well. Eg if we were loading a ROM called PenguinDemo.3ds, the savedata would be in // %APPDATA%/Alber/PenguinDemo/SaveData on Windows, and so on. We do this because games save data in their own filesystem on the cart From bdfdc5af621ef654f79b203c2468410525d7ea93 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 3 Sep 2023 16:45:23 +0300 Subject: [PATCH 77/88] Revert 3DSX NCCH changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Théo B. <16072534+LiquidFenrir@users.noreply.github.com> --- include/fs/archive_ncch.hpp | 3 +-- src/core/fs/archive_ncch.cpp | 11 +++-------- 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/include/fs/archive_ncch.hpp b/include/fs/archive_ncch.hpp index de19cbe5..275bcd20 100644 --- a/include/fs/archive_ncch.hpp +++ b/include/fs/archive_ncch.hpp @@ -18,8 +18,7 @@ public: // Returns whether the cart has a RomFS bool hasRomFS() { auto cxi = mem.getCXI(); - auto hb3dsx = mem.get3DSX(); - return (cxi != nullptr && cxi->hasRomFS()) || (hb3dsx != nullptr && hb3dsx->hasRomFs()); + return (cxi != nullptr && cxi->hasRomFS()); } // Returns whether the cart has an ExeFS (All executable carts should have an ExeFS. This is just here to be safe) diff --git a/src/core/fs/archive_ncch.cpp b/src/core/fs/archive_ncch.cpp index 5a808ade..d7dd1f57 100644 --- a/src/core/fs/archive_ncch.cpp +++ b/src/core/fs/archive_ncch.cpp @@ -131,16 +131,12 @@ std::optional NCCHArchive::readFile(FileSession* file, u64 offset, u32 size } auto cxi = mem.getCXI(); - auto hb3dsx = mem.get3DSX(); - - // If isCXI is true then we've loaded a CXI/3DS file, else it's 3DSX - bool isCXI = cxi != nullptr; // Seek to file offset depending on if we're reading from RomFS, ExeFS, etc switch (type) { case PathType::RomFS: { - const u64 romFSSize = isCXI ? cxi->romFS.size : hb3dsx->romFSSize; - const u64 romFSOffset = isCXI ? cxi->romFS.offset : hb3dsx->romFSOffset; + const u64 romFSSize = cxi->romFS.size; + const u64 romFSOffset = cxi->romFS.offset; if ((offset >> 32) || (offset >= romFSSize) || (offset + size >= romFSSize)) { Helpers::panic("Tried to read from NCCH with too big of an offset"); } @@ -154,8 +150,7 @@ std::optional NCCHArchive::readFile(FileSession* file, u64 offset, u32 size } std::unique_ptr data(new u8[size]); - auto [success, bytesRead] = - isCXI ? cxi->readFromFile(mem.CXIFile, cxi->romFS, &data[0], offset, size) : hb3dsx->readRomFSBytes(&data[0], offset, size); + auto [success, bytesRead] = cxi->readFromFile(mem.CXIFile, cxi->romFS, &data[0], offset, size); if (!success) { Helpers::panic("Failed to read from NCCH archive"); From 85e102c40ffeed4d0ef58fb6070510f3f45b56dd Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 3 Sep 2023 17:58:06 +0300 Subject: [PATCH 78/88] Change vector to unique_ptr --- src/core/fs/archive_self_ncch.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/core/fs/archive_self_ncch.cpp b/src/core/fs/archive_self_ncch.cpp index 9b572f96..9c911769 100644 --- a/src/core/fs/archive_self_ncch.cpp +++ b/src/core/fs/archive_self_ncch.cpp @@ -71,7 +71,7 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 bool success = false; std::size_t bytesRead = 0; - std::vector data; + std::unique_ptr data(new u8[size]); if (auto cxi = mem.getCXI(); cxi != nullptr) { IOFile& ioFile = mem.CXIFile; @@ -122,7 +122,6 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 default: Helpers::panic("Unimplemented file path type for SelfNCCH archive"); } - data.resize(size); std::tie(success, bytesRead) = cxi->readFromFile(ioFile, fsInfo, &data[0], offset, size); } @@ -139,7 +138,6 @@ std::optional SelfNCCHArchive::readFile(FileSession* file, u64 offset, u32 default: Helpers::panic("Unimplemented file path type for 3DSX SelfNCCH archive"); } - data.resize(size); std::tie(success, bytesRead) = hb3dsx->readRomFSBytes(&data[0], offset, size); } From 5733b46772f7c05bb4148d319d6797f07b184572 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Sun, 3 Sep 2023 22:41:16 +0300 Subject: [PATCH 79/88] Use panda icon as placeholder mii face --- include/fs/mii_data.hpp | 6173 ++++++++++++++++++++------------------- 1 file changed, 3088 insertions(+), 3085 deletions(-) diff --git a/include/fs/mii_data.hpp b/include/fs/mii_data.hpp index 2d6b0c43..e21cbb5c 100644 --- a/include/fs/mii_data.hpp +++ b/include/fs/mii_data.hpp @@ -1,6 +1,9 @@ -// Generated with https://github.com/B3n30/citra_system_archives #pragma once +// Generated with https://github.com/B3n30/citra_system_archives/tree/master/mii +// Origin: https://www.flaticon.com/free-icon/red-panda_8686325?term=red+panda&page=1&position=2&origin=tag&related_id=8686325 +// Git Hash: f470e0c9d341db73b8a24880295d2eab4cd81660 + const unsigned char MII_DATA[] = { 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, @@ -3051,3090 +3054,3090 @@ const unsigned char MII_DATA[] = { 0x58, 0x58, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x68, 0x68, 0x00, 0x00, 0x70, 0x70, 0x00, 0x00, 0x78, 0x78, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x88, 0x88, 0x00, 0x00, 0x90, 0x90, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, - 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, - 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, - 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, - 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, - 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, - 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, - 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, - 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, - 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, - 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, - 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, - 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, - 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, - 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, - 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, - 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, - 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, - 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, - 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, - 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, - 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, - 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, - 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, - 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, - 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, - 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, - 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, - 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, - 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, - 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, - 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, - 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, - 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, - 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, - 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, - 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, - 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, - 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, - 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, - 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, - 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, - 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, - 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, - 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, - 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, - 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, - 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, - 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, - 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, - 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, - 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, - 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, - 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, - 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, - 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, - 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, - 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, - 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, - 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, - 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, - 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, - 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, - 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, - 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, - 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, - 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, - 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, - 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, - 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, - 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, - 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, - 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, - 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, - 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, - 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, - 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, - 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, - 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, - 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, - 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, - 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, - 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, - 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, - 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, - 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, - 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, - 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, - 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, - 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, - 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, - 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, - 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, - 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, - 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, - 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, - 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, - 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, - 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, - 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, - 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, - 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, - 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, - 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, - 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, - 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, - 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, - 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, - 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, - 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, - 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, - 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, - 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, - 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, - 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, - 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, - 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, - 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, - 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, - 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, - 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, - 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, - 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, - 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, - 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, - 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, - 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, - 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, - 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, - 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, - 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, - 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, - 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, - 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, - 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x09, 0x90, - 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, - 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x10, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x05, 0x50, 0x01, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x03, 0x20, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, 0x00, 0x00, 0x04, 0x30, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, - 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, - 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x00, 0x00, - 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, - 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x02, 0x10, 0x0f, 0xf0, - 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x01, 0x00, - 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, - 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x09, 0x90, - 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x07, 0x60, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0f, 0xf0, - 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, - 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, 0x07, 0x70, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, - 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, 0x00, 0x00, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, 0x0e, 0xe0, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x07, 0x70, - 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0c, 0xc0, 0x09, 0x90, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x05, 0x50, 0x01, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, 0x0d, 0xc0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x08, 0x80, - 0x0d, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x08, 0x80, 0x0f, 0xf0, - 0x03, 0x20, 0x0e, 0xe0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x08, 0x80, 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, - 0x0f, 0xf0, 0x0c, 0xc0, 0x07, 0x70, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x01, 0x00, 0x02, 0x10, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, - 0x05, 0x50, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x0c, 0xc0, 0x0f, 0xf0, 0x00, 0x00, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x30, 0x0f, 0xe0, - 0x00, 0x00, 0x04, 0x30, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, - 0x00, 0x00, 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x07, 0x70, 0x0c, 0xc0, 0x00, 0x00, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, 0x08, 0x80, - 0x0f, 0xf0, 0x04, 0x40, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x07, 0x60, 0x0f, 0xf0, 0x00, 0x00, 0x0c, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x02, 0x20, 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x05, 0x50, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x04, 0x40, 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0f, 0xf0, 0x0c, 0xc0, - 0x02, 0x10, 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x10, 0x0c, 0xc0, 0x0f, 0xf0, - 0x09, 0x90, 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x50, 0x0f, 0xf0, - 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x00, 0x00, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xc0, 0x00, 0x00, - 0x0f, 0xf0, 0x07, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, - 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, - 0x0b, 0xb0, 0x0f, 0xf0, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x0f, 0xf0, 0x02, 0x20, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x04, 0x40, 0x0f, 0xf0, 0x08, 0x80, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0c, 0xc0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x0b, 0xb0, 0x00, 0x00, 0x0f, 0xf0, 0x0b, 0xb0, 0x00, 0x00, 0x0c, 0xc0, - 0x07, 0x70, 0x0f, 0xf0, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x05, 0x50, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x0f, 0xf0, - 0x00, 0x00, 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x30, 0x00, 0x00, 0x0f, 0xe0, 0x04, 0x30, - 0x0e, 0xe0, 0x0f, 0xf0, 0x03, 0x20, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xc0, 0x0f, 0xf0, - 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0x60, 0x00, 0x00, 0x0f, 0xf0, 0x0c, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0d, 0xd0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x20, 0x09, 0x90, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x00, 0x00, 0x05, 0x50, 0x08, 0x80, 0x04, 0x40, - 0x0f, 0xf0, 0x0f, 0xf0, 0x02, 0x10, 0x01, 0x00, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x09, 0x90, 0x0c, 0xc0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0e, 0xe0, 0x0f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xb0, 0x0f, 0xf0, - 0x00, 0x00, 0x0b, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x40, - 0x00, 0x00, 0x07, 0x70, 0x0c, 0xc0, 0x0f, 0xf0, 0x01, 0x00, 0x02, 0x20, - 0x0f, 0xf0, 0x0f, 0xf0, 0x04, 0x40, 0x08, 0x80, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0e, 0xe0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0c, 0xc0, 0x09, 0x90, 0x0d, 0xd0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x05, 0x50, 0x01, 0x00, 0x09, 0x90, 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf0, - 0x0f, 0xf0, 0x0e, 0xe0, 0x0e, 0xe0, 0x03, 0x20, 0x0f, 0xf0, 0x08, 0x80, - 0x0d, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x0d, 0xc0, 0x08, 0x80, 0x00, 0x00, - 0x02, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, + 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, + 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, + 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, + 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, + 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, + 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, + 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, + 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, + 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, + 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, + 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, + 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, + 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, + 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, + 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, + 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, + 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, + 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, + 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, + 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, + 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, + 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, + 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, + 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, + 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, + 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, + 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, + 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, + 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, + 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, + 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, + 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, + 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, + 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, + 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, + 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, + 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, + 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, + 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, + 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, + 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, + 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, + 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, + 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, + 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, + 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, + 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, + 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, + 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, + 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, + 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, + 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, + 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, + 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, + 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, + 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, + 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, + 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, + 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, + 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, + 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, + 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, + 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, + 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, + 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, + 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, + 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, + 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, + 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, + 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, + 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, 0xaf, 0xaa, 0xbf, 0xbb, + 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0xdf, 0xdd, 0xff, 0xff, + 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xef, 0xee, + 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x5f, 0x76, + 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, 0x8f, 0x88, 0x4f, 0x65, + 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, 0x5f, 0xa8, 0x5f, 0xe9, + 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, 0x4f, 0x86, 0x4f, 0xc8, + 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, 0x5f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, 0x8f, 0x88, 0x4f, 0x86, + 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, 0x5f, 0xf9, 0x5f, 0xe9, + 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, 0x4f, 0xf9, 0x4f, 0xf8, + 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0x7f, 0x77, + 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, 0x5f, 0xe9, 0x5f, 0xe9, + 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, 0x4f, 0xb7, 0x7f, 0x87, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0x85, + 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, 0xcf, 0xcc, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, 0x3f, 0xc6, 0x4f, 0xf8, + 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, 0x1f, 0x42, 0x2f, 0x53, + 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, 0x4f, 0xf8, 0x3f, 0xa6, + 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, 0xbf, 0xbb, 0xff, 0xff, + 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, 0xcf, 0xcc, 0xff, 0xff, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0xf8, 0x4f, 0xe7, + 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, 0x1f, 0x52, 0x2f, 0x63, + 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, 0x3f, 0xa6, 0x3f, 0x86, + 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, 0x1f, 0x42, 0x3f, 0xa6, + 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xe8, + 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, 0x3f, 0x95, 0x1f, 0x42, + 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, 0x3f, 0xb6, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x9f, 0xfc, + 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0xfa, 0x4f, 0xf9, + 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfc, + 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, 0x4f, 0xf8, 0x3f, 0xa5, + 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, 0x4f, 0xd7, 0x2f, 0x64, + 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, 0x3f, 0x85, 0xaf, 0xaa, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, 0x4f, 0xf8, 0x3f, 0xd7, + 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, 0x4f, 0x55, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x86, 0xef, 0xee, + 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, 0x3f, 0x64, 0x3f, 0xb6, + 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xdf, 0xdd, + 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, 0xff, 0xff, 0xaf, 0xaa, + 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, 0x8f, 0xea, 0xff, 0xff, + 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, 0x8f, 0xfb, 0x9f, 0xfb, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, 0x6f, 0xf9, 0x6f, 0xfa, + 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, 0x3f, 0x74, 0x3f, 0xc7, + 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, 0x3f, 0xa6, 0x0f, 0x11, + 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, 0x1f, 0x11, 0xaf, 0xaa, + 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, 0x7f, 0x77, 0xff, 0xff, + 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xbf, 0xfc, + 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, 0x9f, 0xfc, 0x7f, 0xfa, + 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, 0xaf, 0xfc, 0x5f, 0x97, + 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, 0xcf, 0xfd, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xaf, 0xaa, + 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, 0x2f, 0x22, 0x2f, 0x32, + 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, 0x9f, 0x99, 0xdf, 0xdd, + 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, 0x1f, 0x21, 0x7f, 0x77, + 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, 0xff, 0xff, 0x5f, 0x69, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, 0x2f, 0x43, 0xdf, 0xfe, + 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xc6, 0x8f, 0x88, + 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, + 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x75, 0x9f, 0x99, + 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, 0x1f, 0x52, 0x4f, 0x85, + 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0x2f, 0x54, 0x1f, 0x44, + 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, 0x3f, 0x59, 0x8f, 0x8a, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, + 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, 0x7f, 0x77, 0x9f, 0xba, + 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, 0x8f, 0x88, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, 0x4f, 0x65, 0xdf, 0xdd, + 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, 0xff, 0xff, 0xaf, 0xcb, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, 0xff, 0xff, 0x7f, 0xa8, + 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, 0xff, 0xff, 0x7f, 0xa8, + 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0xcf, 0xdc, 0x2f, 0x74, + 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, 0x1f, 0x63, 0x8f, 0xa8, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x74, 0x1f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xb9, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x11, 0x0f, 0x00, + 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, 0x6f, 0x66, 0xff, 0xff, + 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, 0x7f, 0x8b, 0x5f, 0x8c, + 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, 0x4f, 0x69, 0x6f, 0xae, + 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, 0x5f, 0x8c, 0x3f, 0x5a, + 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, 0xaf, 0xac, 0x5f, 0x8c, + 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, 0x3f, 0x6b, 0x3f, 0x5b, + 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, 0x0f, 0x18, 0x3f, 0x6b, + 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, 0x1f, 0x17, 0x3f, 0x5a, + 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, 0x6f, 0x7a, 0xaf, 0xaa, + 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, 0x4f, 0x58, 0x5f, 0x55, + 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, 0x0f, 0x18, 0x3f, 0x5a, + 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, 0x1f, 0x28, 0x2f, 0x38, + 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, 0x8f, 0x9b, 0xff, 0xff, + 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xff, 0xff, 0x20, 0x00, 0x20, 0x00, 0x01, 0x0a, 0x00, 0x00, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xbf, 0xbb, 0x4f, 0x65, 0x4f, 0x86, + 0xaf, 0xaa, 0xbf, 0xbb, 0x4f, 0x96, 0x3f, 0x85, 0x5f, 0xe9, 0x5f, 0xf9, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0x65, 0x6f, 0x76, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xef, 0xee, 0x4f, 0xf8, 0x3f, 0xc7, 0x4f, 0xf8, 0x4f, 0xf8, + 0x3f, 0x95, 0x5f, 0x76, 0x4f, 0xf8, 0x2f, 0x84, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xef, 0xdd, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0xdf, 0xdd, + 0x8f, 0x88, 0x4f, 0x65, 0x9f, 0x99, 0x5f, 0x66, 0x3f, 0x65, 0x6f, 0xea, + 0x5f, 0xa8, 0x5f, 0xe9, 0x6f, 0xfa, 0x4f, 0xf9, 0x9f, 0x99, 0x6f, 0x77, + 0x4f, 0x86, 0x4f, 0xc8, 0x5f, 0x66, 0x4f, 0x65, 0x5f, 0xe9, 0x5f, 0xe9, + 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xdd, 0xef, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xaf, 0xaa, 0xff, 0xff, 0xef, 0xee, 0xff, 0xee, 0x7f, 0x87, + 0x8f, 0x88, 0x4f, 0x86, 0x4f, 0xa6, 0x4f, 0xf8, 0x4f, 0x65, 0x4f, 0x65, + 0x5f, 0xf9, 0x5f, 0xe9, 0x5f, 0x66, 0x7f, 0x77, 0x4f, 0xe8, 0x4f, 0xc7, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x6f, 0x66, 0x4f, 0x96, 0x3f, 0x85, 0x2f, 0x64, + 0x4f, 0xf9, 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x4f, 0xf9, 0x4f, 0xd8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x85, 0x2f, 0x53, 0x4f, 0xf8, 0x3f, 0xa6, + 0xdf, 0xdd, 0x7f, 0x77, 0x4f, 0x65, 0x5f, 0xa8, 0x4f, 0x54, 0x3f, 0x54, + 0x5f, 0xe9, 0x5f, 0xe9, 0x4f, 0xe8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0x65, 0xdf, 0xdd, + 0x4f, 0xb7, 0x7f, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0x85, 0x4f, 0xf8, 0x3f, 0xa6, 0xdf, 0xdd, 0xff, 0xff, + 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0xc7, 0x3f, 0x95, 0x1f, 0x42, + 0x3f, 0xc6, 0x4f, 0xf8, 0x1f, 0x42, 0x3f, 0xc7, 0x1f, 0x42, 0x2f, 0x63, + 0x1f, 0x42, 0x2f, 0x53, 0x1f, 0x52, 0x3f, 0x95, 0x1f, 0x52, 0x2f, 0x84, + 0x4f, 0xf8, 0x3f, 0xa6, 0x4f, 0xf8, 0x3f, 0xa6, 0xbf, 0xbb, 0xff, 0xff, + 0xbf, 0xbb, 0xff, 0xff, 0x4f, 0xf8, 0x3f, 0x96, 0x4f, 0xf8, 0x4f, 0x96, + 0xcf, 0xcc, 0xff, 0xff, 0xdf, 0xdd, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xe8, 0x3f, 0xc7, 0x2f, 0x74, 0x1f, 0x32, + 0x4f, 0xf8, 0x4f, 0xe7, 0x4f, 0xf8, 0x4f, 0xd7, 0x1f, 0x52, 0x2f, 0x63, + 0x1f, 0x52, 0x2f, 0x63, 0x4f, 0xe8, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x85, + 0x3f, 0xa6, 0x3f, 0x86, 0x3f, 0x85, 0x5f, 0xe9, 0x1f, 0x52, 0x2f, 0x43, + 0x1f, 0x42, 0x3f, 0xa6, 0x4f, 0xd8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe7, 0x4f, 0xe8, 0x3f, 0x95, 0x4f, 0xf8, 0x2f, 0x53, 0x2f, 0x52, + 0x2f, 0x74, 0x1f, 0x32, 0x4f, 0x65, 0x4f, 0xe8, 0x9f, 0x99, 0x3f, 0x96, + 0x3f, 0x95, 0x1f, 0x42, 0x4f, 0x95, 0x2f, 0x85, 0x2f, 0x63, 0x4f, 0xf8, + 0x3f, 0xb6, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xe8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x5f, 0xf9, 0x9f, 0xfc, 0x5f, 0xf9, 0x4f, 0xf8, 0xdf, 0xfe, 0xaf, 0xfc, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x6f, 0xfa, 0x4f, 0xf9, 0xbf, 0xfc, 0xff, 0xff, 0x9f, 0xfc, 0xff, 0xff, + 0xff, 0xff, 0xbf, 0xfc, 0xff, 0xff, 0xef, 0xff, 0x3f, 0xb6, 0x1f, 0x42, + 0x4f, 0xf8, 0x3f, 0xa5, 0x1f, 0x52, 0x2f, 0x74, 0x1f, 0x32, 0x2f, 0x84, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x2f, 0x64, 0x3f, 0x74, + 0x4f, 0xd7, 0x2f, 0x64, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xe8, 0x6f, 0x87, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0xc7, 0x8f, 0x98, + 0x3f, 0x85, 0xaf, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x95, + 0x4f, 0xf8, 0x3f, 0xd7, 0x5f, 0xf9, 0x4f, 0xf8, 0x6f, 0xf9, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x3f, 0x43, 0xdf, 0xdd, + 0x4f, 0x55, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x86, 0xef, 0xee, 0x3f, 0x96, 0xcf, 0xcc, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdd, 0x5f, 0x65, 0xff, 0xff, 0x9f, 0x99, + 0x3f, 0x64, 0x3f, 0xb6, 0x2f, 0x42, 0x4f, 0xd7, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xef, 0xee, 0x4f, 0x65, 0x4f, 0xe8, 0x5f, 0x86, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xdf, 0xdd, 0x4f, 0x86, 0x4f, 0xf8, 0x4f, 0x86, 0x4f, 0xf8, + 0xff, 0xff, 0xaf, 0xaa, 0xdf, 0xdd, 0x4f, 0x75, 0x3f, 0xa6, 0x8f, 0xfb, + 0x8f, 0xea, 0xff, 0xff, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0xdf, 0xfe, + 0x8f, 0xfb, 0x9f, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x5f, 0xf9, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0xaf, 0xfc, 0xff, 0xff, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xcf, 0xfd, 0xcf, 0xfd, 0x6f, 0xfa, + 0x6f, 0xf9, 0x6f, 0xfa, 0x4f, 0xf8, 0x3f, 0xa5, 0x5f, 0xf9, 0x4f, 0xf8, + 0x3f, 0x74, 0x3f, 0xc7, 0x8f, 0xfb, 0x6f, 0xf9, 0xff, 0xff, 0xef, 0xff, + 0x4f, 0xf8, 0x4f, 0xf8, 0xbf, 0xfd, 0x7f, 0xfa, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xca, 0xbf, 0xcb, 0x3f, 0x74, + 0x3f, 0xa6, 0x0f, 0x11, 0x2f, 0x53, 0x1f, 0x11, 0x6f, 0x66, 0x5f, 0x86, + 0x1f, 0x11, 0xaf, 0xaa, 0x1f, 0x42, 0x2f, 0x22, 0x1f, 0x63, 0x2f, 0x63, + 0x7f, 0x77, 0xff, 0xff, 0xcf, 0xdc, 0xff, 0xff, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0xaf, 0xfc, 0xbf, 0xfc, 0x4f, 0xf9, 0x7f, 0xfa, 0x4f, 0xf8, 0x4f, 0xf8, + 0x9f, 0xfc, 0x7f, 0xfa, 0x3f, 0xd7, 0x4f, 0xe8, 0x4f, 0xf8, 0x3f, 0xb6, + 0xaf, 0xfc, 0x5f, 0x97, 0x4f, 0x55, 0x2f, 0x43, 0x5f, 0x55, 0x1f, 0x11, + 0xcf, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xdf, 0xcd, 0xaf, 0xaa, 0xff, 0xff, 0x7f, 0x77, 0xef, 0xee, 0x2f, 0x22, + 0x2f, 0x22, 0x2f, 0x32, 0x0f, 0x11, 0x1f, 0x21, 0xff, 0xff, 0xef, 0xee, + 0x9f, 0x99, 0xdf, 0xdd, 0x3f, 0x33, 0x2f, 0x22, 0xef, 0xee, 0x6f, 0x76, + 0x1f, 0x21, 0x7f, 0x77, 0x0f, 0x10, 0x9f, 0x99, 0xff, 0xff, 0xbf, 0xcc, + 0xff, 0xff, 0x5f, 0x69, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, 0x4f, 0xf8, + 0x4f, 0xf8, 0x4f, 0xf8, 0x5f, 0xf9, 0x5f, 0xf9, 0x3f, 0xc6, 0x7f, 0xfa, + 0x2f, 0x43, 0xdf, 0xfe, 0xcf, 0xfe, 0xdf, 0xfe, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0xc6, 0x8f, 0x88, 0x4f, 0xf8, 0x3f, 0x85, 0xff, 0xff, 0xff, 0xff, + 0xaf, 0xaa, 0xff, 0xff, 0xbf, 0xfd, 0x7f, 0xea, 0xff, 0xff, 0xff, 0xff, + 0x4f, 0x75, 0x9f, 0x99, 0xcf, 0xed, 0x6f, 0x66, 0x2f, 0x32, 0xcf, 0xdc, + 0x1f, 0x52, 0x4f, 0x85, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, + 0x2f, 0x54, 0x1f, 0x44, 0x4f, 0x6b, 0x4f, 0x7b, 0x7f, 0x88, 0xff, 0xff, + 0x3f, 0x59, 0x8f, 0x8a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0x7f, 0x77, 0xbf, 0xbb, 0x8f, 0x88, 0xff, 0xff, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x7f, 0x77, 0xdf, 0xdd, 0x8f, 0x88, 0xef, 0xee, + 0x7f, 0x77, 0x9f, 0xba, 0x6f, 0x66, 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0x8f, 0x88, 0xef, 0xee, 0x8f, 0x88, + 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xee, 0xff, 0xff, 0xef, 0xee, + 0x8f, 0x88, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xaf, 0x9a, 0xef, 0xee, + 0x4f, 0x65, 0xdf, 0xdd, 0x7f, 0x77, 0x7f, 0x77, 0xaf, 0xaa, 0x7f, 0x77, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xee, + 0xff, 0xff, 0xaf, 0xcb, 0xcf, 0xcc, 0xff, 0xff, 0x4f, 0x44, 0xaf, 0x99, + 0xff, 0xff, 0x7f, 0xa8, 0xff, 0xee, 0x5f, 0x86, 0xff, 0xff, 0xdf, 0xed, + 0xff, 0xff, 0x7f, 0xa8, 0x4f, 0x75, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0xcf, 0xdc, 0x2f, 0x74, 0x7f, 0xa8, 0x1f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x4f, 0x75, 0x1f, 0x63, 0x5f, 0x86, + 0xef, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x63, 0x6f, 0x97, + 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x3f, 0x74, 0x1f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x2f, 0x63, + 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x2f, 0x63, 0x1f, 0x63, 0x8f, 0xa9, + 0x1f, 0x63, 0x8f, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x63, 0x8f, 0xa9, 0x1f, 0x63, 0x8f, 0xa8, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xff, 0xff, 0xff, + 0x1f, 0x11, 0x0f, 0x00, 0xdf, 0xdd, 0x4f, 0x44, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xcf, 0xcc, 0x7f, 0x77, 0x9f, 0x99, 0xdf, 0xdd, + 0x6f, 0x66, 0xff, 0xff, 0x8f, 0x88, 0xff, 0xef, 0xbf, 0xbc, 0x3f, 0x59, + 0x7f, 0x8b, 0x5f, 0x8c, 0x8f, 0x88, 0x6f, 0x67, 0xff, 0xff, 0xaf, 0xac, + 0x4f, 0x69, 0x6f, 0xae, 0x4f, 0x6a, 0x5f, 0x9d, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8f, 0x9b, 0xff, 0xff, 0x6f, 0x7a, + 0x5f, 0x8c, 0x3f, 0x5a, 0x6f, 0xae, 0x3f, 0x6b, 0xdf, 0xdd, 0x5f, 0x7b, + 0xaf, 0xac, 0x5f, 0x8c, 0x6f, 0xae, 0x4f, 0x8d, 0x5f, 0xae, 0x4f, 0x7c, + 0x3f, 0x6b, 0x3f, 0x5b, 0x2f, 0x38, 0x0f, 0x17, 0x4f, 0x7c, 0x4f, 0x6b, + 0x0f, 0x18, 0x3f, 0x6b, 0x4f, 0x7c, 0x2f, 0x38, 0x4f, 0x8d, 0x2f, 0x4a, + 0x1f, 0x17, 0x3f, 0x5a, 0x0f, 0x18, 0x3f, 0x6b, 0xaf, 0xac, 0xff, 0xff, + 0x6f, 0x7a, 0xaf, 0xaa, 0x9f, 0x99, 0xdf, 0xcd, 0x6f, 0x66, 0xcf, 0xcc, + 0x4f, 0x58, 0x5f, 0x55, 0x3f, 0x36, 0xaf, 0xaa, 0x9f, 0x88, 0xef, 0xee, + 0xff, 0xff, 0xff, 0xff, 0x3f, 0x7c, 0x1f, 0x28, 0x1f, 0x38, 0x0f, 0x18, + 0x0f, 0x18, 0x3f, 0x5a, 0x1f, 0x29, 0x3f, 0x49, 0x1f, 0x38, 0x0f, 0x16, + 0x1f, 0x28, 0x2f, 0x38, 0x2f, 0x49, 0x3f, 0x59, 0x5f, 0x8c, 0x5f, 0x9d, + 0x8f, 0x9b, 0xff, 0xff, 0xcf, 0xcd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0x5f, 0x69, 0xcf, 0xcd, 0x5f, 0x8c, 0x4f, 0x59, + 0xff, 0xff, 0xff, 0xff, 0xdf, 0xcd, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; unsigned int MII_DATA_len = 73600; From e67dc65118adf9c54099c6242a2a549388af5a68 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Tue, 5 Sep 2023 14:28:52 +0300 Subject: [PATCH 80/88] Add ExtSaveData::CreateDirectory and stub srv::unsubscribe --- include/fs/archive_ext_save_data.hpp | 1 + include/services/service_manager.hpp | 1 + src/core/fs/archive_ext_save_data.cpp | 21 +++++++++++++++++++++ src/core/services/service_manager.cpp | 9 +++++++++ 4 files changed, 32 insertions(+) diff --git a/include/fs/archive_ext_save_data.hpp b/include/fs/archive_ext_save_data.hpp index 6e7fe65b..fec923b4 100644 --- a/include/fs/archive_ext_save_data.hpp +++ b/include/fs/archive_ext_save_data.hpp @@ -9,6 +9,7 @@ public: u64 getFreeBytes() override { Helpers::panic("ExtSaveData::GetFreeBytes unimplemented"); return 0; } std::string name() override { return "ExtSaveData::" + backingFolder; } + HorizonResult createDirectory(const FSPath& path) override; HorizonResult createFile(const FSPath& path, u64 size) override; HorizonResult deleteFile(const FSPath& path) override; diff --git a/include/services/service_manager.hpp b/include/services/service_manager.hpp index 437a5ea4..42025a3e 100644 --- a/include/services/service_manager.hpp +++ b/include/services/service_manager.hpp @@ -84,6 +84,7 @@ class ServiceManager { void receiveNotification(u32 messagePointer); void registerClient(u32 messagePointer); void subscribe(u32 messagePointer); + void unsubscribe(u32 messagePointer); public: ServiceManager(std::span regs, Memory& mem, GPU& gpu, u32& currentPID, Kernel& kernel, const EmulatorConfig& config); diff --git a/src/core/fs/archive_ext_save_data.cpp b/src/core/fs/archive_ext_save_data.cpp index c07f3353..87b3662b 100644 --- a/src/core/fs/archive_ext_save_data.cpp +++ b/src/core/fs/archive_ext_save_data.cpp @@ -87,6 +87,27 @@ FileDescriptor ExtSaveDataArchive::openFile(const FSPath& path, const FilePerms& return FileError; } +HorizonResult ExtSaveDataArchive::createDirectory(const FSPath& path) { + if (path.type == PathType::UTF16) { + if (!isPathSafe(path)) { + Helpers::panic("Unsafe path in ExtSaveData::OpenFile"); + } + + fs::path p = IOFile::getAppData() / backingFolder; + p += fs::path(path.utf16_string).make_preferred(); + + if (fs::is_directory(p)) return Result::FS::AlreadyExists; + if (fs::is_regular_file(p)) { + Helpers::panic("File path passed to ExtSaveData::CreateDirectory"); + } + + bool success = fs::create_directory(p); + return success ? Result::Success : Result::FS::UnexpectedFileOrDir; + } else { + Helpers::panic("Unimplemented ExtSaveData::CreateDirectory"); + } +} + std::string ExtSaveDataArchive::getExtSaveDataPathFromBinary(const FSPath& path) { // TODO: Remove punning here const u32 mediaType = *(u32*)&path.binary[0]; diff --git a/src/core/services/service_manager.cpp b/src/core/services/service_manager.cpp index cb93b627..54e3ecf9 100644 --- a/src/core/services/service_manager.cpp +++ b/src/core/services/service_manager.cpp @@ -79,6 +79,7 @@ void ServiceManager::handleSyncRequest(u32 messagePointer) { case Commands::RegisterClient: registerClient(messagePointer); break; case Commands::GetServiceHandle: getServiceHandle(messagePointer); break; case Commands::Subscribe: subscribe(messagePointer); break; + case Commands::Unsubscribe: unsubscribe(messagePointer); break; default: Helpers::panic("Unknown \"srv:\" command: %08X", header); } } @@ -178,6 +179,14 @@ void ServiceManager::subscribe(u32 messagePointer) { mem.write32(messagePointer + 4, Result::Success); } +void ServiceManager::unsubscribe(u32 messagePointer) { + u32 id = mem.read32(messagePointer + 4); + log("srv::Unsubscribe (id = %d) (stubbed)\n", id); + + mem.write32(messagePointer, IPC::responseHeader(0xA, 1, 0)); + mem.write32(messagePointer + 4, Result::Success); +} + void ServiceManager::sendCommandToService(u32 messagePointer, Handle handle) { switch (handle) { // Breaking alphabetical order a bit to place the ones I think are most common at the top From d3213f3eca0da58417ad2bce9b68e42f3daf9d78 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Tue, 5 Sep 2023 14:33:32 +0300 Subject: [PATCH 81/88] Try to fix old Clang build --- include/helpers.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/helpers.hpp b/include/helpers.hpp index f13fc720..cd646c6d 100644 --- a/include/helpers.hpp +++ b/include/helpers.hpp @@ -137,7 +137,7 @@ namespace Helpers { return getBits(value); } -#if defined(HELPERS_APPLE_CLANG) || defined(__ANDROID__) +#if defined(HELPERS_APPLE_CLANG) || defined(__ANDROID__) || (defined(__clang_major__) && __clang_major__ <= 14) template constexpr To bit_cast(const From& from) noexcept { return *reinterpret_cast(&from); From 3d47bc5f87071c819c5052ae4631b1f9ddbc710e Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Tue, 5 Sep 2023 15:09:05 +0300 Subject: [PATCH 82/88] Try to fix old clang build v2 --- include/helpers.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/helpers.hpp b/include/helpers.hpp index cd646c6d..afebc959 100644 --- a/include/helpers.hpp +++ b/include/helpers.hpp @@ -137,7 +137,7 @@ namespace Helpers { return getBits(value); } -#if defined(HELPERS_APPLE_CLANG) || defined(__ANDROID__) || (defined(__clang_major__) && __clang_major__ <= 14) +#if defined(HELPERS_APPLE_CLANG) || defined(__ANDROID__) || !defined(__cpp_lib_bit_cast) template constexpr To bit_cast(const From& from) noexcept { return *reinterpret_cast(&from); From aff67ff00c377ab1e483947fadfb58e6662ffe82 Mon Sep 17 00:00:00 2001 From: Live session user Date: Tue, 5 Sep 2023 16:59:20 +0200 Subject: [PATCH 83/88] Add AppImage Building --- .github/Alber.desktop | 15 +++++ .github/linux-appimage.sh | 6 ++ .github/workflows/Linux_AppImage_Build.yml | 66 +++++++++++++++++++++ docs/img/Alber.png | Bin 0 -> 1059844 bytes 4 files changed, 87 insertions(+) create mode 100644 .github/Alber.desktop create mode 100755 .github/linux-appimage.sh create mode 100644 .github/workflows/Linux_AppImage_Build.yml create mode 100644 docs/img/Alber.png diff --git a/.github/Alber.desktop b/.github/Alber.desktop new file mode 100644 index 00000000..01e639cf --- /dev/null +++ b/.github/Alber.desktop @@ -0,0 +1,15 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Alber +GenericName=3DS Emulator +GenericName[fr]=Émulateur 3DS +Comment=Nintendo 3DS video game console emulator +Comment[fr]=Émulateur de console de jeu Nintendo 3DS +Icon=Alber +TryExec=Alber +Exec=Alber %f +Categories=Game;Emulator; +MimeType=application/x-ctr-3dsx;application/x-ctr-cci;application/x-ctr-cia;application/x-ctr-cxi; +Keywords=3DS;Nintendo; +PrefersNonDefaultGPU=true diff --git a/.github/linux-appimage.sh b/.github/linux-appimage.sh new file mode 100755 index 00000000..218f1c2b --- /dev/null +++ b/.github/linux-appimage.sh @@ -0,0 +1,6 @@ +# Prepare Tools for building the AppImage +wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage +chmod a+x linuxdeploy-x86_64.AppImage + +# Build AppImage +./linuxdeploy-x86_64.AppImage --appdir AppDir -d ./.github/Alber.desktop -e ./build/Alber -i ./docs/img/Alber.png --output appimage diff --git a/.github/workflows/Linux_AppImage_Build.yml b/.github/workflows/Linux_AppImage_Build.yml new file mode 100644 index 00000000..532f99b2 --- /dev/null +++ b/.github/workflows/Linux_AppImage_Build.yml @@ -0,0 +1,66 @@ +name: Linux Build + +on: + push: + branches: + - Test + pull_request: + +env: + # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) + BUILD_TYPE: Release + +jobs: + build: + # The CMake configure and build commands are platform agnostic and should work equally + # well on Windows or Mac. You can convert this to a matrix build if you need + # cross-platform coverage. + # See: https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/managing-complex-workflows#using-a-build-matrix + runs-on: ubuntu-20.04 + + steps: + - uses: actions/checkout@v2 + - name: Fetch submodules + run: git submodule update --init --recursive + + - name: Install misc packages + run: sudo apt-get update && sudo apt install libx11-dev libgl1-mesa-glx mesa-common-dev libfuse2 + + - name: Install newer Clang + run: | + wget https://apt.llvm.org/llvm.sh + chmod +x ./llvm.sh + sudo ./llvm.sh 16 + + - name: Install newer CMake + run: | + sudo curl -s https://apt.kitware.com/keys/kitware-archive-latest.asc | gpg --dearmor | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 42D5A192B819C5DA + sudo add-apt-repository -y 'deb https://apt.kitware.com/ubuntu/ focal main' + sudo apt-get update + sudo apt-get install cmake + + - name: Setup Vulkan SDK + run: | + wget -qO - http://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo apt-key add - + sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-focal.list http://packages.lunarg.com/vulkan/lunarg-vulkan-focal.list + sudo apt update + sudo apt install vulkan-sdk + + - name: Configure CMake + # Configure CMake in a 'build' subdirectory. `CMAKE_BUILD_TYPE` is only required if you are using a single-configuration generator such as make. + # See https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html?highlight=cmake_build_type + run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang-16 -DCMAKE_CXX_COMPILER=clang++-16 -DENABLE_USER_BUILD=ON + + - name: Build + # Build your program with the given configuration + run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} + + - name: Run AppImage packaging script + run: ./.github/linux-appimage.sh + + - name: Upload executable + uses: actions/upload-artifact@v2 + with: + name: Linux executable + path: './Alber-x86_64.AppImage' diff --git a/docs/img/Alber.png b/docs/img/Alber.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbedd7b963b8f18c1c70571de7f332c436eb234 GIT binary patch literal 1059844 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%0Dmigv@~n35-Xq|M0iI zxB1G&55{JBwG*Ly_|cD6SE`3hI9`h3e)Z+oWnq4qAa1oMjPV3vO)maxDHLbVonC$K z?Kf6eQUs19%=V^WeEIv|mxK~=wSd`Q=$nPQ9v>h)Uc@txw11S>=*D+>3^J}l@%+uA-LE3f^YLN3Y<9ywKYtN1p{lGlPTo-hvH)%bQEKMPh>o#IFFnf^b@qwOhs zqwN#zb)*>lhyU=))!C9{4j(IAnWC;p$9UXo^F$S&4iy4<5iSWF+gcvSzn|xYq3R2j zZAo5K2+%RK!c(Xj0f=wH@2(=C;+uD!9nJ$xIeO!bH&!Q4o-9mNa!A+Te(SB( z)hbc_;urs6^|L?ulTil#{_p-S!F@kL-(J*L3WUV3_uhSb^}+jZ_1q_`ODWYtz2BAj z`^A@E&U&>KjB$MZ`mNQKE7$w!T;~#m@XIks;+Z3;8!Nt!Pl4Bm%<*X`VX*Nu#!&a~ zKmH%W-yhEi_``E#Gorym{J;SmX<*kQfR@(&=l|({{7eWy{oS|Te5;4{#-yLDZdIT1 zUV}u?ikY7XDL+Z8dF{1JtKa&=wSl->24TyoVfO!}WH)c$Yf+M3au^e-zNHxbXnF*65lvUlKNXV2l=f|ot zV|5P0#U? zjd?xV;(Fic5O}o9%H@_t%m=4(OLXzdqEs;mjT7h!ChQGA_Eic2v2^ZdkrCPiu!X)9 z?O)uV-2UUG@NR44Xs7f%75|2(+TAX`KlBv-S(`_~mGxuZ2n5w~lsHr&=|;lS0SlO_ zTorS%7Op8zEX_MvMEAe_vP{@Ki)~Q1Jz!(�dL2HZUB)MZUB00KQ(`zWU9?&F$ZN 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%0A{oQbr!Z^I>BK* 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

VEE{44+lG6pff0I2}$MUf4P2oqrz9 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

U@&hPlnj$K1_@(QgkTN!lWA#92%*pB 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 literal 0 HcmV?d00001 From 9c735683f94cb0e3494a792c0ad208fde8476a4a Mon Sep 17 00:00:00 2001 From: TGP17 <86961834+TGP17@users.noreply.github.com> Date: Tue, 5 Sep 2023 17:10:58 +0200 Subject: [PATCH 84/88] Update Linux_AppImage_Build.yml Changes the workflow name to be different from the normal Linux Build and sets the branch back to master --- .github/workflows/Linux_AppImage_Build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/Linux_AppImage_Build.yml b/.github/workflows/Linux_AppImage_Build.yml index 532f99b2..0a304109 100644 --- a/.github/workflows/Linux_AppImage_Build.yml +++ b/.github/workflows/Linux_AppImage_Build.yml @@ -1,9 +1,9 @@ -name: Linux Build +name: Linux AppImage Build on: push: branches: - - Test + - master pull_request: env: From 9094525a66ff9750afbf43402f2a7a7f8d6357d0 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Tue, 5 Sep 2023 19:04:36 +0300 Subject: [PATCH 85/88] Add AppImage link to readme --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 0fde88ee..a1ce1eaf 100644 --- a/readme.md +++ b/readme.md @@ -17,7 +17,7 @@ You can download stable builds from the Releases tab, or you can download the la |--------|------------|--------| |Windows build|[![Windows Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml)|[Windows Executable](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Windows_Build/master/Windows%20executable.zip)| |MacOS build|[![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml)|[MacOS App Bundle](https://nightly.link/wheremyfoodat/Panda3DS/workflows/MacOS_Build/master/MacOS%20Alber%20App%20Bundle.zip)| -|Linux build|[![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml)|[Linux Executable](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Linux_Build/master/Linux%20executable.zip)| +|Linux build|[![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml)|[Linux AppImage](https://nightly.link/wheremyfoodat/Panda3DS/workflows/Linux_AppImage_Build/master/Linux%20executable.zip)| # Compatibility Panda3DS is still in the early stages of development. Many games boot, many don't. Most games have at least some hilariously broken graphics, audio is not supported, and some QoL features (including a GUI) are missing. From 7bf56c2413a9fbe25c7b26b128a98694ea1b49f8 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Tue, 5 Sep 2023 20:57:48 +0300 Subject: [PATCH 86/88] [CPU] Add function for clearing JIT cache --- include/cpu_dynarmic.hpp | 2 ++ include/kernel/kernel.hpp | 1 + src/core/kernel/kernel.cpp | 2 ++ 3 files changed, 5 insertions(+) diff --git a/include/cpu_dynarmic.hpp b/include/cpu_dynarmic.hpp index cb7e5627..7bed8704 100644 --- a/include/cpu_dynarmic.hpp +++ b/include/cpu_dynarmic.hpp @@ -170,6 +170,8 @@ public: return env.totalTicks; } + void clearCache() { jit->ClearCache(); } + void runFrame() { env.ticksLeft = ticksPerSec / 60; diff --git a/include/kernel/kernel.hpp b/include/kernel/kernel.hpp index 3d4b6917..b8976796 100644 --- a/include/kernel/kernel.hpp +++ b/include/kernel/kernel.hpp @@ -229,4 +229,5 @@ public: void sendGPUInterrupt(GPUInterrupt type) { serviceManager.sendGPUInterrupt(type); } void signalDSPEvents() { serviceManager.signalDSPEvents(); } + void clearInstructionCache(); }; \ No newline at end of file diff --git a/src/core/kernel/kernel.cpp b/src/core/kernel/kernel.cpp index 5eb3cddb..dfebfb6d 100644 --- a/src/core/kernel/kernel.cpp +++ b/src/core/kernel/kernel.cpp @@ -263,6 +263,8 @@ void Kernel::duplicateHandle() { } } +void Kernel::clearInstructionCache() { cpu.clearCache(); } + namespace SystemInfoType { enum : u32 { MemoryInformation = 0, From e8a50ab937c15dddba2a3877c2aec1efb26bae95 Mon Sep 17 00:00:00 2001 From: ArbestRiAgain <132712354+ArbestRiAgain@users.noreply.github.com> Date: Tue, 5 Sep 2023 16:46:02 -0700 Subject: [PATCH 87/88] Update readme.md --- readme.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index a1ce1eaf..e1be124b 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,7 @@ # Panda3DS [![Windows Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml) [![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml) [![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml) [![AUR Package](https://img.shields.io/aur/version/panda3ds-git)](https://aur.archlinux.org/packages/panda3ds-git) -Panda3DS is an HLE, red-panda-themed Nintendo 3DS emulator written in C++ which started out as a fun project out of curiosity, but evolved into something that can sort of play games! +Panda3DS is an HLE, red-panda-themed Nintendo 3DS emulator written in C++ which started out as a fun project out of curiosity, but evolved into something that can play games! # Discussion Join our Discord server by pressing on the banner below! @@ -24,7 +24,6 @@ Panda3DS is still in the early stages of development. Many games boot, many don' In addition, some games don't quiiite work with the upstream code. A lot of them might need some panics in the source code to be commented out before they work, etc. However, just the fact things can work as well as they do now is promising in itself. -Check out [this Google spreadsheet](https://docs.google.com/spreadsheets/d/1nWZTzfaMPkZdyhqHEawMRBaP0qSMmQdxrVfAbgapYrM/edit?usp=sharing) for an unofficial compatibility list. # Why? The 3DS emulation scene is already pretty mature, with offerings such as [Citra](https://github.com/citra-emu/citra) which can offer a great playing experience for most games in the library, [Corgi3DS](https://github.com/PSI-Rockin/Corgi3DS), an innovative LLE emulator, or [Mikage](https://mikage.app/). However, there's always room for more emulators! While Panda3DS was initially a mere curiosity, there's many different concepts I would like to explore with it in the future, such as: @@ -111,7 +110,7 @@ Panda3DS also supports controller input using the SDL2 GameController API. # Support If you find this project exciting and want to support the founder, check out [his Patreon page](https://www.patreon.com/wheremyfoodat)
-Keep in mind, funding is only aimed to cover various life costs and support development. Panda3DS is a free product and on no occasion will official builds ever be made private or limited to sponsors! Any donation is much appreciated! +Keep in mind that funding is only aimed to cover various life costs and support development. Panda3DS is a free product and on no occasion will official builds ever be made private or limited to sponsors! Any donation is much appreciated! Nintendo 3DS is a registered trademark of Nintendo Co., Ltd. From 5049cf0f4f852d3a3dd5723d0d87658751f7b7a8 Mon Sep 17 00:00:00 2001 From: wheremyfoodat <44909372+wheremyfoodat@users.noreply.github.com> Date: Wed, 6 Sep 2023 08:45:53 +0300 Subject: [PATCH 88/88] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index e1be124b..27e7887e 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,7 @@ # Panda3DS [![Windows Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Windows_Build.yml) [![MacOS Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/MacOS_Build.yml) [![Linux Build](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml/badge.svg?branch=master)](https://github.com/wheremyfoodat/Panda3DS/actions/workflows/Linux_Build.yml) [![AUR Package](https://img.shields.io/aur/version/panda3ds-git)](https://aur.archlinux.org/packages/panda3ds-git) -Panda3DS is an HLE, red-panda-themed Nintendo 3DS emulator written in C++ which started out as a fun project out of curiosity, but evolved into something that can play games! +Panda3DS is an HLE, red-panda-themed Nintendo 3DS emulator written in C++ which started out as a fun project out of curiosity, but evolved into something that can sort of play games! # Discussion Join our Discord server by pressing on the banner below!

2b49X^N+@y%~JAc17|Xi6Q03I zDHhJKRwT`uWAU)Pt(ow-C>EZC11!?ncwAds z9eb^mPqGMa%4Vn~altvcE}nY01~wZQd>z{cDYt?FKJ!uS!)8=)7~YI?gCa_Ke3wn2 z4r%y#V2BFry9qj0$q5$M?bWlMkxwcwPPEOzSC(&^Khq&^b3xRvls+nR&yZE@$57W6 z0ar=(#u3zbFwzNFTn9y^3o#tJe!s?H z_BQxSq>uzLGBiSP!1J<~<*3$Vkis4iUW)f8I4i3Jh|XKiCkU`Vt(4#*hv#&1$0`?a zMTmxf&*5hr>=U5ybM^>7V{M6xnZnPU#rY(0a2+|e4P0b@rXm$v?4!3%=3y2NfS2Xs z;dBXFWV~z;FlE6AR1ef=R_@R>@}kX?;@DFF$JKe zWqnIXW(nA0Vsey5Xjpgz5VkCA?*g-MwuPr$`(*-7*Ua<2$$A+GD01%ER%$PuP1q#> zt0HBX#)uYiUovnAk{J5AGfl9HfFVN<4y=xPP;799K+s&%jx#L|xBCa_aoUST?XqI@ zX$hcQhq0-l(A?NUz_<%OJ{G=u@Gv}26Lx2FRd_fuLb?s1Bnjt59qbsi_!*!pmOkvV zX2)9^nFv)%9f7fJkI;u5N`&WVZ}8~O?k$9t#*A=+`MxqRf#2Cf$FrdyOp*PI$B)9X z#^a%iH1x~I6vYW_tmjn0LhPcYAVJDC3vOz$aUa9eSX~Ef0gLV0o$&iFTnNW2YvWl~ z#p*Ez`~KJxwH4qJCi}c{ww*f$(}_SSlXrafnPcIZC(g&cnVwk+H*ikYuWIP?5?fW| z;t){;M+~aO(nw2FFY8rF0lT`Qgfj`@g_QUk-*_%O`Q(|`MqzwfE-~Nq77e0 zC8(#*oaRm?!=4=GY&$tC6@BI*Ml#Zm$Qi0*NW+WIb%4>+-cXm!(1t=j4<<7?HlBh^{nrL{%k+D2yUvksw&s8RC0m5?G8q>Sa#)9Ppk_MyX2gU>Sj) z2~52~8}?FCS~mAoTKzb+Nb7h!M)+4>FhpV*J4aA|V{$FrVkF_<6v++)GBybiHuX0+ z+HJh88pPHj^9j(rOUVd@ zG>+P-Y6bz;U`$RDoEZn|d$1x$>1y!dq{k@2~(uW={=zLhVF3An66 z{fbF{%76CV@4h{Qkz6G6B(07ZHXaIrfc#jjOyK|>lJRDPV`Rf(Dl91>%E1}(qB_c| z>e^W7Hu5>j_Hm*tBu~f!`o2VQ{$v)&2{&TTX1qp79wsMXD6{0#*$-y);)5HVY=K)Z zCs1qP<;sal3%QJ?6h>{tW*rG09N4^vv92N`sEkY*M@%)NAFBTD0gEhq#)&s|wY8D* zZ$tj{k0Wh1d;`8krbgZ4vE*fGaWzZ1ciRazN z@%pZDo-LV+&G@PtDI#F2fg%aR7!k8t>H51kEQO=92@)(&nn9}A#JP+FfQ1B?h5&1w z?A_@>{4fs1kvyAnd+A(`d9bJ?E~o?o(FemI*G8(S@8|Osk_ncR-I&qF;Df!1LJS;^ z;ZbP2V^d_)1P;7c5r)y%x5lH8w(Sx2;W>?_lu0&u1cW-c3IdmwdX#a%$aMxuSXqaV ztJQ3gT=+Bke#;aZ9-YJ)&cy60m%vM%%vtby zmVxukdf?b(25k~-h@wPUN%m)h&v$mQ1vKf-5%u6ZWJhx12(rK!F*3`L1#%2fIA>WX z)L3sAouGl5EUSR`Fp%>7EZ~XAOfrqeX)b1o%bc-{oB|?i0ueCq+FI&h?7e3|7ElqF z$V_dS+Ks(clvK!ykWiy{%=L3_s_V6gVvCx)vVyV*J|;01Yob0lkz5Q=CQ^m=#eH_? zQTXh}NO<#^lTe}aXy(W15P*~w5je(oLX-hRpHIeF0s?cgts%_f^qf^)L?$>e?s{*B z1`4CY^TXWZ(r~P`Ee3~==>;k#n4CbJWeg1b!tu&Lm`c%IaR7`HzmzVlt*ODG^EVir ze6stL)ZCciT<;%2VTDm~^^MWk6p_(w^KQ8ms5{zP5hj2ljcs^9zma;*Z(MpBgOd^- z!A`qRp?-033+Y70*v&8@sdO)V@42(w|IF~g4afpG&#LOe(ACCgW9;re8sdJ_3yMR^ z1d}#+7~`B~fEMc96ZMMp%Sm!ID`JwiwreQ4a*+8)rW@V3d}# z7Wp7=cOKDe47P8(&Fjy;7#Xeq<}ZE-PHb=v0f==}Rx*qGQqR;Kg8rbFHY8wNcbA3fCX?g5lo> zIjJQu*Z^byEc75e;Vkohu=OFHe-Ve7g@c-2BQd}+m6m5CABgw~3EL_^Q+qK3Yw|N{ zOlkn1IaVLpr1t98q1ik^1{*FQWQC)z0Lf17N*v!elYdnXQ_c=`EfA|fRX zW}L~sL5lvY_3_Sj?!`{{?Aqty#Ia6B8@Ayb*QlS;LkB`MIyFx1r#`%J>I~1&AAb1r zk3uR5#!Iii8s2>Vx#$dU-0KFzCyC*%uTzt%AsFr+<8FJ0xN9W@l@;v$JZBj57R3YX z^R{le%FpgaRxlaWBLnPVWj zq2z-C&^pHj))BPiv7h!CIzmvVE_o-St=!W*0t1!bN(nyfV=W+v%i|w=Tt$Fm462Xnkt=~2swLL0KSw3M}O%Aja&>6loHgLAN38|J^(C^(Uv}a#3&Q`2O`4gTlBX1+yMfP^mBHx zH2eynQ61XK;v8@k3JP32FR#yFwB*P-qr6IrXi6k45_KE(x-d?OScC?@#6K2=3kW2P zgm-b)7XOwl%Ck@w!mB9EsCr~3Tfpb&oE7I5&h}?!llka;biz_uEhg&_eK!LfUX~z0 zRU4yBHcqDquPT!y91u%bF+XarE0HJ;Nw_v7`bd5lTnCF? zN{Velu{U$mp$k1ai?s!X6onAh$czlUWRk9elGNddSIErnJ!JG6foC<@krPfPr(xsp z?71k3xc)mr`b5{MI047+N$i*+Nb-`f)DfyTb4}pjmH(2wV(?Z%mTf>7ska0~7KkG= z6=%U6jlcHjp;WUsiL}bzp(R^i_@2532Ai`+>ty7%w%C^7I$Hk8#c4YnVgl+d2LR(+ z6I(AFdl`pm#0&$Wa=vc`L*djMjW8h^Xa$4TDKxGU&UrWMKF-T9qY~tsojW z`qB4Sh~9wh_Tw>(7c_3xmgVHV)i!nf+aj6r1eOmHNrFr-WQJ>Z`a}0a!~t-CY4nM% zY$w7W|Ka)Y`ZFzop_7nGwxXKT1>kJuBPU>v^$!ikd*K~vtYu;q?={aI7p~1GD6$W< z8H7WpwMXD3v^&Z7*{j$_=IQvsJxUFqe$ovyly$Bup^vkSb2~>c3j+`2>v(5dbnN2< z0+;DkeeKm(up10d;Y=N;w~$IDNCu-pNjPS(Cv8cwqD8LoxfU)>`Bqem8-SwT5e zxwZ5h8tV}EZ-=C!0vlut&hS)%p30%2@YLy3*b|hZ zfbB0m|0L}Q$2jB6TnF*7EO7orJN>IwWWgpfYzUK^R+$<#&b`>9>{ZGcNya(+-Yd_e z6AUuMc~^!qi@Sffr#p(I$WE;)FQL_|5~N@zmKL>>1{Nkxl6^kAb~hAfLQ-PQ{@uTQ zhs-uLy!h0aFwH&c8R!eIzVu?~=xhX8m?f~EfCX7c(2$K}B*`Br+s{9|&TxlofiOJ$ z$$$69;n{O1!j-S?hWFmN9E0~Ig6IuU!>3wW!$W?a=W%|4`SRGZGi`Mg(=$R_LoI<( z9=&|y5Hk=0;BH*L*~=M|L6{uJDmH>pJ$IsoK0kDYIrrzADnkp?iK-ADZU&92Bv8xe z&J`jRT1mj42FxY{vY3R+U@nO@G+ElV9>6VJ#>OoZWNL#kpV-VlTAO;EeGlJy<;Cwp z5F_Z^!hWuB?<~pc;Iqui@m2o&4t^>W#a2E0|F5R->Z>3V*;7-Uw-ecw>7NMar0pZz#u|0X8w8fnz>N1 z9-$EjKC)>(1%qh@WnDwYpbSBwe1Djkyzm20AHUCNM5kTTdQ#sTx2Dlcp+*; zAOLKjOg(!~mxR;~H6KHvm#xK-P-UsRzfw2U5p{ z&GLy%oiwBPvrwINcWLRPu!V?aW9F>Xm2y>w)b7lr9lfW}g1w2>)Kd8%hnLF>*yTW3 z2CzOkGBU|!fGNrIH8MI;mQF)0HE~puWR#^LrMSwz+oCapZGbtClTXD! z*xMKd7rba(6yG5wIRm(Ho@@be1cFA5MiJOm`XV=fcB2!cZC6e*#S3KsM1_UlX13 zEtGdW!zbElU%^0FdJvVc7t+Z*jqKGF2D-es3`0~E&uItWTL}wpj{vcwsevBDHQ@5@ zaE89K797g}FmpQh(LwYwl1M)p)i(e_gHhrvA3uHqCsB_hKR{)LdU|yM&TB37Q(ty1 zFWCPEBIc08Z~}t31Zamfc?}% zo18$ot|9!v>#tDjUkP7z--`%?RQ*Z(f-K}E%C)luZ3!Iw?CLg1$P$hm&K9WA0(N5s zguzmyl7rLARl@I(0cvmT6hW|`u}G_ld#%o(-vuj87&rxB>AOQbtP+@6UbXb3EIaw}%|L)i7Yx#D{XAHl2 z>)F$9AJ9m;wFTsa@halb*f+L|;fgPhX|&>hJ6%Xf!qIy^pnY0KB)+)yXo-Rn=BCFO$PNT9m0PiT0|%+3_OA)O zD^6hKWAG7`dRTlHcO6J+kxW&mq^N;(bL)U25Y9#|DJ_TiQWbx;(6De!F_6CSy|i@o zNvAO?PQ;m;S>TyzhaiI!;`I6bZwD#(yDMk}CHcdRick!1p@WWu4F2w@tl?&{ZoES_ zYoR8t#J?>L>N>x>V)pGVplj;)N{mx1VHQHpkyN4M$?~HxeSTg^%p!%E@;e4F!>*lKfG)7dafI=(*04HzK_^rmQvQ$Qp4u{CVK-r3L`w<$fTmY3`TobdR zFK#@D+2Q@iy*vj)1_&6eU(NHJ)+_UHlGeLCtWHCc$Du>lk?r8L&4v{zm)06DH)p|% z<&bS&nFC9k1u$S9y*+6_dWW2y#=2V0P7=Wmjp+sj(V^}~m^TYqz6Hovj*wKcZI|pK zgU>Q}G!x6@y+;U&x_eRjA*flznN(xUW_a$ZGSCWxI}sQ@)4>kvd3N{Sri|1Q%Q36K z#Th`@4x={$$hLmHiD;`qXesYQrgk3e|nN#xJ#X%b%s9>3dtJG3@-(QjBAKDl}$ zy!-iAIFlu02^(V2IW#r_Itk(AF*CS>6Lkby9U1h);RR+T&(SB?Nb3Nzav_Y> zR8S`2Y!zlf`Xm@hOF^B4EXzK+{eujo1j`r}Fv@-31j?pNQj-yW=j9XZH>D-^cARJK z9iBuD2r?NYw_4h5S{rI`KK$McfsG(@0dz>d%-x?tegPg{^JKw z#-YjcJ=Nt1A&}rb=<6Y%pN@C69!W&C!ROW%BgCqR#l-k%Na4Pg;fzFOnrf@5chfQh zqRWUpO5;vKYQ5X{ydRZWISWku>FJvcBlPSka`A|F=CC>|t~!{Mo<%Imlf@sB9_>|HXg(2Ku}O;l_=dA#ESW zbpXvD*u0RyrW*SG>(8GJnI&noQ5*|rkIOsQW*@mbNJiF{LtLF0>H-16 z8bp^B#2?mJPi?f*gbbvMMQ1^xFkh58^SJ-?6S8hxqo`uU$75G{rh+5%+fr#6!R99R z55pJtLqF$aIH@}ml&hSPZ8=b0kmoA$0`NKViS!F5rlOM$3&7F)>hm!hAx z6zIERwvWwMflhy;-x16`N~tq^$%3#~wa|1Ha2 z*oU8jBO<`z2S%swvvUya_cIWYCVIfZ+rrsw60n&48_c-)_UIH8p-@96wu8YP>gx}q zuy7q_UO?94#3K)bM$SOT`i^sC_kf}eqRjFo?>W6@5*Tj=LP{P;MlquX3m|Hx;jDG; zKGFop$NU1N5;`S(SNFiK1^EA#_leQ!h6GBbdOOS|dF-oaJ)P_7n~+8N@|o$X-9EPNnSQ(5?UCL{?W} zP~))o>8nyD#WI%4AQE6TD%_tKIol`8zr@Z0`2f4@PYl|)2WhN9InS?J)bQXC0Vo|2 zpa*`00fZKzG6AFS_IG-+%#Dtqb76F9IwlVD^Nw?og2ji<`&_DtU8DTbs0t%9&4`zbz-6x z_4Y&1h)lA>uRuPQmZr!aHxXyiTdNA^X!IA^Sw!2pfM?Z^dFNC=THl7a1xnIX zhZs6*m_k;ZN?>W7-1*BhXg(KkRvU1R&Xt|xK3!!fz>kmxyz}5TTF6C|Rc2zAZ8u2Q z*#WiPR<)D|D&Um7`0TTM9!>`0!12x#aXcZ*OI@6DBKFASMH#(v5RZKv z$qDYGV-oN74)L=lAP$qPfwT+^B8mFdeX`dBn($}Cb59&6Xer>7SyH4V$U5mnB-Pmw zb!gxWa-}`kqRD*_JztSO%OIx^V8|dCUBPCU1nlrU03){r zPUXczt_+kaI69=yU{ZD8>oF9@P*wt zU7M6`X{?sC#@7yyPsEH}Jz$|~ox4s?;+*OWDMWv(K;>CnKSQJ#y4pVhE^qm-Jp zb*3X&NWDl(A&}@?mp!7~<)sZKK+FK)&QKblJb{r=^g070;sl;TU}s@zyA~2e-YShK zU~T>9QSUG%00=oNz+pi7o6Kd^0jk=eTvaabT}xJH!>}C$sw5S0G4dG}Z&vT5X89~z$AqRTal}e%xi>;+mM;ppoCa}1UXtiyt&Med1llGU z-5!@;RUpOaJ-DT0X0~N&EFvM0pi1JIgA*i2ZWDZFb6zClq+@Ut_)n0@IO(Q}i97Qk zE!EWLMW;k3R7T?IBQdGBuP|F*MG&g{7@L6A==+ZNYg3GJtfa%GyxbP0L7?k~vF|EfTZ}ZIg z)P*xBiG0YkoMjrYTUcM~*JD$&5I6e?T3O>X_%fa?_FyV86CJ_DQ)eLymZ7+m2p@fU zoviFIG*GW?Zz|?agTRn&7O;PmvIP( zBcl_Ma5=p&8P3B+u#;k({gkM>%zdc^MX}v79~HG9|Kj8D@BZZvLK=ucV@o5>JcRGQ z^$I~*d${?a8=YkW?kqY}dPWJPXqCopuHyKzN+@HDjf8rTg_g#uh%Ej4@BcJhc;#Gp z^E)qu0#uHQSs%P90V3#PF$C1|jL_KDPFKU}h(K6oDIl1B_QD0abs)o%a0_Q^?5>A z_#8M4whq{lczSA40c+vQ!1{;OV+R--}RA!;|c@qfbYU}V(YnEV5y>T%yls03nbZLbfl9caf=vQRJJ zkOP;@``ZF1T&@IIF`00J0N|^8k0LZ(#&d4(Z%`{Nk2Uf_BKAB=C)RWw^j^V%-DT~~ zunIJWtgQq}+0@05GHOn^gF`Rnj-~x$C%LEJ_?92>WL%DFfIOZL) zms~nlB;2I2)_pyFak^9qL7rTKK44fS8I|$M#Bte*Ljaz>ebuSXEzCiRtVC(;8E3t^I^SF zN4bYFNf2b_G3z&v5pKE6-#s8>ll8t%Fi^_(eE;2B;XnQ6d3vQGRPLih#e3QE>fVVW zSrWi9#I@cc+ZF0sz)-((;T#O|i5Q4%V-PYjK|zEH3FNJ5Z(*F)ws2^bwQ+LDIC70T z=_hg6RS^C}erBkbes*&d;qaC4EZqT>ku^*vJ~$JuQ?ITd;C-sKE?n&!jahdy@VSiZ zG2WSE3eot%k;+Lk5+Tobb`D9vfA8@=ufDoW+rPJpfZFx1X(5JHH@IMopdn<`SobB(9;V_ zrh-p)c>nUvFxkHp-gxoZ@WXdL4EJu_2n~?<))rF2$x{rEXapUjrvLntr$JpFhW9`G zS@_Pk|0F!mnlG+VvIMo#p02IXYRPA--sZ50@d?_0Hz^IehYPf7k}Nb7mxkYb_&GiT zjuPd~T%J+2pG?%Z4tbVypcxW@C6upICY_~3W|_kv&)MH`S{u$Z&-02ikAnlT*Xqeg z9G}B(R>9NBHNe0}9kqeWwg=JWzc<)m9jc`O@2TWTxk0ub*4EbGM=UoU$%0DUbgub6 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 z⁢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 z ztQ3qU4vLN`tUa@6q`p`T*bu~!+!6aG z4|&gO?&ld^aR#;+^~_ahrpWgc`iX%rM0YHc5>GK6Lnd&R9js?0S3{$J5(lC8U6iT) zgQX1(G{@I@K7F8OPB^=zo6F=dy@ETDeU;>;^!37pw6CMAq`=wl9G#-j$#dYDk1^If ze9Qt=yxoSd2p!$3K0BC87F|_iqA48qGziAp`G(z)-oMAceSvSoD zPT3>tqMIlqssTx8MMfgdF$OT`3BBpfJ3iF1Ao;dPxN``Eu?e2C_TDgSp0=3H(ES_g zA?*k3Ol|Y5PNCH?JE^?^VC?Q#^;8>fXqRUR!4Mc~la%Q?%dd1LBXJ+~jO@AG#yJQF^Wa#XA}LY?9gbj9 zjW=sG8(HJ9-E^1CfDKT3y8UW9EO *XQ**wfjLqJ&jH$CuMFo{31Bv_JfHye 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